diff --git a/Program/avcodec-53.dll b/Program/avcodec-55.dll similarity index 58% rename from Program/avcodec-53.dll rename to Program/avcodec-55.dll index f762b3df0a..0d72700ddf 100644 Binary files a/Program/avcodec-53.dll and b/Program/avcodec-55.dll differ diff --git a/Program/avformat-53.dll b/Program/avformat-53.dll deleted file mode 100644 index 21267dd12c..0000000000 Binary files a/Program/avformat-53.dll and /dev/null differ diff --git a/Program/avformat-55.dll b/Program/avformat-55.dll new file mode 100644 index 0000000000..62348a1bda Binary files /dev/null and b/Program/avformat-55.dll differ diff --git a/Program/avutil-51.dll b/Program/avutil-51.dll deleted file mode 100644 index ef175d8c5c..0000000000 Binary files a/Program/avutil-51.dll and /dev/null differ diff --git a/Program/avutil-52.dll b/Program/avutil-52.dll new file mode 100644 index 0000000000..25d8f30663 Binary files /dev/null and b/Program/avutil-52.dll differ diff --git a/Program/swscale-2.dll b/Program/swscale-2.dll index f060f9f248..d0d70447fc 100644 Binary files a/Program/swscale-2.dll and b/Program/swscale-2.dll differ diff --git a/extern/ffmpeg/README.txt b/extern/ffmpeg/README.txt index e22241c131..fdde1ee249 100644 --- a/extern/ffmpeg/README.txt +++ b/extern/ffmpeg/README.txt @@ -1,80 +1,100 @@ This is a FFmpeg Win32 shared build by Kyle Schwarz. -Zeranoe's FFmpeg Builds Home Page: http://ffmpeg.zeranoe.com/builds/ +Zeranoe's FFmpeg Builds Home Page: -Built on Jan 27 2012 18:37:07 +This build was compiled on: , at: 18:58:33 -FFmpeg version git-01fcbdf - libavutil 51. 34.101 / 51. 34.101 - libavcodec 53. 60.100 / 53. 60.100 - libavformat 53. 31.100 / 53. 31.100 - libavdevice 53. 4.100 / 53. 4.100 - libavfilter 2. 60.100 / 2. 60.100 - libswscale 2. 1.100 / 2. 1.100 - libswresample 0. 6.100 / 0. 6.100 - libpostproc 52. 0.100 / 52. 0.100 +FFmpeg version: 2.1.3 + libavutil 52. 48.101 / 52. 48.101 + libavcodec 55. 39.101 / 55. 39.101 + libavformat 55. 19.104 / 55. 19.104 + libavdevice 55. 5.100 / 55. 5.100 + libavfilter 3. 90.100 / 3. 90.100 + libswscale 2. 5.101 / 2. 5.101 + libswresample 0. 17.104 / 0. 17.104 + libpostproc 52. 3.100 / 52. 3.100 -FFmpeg configured with: - --disable-static - --enable-shared - --enable-gpl - --enable-version3 - --disable-w32threads - --enable-runtime-cpudetect - --enable-avisynth - --enable-bzlib - --enable-frei0r - --enable-libopencore-amrnb - --enable-libopencore-amrwb - --enable-libfreetype - --enable-libgsm - --enable-libmp3lame - --enable-libopenjpeg - --enable-librtmp - --enable-libschroedinger - --enable-libspeex - --enable-libtheora - --enable-libvo-aacenc - --enable-libvo-amrwbenc - --enable-libvorbis - --enable-libvpx - --enable-libx264 - --enable-libxavs - --enable-libxvid - --enable-zlib +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-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-libx264 + --enable-libxavs + --enable-libxvid + --enable-zlib -The source code for this FFmpeg build can be found at: - http://ffmpeg.zeranoe.com/builds/source/ffmpeg/ - -This version of FFmpeg was built on: - Ubuntu Desktop 10.04: http://www.ubuntu.com/desktop - -The cross-compile toolchain used to compile this FFmpeg was: - MinGW-w64: http://mingw-w64.sourceforge.net/ - winpthreads (part of MinGW-w64) +This build was compiled with the following external libraries: + bzip2 1.0.6 + Fontconfig 2.10.95 + Frei0r 20130909-git-10d8360 + GnuTLS 3.2.8.1 + libiconv 1.14 + libass 0.10.2 + libbluray 0.5.0 + libcaca 0.99.beta18 + FreeType 2.5.2 + GSM 1.0.13-4 + iLBC 20120913-git-b5f9b10 + Modplug-XMMS 0.8.8.4 + LAME 3.99.5 + OpenCORE AMR 0.1.3 + OpenJPEG 1.5.1 + Opus 1.1 + RTMPDump 20131007-git-a9f353c + Schroedinger 1.0.11 + libsoxr 0.1.1 + Speex 1.2rc1 + Theora 1.1.1 + TwoLAME 0.3.13 + vid.stab 20130830-git-869f3bb + VisualOn AAC 0.1.3 + VisualOn AMR-WB 0.1.2 + Vorbis 1.3.3 + vpx 1.3.0 + WavPack 4.70.0 + x264 20131030-git-1ca7bb9 + XAVS svn-r55 + Xvid 1.3.2 + zlib 1.2.8 -The GCC version used to compile this FFmpeg was: - GCC 4.6.2: http://gcc.gnu.org/ - -The external libaries compiled into this FFmpeg are: - bzip2 1.0.6 http://www.bzip.org - Frei0r 1.3 http://frei0r.dyne.org/ - opencore-amr 0.1.2 http://sourceforge.net/projects/opencore-amr/ - FreeType 2.4.6 http://www.freetype.org/ - gsm 1.0.13 http://libgsm.sourcearchive.com/ - LAME 3.98.4 http://lame.sourceforge.net/ - OpenJPEG 1.4 http://www.openjpeg.org/ - RTMP git-60218d0a http://rtmpdump.mplayerhq.hu/ - Schroedinger 1.0.10 http://diracvideo.org/ - Speex 1.2rc1 http://www.speex.org/ - Theora 1.1.1 http://www.theora.org/ - vo-aacenc 0.1.1 http://sourceforge.net/projects/opencore-amr/ - vo-amrwbenc 0.1.1 http://sourceforge.net/projects/opencore-amr/ - Vorbis 1.3.2 http://www.vorbis.com/ - libvpx v0.9.7-p1 http://www.webmproject.org/code/ - x264 git-bcd41db http://www.videolan.org/developers/x264.html - XAVS r55 http://xavs.sourceforge.net/ - Xvid 1.3.2 http://www.xvid.org/ - zlib 1.2.5 http://zlib.net/ +The source code for this FFmpeg build can be found at: -License for each library can be found in the licenses folder. +This build was compiled on Debian jessie/sid (64-bit): + +GCC 4.8.2 was used to compile this FFmpeg build: + +This build was compiled using the MinGW-w64 toolchain: + +Licenses for each library can be found in the 'licenses' folder. diff --git a/extern/ffmpeg/doc/developer.html b/extern/ffmpeg/doc/developer.html index 4af08f8cdc..2bf37991b3 100644 --- a/extern/ffmpeg/doc/developer.html +++ b/extern/ffmpeg/doc/developer.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : Developer - - - - + + - - - - + + - - +
-
+

Developer Documentation

@@ -95,24 +36,34 @@ h3 { @@ -121,33 +72,27 @@ h3 {

1. Developers Guide

- -

1.1 API

-
    -
  • libavcodec is the library containing the codecs (both encoding and -decoding). Look at ‘libavcodec/apiexample.c’ to see how to use it. + +

    1.1 Notes for external developers

    -
  • libavformat is the library containing the file format handling (mux and -demux code for several formats). Look at ‘ffplay.c’ to use it in a -player. See ‘libavformat/output-example.c’ to use it to generate -audio or video streams. - -
- - -

1.2 Integrating libavcodec or libavformat in your program

- -

You can integrate all the source code of the libraries to link them -statically to avoid any version problem. All you need is to provide a -’config.mak’ and a ’config.h’ in the parent directory. See the defines -generated by ./configure to understand what is needed. +

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 ‘doc/examples’ and in the source code to +see how the public API is employed.

-

You can use libavcodec or libavformat in your commercial program, but -any patch you make must be published. The best way to proceed is -to send your patches to the FFmpeg mailing list. +

You can use the FFmpeg libraries in your commercial program, but you +are encouraged to publish any patch you make. 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. +

+

For more detailed legal information about the use of FFmpeg in +external programs read the ‘LICENSE’ file in the source tree and +consult http://ffmpeg.org/legal.html.

-

1.3 Contributing

+

1.2 Contributing

There are 3 ways by which code gets into ffmpeg.

    @@ -165,19 +110,22 @@ and should try to fix issues their commit causes.

    -

    1.4 Coding Rules

    +

    1.3 Coding Rules

    -

    1.4.1 Code formatting conventions

    +

    1.3.1 Code formatting conventions

    There are the following guidelines regarding the indentation in files: -

      +

      +
      • Indent size is 4. +
      • 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. +
      • You should try to limit your code lines to 80 characters; however, do so if and only if this improves readability. @@ -188,7 +136,7 @@ and only if this improves readability. minimize the bug count.

        -

        1.4.2 Comments

        +

        1.3.2 Comments

        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. @@ -228,17 +176,21 @@ int myfunc(int my_parameter) -

        1.4.3 C language features

        +

        1.3.3 C language features

        FFmpeg is programmed in the ISO C90 language with a few additional features from ISO C99, namely: -

          +

          +
          • the ‘inline’ keyword; +
          • //’ comments; +
          • designated struct initializers (‘struct s x = { .i = 17 };’) +
          • compound literals (‘x = (struct s) { 17, 23 };’)
          @@ -250,63 +202,91 @@ clarity and performance.

          All code must compile with recent versions of GCC and a number of other currently supported compilers. To ensure compatibility, please do not use additional C99 features or GCC extensions. Especially watch out for: -

            +

            +
            • mixing statements and declarations; +
            • long long’ (use ‘int64_t’ instead); +
            • __attribute__’ not protected by ‘#ifdef __GNUC__’ or similar; +
            • GCC statement expressions (‘(x = ({ int y = 4; y; })’).
            -

            1.4.4 Naming conventions

            -

            All names are using underscores (_), not CamelCase. For example, ‘avfilter_get_video_buffer’ is -a valid function name and ‘AVFilterGetVideo’ is not. The exception from this are type names, like +

            1.3.4 Naming conventions

            +

            All names should be composed with underscores (_), not CamelCase. For example, +‘avfilter_get_video_buffer’ is an acceptable function name and +‘AVFilterGetVideo’ is not. The exception from this are type names, like for example structs and enums; they should always be in the CamelCase

            - -

            There are following conventions for naming variables and functions: -

              +

              There are the following conventions for naming variables and functions: +

              +
              • For local variables no prefix is required. +
              • -For variables and functions declared as static no prefixes are required. +For file-scope variables and functions declared as static, no prefix +is required. +
              • -For variables and functions used internally by the library, ff_ prefix -should be used. -For example, ‘ff_w64_demuxer’. +For variables and functions visible outside of file scope, but only used +internally by a library, an ff_ prefix should be used, +e.g. ‘ff_w64_demuxer’. +
              • -For variables and functions used internally across multiple libraries, use -avpriv_. For example, ‘avpriv_aac_parse_header’. +For variables and functions visible outside of file scope, used internally +across multiple libraries, use avpriv_ as prefix, for example, +‘avpriv_aac_parse_header’. +
              • -For exported names, each library has its own prefixes. Just check the existing -code and name accordingly. +Each library has its own prefix for public symbols, in addition to the +commonly used av_ (avformat_ for libavformat, +avcodec_ for libavcodec, swr_ 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 +lib<name>/lib<name>.v files.
              - -

              1.4.5 Miscellanous conventions

              +

              Furthermore, name space reserved for the system should not be invaded. +Identifiers ending in _t are reserved by +POSIX. +Also avoid names starting with __ or _ followed by an uppercase +letter as they are reserved by the C standard. Names starting with _ +are reserved at the file level and may not be used for externally visible +symbols. If in doubt, just avoid names starting with _ altogether. +

              + +

              1.3.5 Miscellaneous conventions

              +
              • fprintf and printf are forbidden in libavformat and libavcodec, please use av_log() instead. +
              • Casts should be used only when necessary. Unneeded parentheses should also be avoided if they don’t make the code easier to understand.
              -

              1.4.6 Editor configuration

              +

              1.3.6 Editor configuration

              In order to configure Vim to follow FFmpeg formatting conventions, paste the following snippet into your ‘.vimrc’:

               
              " indentation rules for FFmpeg: 4 spaces, no tabs
               set expandtab
               set shiftwidth=4
               set softtabstop=4
              -" allow tabs in Makefiles
              -autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=8
              +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/
              @@ -315,138 +295,178 @@ autocmd InsertEnter * match ForbiddenWhitespace /\t\|\s\+\%#\@<!$/
               

              For Emacs, add these roughly equivalent lines to your ‘.emacs.d/init.el’: -

               
              (setq c-default-style "k&r")
              -(setq-default c-basic-offset 4)
              -(setq-default indent-tabs-mode nil)
              -(setq-default show-trailing-whitespace t)
              +

               
              (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")
               
              -

              1.5 Development Policy

              +

              1.4 Development Policy

              1. - Contributions should be licensed under the LGPL 2.1, including an - "or any later version" clause, or the MIT license. GPL 2 including - an "or any later version" clause is also acceptable, but LGPL is - preferred. -
              2. - 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. -
              3. - 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. -
              4. - 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. -
              5. - 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! +Contributions should be licensed under the +LGPL 2.1, +including an "or any later version" clause, or, if you prefer +a gift-style license, the +ISC or +MIT license. +GPL 2 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. -

                Note: Redundant code can be removed. -

              6. - 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.
              7. - 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. +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. -

                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 -

              8. - 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 +
              9. +The commit message should have a short first line in the form of +a ‘topic: short description’ 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. -

                details describing what and why and giving references. -

              10. - 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.
              11. - When applying patches that have been discussed (at length) on the mailing - list, reference the thread in the log message. +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. +
              12. - 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! +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. +
              13. - 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. +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! + +

                Note: Redundant code can be removed. +

              14. - 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. +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. +
              15. - Try to keep important discussions and requests (also) on the public - developer mailing list, so that all developers can benefit from them. +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. + +

                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 +

              16. - 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. +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 + +

                details describing what and why and giving references. +

              17. - 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). +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. +
              18. - 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. +When applying patches that have been discussed (at length) on the mailing +list, reference the thread in the log message. +
              19. - 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. +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! + +
              20. +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. + +
              21. +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. + +
              22. +Try to keep important discussions and requests (also) on the public +developer mailing list, so that all developers can benefit from them. + +
              23. +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. + +
              24. +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. + +
              25. +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. + +
              26. +Make sure that no parts of the codebase that you maintain are missing from the +‘MAINTAINERS’ 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 ‘MAINTAINERS’ file.

              We think our rules are not too hard. If you have comments, contact us.

              -

              Note, these rules are mostly borrowed from the MPlayer project. -

              -

              1.6 Submitting patches

              +

              1.5 Submitting patches

              First, read the Coding Rules above if you did not yet, in particular the rules regarding patch submission. @@ -467,11 +487,6 @@ The tool is located in the tools directory.

              Run the Regression tests before submitting a patch in order to verify it does not cause unexpected problems.

              -

              Patches should be posted as base64 encoded attachments (or any other -encoding which ensures that the patch will not be trashed during -transmission) to the ffmpeg-devel mailing list, see -http://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel -

              It also helps quite a bit if you tell us what the patch does (for example ’replaces lrint by lrintf’), and why (for example ’*BSD isn’t C99 compliant and has no lrint()’) @@ -479,6 +494,13 @@ and has no lrint()’)

              Also please if you send several patches, send each patch as a separate mail, do not attach several unrelated patches to the same mail.

              +

              Patches should be posted to the +ffmpeg-devel +mailing list. Use git send-email 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. +

              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 @@ -490,121 +512,170 @@ send a reminder by email. Your patch should eventually be dealt with.

              -

              1.7 New codecs or formats checklist

              +

              1.6 New codecs or formats checklist

              1. - Did you use av_cold for codec initialization and close functions? +Did you use av_cold for codec initialization and close functions? +
              2. - Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or - AVInputFormat/AVOutputFormat struct? +Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or +AVInputFormat/AVOutputFormat struct? +
              3. - Did you bump the minor version number (and reset the micro version - number) in ‘libavcodec/version.h’ or ‘libavformat/version.h’? +Did you bump the minor version number (and reset the micro version +number) in ‘libavcodec/version.h’ or ‘libavformat/version.h’? +
              4. - Did you register it in ‘allcodecs.c’ or ‘allformats.c’? +Did you register it in ‘allcodecs.c’ or ‘allformats.c’? +
              5. - Did you add the CodecID to ‘avcodec.h’? +Did you add the AVCodecID to ‘avcodec.h’? +When adding new codec IDs, also add an entry to the codec descriptor +list in ‘libavcodec/codec_desc.c’. +
              6. - If it has a fourCC, did you add it to ‘libavformat/riff.c’, - even if it is only a decoder? +If it has a FourCC, did you add it to ‘libavformat/riff.c’, +even if it is only a decoder? +
              7. - 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. +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. +
              8. - Did you add an entry to the table of supported formats or codecs in - ‘doc/general.texi’? +Did you add an entry to the table of supported formats or codecs in +‘doc/general.texi’? +
              9. - Did you add an entry in the Changelog? +Did you add an entry in the Changelog? +
              10. - If it depends on a parser or a library, did you add that dependency in - configure? +If it depends on a parser or a library, did you add that dependency in +configure? +
              11. - Did you git add the appropriate files before committing? +Did you git add the appropriate files before committing? +
              12. - Did you make sure it compiles standalone, i.e. with - configure --disable-everything --enable-decoder=foo - (or --enable-demuxer or whatever your component is)? +Did you make sure it compiles standalone, i.e. with +configure --disable-everything --enable-decoder=foo +(or --enable-demuxer or whatever your component is)?
              -

              1.8 patch submission checklist

              +

              1.7 patch submission checklist

              1. - Does make fate pass with the patch applied? +Does make fate pass with the patch applied? +
              2. - Was the patch generated with git format-patch or send-email? +Was the patch generated with git format-patch or send-email? +
              3. - Did you sign off your patch? (git commit -s) - See http://kerneltrap.org/files/Jeremy/DCO.txt for the meaning - of sign off. +Did you sign off your patch? (git commit -s) +See http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob_plain;f=Documentation/SubmittingPatches for the meaning +of sign off. +
              4. - Did you provide a clear git commit log message? +Did you provide a clear git commit log message? +
              5. - Is the patch against latest FFmpeg git master branch? +Is the patch against latest FFmpeg git master branch? +
              6. - Are you subscribed to ffmpeg-devel? - (the list is subscribers only due to spam) +Are you subscribed to ffmpeg-devel? +(the list is subscribers only due to spam) +
              7. - Have you checked that the changes are minimal, so that the same cannot be - achieved with a smaller patch and/or simpler final code? +Have you checked that the changes are minimal, so that the same cannot be +achieved with a smaller patch and/or simpler final code? +
              8. - If the change is to speed critical code, did you benchmark it? +If the change is to speed critical code, did you benchmark it? +
              9. - If you did any benchmarks, did you provide them in the mail? +If you did any benchmarks, did you provide them in the mail? +
              10. - Have you checked that the patch does not introduce buffer overflows or - other security issues? +Have you checked that the patch does not introduce buffer overflows or +other security issues? +
              11. - Did you test your decoder or demuxer against damaged data? If no, see - tools/trasher and the noise bitstream filter. Your decoder or demuxer - should not crash or end in a (near) infinite loop when fed damaged data. +Did you test your decoder or demuxer against damaged data? If no, see +tools/trasher, the noise bitstream filter, and +zzuf. Your decoder or demuxer +should not crash, end in a (near) infinite loop, or allocate ridiculous +amounts of memory when fed damaged data. +
              12. - Does the patch not mix functional and cosmetic changes? +Does the patch not mix functional and cosmetic changes? +
              13. - Did you add tabs or trailing whitespace to the code? Both are forbidden. +Did you add tabs or trailing whitespace to the code? Both are forbidden. +
              14. - Is the patch attached to the email you send? +Is the patch attached to the email you send? +
              15. - 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. +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. +
              16. - If the patch fixes a bug, did you provide a verbose analysis of the bug? +If the patch fixes a bug, did you provide a verbose analysis of the bug? +
              17. - 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 +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 +
              18. - Did you provide a verbose summary about what the patch does change? +Did you provide a verbose summary about what the patch does change? +
              19. - Did you provide a verbose explanation why it changes things like it does? +Did you provide a verbose explanation why it changes things like it does? +
              20. - Did you provide a verbose summary of the user visible advantages and - disadvantages if the patch is applied? +Did you provide a verbose summary of the user visible advantages and +disadvantages if the patch is applied? +
              21. - Did you provide an example so we can verify the new feature added by the - patch easily? +Did you provide an example so we can verify the new feature added by the +patch easily? +
              22. - 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. +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. +
              23. - You should maintain alphabetical order in alphabetically ordered lists as - long as doing so does not break API/ABI compatibility. +You should maintain alphabetical order in alphabetically ordered lists as +long as doing so does not break API/ABI compatibility. +
              24. - Lines with similar content should be aligned vertically when doing so - improves readability. +Lines with similar content should be aligned vertically when doing so +improves readability. +
              25. - Consider to add a regression test for your code. +Consider to add a regression test for your code. +
              26. - If you added YASM code please check that things still work with –disable-yasm +If you added YASM code please check that things still work with –disable-yasm + +
              27. +Make sure you check the return values of function and return appropriate +error codes. Especially memory allocation functions like av_malloc() +are notoriously left unchecked, which is a serious problem. + +
              28. +Test your code with valgrind and or Address Sanitizer to ensure it’s free +of leaks, out of array accesses, etc.
              -

              1.9 Patch review process

              +

              1.8 Patch review process

              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. @@ -632,7 +703,7 @@ separate patches.

              -

              1.10 Regression tests

              +

              1.9 Regression tests

              Before submitting a patch (or committing to the repository), you should at least test that you did not break anything. @@ -643,14 +714,164 @@ test that you did not break anything. this case, the reference results of the regression tests shall be modified accordingly].

              - + +

              1.9.1 Adding files to the fate-suite dataset

              + +

              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.

              - - - + + +

              1.9.2 Visualizing Test Coverage

              + +

              The FFmpeg build system allows visualizing the test coverage in an easy +manner with the coverage tools gcov/lcov. This involves +the following steps: +

              +
                +
              1. + Configure to compile with instrumentation enabled: + configure --toolchain=gcov. + +
              2. + 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. + +
              3. + Run make lcov to generate coverage data in HTML format. + +
              4. + View lcov/index.html in your preferred HTML viewer. +
              + +

              You can use the command make lcov-reset to reset the coverage +measurements. You will need to rerun make lcov after running a +new test. +

              + +

              1.9.3 Using Valgrind

              + +

              The configure script provides a shortcut for using valgrind to spot bugs +related to memory handling. Just add the option +--toolchain=valgrind-memcheck or --toolchain=valgrind-massif +to your configure line, and reasonable defaults will be set for running +FATE under the supervision of either the memcheck or the +massif tool of the valgrind suite. +

              +

              In case you need finer control over how valgrind is invoked, use the +--target-exec='valgrind <your_custom_valgrind_options> option in +your configure line instead. +

              +

              +

              +

              1.10 Release process

              + +

              FFmpeg maintains a set of release branches, which are the +recommended deliverable for system integrators and distributors (such as +Linux distributions, etc.). At regular times, a release +manager prepares, tests and publishes tarballs on the +http://ffmpeg.org website. +

              +

              There are two kinds of releases: +

              +
                +
              1. +Major releases always include the latest and greatest +features and functionality. + +
              2. +Point releases are cut from release branches, +which are named release/X, with X being the release +version number. +
              + +

              Note that we promise to our users that shared libraries from any FFmpeg +release never break programs that have been compiled against +previous versions of the same release series in any case! +

              +

              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 ffmpeg-devel mailing list in time to allow forward planning. +

              +

              +

              +

              1.10.1 Criteria for Point Releases

              + +

              Changes that match the following criteria are valid candidates for +inclusion into a point release: +

              +
                +
              1. +Fixes a security issue, preferably identified by a CVE +number issued by http://cve.mitre.org/. + +
              2. +Fixes a documented bug in https://trac.ffmpeg.org. + +
              3. +Improves the included documentation. + +
              4. +Retains both source code and binary compatibility with previous +point releases of the same release branch. +
              + +

              The order for checking the rules is (1 OR 2 OR 3) AND 4. +

              + + +

              1.10.2 Release Checklist

              + +

              The release process involves the following steps: +

              +
                +
              1. +Ensure that the ‘RELEASE’ file contains the version number for +the upcoming release. + +
              2. +Add the release at https://trac.ffmpeg.org/admin/ticket/versions. + +
              3. +Announce the intent to do a release to the mailing list. + +
              4. +Make sure all relevant security fixes have been backported. See +https://ffmpeg.org/security.html. + +
              5. +Ensure that the FATE regression suite still passes in the release +branch on at least i386 and amd64 +(cf. Regression tests). + +
              6. +Prepare the release tarballs in bz2 and gz formats, and +supplementing files that contain gpg signatures + +
              7. +Publish the tarballs at http://ffmpeg.org/releases. Create and +push an annotated tag in the form nX, with X +containing the version number. + +
              8. +Propose and send a patch to the ffmpeg-devel mailing list +with a news entry for the website. + +
              9. +Publish the news entry. + +
              10. +Send announcement to the mailing list. +
              + +
              +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
              diff --git a/extern/ffmpeg/doc/examples/README b/extern/ffmpeg/doc/examples/README new file mode 100644 index 0000000000..cb408814f0 --- /dev/null +++ b/extern/ffmpeg/doc/examples/README @@ -0,0 +1,18 @@ +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. + + +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. + +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 you can go into +doc/examples and run a command such as PKG_CONFIG_PATH=pc-uninstalled make. diff --git a/extern/ffmpeg/doc/examples/decoding_encoding.c b/extern/ffmpeg/doc/examples/decoding_encoding.c new file mode 100644 index 0000000000..976b611cc1 --- /dev/null +++ b/extern/ffmpeg/doc/examples/decoding_encoding.c @@ -0,0 +1,650 @@ +/* + * 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. + * + * 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 + * @example doc/examples/decoding_encoding.c + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#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 = avcodec_alloc_frame(); + 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); + 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); + avcodec_free_frame(&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 = avcodec_alloc_frame())) { + fprintf(stderr, "Could not allocate audio frame\n"); + exit(1); + } + } else + avcodec_get_frame_defaults(decoded_frame); + + 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); + 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); + avcodec_free_frame(&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 = avcodec_alloc_frame(); + 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;yheight;y++) { + for(x=0;xwidth;x++) { + frame->data[0][y * frame->linesize[0] + x] = x + y + i * 3; + } + } + + /* Cb and Cr */ + for(y=0;yheight/2;y++) { + for(x=0;xwidth/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]); + avcodec_free_frame(&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;idata[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 = avcodec_alloc_frame(); + 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); + avcodec_free_frame(&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; +} diff --git a/extern/ffmpeg/doc/examples/demuxing.c b/extern/ffmpeg/doc/examples/demuxing.c new file mode 100644 index 0000000000..e459cf003e --- /dev/null +++ b/extern/ffmpeg/doc/examples/demuxing.c @@ -0,0 +1,341 @@ +/* + * 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 + * libavformat demuxing API use example. + * + * Show how to use the libavformat and libavcodec API to demux and + * decode audio and video data. + * @example doc/examples/demuxing.c + */ + +#include +#include +#include +#include + +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; + +static int decode_packet(int *got_frame, int cached) +{ + int ret = 0; + int decoded = pkt.size; + + 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\n"); + 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\n"); + 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); + } + } + + 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; + + 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 ret; + } + + if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 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) { + fprintf(stderr, "usage: %s 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", argv[0]); + exit(1); + } + 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; + } + + frame = avcodec_alloc_frame(); + 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: + if (video_dec_ctx) + avcodec_close(video_dec_ctx); + if (audio_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); + av_free(frame); + av_free(video_dst_data[0]); + + return ret < 0; +} diff --git a/extern/ffmpeg/doc/examples/filtering_audio.c b/extern/ffmpeg/doc/examples/filtering_audio.c new file mode 100644 index 0000000000..35dd4e7d28 --- /dev/null +++ b/extern/ffmpeg/doc/examples/filtering_audio.c @@ -0,0 +1,265 @@ +/* + * 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 doc/examples/filtering_audio.c + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +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; + 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(); + + /* 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"); + return ret; + } + + /* 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"); + return ret; + } + + 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"); + return ret; + } + + 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"); + return ret; + } + + 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"); + return ret; + } + + /* 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) + return ret; + + if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0) + return ret; + + /* 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); + + return 0; +} + +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 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); + } + + avcodec_register_all(); + 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 == audio_stream_index) { + avcodec_get_frame_defaults(frame); + 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; + } + + 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); + } + } + } + av_free_packet(&packet); + } +end: + avfilter_graph_free(&filter_graph); + if (dec_ctx) + avcodec_close(dec_ctx); + avformat_close_input(&fmt_ctx); + av_frame_free(&frame); + av_frame_free(&filt_frame); + + if (ret < 0 && ret != AVERROR_EOF) { + char buf[1024]; + av_strerror(ret, buf, sizeof(buf)); + fprintf(stderr, "Error occurred: %s\n", buf); + exit(1); + } + + exit(0); +} diff --git a/extern/ffmpeg/doc/examples/filtering_video.c b/extern/ffmpeg/doc/examples/filtering_video.c new file mode 100644 index 0000000000..d3c33df040 --- /dev/null +++ b/extern/ffmpeg/doc/examples/filtering_video.c @@ -0,0 +1,251 @@ +/* + * 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 doc/examples/filtering_video.c + */ + +#define _XOPEN_SOURCE 600 /* for usleep */ +#include + +#include +#include +#include +#include +#include +#include + +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; + + /* 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; + 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 }; + AVBufferSinkParams *buffersink_params; + + filter_graph = avfilter_graph_alloc(); + + /* 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"); + return ret; + } + + /* buffer video sink: to terminate the filter chain. */ + buffersink_params = av_buffersink_params_alloc(); + buffersink_params->pixel_fmts = pix_fmts; + ret = avfilter_graph_create_filter(&buffersink_ctx, buffersink, "out", + NULL, buffersink_params, filter_graph); + av_free(buffersink_params); + if (ret < 0) { + av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n"); + return ret; + } + + /* 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) + return ret; + + if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0) + return ret; + return 0; +} + +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); + } + + avcodec_register_all(); + 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) { + avcodec_get_frame_defaults(frame); + 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_free_packet(&packet); + } +end: + avfilter_graph_free(&filter_graph); + if (dec_ctx) + avcodec_close(dec_ctx); + avformat_close_input(&fmt_ctx); + av_frame_free(&frame); + av_frame_free(&filt_frame); + + if (ret < 0 && ret != AVERROR_EOF) { + char buf[1024]; + av_strerror(ret, buf, sizeof(buf)); + fprintf(stderr, "Error occurred: %s\n", buf); + exit(1); + } + + exit(0); +} diff --git a/extern/ffmpeg/doc/examples/metadata.c b/extern/ffmpeg/doc/examples/metadata.c new file mode 100644 index 0000000000..9c1bcd79d9 --- /dev/null +++ b/extern/ffmpeg/doc/examples/metadata.c @@ -0,0 +1,56 @@ +/* + * 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 doc/examples/metadata.c + */ + +#include + +#include +#include + +int main (int argc, char **argv) +{ + AVFormatContext *fmt_ctx = NULL; + AVDictionaryEntry *tag = NULL; + int ret; + + if (argc != 2) { + printf("usage: %s \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; +} diff --git a/extern/ffmpeg/doc/examples/muxing.c b/extern/ffmpeg/doc/examples/muxing.c new file mode 100644 index 0000000000..a8f979f4be --- /dev/null +++ b/extern/ffmpeg/doc/examples/muxing.c @@ -0,0 +1,564 @@ +/* + * 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 doc/examples/muxing.c + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* 5 seconds stream duration */ +#define STREAM_DURATION 200.0 +#define STREAM_FRAME_RATE 25 /* 25 images/s */ +#define STREAM_NB_FRAMES ((int)(STREAM_DURATION * STREAM_FRAME_RATE)) +#define STREAM_PIX_FMT AV_PIX_FMT_YUV420P /* default pix_fmt */ + +static int sws_flags = SWS_BICUBIC; + +/* 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 = 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; + +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; + +struct SwrContext *swr_ctx = NULL; + +static void open_audio(AVFormatContext *oc, AVCodec *codec, AVStream *st) +{ + AVCodecContext *c; + int ret; + + c = st->codec; + + /* 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, c->sample_fmt, 0); + if (ret < 0) { + fprintf(stderr, "Could not allocate source samples\n"); + exit(1); + } + + /* 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); + } + } + + /* 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; + 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); + } + 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) +{ + AVCodecContext *c; + AVPacket pkt = { 0 }; // data and size must be 0; + AVFrame *frame = avcodec_alloc_frame(); + int got_packet, ret, dst_nb_samples; + + av_init_packet(&pkt); + c = st->codec; + + 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_samples_data[0] = src_samples_data[0]; + dst_nb_samples = src_nb_samples; + } + + frame->nb_samples = dst_nb_samples; + avcodec_fill_audio_frame(frame, c->channels, c->sample_fmt, + dst_samples_data[0], dst_samples_size, 0); + + ret = avcodec_encode_audio2(c, &pkt, frame, &got_packet); + if (ret < 0) { + fprintf(stderr, "Error encoding audio frame: %s\n", av_err2str(ret)); + exit(1); + } + + if (!got_packet) + return; + + pkt.stream_index = st->index; + + /* Write the compressed frame to the media file. */ + ret = av_interleaved_write_frame(oc, &pkt); + if (ret != 0) { + fprintf(stderr, "Error while writing audio frame: %s\n", + av_err2str(ret)); + exit(1); + } + avcodec_free_frame(&frame); +} + +static void close_audio(AVFormatContext *oc, AVStream *st) +{ + avcodec_close(st->codec); + av_free(src_samples_data[0]); + av_free(dst_samples_data[0]); +} + +/**************************************************************/ +/* 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 = avcodec_alloc_frame(); + if (!frame) { + fprintf(stderr, "Could not allocate video frame\n"); + exit(1); + } + + /* 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 ret; + static struct SwsContext *sws_ctx; + AVCodecContext *c = st->codec; + + if (frame_count >= STREAM_NB_FRAMES) { + /* No more frames to compress. The codec has a latency of a few + * frames if using B-frames, so we get the last frames by + * passing the same picture again. */ + } else { + 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) { + /* 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 */ + ret = avcodec_encode_video2(c, &pkt, 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 (!ret && got_packet && pkt.size) { + pkt.stream_index = st->index; + + /* Write the compressed frame to the media file. */ + ret = av_interleaved_write_frame(oc, &pkt); + } else { + 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_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 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; + } + + if (frame) + frame->pts = 0; + for (;;) { + /* Compute current audio and video time. */ + audio_time = audio_st ? audio_st->pts.val * av_q2d(audio_st->time_base) : 0.0; + video_time = video_st ? video_st->pts.val * av_q2d(video_st->time_base) : 0.0; + + if ((!audio_st || audio_time >= STREAM_DURATION) && + (!video_st || video_time >= STREAM_DURATION)) + break; + + /* write interleaved audio and video frames */ + if (!video_st || (video_st && audio_st && audio_time < video_time)) { + write_audio_frame(oc, audio_st); + } else { + write_video_frame(oc, video_st); + frame->pts += av_rescale_q(1, video_st->codec->time_base, video_st->time_base); + } + } + + /* 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; +} diff --git a/extern/ffmpeg/doc/examples/resampling_audio.c b/extern/ffmpeg/doc/examples/resampling_audio.c new file mode 100644 index 0000000000..70db9efe05 --- /dev/null +++ b/extern/ffmpeg/doc/examples/resampling_audio.c @@ -0,0 +1,211 @@ +/* + * 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 doc/examples/resampling_audio.c + * libswresample API use example. + */ + +#include +#include +#include +#include + +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. + */ +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); + 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; +} diff --git a/extern/ffmpeg/doc/examples/scaling_video.c b/extern/ffmpeg/doc/examples/scaling_video.c new file mode 100644 index 0000000000..be2c510ffa --- /dev/null +++ b/extern/ffmpeg/doc/examples/scaling_video.c @@ -0,0 +1,141 @@ +/* + * 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 doc/examples/scaling_video.c + */ + +#include +#include +#include + +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; +} diff --git a/extern/ffmpeg/doc/faq.html b/extern/ffmpeg/doc/faq.html index a08fc4ac14..92b62138ce 100644 --- a/extern/ffmpeg/doc/faq.html +++ b/extern/ffmpeg/doc/faq.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : FFmpeg FAQ: - - - - + + - - - - + + - - +
              -
              +

              FFmpeg FAQ

              @@ -103,6 +44,7 @@ h3 {
            • 2. Compilation
            • 3. Usage
            • 4. Development
            • @@ -231,6 +181,18 @@ not a bug they should fix: Then again, some of them do not know the difference between an undecidable problem and an NP-hard problem...

              + +

              2.2 I have installed this library with my distro’s package manager. Why does configure not see it?

              + +

              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. +

              +

              To build FFmpeg, you need to install the development package. It is usually +called ‘libfoo-dev’ or ‘libfoo-devel’. You can remove it after the +build is finished, but be sure to keep the main package. +

              3. Usage

              @@ -248,20 +210,28 @@ If this does not help see For example, img1.jpg, img2.jpg, img3.jpg,... Then you may run:

              -
               
                ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
              +
               
              ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
               

              Notice that ‘%d’ is replaced by the image number.

              -

              img%03d.jpg’ means the sequence ‘img001.jpg’, ‘img002.jpg’, etc... +

              img%03d.jpg’ means the sequence ‘img001.jpg’, ‘img002.jpg’, etc.

              +

              Use the ‘-start_number’ option to declare a starting number for +the sequence. This is useful if your sequence does not start with +‘img001.jpg’ but is still in a numerical order. The following +example will start with ‘img100.jpg’: +

              +
               
              ffmpeg -f image2 -start_number 100 -i img%d.jpg /tmp/a.mpg
              +
              +

              If you have large number of pictures to rename, you can use the following command to ease the burden. The command, using the bourne shell syntax, symbolically links all files in the current directory that match *jpg to the ‘/tmp’ directory in the sequence of ‘img001.jpg’, ‘img002.jpg’ and so on.

              -
               
                x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done
              +
               
              x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done
               

              If you want to sequence them by oldest modified first, substitute @@ -269,17 +239,22 @@ that match *jpg to the ‘/tmp’ directory in the

              Then run:

              -
               
                ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg
              +
               
              ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg
               

              The same logic is used for any image format that ffmpeg reads.

              +

              You can also use cat to pipe images to ffmpeg: +

              +
               
              cat *.jpg | ffmpeg -f image2pipe -c:v mjpeg -i - output.mpg
              +
              +

              3.3 How do I encode movie to single pictures?

              Use:

              -
               
                ffmpeg -i movie.mpg movie%d.jpg
              +
               
              ffmpeg -i movie.mpg movie%d.jpg
               

              The ‘movie.mpg’ used as input will be converted to @@ -294,7 +269,7 @@ that match *jpg to the ‘/tmp’ directory in the

              to force the encoding.

              Applying that to the previous example: -

               
                ffmpeg -i movie.mpg -f image2 -c:v mjpeg menu%d.jpg
              +

               
              ffmpeg -i movie.mpg -f image2 -c:v mjpeg menu%d.jpg
               

              Beware that there is no "jpeg" codec. Use "mjpeg" instead. @@ -360,47 +335,116 @@ material, and try ’-top 0/1’ if the result looks really messed-up. then you may use any file that DirectShow can read as input.

              Just create an "input.avs" text file with this single line ... -

               
                DirectShowSource("C:\path to your file\yourfile.asf")
              +

               
              DirectShowSource("C:\path to your file\yourfile.asf")
               

              ... and then feed that text file to ffmpeg: -

               
                ffmpeg -i input.avs
              +

               
              ffmpeg -i input.avs
               
              -

              For ANY other help on Avisynth, please visit the -Avisynth homepage. +

              For ANY other help on AviSynth, please visit the +AviSynth homepage.

              3.13 How can I join video files?

              -

              A few multimedia containers (MPEG-1, MPEG-2 PS, DV) allow to join video files by -merely concatenating them. +

              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: +

              +
                +
              • +To put them one after the other: this is called to concatenate them +(in short: concat) and is addressed +in this very faq. + +
              • +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 +multiplex them together (in short: mux), and is done by simply +invoking ffmpeg with several ‘-i’ options. + +
              • +For audio, to put all channels together in a single stream (example: two +mono streams into one stereo stream): this is sometimes called to +merge them, and can be done using the +amerge filter. + +
              • +For audio, to play one on top of the other: this is called to mix +them, and can be done by first merging them into a single stream and then +using the pan filter to mix +the channels at will. + +
              • +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 +overlay video filter. + +
              + +

              +

              +

              3.14 How can I concatenate video files?

              + +

              There are several solutions, depending on the exact circumstances. +

              + +

              3.14.1 Concatenating using the concat filter

              + +

              FFmpeg has a concat filter designed specifically for that, with examples in the +documentation. This operation is recommended if you need to re-encode. +

              + +

              3.14.2 Concatenating using the concat demuxer

              + +

              FFmpeg has a concat demuxer which you can use when you want to avoid a re-encode and +your format doesn’t support file level concatenation. +

              + +

              3.14.3 Concatenating using the concat protocol (file level)

              + +

              FFmpeg has a concat protocol designed specifically for that, with examples in the +documentation. +

              +

              A few multimedia containers (MPEG-1, MPEG-2 PS, DV) allow to concatenate +video by merely concatenating the files containing them.

              Hence you may concatenate your multimedia files by first transcoding them to these privileged formats, then using the humble cat command (or the equally humble copy under Windows), and finally transcoding back to your format of choice.

              -
               
              ffmpeg -i input1.avi -same_quant intermediate1.mpg
              -ffmpeg -i input2.avi -same_quant intermediate2.mpg
              +
               
              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 -same_quant output.avi
              +ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
               
              -

              Notice that you should either use -same_quant or set a reasonably high -bitrate for your intermediate and output files, if you want to preserve -video quality. +

              Additionally, you can use the concat protocol instead of cat or +copy which will avoid creation of a potentially huge intermediate file.

              -

              Also notice that you may avoid the huge intermediate files by taking advantage -of named pipes, should your platform support it: +
               
              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
              +
              + +

              Note that you may need to escape the character "|" which is special for many +shells. +

              +

              Another option is usage of named pipes, should your platform support it:

               
              mkfifo intermediate1.mpg
               mkfifo intermediate2.mpg
              -ffmpeg -i input1.avi -same_quant -y intermediate1.mpg < /dev/null &
              -ffmpeg -i input2.avi -same_quant -y intermediate2.mpg < /dev/null &
              +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 - -same_quant -c:v mpeg4 -acodec libmp3lame output.avi
              +ffmpeg -f mpeg -i - -c:v mpeg4 -acodec libmp3lame output.avi
               
              + +

              3.14.4 Concatenating using raw audio and video

              +

              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 @@ -408,7 +452,8 @@ from all but the first stream. This can be accomplished by piping through tail as seen below. Note that when piping through tail you must use command grouping, { ;}, to background properly.

              -

              For example, let’s say we want to join two FLV files into an output.flv file: +

              For example, let’s say we want to concatenate two FLV files into an +output.flv file:

               
              mkfifo temp1.a
               mkfifo temp1.v
              @@ -424,12 +469,12 @@ cat temp1.a temp2.a > all.a &
               cat temp1.v temp2.v > all.v &
               ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \
                      -f yuv4mpegpipe -i all.v \
              -       -same_quant -y output.flv
              +       -y output.flv
               rm temp[12].[av] all.[av]
               
              -

              3.14 -profile option fails when encoding H.264 video with AAC audio

              +

              3.15 -profile option fails when encoding H.264 video with AAC audio

              ffmpeg prints an error like

              @@ -449,30 +494,69 @@ by using Stream spec Appending :v to it will do exactly that.

              -

              3.15 Using ‘-f lavfi’, audio becomes mono for no apparent reason.

              +

              3.16 Using ‘-f lavfi’, audio becomes mono for no apparent reason.

              Use ‘-dumpgraph -’ to find out exactly where the channel layout is lost.

              -

              Most likely, it is through auto-inserted aconvert. Try to understand +

              Most likely, it is through auto-inserted aresample. Try to understand why the converting filter was needed at that place.

              Just before the output is a likely place, as ‘-f lavfi’ currently only support packed S16.

              -

              Then insert the correct aconvert explicitly in the filter graph, +

              Then insert the correct aformat explicitly in the filtergraph, specifying the exact format.

              -
               
              aconvert=s16:stereo:packed
              +
               
              aformat=sample_fmts=s16:channel_layouts=stereo
               
              + +

              3.17 Why does FFmpeg not see the subtitles in my VOB file?

              + +

              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. +

              +

              Some applications, including the ffmpeg command-line tool, can only +work with streams that were detected during the initial scan; streams that +are detected later are ignored. +

              +

              The size of the initial scan is controlled by two options: probesize +(default ~5 Mo) and analyzeduration (default 5,000,000 µs = 5 s). For +the subtitle stream to be detected, both values must be large enough. +

              + +

              3.18 Why was the ffmpeg-sameq’ option removed? What to use instead?

              + +

              The ‘-sameq’ 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. +

              +

              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 +‘-qscale’ and ‘-qmax’, but you should peruse the documentation +of the encoder you chose. +

              4. Development

              4.1 Are there examples illustrating how to use the FFmpeg libraries, particularly libavcodec and libavformat?

              -

              Yes. Read the Developers Guide of the FFmpeg documentation. Alternatively, +

              Yes. Check the ‘doc/examples’ directory in the source +repository, also available online at: +https://github.com/FFmpeg/FFmpeg/tree/master/doc/examples. +

              +

              Examples are also installed by default, usually in +$PREFIX/share/ffmpeg/examples. +

              +

              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 (projects.html).

              @@ -486,40 +570,16 @@ with #ifdefs related to the compiler.

              4.3 Is Microsoft Visual C++ supported?

              -

              No. Microsoft Visual C++ is not compliant to the C99 standard and does -not - among other things - support the inline assembly used in FFmpeg. -If you wish to use MSVC++ for your -project then you can link the MSVC++ code with libav* as long as -you compile the latter with a working C compiler. For more information, see -the Microsoft Visual C++ compatibility section in the FFmpeg -documentation. -

              -

              There have been efforts to make FFmpeg compatible with MSVC++ in the -past. However, they have all been rejected as too intrusive, especially -since MinGW does the job adequately. None of the core developers -work with MSVC++ and thus this item is low priority. Should you find -the silver bullet that solves this problem, feel free to shoot it at us. -

              -

              We strongly recommend you to move over from MSVC++ to MinGW tools. -

              - -

              4.4 Can I use FFmpeg or libavcodec under Windows?

              - -

              Yes, but the Cygwin or MinGW tools must be used to compile FFmpeg. -Read the Windows section in the FFmpeg documentation to find more -information. -

              -

              To get help and instructions for building FFmpeg under Windows, check out -the FFmpeg Windows Help Forum at -http://ffmpeg.arrozcru.org/. +

              Yes. Please see the Microsoft Visual C++ +section in the FFmpeg documentation.

              -

              4.5 Can you add automake, libtool or autoconf support?

              +

              4.4 Can you add automake, libtool or autoconf support?

              No. These tools are too bloated and they complicate the build.

              -

              4.6 Why not rewrite FFmpeg in object-oriented C++?

              +

              4.5 Why not rewrite FFmpeg in object-oriented C++?

              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 @@ -527,19 +587,38 @@ favor straight C; it works for them. For more arguments on this matter, read "Programming Religion".

              -

              4.7 Why are the ffmpeg programs devoid of debugging symbols?

              +

              4.6 Why are the ffmpeg programs devoid of debugging symbols?

              -

              The build process creates ffmpeg_g, ffplay_g, etc. which contain full debug -information. Those binaries are stripped to create ffmpeg, ffplay, etc. If -you need the debug information, use the *_g versions. +

              The build process creates ffmpeg_g, ffplay_g, etc. which +contain full debug information. Those binaries are stripped to create +ffmpeg, ffplay, etc. If you need the debug information, use +the *_g versions.

              -

              4.8 I do not like the LGPL, can I contribute code under the GPL instead?

              +

              4.7 I do not like the LGPL, can I contribute code under the GPL instead?

              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.

              + +

              4.8 I’m using FFmpeg from within my C application but the linker complains about missing symbols from the libraries themselves.

              + +

              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: -lavdevice must come before +-lavformat, -lavutil must come after everything else, etc. +Second, external libraries that are used in FFmpeg have to be specified too. +

              +

              An easy way to get the full list of required libraries in dependency order +is to use pkg-config. +

              +
               
              c99 -o program program.c $(pkg-config --cflags --libs libavformat libavcodec)
              +
              + +

              See ‘doc/example/Makefile’ and ‘doc/example/pc-uninstalled’ for +more details. +

              4.9 I’m using FFmpeg from within my C++ application but the linker complains about missing symbols which seem to be available.

              @@ -558,57 +637,44 @@ to use them you have to append -D__STDC_CONSTANT_MACROS to your CXXFLAGS

              4.11 I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?

              -

              You have to implement a URLProtocol, see ‘libavformat/file.c’ in -FFmpeg and ‘libmpdemux/demux_lavf.c’ in MPlayer sources. -

              - -

              4.12 Where can I find libav* headers for Pascal/Delphi?

              - -

              see http://www.iversenit.dk/dev/ffmpeg-headers/ +

              You have to create a custom AVIOContext using avio_alloc_context, +see ‘libavformat/aviobuf.c’ in FFmpeg and ‘libmpdemux/demux_lavf.c’ in MPlayer or MPlayer2 sources.

              -

              4.13 Where is the documentation about ffv1, msmpeg4, asv1, 4xm?

              +

              4.12 Where is the documentation about ffv1, msmpeg4, asv1, 4xm?

              see http://www.ffmpeg.org/~michael/

              -

              4.14 How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?

              +

              4.13 How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?

              Even if peculiar since it is network oriented, RTP is a container like any other. You have to demux RTP before feeding the payload to libavcodec. In this specific case please look at RFC 4629 to see how it should be done.

              -

              4.15 AVStream.r_frame_rate is wrong, it is much larger than the frame rate.

              +

              4.14 AVStream.r_frame_rate is wrong, it is much larger than the frame rate.

              -

              r_frame_rate is NOT the average frame rate, it is the smallest frame rate +

              r_frame_rate is NOT the average frame rate, it is the smallest frame rate that can accurately represent all timestamps. So no, it is not wrong if it is larger than the average! -For example, if you have mixed 25 and 30 fps content, then r_frame_rate -will be 150. +For example, if you have mixed 25 and 30 fps content, then r_frame_rate +will be 150 (it is the least common multiple). +If you are looking for the average frame rate, see AVStream.avg_frame_rate.

              -

              4.16 Why is make fate not running all tests?

              +

              4.15 Why is make fate not running all tests?

              Make sure you have the fate-suite samples and the SAMPLES Make variable or FATE_SAMPLES environment variable or the --samples configure option is set to the right path.

              -

              4.17 Why is make fate not finding the samples?

              +

              4.16 Why is make fate not finding the samples?

              Do you happen to have a ~ character in the samples path to indicate a home directory? The value is used in ways where the shell cannot expand it, causing FATE to not find files. Just replace ~ by the full path.

              - -

              - - - +
              +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
              diff --git a/extern/ffmpeg/doc/fate.html b/extern/ffmpeg/doc/fate.html index 9f77c5744f..1361d2355a 100644 --- a/extern/ffmpeg/doc/fate.html +++ b/extern/ffmpeg/doc/fate.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : FFmpeg Automated Testing Environment: - - - - + + - - - - + + - - +
              -
              + -

              FATE Automated Testing Environment

              +

              FFmpeg Automated Testing Environment

              Table of Contents

              @@ -101,6 +42,7 @@ h3 { @@ -124,7 +66,7 @@ by visiting this website:

              This is especially recommended for all people contributing source code to FFmpeg, as it can be seen if some test on some platform broke -with there recent contribution. This usually happens on the platforms +with their recent contribution. This usually happens on the platforms the developers could not test on.

              The second part of this document describes how you can run FATE to @@ -168,23 +110,26 @@ it in your interactive session.
               
              FATE_SAMPLES=fate-suite/ make fate
               
              -

              +

              Do not put a ’~’ character in the samples path to indicate a home directory. Because of shell nuances, this will cause FATE to fail.

              +

              To use a custom wrapper to run the test, pass ‘--target-exec’ to +configure or set the TARGET_EXEC Make variable. +

              3. Submitting the results to the FFmpeg result aggregation server

              To submit your results to the server you should run fate through the -shell script tests/fate.sh from the FFmpeg sources. This script needs +shell script ‘tests/fate.sh’ from the FFmpeg sources. This script needs to be invoked with a configuration file as its first argument.

               
              tests/fate.sh /path/to/fate_config
               

              A configuration file template with comments describing the individual -configuration variables can be found at ‘tests/fate_config.sh.template’. +configuration variables can be found at ‘doc/fate_config.sh.template’.

              The mentioned configuration template is also available here:

              slot=                                    # some unique identifier
              @@ -193,16 +138,20 @@ 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=
              @@ -234,8 +183,9 @@ present in $workdir as specified in the configuration file:
                   
            • version
            • -

              When you have everything working properly you can create an SSH key and -send its public part to the FATE server administrator. +

              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 fate-admin@ffmpeg.org.

              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 @@ -243,7 +193,19 @@ of the server and to accept its host key. This can usually be achieved by running your SSH client manually and killing it after you accepted the key. The FATE server’s fingerprint is:

              -

              b1:31:c8:79:3f:04:1d:f8:f2:23:26:5a:fd:55:fa:92 +

              +
              RSA
              +

              d3:f1:83:97:a4:75:2b:a6:fb:d6:e8:aa:81:93:97:51 +

              +
              ECDSA
              +

              76:9f:68:32:04:1e:d5:d4:ec:47:3f:dc:fc:18:17:86 +

              +
              + +

              If you have problems connecting to the FATE server, it may help to try out +the ssh command with one or more ‘-v’ options. You should +get detailed output concerning your SSH configuration and the authentication +process.

              The only thing left is to automate the execution of the fate.sh script and the synchronisation of the samples directory. @@ -257,15 +219,15 @@ the synchronisation of the samples directory.

              fate-rsync
              -

              Download/synchronize sample files to the configured samples directory. +

              Download/synchronize sample files to the configured samples directory.

              fate-list
              -

              Will list all fate/regression test targets. +

              Will list all fate/regression test targets.

              fate
              -

              Run the FATE test suite (requires the fate-suite dataset). +

              Run the FATE test suite (requires the fate-suite dataset).

              @@ -274,7 +236,7 @@ the synchronisation of the samples directory.
              V
              -

              Verbosity level, can be set to 0, 1 or 2. +

              Verbosity level, can be set to 0, 1 or 2.

              • 0: show just the test arguments
              • 1: show just the command used in the test @@ -283,27 +245,40 @@ the synchronisation of the samples directory.
              SAMPLES
              -

              Specify or override the path to the FATE samples at make time, it has a - meaning only while running the regression tests. +

              Specify or override the path to the FATE samples at make time, it has a +meaning only while running the regression tests.

              THREADS
              -

              Specify how many threads to use while running regression tests, it is - quite useful to detect thread-related regressions. +

              Specify how many threads to use while running regression tests, it is +quite useful to detect thread-related regressions. +

              +
              +
              THREAD_TYPE
              +

              Specify which threading strategy test, either slice or frame, +by default slice+frame +

              +
              +
              CPUFLAGS
              +

              Specify CPU flags. +

              +
              +
              TARGET_EXEC
              +

              Specify or override the wrapper used to run the tests. +The TARGET_EXEC option provides a way to run FATE wrapped in +valgrind, qemu-user or wine or on remote targets +through ssh. +

              +
              +
              GEN
              +

              Set to 1 to generate the missing or mismatched references.

              -

              Example: -

               
              make V=1 SAMPLES=/var/fate/samples THREADS=2 fate
              +
              +

              4.3 Examples

              + +
               
              make V=1 SAMPLES=/var/fate/samples THREADS=2 CPUFLAGS=mmx fate
               
              - -

              - - - +
              +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
              diff --git a/extern/ffmpeg/doc/ffmpeg.html b/extern/ffmpeg/doc/ffmpeg.html index 4ea053f8b4..7285194892 100644 --- a/extern/ffmpeg/doc/ffmpeg.html +++ b/extern/ffmpeg/doc/ffmpeg.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : ffmpeg - - - - + + - - - - + + - - +
              -
              +

              ffmpeg Documentation

              @@ -95,337 +36,72 @@ h3 {

              1. Synopsis

              -

              The generic syntax is: +

              ffmpeg [global_options] {[input_file_options] -i ‘input_file’} ... {[output_file_options] ‘output_file’} ...

              -
               
              ffmpeg [global options] [[infile options][‘-iinfile]]... {[outfile options] outfile}...
              -
              -

              2. Description

              -

              ffmpeg is a very fast video and audio converter that can also grab from +

              ffmpeg is a very fast video and audio converter that can also grab from a live audio/video source. It can also convert between arbitrary sample rates and resize video on the fly with a high quality polyphase filter.

              -

              ffmpeg reads from an arbitrary number of input "files" (which can be regular +

              ffmpeg reads from an arbitrary number of input "files" (which can be regular files, pipes, network streams, grabbing devices, etc.), specified by the -i option, and writes to an arbitrary number of output "files", which are specified by a plain output filename. Anything found on the command line which cannot be interpreted as an option is considered to be an output filename.

              -

              Each input or output file can in principle contain any number of streams of -different types (video/audio/subtitle/attachment/data). Allowed number and/or -types of streams can be limited by the container format. Selecting, which -streams from which inputs go into output, is done either automatically or with -the -map option (see the Stream selection chapter). +

              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 -map option (see the Stream selection chapter).

              To refer to input files in options, you must use their indices (0-based). E.g. -the first input file is 0, the second is 1 etc. Similarly, streams +the first input file is 0, the second is 1, etc. Similarly, streams within a file are referred to by their indices. E.g. 2:3 refers to the -fourth stream in the third input file. See also the Stream specifiers chapter. +fourth stream in the third input file. Also see the Stream specifiers chapter.

              As a general rule, options are applied to the next specified file. Therefore, order is important, and you can have the same @@ -440,8 +116,8 @@ options apply ONLY to the next input or output file and are reset between files.

              • -To set the video bitrate of the output file to 64kbit/s: -
                 
                ffmpeg -i input.avi -b:v 64k output.avi
                +To set the video bitrate of the output file to 64 kbit/s:
                +
                 
                ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
                 
              • @@ -459,53 +135,175 @@ to 1 fps and the frame rate of the output file to 24 fps:

                The format option may be needed for raw input files.

                - -

                3. Stream selection

                + +

                3. Detailed description

                -

                By default ffmpeg includes only one stream of each type (video, audio, subtitle) -present in the input files and adds them to each output file. It picks the -"best" of each based upon the following criteria; for video it is the stream -with the highest resolution, for audio the stream with the most channels, for -subtitle it’s the first subtitle stream. In the case where several streams of -the same type rate equally, the lowest numbered stream is chosen. +

                The transcoding process in ffmpeg for each output can be described by +the following diagram:

                -

                You can disable some of those defaults by using -vn/-an/-sn options. For +
                 
                 _______              ______________               _________              ______________            ________
                +|       |            |              |             |         |            |              |          |        |
                +| input |  demuxer   | encoded data |   decoder   | decoded |  encoder   | encoded data |  muxer   | output |
                +| file  | ---------> | packets      |  ---------> | frames  | ---------> | packets      | -------> | file   |
                +|_______|            |______________|             |_________|            |______________|          |________|
                +
                +
                + +

                ffmpeg calls the libavformat library (containing demuxers) to read +input files and get packets containing encoded data from them. When there are +multiple input files, ffmpeg tries to keep them synchronized by +tracking lowest timestamp on any active input stream. +

                +

                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. +

                + +

                3.1 Filtering

                +

                Before encoding, ffmpeg can process raw audio and video frames using +filters from the libavfilter library. Several chained filters form a filter +graph. ffmpeg distinguishes between two types of filtergraphs: +simple and complex. +

                + +

                3.1.1 Simple filtergraphs

                +

                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: +

                +
                 
                 _________                        __________              ______________
                +|         |                      |          |            |              |
                +| decoded |  simple filtergraph  | filtered |  encoder   | encoded data |
                +| frames  | -------------------> | frames   | ---------> | packets      |
                +|_________|                      |__________|            |______________|
                +
                +
                + +

                Simple filtergraphs are configured with the per-stream ‘-filter’ option +(with ‘-vf’ and ‘-af’ aliases for video and audio respectively). +A simple filtergraph for video can look for example like this: +

                +
                 
                 _______        _____________        _______        _____        ________
                +|       |      |             |      |       |      |     |      |        |
                +| input | ---> | deinterlace | ---> | scale | ---> | fps | ---> | output |
                +|_______|      |_____________|      |_______|      |_____|      |________|
                +
                +
                + +

                Note that some filters change frame properties but not frame contents. E.g. the +fps filter in the example above changes number of frames, but does not +touch the frame contents. Another example is the setpts filter, which +only sets timestamps and otherwise passes the frames unchanged. +

                + +

                3.1.2 Complex filtergraphs

                +

                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: +

                +
                 
                 _________
                +|         |
                +| input 0 |\                    __________
                +|_________| \                  |          |
                +             \   _________    /| output 0 |
                +              \ |         |  / |__________|
                + _________     \| complex | /
                +|         |     |         |/
                +| input 1 |---->| filter  |\
                +|_________|     |         | \   __________
                +               /| graph   |  \ |          |
                +              / |         |   \| output 1 |
                + _________   /  |_________|    |__________|
                +|         | /
                +| input 2 |/
                +|_________|
                +
                +
                + +

                Complex filtergraphs are configured with the ‘-filter_complex’ option. +Note that this option is global, since a complex filtergraph, by its nature, +cannot be unambiguously associated with a single stream or file. +

                +

                The ‘-lavfi’ option is equivalent to ‘-filter_complex’. +

                +

                A trivial example of a complex filtergraph is the overlay filter, which +has two video inputs and one video output, containing one video overlaid on top +of the other. Its audio counterpart is the amix filter. +

                + +

                3.2 Stream copy

                +

                Stream copy is a mode selected by supplying the copy parameter to the +‘-codec’ option. It makes ffmpeg 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: +

                +
                 
                 _______              ______________            ________
                +|       |            |              |          |        |
                +| input |  demuxer   | encoded data |  muxer   | output |
                +| file  | ---------> | packets      | -------> | file   |
                +|_______|            |______________|          |________|
                +
                +
                + +

                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. +

                + + +

                4. Stream selection

                + +

                By default, ffmpeg includes only one stream of each type (video, audio, subtitle) +present in the input files and adds them to each output file. It picks the +"best" of each based upon the following criteria: for video, it is the stream +with the highest resolution, for audio, 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. +

                +

                You can disable some of those defaults by using the -vn/-an/-sn options. For full manual control, use the -map option, which disables the defaults just described.

                - -

                4. Options

                + +

                5. Options

                -

                All the numerical options, if not specified otherwise, accept in input -a string representing a number, which may contain one of the -International System number postfixes, for example ’K’, ’M’, ’G’. -If ’i’ is appended after the postfix, powers of 2 are used instead of -powers of 10. The ’B’ postfix multiplies the value for 8, and can be -appended after another postfix or used alone. This allows using for -example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. +

                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’. +

                +

                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.

                Options which do not take arguments are boolean options, and set the corresponding value to true. They can be set to false by prefixing -with "no" the option name, for example using "-nofoo" in the -command line will set to false the boolean option with name "foo". +the option name with "no". For example using "-nofoo" +will set the boolean option with name "foo" to false.

                -

                4.1 Stream specifiers

                +

                5.1 Stream specifiers

                Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers -are used to precisely specify which stream(s) does a given option belong to. +are used to precisely specify which stream(s) a given option belongs to.

                A stream specifier is a string generally appended to the option name and -separated from it by a colon. E.g. -codec:a:1 ac3 option contains -a:1 stream specifer, which matches the second audio stream. Therefore it +separated from it by a colon. E.g. -codec:a:1 ac3 contains the +a:1 stream specifier, which matches the second audio stream. Therefore, it would select the ac3 codec for the second audio stream.

                -

                A stream specifier can match several stream, the option is then applied to all +

                A stream specifier can match several streams, so that the option is applied to all of them. E.g. the stream specifier in -b:a 128k matches all audio streams.

                -

                An empty stream specifier matches all streams, for example -codec copy +

                An empty stream specifier matches all streams. For example, -codec copy or -codec: copy would copy all the streams without reencoding.

                Possible forms of stream specifiers are: @@ -515,29 +313,73 @@ or -codec: copy would copy all the streams without reencoding. thread count for the second stream to 4.

                stream_type[:stream_index]
                -

                stream_type is one of: ’v’ for video, ’a’ for audio, ’s’ for subtitle, -’d’ for data and ’t’ for attachments. If stream_index is given, then -matches stream number stream_index of this type. Otherwise matches all +

                stream_type is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle, +’d’ for data, and ’t’ for attachments. If stream_index is given, then it matches +stream number stream_index of this type. Otherwise, it matches all streams of this type.

                p:program_id[:stream_index]
                -

                If stream_index is given, then matches stream number stream_index in -program with id program_id. Otherwise matches all streams in this program. +

                If stream_index is given, then it matches the stream with number stream_index +in the program with the id program_id. Otherwise, it matches all streams in the +program. +

                +
                #stream_id
                +

                Matches the stream by a format-specific ID.

                - -

                4.2 Generic options

                -

                These options are shared amongst the av* tools. + +

                5.2 Generic options

                + +

                These options are shared amongst the ff* tools.

                -L

                Show license.

                -
                -h, -?, -help, --help
                -

                Show help. +

                -h, -?, -help, --help [arg]
                +

                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.

                +

                Possible values of arg are: +

                +
                long
                +

                Print advanced tool options in addition to the basic tool options. +

                +
                +
                full
                +

                Print complete list of options, including shared and private options +for encoders, decoders, demuxers, muxers, filters, etc. +

                +
                +
                decoder=decoder_name
                +

                Print detailed information about the decoder named decoder_name. Use the +‘-decoders’ option to get a list of all decoders. +

                +
                +
                encoder=encoder_name
                +

                Print detailed information about the encoder named encoder_name. Use the +‘-encoders’ option to get a list of all encoders. +

                +
                +
                demuxer=demuxer_name
                +

                Print detailed information about the demuxer named demuxer_name. Use the +‘-formats’ option to get a list of all demuxers and muxers. +

                +
                +
                muxer=muxer_name
                +

                Print detailed information about the muxer named muxer_name. Use the +‘-formats’ option to get a list of all muxers and demuxers. +

                +
                +
                filter=filter_name
                +

                Print detailed information about the filter name filter_name. Use the +‘-filters’ option to get a list of all filters. +

                +
                +
                -version

                Show version. @@ -546,42 +388,21 @@ program with id program_id. Otherwise matches all streams in this pro

                -formats

                Show available formats.

                -

                The fields preceding the format names have the following meanings: -

                -
                D
                -

                Decoding available -

                -
                E
                -

                Encoding available -

                -
                -
                -codecs
                -

                Show available codecs. +

                Show all codecs known to libavcodec. +

                +

                Note that the term ’codec’ is used throughout this documentation as a shortcut +for what is more correctly called a media bitstream format. +

                +
                +
                -decoders
                +

                Show available decoders. +

                +
                +
                -encoders
                +

                Show all available encoders.

                -

                The fields preceding the codec names have the following meanings: -

                -
                D
                -

                Decoding available -

                -
                E
                -

                Encoding available -

                -
                V/A/S
                -

                Video/audio/subtitle codec -

                -
                S
                -

                Codec supports slices -

                -
                D
                -

                Codec supports direct rendering -

                -
                T
                -

                Codec can handle input truncated at random locations instead of only at frame boundaries -

                -
                -
                -bsfs

                Show available bitstream filters. @@ -603,18 +424,52 @@ program with id program_id. Otherwise matches all streams in this pro

                Show available sample formats.

                -
                -loglevel loglevel | -v loglevel
                +
                -layouts
                +

                Show channel names and standard channel layouts. +

                +
                +
                -colors
                +

                Show recognized color names. +

                +
                +
                -loglevel [repeat+]loglevel | -v [repeat+]loglevel

                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. loglevel is a number or a string containing one of the following values:

                quiet
                +

                Show nothing at all; be silent. +

                panic
                +

                Only show fatal errors which could lead the process to crash, such as +and assert failure. This is not currently used for anything. +

                fatal
                +

                Only show fatal errors. These are errors after which the process absolutely +cannot continue after. +

                error
                +

                Show all errors, including ones which can be recovered from. +

                warning
                +

                Show all warnings and errors. Any message related to possibly +incorrect or unexpected events will be shown. +

                info
                +

                Show informative messages during processing. This is in addition to +warnings and errors. This is the default value. +

                verbose
                +

                Same as info, except more verbose. +

                debug
                +

                Show everything, including debugging information. +

                By default the program logs to stderr, if coloring is supported by the @@ -633,14 +488,96 @@ directory. This file can be useful for bug reports. It also implies -loglevel verbose.

                -

                Note: setting the environment variable FFREPORT to any value has the -same effect. +

                Setting the environment variable FFREPORT 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: +

                +
                file
                +

                set the file name to use for the report; %p is expanded to the name +of the program, %t is expanded to a timestamp, %% is expanded +to a plain % +

                +
                + +

                Errors in parsing the environment variable are not fatal, and will not +appear in the report.

                +
                -cpuflags flags (global)
                +

                Allows setting and clearing cpu flags. This option is intended +for testing. Do not use it unless you know what you’re doing. +

                 
                ffmpeg -cpuflags -sse+mmx ...
                +ffmpeg -cpuflags mmx ...
                +ffmpeg -cpuflags 0 ...
                +
                +

                Possible flags for this option are: +

                +
                x86
                +
                +
                mmx
                +
                mmxext
                +
                sse
                +
                sse2
                +
                sse2slow
                +
                sse3
                +
                sse3slow
                +
                ssse3
                +
                atom
                +
                sse4.1
                +
                sse4.2
                +
                avx
                +
                xop
                +
                fma4
                +
                3dnow
                +
                3dnowext
                +
                cmov
                +
                +
                +
                ARM
                +
                +
                armv5te
                +
                armv6
                +
                armv6t2
                +
                vfp
                +
                vfpv3
                +
                neon
                +
                +
                +
                PowerPC
                +
                +
                altivec
                +
                +
                +
                Specific Processors
                +
                +
                pentium2
                +
                pentium3
                +
                pentium4
                +
                k6
                +
                k62
                +
                athlon
                +
                athlonxp
                +
                k8
                +
                +
                +
                + +
                +
                -opencl_options options (global)
                +

                Set OpenCL environment options. This option is only available when +FFmpeg has been compiled with --enable-opencl. +

                +

                options must be a list of key=value option pairs +separated by ’:’. See the “OpenCL Options” section in the +ffmpeg-utils manual for the list of supported options. +

                -

                4.3 AVOptions

                +

                5.3 AVOptions

                These options are provided directly by the libavformat, libavdevice and libavcodec libraries. To see the list of available AVOptions, use the @@ -663,22 +600,23 @@ muxer:

                 
                ffmpeg -i input.flac -id3v2_version 3 out.mp3
                 
                -

                All codec AVOptions are obviously per-stream, so the chapter on stream -specifiers applies to them +

                All codec AVOptions are per-stream, and thus a stream specifier +should be attached to them.

                -

                Note ‘-nooption’ syntax cannot be used for boolean AVOptions, -use ‘-option 0’/‘-option 1’. +

                Note: the ‘-nooption’ syntax cannot be used for boolean +AVOptions, use ‘-option 0’/‘-option 1’.

                -

                Note2 old undocumented way of specifying per-stream AVOptions by prepending -v/a/s to the options name is now obsolete and will be removed soon. +

                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.

                -

                4.4 Main options

                +

                5.4 Main options

                -f fmt (input/output)

                Force input or output file format. The format is normally auto detected for input -files and guessed from file extension for output files, so this option is not +files and guessed from the file extension for output files, so this option is not needed in most cases.

                @@ -691,7 +629,8 @@ needed in most cases.

                -n (global)
                -

                Do not overwrite output files but exit if file exists. +

                Do not overwrite output files, and exit immediately if a specified +output file already exists.

                -c[:stream_specifier] codec (input/output,per-stream)
                @@ -717,16 +656,31 @@ libx264, and the 138th audio, which will be encoded with libvorbis.

                Stop writing the output after its duration reaches duration. duration may be a number in seconds, or in hh:mm:ss[.xxx] form.

                +

                -to and -t are mutually exclusive and -t has priority. +

                +
                +
                -to position (output)
                +

                Stop writing the output at position. +position may be a number in seconds, or in hh:mm:ss[.xxx] form. +

                +

                -to and -t are mutually exclusive and -t has priority. +

                -fs limit_size (output)
                -

                Set the file size limit. +

                Set the file size limit, expressed in bytes.

                -ss position (input/output)

                When used as an input option (before -i), seeks in this input file to -position. When used as an output option (before an output filename), -decodes but discards input until the timestamps reach position. This is -slower, but more accurate. +position. Note the in most formats it is not possible to seek exactly, so +ffmpeg will seek to the closest seek point before position. +When transcoding and ‘-accurate_seek’ is enabled (the default), this +extra segment between the seek point and position will be decoded and +discarded. When doing stream copy or when ‘-noaccurate_seek’ is used, it +will be preserved. +

                +

                When used as an output option (before an output filename), decodes but discards +input until the timestamps reach position.

                position may be either in seconds or in hh:mm:ss[.xxx] form.

                @@ -742,7 +696,7 @@ streams are delayed by offset seconds.
                -timestamp time (output)

                Set the recording timestamp in the container. The syntax for time is: -

                 
                now|([(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH[:MM[:SS[.m...]]])|(HH[MM[SS[.m...]]]))[Z|z])
                +

                 
                now|([(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...])|(HHMMSS[.m...]))[Z|z])
                 

                If the value is "now" it takes the current time. Time is local time unless ’Z’ or ’z’ is appended, in which case it is @@ -799,18 +753,65 @@ they do not conflict with the standard, as in:

                Use fixed quality scale (VBR). The meaning of q is codec-dependent.

                -
                -
                -filter[:stream_specifier] filter_graph (output,per-stream)
                -

                filter_graph is a description of the filter graph to apply to -the stream. Use -filters to show all the available filters -(including also sources and sinks). +

                +
                -filter[:stream_specifier] filtergraph (output,per-stream)
                +

                Create the filtergraph specified by filtergraph and use it to +filter the stream. +

                +

                filtergraph 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 in, and the output to the label out. See +the ffmpeg-filters manual for more information about the filtergraph +syntax. +

                +

                See the -filter_complex option if you +want to create filtergraphs with multiple inputs and/or outputs. +

                +
                +
                -filter_script[:stream_specifier] filename (output,per-stream)
                +

                This option is similar to ‘-filter’, the only difference is that its +argument is the name of the file from which a filtergraph description is to be +read. +

                +
                -pre[:stream_specifier] preset_name (output,per-stream)

                Specify the preset for matching stream(s).

                -stats (global)
                -

                Print encoding progress/statistics. On by default. +

                Print encoding progress/statistics. It is on by default, to explicitly +disable it you need to specify -nostats. +

                +
                +
                -progress url (global)
                +

                Send program-friendly progress information to url. +

                +

                Progress information is written approximately every second and at the end of +the encoding process. It is made of "key=value" lines. key +consists of only alphanumeric characters. The last key of a sequence of +progress information is always "progress". +

                +
                +
                -stdin
                +

                Enable interaction on standard input. On by default unless standard input is +used as an input. To explicitly disable interaction you need to specify +-nostdin. +

                +

                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 ffmpeg ... < /dev/null but it requires a +shell. +

                +
                +
                -debug_ts (global)
                +

                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. +

                +

                See also the option -fdebug ts.

                -attach filename (output)
                @@ -834,10 +835,10 @@ with -map or automatic mappings). will be used.

                E.g. to extract the first attachment to a file named ’out.ttf’: -

                 
                ffmpeg -dump_attachment:t:0 out.ttf INPUT
                +

                 
                ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
                 

                To extract all attachments to files determined by the filename tag: -

                 
                ffmpeg -dump_attachment:t "" INPUT
                +

                 
                ffmpeg -dump_attachment:t "" -i INPUT
                 

                Technical note – attachments are implemented as codec extradata, so this @@ -848,108 +849,35 @@ attachments. -

                4.5 Video Options

                +

                5.5 Video Options

                -vframes number (output)

                Set the number of video frames to record. This is an alias for -frames:v.

                -r[:stream_specifier] fps (input/output,per-stream)
                -

                Set frame rate (Hz value, fraction or abbreviation), (default = 25). -

                +

                Set frame rate (Hz value, fraction or abbreviation). +

                +

                As an input option, ignore any timestamps stored in the file and instead +generate timestamps assuming constant frame rate fps. +

                +

                As an output option, duplicate or drop input frames to achieve constant output +frame rate fps. +

                +
                -s[:stream_specifier] size (input/output,per-stream)
                -

                Set frame size. The format is ‘wxh’ (default - same as source). -The following abbreviations are recognized: -

                -
                sqcif
                -

                128x96 -

                -
                qcif
                -

                176x144 -

                -
                cif
                -

                352x288 -

                -
                4cif
                -

                704x576 -

                -
                16cif
                -

                1408x1152 -

                -
                qqvga
                -

                160x120 -

                -
                qvga
                -

                320x240 -

                -
                vga
                -

                640x480 -

                -
                svga
                -

                800x600 -

                -
                xga
                -

                1024x768 -

                -
                uxga
                -

                1600x1200 -

                -
                qxga
                -

                2048x1536 -

                -
                sxga
                -

                1280x1024 -

                -
                qsxga
                -

                2560x2048 -

                -
                hsxga
                -

                5120x4096 -

                -
                wvga
                -

                852x480 -

                -
                wxga
                -

                1366x768 -

                -
                wsxga
                -

                1600x1024 -

                -
                wuxga
                -

                1920x1200 -

                -
                woxga
                -

                2560x1600 -

                -
                wqsxga
                -

                3200x2048 -

                -
                wquxga
                -

                3840x2400 -

                -
                whsxga
                -

                6400x4096 -

                -
                whuxga
                -

                7680x4800 -

                -
                cga
                -

                320x200 -

                -
                ega
                -

                640x350 -

                -
                hd480
                -

                852x480 -

                -
                hd720
                -

                1280x720 -

                -
                hd1080
                -

                1920x1080 -

                -
                - +

                Set frame size. +

                +

                As an input option, this is a shortcut for the ‘video_size’ 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. +

                +

                As an output option, this inserts the scale video filter to the +end of the corresponding filtergraph. Please use the scale filter +directly to insert it at the beginning or some other place. +

                +

                The format is ‘wxh’ (default - same as source). +

                -aspect[:stream_specifier] aspect (output,per-stream)

                Set the video display aspect ratio specified by aspect. @@ -959,60 +887,20 @@ form num:den, where num and den are numerator and denominator of the aspect ratio. For example "4:3", "16:9", "1.3333", and "1.7777" are valid argument values.

                -
                -
                -croptop size
                -
                -cropbottom size
                -
                -cropleft size
                -
                -cropright size
                -

                All the crop options have been removed. Use -vf -crop=width:height:x:y instead. -

                -
                -
                -padtop size
                -
                -padbottom size
                -
                -padleft size
                -
                -padright size
                -
                -padcolor hex_color
                -

                All the pad options have been removed. Use -vf -pad=width:height:x:y:color instead. +

                If used together with ‘-vcodec copy’, it will affect the aspect ratio +stored at container level, but not the aspect ratio stored in encoded +frames, if it exists.

                -vn (output)

                Disable video recording. -

                -
                -bt tolerance
                -

                Set video bitrate tolerance (in bits, default 4000k). -Has a minimum value of: (target_bitrate/target_framerate). -In 1-pass mode, bitrate tolerance specifies how far ratecontrol is -willing to deviate from the target average bitrate value. This is -not related to min/max bitrate. Lowering tolerance too much has -an adverse effect on quality. -

                -
                -maxrate bitrate
                -

                Set max video bitrate (in bit/s). -Requires -bufsize to be set. -

                -
                -minrate bitrate
                -

                Set min video bitrate (in bit/s). -Most useful in setting up a CBR encode: -

                 
                ffmpeg -i myfile.avi -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
                -
                -

                It is of little use elsewise. -

                -
                -bufsize size
                -

                Set video buffer verifier buffer size (in bits). -

                -
                -vcodec codec (output)
                -

                Set the video codec. This is an alias for -codec:v. -

                -
                -same_quant
                -

                Use same quantizer as source (implies VBR). -

                -

                Note that this is NOT SAME QUALITY. Do not use this option unless you know you -need it.

                -
                -pass n
                +
                -vcodec codec (output)
                +

                Set the video codec. This is an alias for -codec:v. +

                +
                +
                -pass[:stream_specifier] n (output,per-stream)

                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), @@ -1025,7 +913,7 @@ ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null

                -
                -passlogfile prefix (global)
                +
                -passlogfile[:stream_specifier] prefix (output,per-stream)

                Set two-pass log file name prefix to prefix, the default file name prefix is “ffmpeg2pass”. The complete file name will be ‘PREFIX-N.log’, where N is a number specific to the output @@ -1036,281 +924,44 @@ stream

                Set the ISO 639 language code (3 letters) of the current video stream.

                -
                -vf filter_graph (output)
                -

                filter_graph is a description of the filter graph to apply to -the input video. -Use the option "-filters" to show all the available filters (including -also sources and sinks). This is an alias for -filter:v. +

                -vf filtergraph (output)
                +

                Create the filtergraph specified by filtergraph and use it to +filter the stream.

                -
                +

                This is an alias for -filter:v, see the -filter option. +

                -

                4.6 Advanced Video Options

                +

                5.6 Advanced Video Options

                -pix_fmt[:stream_specifier] format (input/output,per-stream)

                Set pixel format. Use -pix_fmts 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 pix_fmt is prefixed by a +, ffmpeg will exit with an error +if the requested pixel format can not be selected, and automatic conversions +inside filtergraphs are disabled. +If pix_fmt is a single +, ffmpeg selects the same pixel format +as the input (or graph output) and automatic conversions are disabled. +

                +
                -sws_flags flags (input/output)

                Set SwScaler flags.

                -
                -g gop_size
                -

                Set the group of pictures size. -

                -
                -intra
                -

                deprecated, use -g 1 -

                -vdt n

                Discard threshold. -

                -
                -qmin q
                -

                minimum video quantizer scale (VBR) -

                -
                -qmax q
                -

                maximum video quantizer scale (VBR) -

                -
                -qdiff q
                -

                maximum difference between the quantizer scales (VBR) -

                -
                -qblur blur
                -

                video quantizer scale blur (VBR) (range 0.0 - 1.0) -

                -
                -qcomp compression
                -

                video quantizer scale compression (VBR) (default 0.5). -Constant of ratecontrol equation. Recommended range for default rc_eq: 0.0-1.0

                -
                -
                -lmin lambda
                -

                minimum video lagrange factor (VBR) -

                -
                -lmax lambda
                -

                max video lagrange factor (VBR) -

                -
                -mblmin lambda
                -

                minimum macroblock quantizer scale (VBR) -

                -
                -mblmax lambda
                -

                maximum macroblock quantizer scale (VBR) -

                -

                These four options (lmin, lmax, mblmin, mblmax) use ’lambda’ units, -but you may use the QP2LAMBDA constant to easily convert from ’q’ units: -

                 
                ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
                -
                - -
                -
                -rc_init_cplx complexity
                -

                initial complexity for single pass encoding -

                -
                -b_qfactor factor
                -

                qp factor between P- and B-frames -

                -
                -i_qfactor factor
                -

                qp factor between P- and I-frames -

                -
                -b_qoffset offset
                -

                qp offset between P- and B-frames -

                -
                -i_qoffset offset
                -

                qp offset between P- and I-frames -

                -
                -rc_eq equation
                -

                Set rate control equation (see section "Expression Evaluation") -(default = tex^qComp). -

                -

                When computing the rate control equation expression, besides the -standard functions defined in the section "Expression Evaluation", the -following functions are available: -

                -
                bits2qp(bits)
                -
                qp2bits(qp)
                -
                - -

                and the following constants are available: -

                -
                iTex
                -
                pTex
                -
                tex
                -
                mv
                -
                fCode
                -
                iCount
                -
                mcVar
                -
                var
                -
                isI
                -
                isP
                -
                isB
                -
                avgQP
                -
                qComp
                -
                avgIITex
                -
                avgPITex
                -
                avgPPTex
                -
                avgBPTex
                -
                avgTex
                -
                -
                -rc_override[:stream_specifier] override (output,per-stream)

                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. -

                -
                -me_method method
                -

                Set motion estimation method to method. -Available methods are (from lowest to best quality): -

                -
                zero
                -

                Try just the (0, 0) vector. -

                -
                phods
                -
                log
                -
                x1
                -
                hex
                -
                umh
                -
                epzs
                -

                (default method) -

                -
                full
                -

                exhaustive search (slow and marginally better than epzs) -

                -
                - -
                -
                -dct_algo algo
                -

                Set DCT algorithm to algo. Available values are: -

                -
                0
                -

                FF_DCT_AUTO (default) -

                -
                1
                -

                FF_DCT_FASTINT -

                -
                2
                -

                FF_DCT_INT -

                -
                3
                -

                FF_DCT_MMX -

                -
                4
                -

                FF_DCT_MLIB -

                -
                5
                -

                FF_DCT_ALTIVEC -

                -
                - -
                -
                -idct_algo algo
                -

                Set IDCT algorithm to algo. Available values are: -

                -
                0
                -

                FF_IDCT_AUTO (default) -

                -
                1
                -

                FF_IDCT_INT -

                -
                2
                -

                FF_IDCT_SIMPLE -

                -
                3
                -

                FF_IDCT_SIMPLEMMX -

                -
                4
                -

                FF_IDCT_LIBMPEG2MMX -

                -
                5
                -

                FF_IDCT_PS2 -

                -
                6
                -

                FF_IDCT_MLIB -

                -
                7
                -

                FF_IDCT_ARM -

                -
                8
                -

                FF_IDCT_ALTIVEC -

                -
                9
                -

                FF_IDCT_SH4 -

                -
                10
                -

                FF_IDCT_SIMPLEARM -

                -
                - -
                -
                -er n
                -

                Set error resilience to n. -

                -
                1
                -

                FF_ER_CAREFUL (default) -

                -
                2
                -

                FF_ER_COMPLIANT -

                -
                3
                -

                FF_ER_AGGRESSIVE -

                -
                4
                -

                FF_ER_VERY_AGGRESSIVE -

                -
                - -
                -
                -ec bit_mask
                -

                Set error concealment to bit_mask. bit_mask is a bit mask of -the following values: -

                -
                1
                -

                FF_EC_GUESS_MVS (default = enabled) -

                -
                2
                -

                FF_EC_DEBLOCK (default = enabled) -

                -
                - -
                -
                -bf frames
                -

                Use ’frames’ B-frames (supported for MPEG-1, MPEG-2 and MPEG-4). -

                -
                -mbd mode
                -

                macroblock decision -

                -
                0
                -

                FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in ffmpeg). -

                -
                1
                -

                FF_MB_DECISION_BITS: Choose the one which needs the fewest bits. -

                -
                2
                -

                FF_MB_DECISION_RD: rate distortion -

                -
                - -
                -
                -4mv
                -

                Use four motion vector by macroblock (MPEG-4 only). -

                -
                -part
                -

                Use data partitioning (MPEG-4 only). -

                -
                -bug param
                -

                Work around encoder bugs that are not auto-detected. -

                -
                -strict strictness
                -

                How strictly to follow the standards. -

                -
                -aic
                -

                Enable Advanced intra coding (h263+). -

                -
                -umv
                -

                Enable Unlimited Motion Vector (h263+)

                -
                -deinterlace
                -

                Deinterlace pictures. -

                -ilme

                Force interlacing support in encoder (MPEG-2 and MPEG-4 only). Use this option if your input file is interlaced and you want @@ -1341,13 +992,61 @@ The alternative is to deinterlace the input stream with

                -vbsf bitstream_filter

                Deprecated see -bsf -

                +

                +
                -force_key_frames[:stream_specifier] time[,time...] (output,per-stream)
                +
                -force_key_frames[:stream_specifier] expr:expr (output,per-stream)

                Force key frames at the specified timestamps, more precisely at the first frames after each specified time. +

                +

                If the argument is prefixed with expr:, the string expr +is interpreted like an expression and is evaluated for each frame. A +key frame is forced in case the evaluation is non-zero. +

                +

                If one of the times is "chapters[delta]", it is expanded into +the time of the beginning of all chapters in the file, shifted by +delta, 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. -The timestamps must be specified in ascending order. +

                +

                For example, to insert a key frame at 5 minutes, plus key frames 0.1 second +before the beginning of every chapter: +

                 
                -force_key_frames 0:05:00,chapters-0.1
                +
                + +

                The expression in expr can contain the following constants: +

                +
                n
                +

                the number of current processed frame, starting from 0 +

                +
                n_forced
                +

                the number of forced frames +

                +
                prev_forced_n
                +

                the number of the previous forced frame, it is NAN when no +keyframe was forced yet +

                +
                prev_forced_t
                +

                the time of the previous forced frame, it is NAN when no +keyframe was forced yet +

                +
                t
                +

                the time of the current processed frame +

                +
                + +

                For example to force a key frame every 5 seconds, you can specify: +

                 
                -force_key_frames expr:gte(t,n_forced*5)
                +
                + +

                To force a key frame 5 seconds after the time of the last forced one, +starting from second 13: +

                 
                -force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))
                +
                + +

                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.

                -copyinkf[:stream_specifier] (output,per-stream)
                @@ -1357,7 +1056,7 @@ beginning.
                -

                4.7 Audio Options

                +

                5.7 Audio Options

                -aframes number (output)
                @@ -1387,55 +1086,37 @@ and is mapped to the corresponding demuxer options.
                -sample_fmt[:stream_specifier] sample_fmt (output,per-stream)

                Set the audio sample format. Use -sample_fmts to get a list of supported sample formats. +

                +
                +
                -af filtergraph (output)
                +

                Create the filtergraph specified by filtergraph and use it to +filter the stream. +

                +

                This is an alias for -filter:a, see the -filter option.

                -

                4.8 Advanced Audio options:

                +

                5.8 Advanced Audio options:

                -atag fourcc/tag (output)

                Force audio tag/fourcc. This is an alias for -tag:a.

                -
                -audio_service_type type
                -

                Set the type of service that the audio stream contains. -

                -
                ma
                -

                Main Audio Service (default) -

                -
                ef
                -

                Effects -

                -
                vi
                -

                Visually Impaired -

                -
                hi
                -

                Hearing Impaired -

                -
                di
                -

                Dialogue -

                -
                co
                -

                Commentary -

                -
                em
                -

                Emergency -

                -
                vo
                -

                Voice Over -

                -
                ka
                -

                Karaoke -

                -
                -
                -absf bitstream_filter

                Deprecated, see -bsf

                +
                -guess_layout_max channels (input,per-stream)
                +

                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 ffmpeg 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. +

                -

                4.9 Subtitle options:

                +

                5.9 Subtitle options:

                -slang code
                @@ -1452,20 +1133,35 @@ of supported sample formats.

                - -

                4.10 Audio/Video grab options

                + +

                5.10 Advanced Subtitle options:

                -
                -isync (global)
                -

                Synchronize read on input. -

                +
                -fix_sub_duration
                +

                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. +

                +

                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. +

                +
                +
                -canvas_size size
                +

                Set the size of the canvas used to render subtitles. +

                +
                -

                4.11 Advanced options

                +

                5.11 Advanced options

                -
                -map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] (output)
                +
                -map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output)

                Designate one or more input streams as a source for the output file. Each input stream is identified by the input file index input_file_id and @@ -1481,6 +1177,10 @@ the source for output stream 1, etc.

                A - character before the stream identifier creates a "negative" mapping. It disables matching streams from already created mappings.

                +

                An alternative [linklabel] form will map outputs from complex filter +graphs (see the ‘-filter_complex’ option) to the output file. +linklabel must correspond to a defined output link label in the graph. +

                For example, to map ALL streams from the first input file to output

                 
                ffmpeg -i INPUT -map 0 output
                 
                @@ -1514,7 +1214,7 @@ and copy them to the output file ‘out.mov’:
                -map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]

                Map an audio channel from a given input to an output. If -output_file_id.stream_specifier are not set, the audio channel will +output_file_id.stream_specifier is not set, the audio channel will be mapped on all the audio streams.

                Using "-1" instead of @@ -1534,18 +1234,18 @@ two audio channels with the following command: the output stream. The output channel layout is guessed from the number of channels mapped (mono if one "-map_channel", stereo if two, etc.). Using "-ac" in combination of "-map_channel" makes the channel gain levels to be updated if -channel layouts don’t match (for instance two "-map_channel" options and "-ac -6"). +input and output channel layouts don’t match (for instance two "-map_channel" +options and "-ac 6").

                -

                You can also extract each channel of an INPUT to specific outputs; the -following command extract each channel of the audio stream (file 0, stream 0) -to the respective OUTPUT_CH0 and OUTPUT_CH1: +

                You can also extract each channel of an input to specific outputs; the following +command extracts two channels of the INPUT audio stream (file 0, stream 0) +to the respective OUTPUT_CH0 and OUTPUT_CH1 outputs:

                 
                ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
                 
                -

                The following example split the channels of a stereo input into streams: -

                -
                 
                ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg
                +

                The following example splits the channels of a stereo input into two separate +streams, which are put into the same output file: +

                 
                ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg
                 

                Note that currently each output stream can only contain channels from a single @@ -1553,9 +1253,16 @@ input stream; you can’t for example use "-map_channel" to pick m audio channels contained in different streams (from the same or different files) and merge them into a single output stream. It is therefore not currently possible, for example, to turn two separate mono streams into a single stereo -stream. However spliting a stereo stream into two single channel mono streams +stream. However splitting a stereo stream into two single channel mono streams is possible.

                +

                If you need this feature, a possible workaround is to use the amerge +filter. For example, if you need to merge a media (here ‘input.mkv’) with 2 +mono audio streams into one single stereo channel audio stream (and keep the +video stream), you can use the following command: +

                 
                ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
                +
                +
                -map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)

                Set metadata information of the next output file from infile. Note that @@ -1606,51 +1313,7 @@ metadata is assumed by default. 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. -

                -
                -debug category
                -

                Print specific debug info. -category is a number or a string containing one of the following values: -

                -
                bitstream
                -
                buffers
                -

                picture buffer allocations -

                -
                bugs
                -
                dct_coeff
                -
                er
                -

                error recognition -

                -
                mb_type
                -

                macroblock (MB) type -

                -
                mmco
                -

                memory management control operations (H.264) -

                -
                mv
                -

                motion vector -

                -
                pict
                -

                picture info -

                -
                pts
                -
                qp
                -

                per-block quantization parameter (QP) -

                -
                rc
                -

                rate control -

                -
                skip
                -
                startcode
                -
                thread_ops
                -

                threading operations -

                -
                vis_mb_type
                -

                visualize block types -

                -
                vis_qp
                -

                visualize quantization parameter (QP), lower QP are tinted greener -

                -
                +

                -benchmark (global)

                Show benchmarking information at the end of an encode. @@ -1658,6 +1321,10 @@ 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.

                +
                -benchmark_all (global)
                +

                Show benchmarking information during the encode. +Shows CPU time used in various steps (audio/video encode/decode). +

                -timelimit duration (global)

                Exit after ffmpeg has been running for duration seconds.

                @@ -1667,11 +1334,14 @@ it will usually display as 0 if not supported.
                -hex (global)

                When dumping packets, also dump the payload.

                -
                -ps size
                -

                Set RTP payload size in bytes. -

                -re (input)

                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 ffmpeg 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).

                -loop_input

                Loop over the input stream. Currently it works only for image @@ -1683,11 +1353,10 @@ This option is deprecated, use -loop 1. (0 will loop the output infinitely). This option is deprecated, use -loop.

                -
                -threads count
                -

                Thread count. -

                -vsync parameter

                Video sync method. +For compatibility reasons old values can be specified as numbers. +Newly added values will have to be specified as strings always.

                0, passthrough
                @@ -1695,18 +1364,26 @@ This option is deprecated, use -loop.

                1, cfr

                Frames will be duplicated and dropped to achieve exactly the requested -constant framerate. +constant frame rate.

                2, vfr

                Frames are passed through with their timestamp or dropped so as to prevent 2 frames from having the same timestamp.

                +
                drop
                +

                As passthrough but destroys all timestamps, making the muxer generate +fresh timestamps based on frame-rate. +

                -1, auto

                Chooses between 1 and 2 depending on muxer capabilities. This is the default method.

                +

                Note that the timestamps may be further modified by the muxer, after this. +For example, in the case that the format option ‘avoid_negative_ts’ +is enabled. +

                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. @@ -1717,14 +1394,54 @@ remaining stream(s) to the unchanged one. 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. -

                +

                +

                Note that the timestamps may be further modified by the muxer, after this. +For example, in the case that the format option ‘avoid_negative_ts’ +is enabled. +

                +

                This option has been deprecated. Use the aresample audio filter instead. +

                +
                -copyts
                -

                Copy timestamps from input to output. +

                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. +

                +

                Note that, depending on the ‘vsync’ option or on specific muxer +processing (e.g. in case the format option ‘avoid_negative_ts’ +is enabled) the output timestamps may mismatch with the input +timestamps even when this option is selected. +

                +
                +
                -copytb mode
                +

                Specify how to set the encoder timebase when stream copying. mode is an +integer numeric value, and can assume one of the following values: +

                +
                +
                1
                +

                Use the demuxer timebase. +

                +

                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. +

                +
                +
                0
                +

                Use the decoder timebase. +

                +

                The time base is copied to the output encoder from the corresponding input +decoder. +

                +
                +
                -1
                +

                Try to make the choice automatically, in order to generate a sane output.

                -
                -copytb
                -

                Copy input stream time base from input to output when stream copying. -

                -
                -shortest
                +
                + +

                Default value is -1. +

                +
                +
                -shortest (output)

                Finish encoding when the shortest input stream ends.

                -dts_delta_threshold
                @@ -1749,12 +1466,12 @@ an output mpegts file:
                -bsf[:stream_specifier] bitstream_filters (output,per-stream)
                -

                Set bitstream filters for matching streams. bistream_filters is +

                Set bitstream filters for matching streams. bitstream_filters is a comma-separated list of bitstream filters. Use the -bsfs option to get the list of bitstream filters. -

                 
                ffmpeg -i h264.mp4 -c:v copy -vbsf h264_mp4toannexb -an out.h264
                +

                 
                ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
                 
                -
                 
                ffmpeg -i file.mov -an -vn -sbsf mov2textsub -c:s copy -f rawvideo sub.txt
                +
                 
                ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
                 
                @@ -1767,11 +1484,99 @@ to get the list of bitstream filters. (or ’.’) for drop.

                 
                ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
                 
                + +

                +

                +
                -filter_complex filtergraph (global)
                +

                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 ‘-filter’ options. filtergraph is a description of +the filtergraph, as described in the “Filtergraph syntax” section of the +ffmpeg-filters manual. +

                +

                Input link labels must refer to input streams using the +[file_index:stream_specifier] syntax (i.e. the same as ‘-map’ +uses). If stream_specifier 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. +

                +

                Output link labels are referred to with ‘-map’. Unlabeled outputs are +added to the first output file. +

                +

                Note that with this option it is possible to use only lavfi sources without +normal input files. +

                +

                For example, to overlay an image over video +

                 
                ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
                +'[out]' out.mkv
                +
                +

                Here [0:v] 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. +

                +

                Assuming there is only one video stream in each input file, we can omit input +labels, so the above is equivalent to +

                 
                ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
                +'[out]' out.mkv
                +
                + +

                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 +

                 
                ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
                +
                + +

                To generate 5 seconds of pure red video using lavfi color source: +

                 
                ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
                +
                + +
                +
                -lavfi filtergraph (global)
                +

                Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or +outputs. Equivalent to ‘-filter_complex’. +

                +
                +
                -filter_complex_script filename (global)
                +

                This option is similar to ‘-filter_complex’, the only difference is that +its argument is the name of the file from which a complex filtergraph +description is to be read. +

                +
                +
                -accurate_seek (input)
                +

                This option enables or disables accurate seeking in input files with the +‘-ss’ option. It is enabled by default, so seeking is accurate when +transcoding. Use ‘-noaccurate_seek’ to disable it, which may be useful +e.g. when copying some streams and transcoding the others. +

                +
                +
                -override_ffserver (global)
                +

                Overrides the input specifications from ffserver. Using this option you can +map any input stream to ffserver and control many aspects of the encoding from +ffmpeg. Without this option ffmpeg will transmit to ffserver what is requested by +ffserver. +The option is intended for cases where features are needed that cannot be +specified to ffserver but can be to ffmpeg. +

                - -

                4.12 Preset files

                +

                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. +

                +

                For example, to hardcode subtitles on top of a DVB-T recording stored in +MPEG-TS format, delaying the subtitles by 1 second: +

                 
                ffmpeg -i input.ts -filter_complex \
                +  '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
                +  -sn -map '#0x2dc' output.mkv
                +
                +

                (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) +

                + +

                5.12 Preset files

                A preset file contains a sequence of option=value pairs, one for each line, specifying a sequence of options which would be awkward to specify on the command line. Lines starting with the hash @@ -1794,22 +1599,22 @@ following rules: directories ‘$FFMPEG_DATADIR’ (if set), and ‘$HOME/.ffmpeg’, and in the datadir defined at configuration time (usually ‘PREFIX/share/ffmpeg’) or in a ‘ffpresets’ folder along the executable on win32, -in that order. For example, if the argument is libx264-max, it will -search for the file ‘libx264-max.ffpreset’. +in that order. For example, if the argument is libvpx-1080p, it will +search for the file ‘libvpx-1080p.ffpreset’.

                If no such file is found, then ffmpeg will search for a file named codec_name-arg.ffpreset in the above-mentioned directories, where codec_name is the name of the codec to which the preset file options will be applied. For example, if you select -the video codec with -vcodec libx264 and use -vpre max, -then it will search for the file ‘libx264-max.ffpreset’. +the video codec with -vcodec libvpx and use -vpre 1080p, +then it will search for the file ‘libvpx-1080p.ffpreset’.

                -

                5. Tips

                +

                6. Tips

                • -For streaming at very low bitrate application, use a low frame rate +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: @@ -1828,7 +1633,7 @@ frame rate or decrease the frame size.
                • If your computer is not fast enough, you can speed up the compression at the expense of the compression ratio. You can use -’-me zero’ to speed up motion estimation, and ’-intra’ to disable +’-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). @@ -1844,10 +1649,10 @@ quality).
                -

                6. Examples

                +

                7. Examples

                - -

                6.1 Preset files

                + +

                7.1 Preset files

                A preset file contains a sequence of option=value pairs, one for each line, specifying a sequence of options which can be specified also on @@ -1863,7 +1668,7 @@ in that order. For example, if the argument is libx264-max, it wil search for the file ‘libx264-max.avpreset’.

                -

                6.2 Video and Audio grabbing

                +

                7.2 Video and Audio grabbing

                If you specify the input format and device then ffmpeg can grab video and audio directly. @@ -1882,24 +1687,24 @@ have to set the audio recording levels correctly with a standard mixer.

                -

                6.3 X11 grabbing

                +

                7.3 X11 grabbing

                Grab the X11 display with ffmpeg via

                -
                 
                ffmpeg -f x11grab -s cif -r 25 -i :0.0 /tmp/out.mpg
                +
                 
                ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
                 

                0.0 is display.screen number of your X11 server, same as the DISPLAY environment variable.

                - + + + + + - - + +
                 
                ffmpeg -f x11grab -s cif -r 25 -i :0.0+10,20 /tmp/out.mpg
                +
                 
                ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
                 

                0.0 is display.screen number of your X11 server, same as the DISPLAY environment variable. 10 is the x-offset and 20 the y-offset for the grabbing.

                -

                6.4 Video and Audio file format conversion

                +

                7.4 Video and Audio file format conversion

                Any supported file format and protocol can serve as input to ffmpeg:

                @@ -2006,6398 +1811,67 @@ 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.

                +

                When importing an image sequence, -i also supports expanding +shell-like wildcard patterns (globbing) internally, by selecting the +image2-specific -pattern_type glob option. +

                +

                For example, for creating a video from filenames matching the glob pattern +foo-*.jpeg: +

                 
                ffmpeg -f image2 -pattern_type glob -i 'foo-*.jpeg' -r 12 -s WxH foo.avi
                +
                +
              • You can put many streams of the same type in the output: - - - + + @@ -473,6 +505,7 @@ following image formats are supported: + @@ -482,14 +515,17 @@ following image formats are supported: + + + - + @@ -504,16 +540,17 @@ following image formats are supported: - + + + - @@ -535,8 +572,13 @@ following image formats are supported: + + + + + @@ -545,7 +587,6 @@ following image formats are supported: - @@ -557,7 +598,8 @@ following image formats are supported: - + + @@ -573,7 +615,10 @@ following image formats are supported: + + + @@ -582,11 +627,13 @@ following image formats are supported: + - + + @@ -602,6 +649,7 @@ following image formats are supported: +
                 
                ffmpeg -i test1.avi -i test2.avi -map 0.3 -map 0.2 -map 0.1 -map 0.0 -c copy test12.nut
                +
                 
                ffmpeg -i test1.avi -i test2.avi -map 0:3 -map 0:2 -map 0:1 -map 0:0 -c copy test12.nut
                 

                The resulting output file ‘test12.avi’ will contain first four streams from the input file in reverse order.

                - - - -

                7. Expression Evaluation

                - -

                When evaluating an arithmetic expression, FFmpeg uses an internal -formula evaluator, implemented through the ‘libavutil/eval.h’ -interface. -

                -

                An expression may contain unary, binary operators, constants, and -functions. -

                -

                Two expressions expr1 and expr2 can be combined to form -another expression "expr1;expr2". -expr1 and expr2 are evaluated in turn, and the new -expression evaluates to the value of expr2. -

                -

                The following binary operators are available: +, -, -*, /, ^. -

                -

                The following unary operators are available: +, -. -

                -

                The following functions are available: -

                -
                sinh(x)
                -
                cosh(x)
                -
                tanh(x)
                -
                sin(x)
                -
                cos(x)
                -
                tan(x)
                -
                atan(x)
                -
                asin(x)
                -
                acos(x)
                -
                exp(x)
                -
                log(x)
                -
                abs(x)
                -
                squish(x)
                -
                gauss(x)
                -
                isnan(x)
                -

                Return 1.0 if x is NAN, 0.0 otherwise. -

                -
                -
                mod(x, y)
                -
                max(x, y)
                -
                min(x, y)
                -
                eq(x, y)
                -
                gte(x, y)
                -
                gt(x, y)
                -
                lte(x, y)
                -
                lt(x, y)
                -
                st(var, expr)
                -

                Allow to store the value of the expression expr in an internal -variable. var specifies the number of the variable where to -store the value, and it is a value ranging from 0 to 9. The function -returns the value stored in the internal variable. -Note, Variables are currently not shared between expressions. -

                -
                -
                ld(var)
                -

                Allow to load the value of the internal variable with number -var, which was previously stored with st(var, expr). -The function returns the loaded value. -

                -
                -
                while(cond, expr)
                -

                Evaluate expression expr while the expression cond is -non-zero, and returns the value of the last expr evaluation, or -NAN if cond was always false. -

                -
                -
                ceil(expr)
                -

                Round the value of expression expr upwards to the nearest -integer. For example, "ceil(1.5)" is "2.0". -

                -
                -
                floor(expr)
                -

                Round the value of expression expr downwards to the nearest -integer. For example, "floor(-1.5)" is "-2.0". -

                -
                -
                trunc(expr)
                -

                Round the value of expression expr towards zero to the nearest -integer. For example, "trunc(-1.5)" is "-1.0". -

                -
                -
                sqrt(expr)
                -

                Compute the square root of expr. This is equivalent to -"(expr)^.5". -

                -
                -
                not(expr)
                -

                Return 1.0 if expr is zero, 0.0 otherwise. -

                -
                -
                pow(x, y)
                -

                Compute the power of x elevated y, it is equivalent to -"(x)^(y)". -

                -
                -
                random(x)
                -

                Return a pseudo random value between 0.0 and 1.0. x is the index of the -internal variable which will be used to save the seed/state. -

                -
                -
                hypot(x, y)
                -

                This function is similar to the C function with the same name; it returns -"sqrt(x*x + y*y)", the length of the hypotenuse of a -right triangle with sides of length x and y, or the distance of the -point (x, y) from the origin. -

                -
                -
                gcd(x, y)
                -

                Return the greatest common divisor of x and y. If both x and -y are 0 or either or both are less than zero then behavior is undefined. -

                -
                -
                if(x, y)
                -

                Evaluate x, and if the result is non-zero return the result of -the evaluation of y, return 0 otherwise. -

                -
                -
                ifnot(x, y)
                -

                Evaluate x, and if the result is zero return the result of the -evaluation of y, return 0 otherwise. -

                -
                - -

                The following constants are available: -

                -
                PI
                -

                area of the unit disc, approximately 3.14 -

                -
                E
                -

                exp(1) (Euler’s number), approximately 2.718 -

                -
                PHI
                -

                golden ratio (1+sqrt(5))/2, approximately 1.618 -

                -
                - -

                Assuming that an expression is considered "true" if it has a non-zero -value, note that: -

                -

                * works like AND -

                -

                + works like OR -

                -

                and the construct: -

                 
                if A then B else C
                -
                -

                is equivalent to -

                 
                if(A,B) + ifnot(A,C)
                -
                - -

                In your C code, you can extend the list of unary and binary functions, -and define recognized constants, so that they are available for your -expressions. -

                -

                The evaluator also recognizes the International System number -postfixes. If ’i’ is appended after the postfix, powers of 2 are used -instead of powers of 10. The ’B’ postfix multiplies the value for 8, -and can be appended after another postfix or used alone. This allows -using for example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. -

                -

                Follows the list of available International System postfixes, with -indication of the corresponding powers of 10 and of 2. -

                -
                y
                -

                -24 / -80 -

                -
                z
                -

                -21 / -70 -

                -
                a
                -

                -18 / -60 -

                -
                f
                -

                -15 / -50 -

                -
                p
                -

                -12 / -40 -

                -
                n
                -

                -9 / -30 -

                -
                u
                -

                -6 / -20 -

                -
                m
                -

                -3 / -10 -

                -
                c
                -

                -2 -

                -
                d
                -

                -1 -

                -
                h
                -

                2 -

                -
                k
                -

                3 / 10 -

                -
                K
                -

                3 / 10 -

                -
                M
                -

                6 / 20 -

                -
                G
                -

                9 / 30 -

                -
                T
                -

                12 / 40 -

                -
                P
                -

                15 / 40 -

                -
                E
                -

                18 / 50 -

                -
                Z
                -

                21 / 60 -

                -
                Y
                -

                24 / 70 -

                -
                - - -

                8. Decoders

                - -

                Decoders are configured elements in FFmpeg which allow the decoding of -multimedia streams. -

                -

                When you configure your FFmpeg build, all the supported native decoders -are enabled by default. Decoders requiring an external library must be enabled -manually via the corresponding --enable-lib option. You can list all -available decoders using the configure option --list-decoders. -

                -

                You can disable all the decoders with the configure option ---disable-decoders and selectively enable / disable single decoders -with the options --enable-decoder=DECODER / ---disable-decoder=DECODER. -

                -

                The option -codecs of the ff* tools will display the list of -enabled decoders. -

                - - -

                9. Video Decoders

                - -

                A description of some of the currently available video decoders -follows. -

                - -

                9.1 rawvideo

                - -

                Raw video decoder. -

                -

                This decoder decodes rawvideo streams. -

                - -

                9.1.1 Options

                - -
                -
                top top_field_first
                -

                Specify the assumed field type of the input video. -

                -
                -1
                -

                the video is assumed to be progressive (default) -

                -
                0
                -

                bottom-field-first is assumed -

                -
                1
                -

                top-field-first is assumed -

                -
                - -
                -
                - - - -

                10. Audio Decoders

                - - -

                10.1 ffwavesynth

                - -

                Internal wave synthetizer. -

                -

                This decoder generates wave patterns according to predefined sequences. Its -use is purely internal and the format of the data it accepts is not publicly -documented. -

                - -

                11. Encoders

                - -

                Encoders are configured elements in FFmpeg which allow the encoding of -multimedia streams. -

                -

                When you configure your FFmpeg build, all the supported native encoders -are enabled by default. Encoders requiring an external library must be enabled -manually via the corresponding --enable-lib option. You can list all -available encoders using the configure option --list-encoders. -

                -

                You can disable all the encoders with the configure option ---disable-encoders and selectively enable / disable single encoders -with the options --enable-encoder=ENCODER / ---disable-encoder=ENCODER. -

                -

                The option -codecs of the ff* tools will display the list of -enabled encoders. -

                - - -

                12. Audio Encoders

                - -

                A description of some of the currently available audio encoders -follows. -

                - -

                12.1 ac3 and ac3_fixed

                - -

                AC-3 audio encoders. -

                -

                These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as -the undocumented RealAudio 3 (a.k.a. dnet). -

                -

                The ac3 encoder uses floating-point math, while the ac3_fixed -encoder only uses fixed-point integer math. This does not mean that one is -always faster, just that one or the other may be better suited to a -particular system. The floating-point encoder will generally produce better -quality audio for a given bitrate. The ac3_fixed encoder is not the -default codec for any of the output formats, so it must be specified explicitly -using the option -acodec ac3_fixed in order to use it. -

                - -

                12.1.1 AC-3 Metadata

                - -

                The AC-3 metadata options are used to set parameters that describe the audio, -but in most cases do not affect the audio encoding itself. Some of the options -do directly affect or influence the decoding and playback of the resulting -bitstream, while others are just for informational purposes. A few of the -options will add bits to the output stream that could otherwise be used for -audio data, and will thus affect the quality of the output. Those will be -indicated accordingly with a note in the option list below. -

                -

                These parameters are described in detail in several publicly-available -documents. -

                - - -

                12.1.1.1 Metadata Control Options

                - -
                -
                -per_frame_metadata boolean
                -

                Allow Per-Frame Metadata. Specifies if the encoder should check for changing -metadata for each frame. -

                -
                0
                -

                The metadata values set at initialization will be used for every frame in the -stream. (default) -

                -
                1
                -

                Metadata values can be changed before encoding each frame. -

                -
                - -
                -
                - - -

                12.1.1.2 Downmix Levels

                - -
                -
                -center_mixlev level
                -

                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: -

                -
                0.707
                -

                Apply -3dB gain -

                -
                0.595
                -

                Apply -4.5dB gain (default) -

                -
                0.500
                -

                Apply -6dB gain -

                -
                - -
                -
                -surround_mixlev level
                -

                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: -

                -
                0.707
                -

                Apply -3dB gain -

                -
                0.500
                -

                Apply -6dB gain (default) -

                -
                0.000
                -

                Silence Surround Channel(s) -

                -
                - -
                -
                - - -

                12.1.1.3 Audio Production Information

                -

                Audio Production Information is optional information describing the mixing -environment. Either none or both of the fields are written to the bitstream. -

                -
                -
                -mixing_level number
                -

                Mixing Level. Specifies peak sound pressure level (SPL) in the production -environment when the mix was mastered. Valid values are 80 to 111, or -1 for -unknown or not indicated. The default value is -1, but that value cannot be -used if the Audio Production Information is written to the bitstream. Therefore, -if the room_type option is not the default value, the mixing_level -option must not be -1. -

                -
                -
                -room_type type
                -

                Room Type. Describes the equalization used during the final mixing session at -the studio or on the dubbing stage. A large room is a dubbing stage with the -industry standard X-curve equalization; a small room has flat equalization. -This field will not be written to the bitstream if both the mixing_level -option and the room_type option have the default values. -

                -
                0
                -
                notindicated
                -

                Not Indicated (default) -

                -
                1
                -
                large
                -

                Large Room -

                -
                2
                -
                small
                -

                Small Room -

                -
                - -
                -
                - - -

                12.1.1.4 Other Metadata Options

                - -
                -
                -copyright boolean
                -

                Copyright Indicator. Specifies whether a copyright exists for this audio. -

                -
                0
                -
                off
                -

                No Copyright Exists (default) -

                -
                1
                -
                on
                -

                Copyright Exists -

                -
                - -
                -
                -dialnorm value
                -

                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. -

                -
                -
                -dsur_mode mode
                -

                Dolby Surround Mode. Specifies whether the stereo signal uses Dolby Surround -(Pro Logic). This field will only be written to the bitstream if the audio -stream is stereo. Using this option does NOT mean the encoder will actually -apply Dolby Surround processing. -

                -
                0
                -
                notindicated
                -

                Not Indicated (default) -

                -
                1
                -
                off
                -

                Not Dolby Surround Encoded -

                -
                2
                -
                on
                -

                Dolby Surround Encoded -

                -
                - -
                -
                -original boolean
                -

                Original Bit Stream Indicator. Specifies whether this audio is from the -original source and not a copy. -

                -
                0
                -
                off
                -

                Not Original Source -

                -
                1
                -
                on
                -

                Original Source (default) -

                -
                - -
                -
                - - -

                12.1.2 Extended Bitstream Information

                -

                The extended bitstream options are part of the Alternate Bit Stream Syntax as -specified in Annex D of the A/52:2010 standard. It is grouped into 2 parts. -If any one parameter in a group is specified, all values in that group will be -written to the bitstream. Default values are used for those that are written -but have not been specified. If the mixing levels are written, the decoder -will use these values instead of the ones specified in the center_mixlev -and surround_mixlev options if it supports the Alternate Bit Stream -Syntax. -

                - -

                12.1.2.1 Extended Bitstream Information - Part 1

                - -
                -
                -dmix_mode mode
                -

                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. -

                -
                0
                -
                notindicated
                -

                Not Indicated (default) -

                -
                1
                -
                ltrt
                -

                Lt/Rt Downmix Preferred -

                -
                2
                -
                loro
                -

                Lo/Ro Downmix Preferred -

                -
                - -
                -
                -ltrt_cmixlev level
                -

                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. -

                -
                1.414
                -

                Apply +3dB gain -

                -
                1.189
                -

                Apply +1.5dB gain -

                -
                1.000
                -

                Apply 0dB gain -

                -
                0.841
                -

                Apply -1.5dB gain -

                -
                0.707
                -

                Apply -3.0dB gain -

                -
                0.595
                -

                Apply -4.5dB gain (default) -

                -
                0.500
                -

                Apply -6.0dB gain -

                -
                0.000
                -

                Silence Center Channel -

                -
                - -
                -
                -ltrt_surmixlev level
                -

                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. -

                -
                0.841
                -

                Apply -1.5dB gain -

                -
                0.707
                -

                Apply -3.0dB gain -

                -
                0.595
                -

                Apply -4.5dB gain -

                -
                0.500
                -

                Apply -6.0dB gain (default) -

                -
                0.000
                -

                Silence Surround Channel(s) -

                -
                - -
                -
                -loro_cmixlev level
                -

                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. -

                -
                1.414
                -

                Apply +3dB gain -

                -
                1.189
                -

                Apply +1.5dB gain -

                -
                1.000
                -

                Apply 0dB gain -

                -
                0.841
                -

                Apply -1.5dB gain -

                -
                0.707
                -

                Apply -3.0dB gain -

                -
                0.595
                -

                Apply -4.5dB gain (default) -

                -
                0.500
                -

                Apply -6.0dB gain -

                -
                0.000
                -

                Silence Center Channel -

                -
                - -
                -
                -loro_surmixlev level
                -

                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. -

                -
                0.841
                -

                Apply -1.5dB gain -

                -
                0.707
                -

                Apply -3.0dB gain -

                -
                0.595
                -

                Apply -4.5dB gain -

                -
                0.500
                -

                Apply -6.0dB gain (default) -

                -
                0.000
                -

                Silence Surround Channel(s) -

                -
                - -
                -
                - - -

                12.1.2.2 Extended Bitstream Information - Part 2

                - -
                -
                -dsurex_mode mode
                -

                Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX -(7.1 matrixed to 5.1). Using this option does NOT mean the encoder will actually -apply Dolby Surround EX processing. -

                -
                0
                -
                notindicated
                -

                Not Indicated (default) -

                -
                1
                -
                on
                -

                Dolby Surround EX Off -

                -
                2
                -
                off
                -

                Dolby Surround EX On -

                -
                - -
                -
                -dheadphone_mode mode
                -

                Dolby Headphone Mode. Indicates whether the stream uses Dolby Headphone -encoding (multi-channel matrixed to 2.0 for use with headphones). Using this -option does NOT mean the encoder will actually apply Dolby Headphone -processing. -

                -
                0
                -
                notindicated
                -

                Not Indicated (default) -

                -
                1
                -
                on
                -

                Dolby Headphone Off -

                -
                2
                -
                off
                -

                Dolby Headphone On -

                -
                - -
                -
                -ad_conv_type type
                -

                A/D Converter Type. Indicates whether the audio has passed through HDCD A/D -conversion. -

                -
                0
                -
                standard
                -

                Standard A/D Converter (default) -

                -
                1
                -
                hdcd
                -

                HDCD A/D Converter -

                -
                - -
                -
                - - -

                12.1.3 Other AC-3 Encoding Options

                - -
                -
                -stereo_rematrixing boolean
                -

                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. -

                -
                -
                - - -

                12.1.4 Floating-Point-Only AC-3 Encoding Options

                - -

                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. -

                -
                -
                -channel_coupling boolean
                -

                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. -

                -
                -1
                -
                auto
                -

                Selected by Encoder (default) -

                -
                0
                -
                off
                -

                Disable Channel Coupling -

                -
                1
                -
                on
                -

                Enable Channel Coupling -

                -
                - -
                -
                -cpl_start_band number
                -

                Coupling Start Band. Sets the channel coupling start band, from 1 to 15. If a -value higher than the bandwidth is used, it will be reduced to 1 less than the -coupling end band. If auto is used, the start band will be determined by -the encoder based on the bit rate, sample rate, and channel layout. This option -has no effect if channel coupling is disabled. -

                -
                -1
                -
                auto
                -

                Selected by Encoder (default) -

                -
                - -
                -
                - - - -

                13. Video Encoders

                - -

                A description of some of the currently available video encoders -follows. -

                - -

                13.1 libvpx

                - -

                VP8 format supported through libvpx. -

                -

                Requires the presence of the libvpx headers and library during configuration. -You need to explicitly configure the build with --enable-libvpx. -

                - -

                13.1.1 Options

                - -

                Mapping from FFmpeg to libvpx options with conversion notes in parentheses. -

                -
                -
                threads
                -

                g_threads -

                -
                -
                profile
                -

                g_profile -

                -
                -
                vb
                -

                rc_target_bitrate -

                -
                -
                g
                -

                kf_max_dist -

                -
                -
                keyint_min
                -

                kf_min_dist -

                -
                -
                qmin
                -

                rc_min_quantizer -

                -
                -
                qmax
                -

                rc_max_quantizer -

                -
                -
                bufsize, vb
                -

                rc_buf_sz -(bufsize * 1000 / vb) -

                -

                rc_buf_optimal_sz -(bufsize * 1000 / vb * 5 / 6) -

                -
                -
                rc_init_occupancy, vb
                -

                rc_buf_initial_sz -(rc_init_occupancy * 1000 / vb) -

                -
                -
                rc_buffer_aggressivity
                -

                rc_undershoot_pct -

                -
                -
                skip_threshold
                -

                rc_dropframe_thresh -

                -
                -
                qcomp
                -

                rc_2pass_vbr_bias_pct -

                -
                -
                maxrate, vb
                -

                rc_2pass_vbr_maxsection_pct -(maxrate * 100 / vb) -

                -
                -
                minrate, vb
                -

                rc_2pass_vbr_minsection_pct -(minrate * 100 / vb) -

                -
                -
                minrate, maxrate, vb
                -

                VPX_CBR -(minrate == maxrate == vb) -

                -
                -
                crf
                -

                VPX_CQ, VP8E_SET_CQ_LEVEL -

                -
                -
                quality
                -
                -
                best
                -

                VPX_DL_BEST_QUALITY -

                -
                good
                -

                VPX_DL_GOOD_QUALITY -

                -
                realtime
                -

                VPX_DL_REALTIME -

                -
                - -
                -
                speed
                -

                VP8E_SET_CPUUSED -

                -
                -
                nr
                -

                VP8E_SET_NOISE_SENSITIVITY -

                -
                -
                mb_threshold
                -

                VP8E_SET_STATIC_THRESHOLD -

                -
                -
                slices
                -

                VP8E_SET_TOKEN_PARTITIONS -

                -
                -
                Alternate reference frame related
                -
                -
                vp8flags altref
                -

                VP8E_SET_ENABLEAUTOALTREF -

                -
                arnr_max_frames
                -

                VP8E_SET_ARNR_MAXFRAMES -

                -
                arnr_type
                -

                VP8E_SET_ARNR_TYPE -

                -
                arnr_strength
                -

                VP8E_SET_ARNR_STRENGTH -

                -
                rc_lookahead
                -

                g_lag_in_frames -

                -
                - -
                -
                vp8flags error_resilient
                -

                g_error_resilient -

                -
                -
                - -

                For more information about libvpx see: -http://www.webmproject.org/ -

                - -

                13.2 libx264

                - -

                H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 format supported through -libx264. -

                -

                Requires the presence of the libx264 headers and library during -configuration. You need to explicitly configure the build with ---enable-libx264. -

                - -

                13.2.1 Options

                - -
                -
                preset preset_name
                -

                Set the encoding preset. -

                -
                -
                tune tune_name
                -

                Tune the encoding params. -

                -
                -
                fastfirstpass bool
                -

                Use fast settings when encoding first pass, default value is 1. -

                -
                -
                profile profile_name
                -

                Set profile restrictions. -

                -
                -
                level level
                -

                Specify level (as defined by Annex A). -Deprecated in favor of x264opts. -

                -
                -
                passlogfile filename
                -

                Specify filename for 2 pass stats. -Deprecated in favor of x264opts (see stats libx264 option). -

                -
                -
                wpredp wpred_type
                -

                Specify Weighted prediction for P-frames. -Deprecated in favor of x264opts (see weightp libx264 option). -

                -
                -
                x264opts options
                -

                Allow to set any x264 option, see x264 –fullhelp for a list. -

                -

                options is a list of key=value couples separated by -":". -

                -
                - -

                For example to specify libx264 encoding options with ffmpeg: -

                 
                ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
                -
                - -

                For more information about libx264 and the supported options see: -http://www.videolan.org/developers/x264.html -

                - -

                14. Demuxers

                - -

                Demuxers are configured elements in FFmpeg which allow to read the -multimedia streams from a particular type of file. -

                -

                When you configure your FFmpeg build, all the supported demuxers -are enabled by default. You can list all available ones using the -configure option "–list-demuxers". -

                -

                You can disable all the demuxers using the configure option -"–disable-demuxers", and selectively enable a single demuxer with -the option "–enable-demuxer=DEMUXER", or disable it -with the option "–disable-demuxer=DEMUXER". -

                -

                The option "-formats" of the ff* tools will display the list of -enabled demuxers. -

                -

                The description of some of the currently available demuxers follows. -

                - -

                14.1 image2

                - -

                Image file demuxer. -

                -

                This demuxer reads from a list of image files specified by a pattern. -

                -

                The pattern may contain the string "%d" or "%0Nd", which -specifies the position of the characters representing a sequential -number in each filename matched by the pattern. If the form -"%d0Nd" is used, the string representing the number in each -filename is 0-padded and N is the total number of 0-padded -digits representing the number. The literal character ’%’ can be -specified in the pattern with the string "%%". -

                -

                If the pattern contains "%d" or "%0Nd", the first filename of -the file list specified by the pattern must contain a number -inclusively contained between 0 and 4, all the following numbers must -be sequential. This limitation may be hopefully fixed. -

                -

                The pattern may contain a suffix which is used to automatically -determine the format of the images contained in the files. -

                -

                For example the pattern "img-%03d.bmp" will match a sequence of -filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., -‘img-010.bmp’, etc.; the pattern "i%%m%%g-%d.jpg" will match a -sequence of filenames of the form ‘i%m%g-1.jpg’, -‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, etc. -

                -

                The size, the pixel format, and the format of each image must be the -same for all the files in the sequence. -

                -

                The following example shows how to use ffmpeg for creating a -video from the images in the file sequence ‘img-001.jpeg’, -‘img-002.jpeg’, ..., assuming an input frame rate of 10 frames per -second: -

                 
                ffmpeg -i 'img-%03d.jpeg' -r 10 out.mkv
                -
                - -

                Note that the pattern must not necessarily contain "%d" or -"%0Nd", for example to convert a single image file -‘img.jpeg’ you can employ the command: -

                 
                ffmpeg -i img.jpeg img.png
                -
                - - -

                14.2 applehttp

                - -

                Apple HTTP Live Streaming demuxer. -

                -

                This demuxer presents all AVStreams from all variant streams. -The id field is set to the bitrate variant index number. By setting -the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), -the caller can decide which variant streams to actually receive. -The total bitrate of the variant that the stream belongs to is -available in a metadata key named "variant_bitrate". -

                - -

                14.3 sbg

                - -

                SBaGen script demuxer. -

                -

                This demuxer reads the script language used by SBaGen -http://uazu.net/sbagen/ to generate binaural beats sessions. A SBG -script looks like that: -

                 
                -SE
                -a: 300-2.5/3 440+4.5/0
                -b: 300-2.5/0 440+4.5/3
                -off: -
                -NOW      == a
                -+0:07:00 == b
                -+0:14:00 == a
                -+0:21:00 == b
                -+0:30:00    off
                -
                - -

                A SBG script can mix absolute and relative timestamps. If the script uses -either only absolute timestamps (including the script start time) or only -relative ones, then its layout is fixed, and the conversion is -straightforward. On the other hand, if the script mixes both kind of -timestamps, then the NOW reference for relative timestamps will be -taken from the current time of day at the time the script is read, and the -script layout will be frozen according to that reference. That means that if -the script is directly played, the actual times will match the absolute -timestamps up to the sound controller’s clock accuracy, but if the user -somehow pauses the playback or seeks, all times will be shifted accordingly. -

                - -

                15. Muxers

                - -

                Muxers are configured elements in FFmpeg which allow writing -multimedia streams to a particular type of file. -

                -

                When you configure your FFmpeg build, all the supported muxers -are enabled by default. You can list all available muxers using the -configure option --list-muxers. -

                -

                You can disable all the muxers with the configure option ---disable-muxers and selectively enable / disable single muxers -with the options --enable-muxer=MUXER / ---disable-muxer=MUXER. -

                -

                The option -formats of the ff* tools will display the list of -enabled muxers. -

                -

                A description of some of the currently available muxers follows. -

                -

                -

                -

                15.1 crc

                - -

                CRC (Cyclic Redundancy Check) testing format. -

                -

                This muxer computes and prints the Adler-32 CRC of all the input audio -and video frames. By default audio frames are converted to signed -16-bit raw audio and video frames to raw video before computing the -CRC. -

                -

                The output of the muxer consists of a single line of the form: -CRC=0xCRC, where CRC is a hexadecimal number 0-padded to -8 digits containing the CRC for all the decoded input frames. -

                -

                For example to compute the CRC of the input, and store it in the file -‘out.crc’: -

                 
                ffmpeg -i INPUT -f crc out.crc
                -
                - -

                You can print the CRC to stdout with the command: -

                 
                ffmpeg -i INPUT -f crc -
                -
                - -

                You can select the output format of each frame with ffmpeg by -specifying the audio and video codec and format. For example to -compute the CRC of the input audio converted to PCM unsigned 8-bit -and the input video converted to MPEG-2 video, use the command: -

                 
                ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
                -
                - -

                See also the framecrc muxer. -

                -

                -

                -

                15.2 framecrc

                - -

                Per-frame CRC (Cyclic Redundancy Check) testing format. -

                -

                This muxer computes and prints the Adler-32 CRC for each decoded audio -and video frame. By default audio frames are converted to signed -16-bit raw audio and video frames to raw video before computing the -CRC. -

                -

                The output of the muxer consists of a line for each audio and video -frame of the form: stream_index, frame_dts, -frame_size, 0xCRC, where CRC is a hexadecimal -number 0-padded to 8 digits containing the CRC of the decoded frame. -

                -

                For example to compute the CRC of each decoded frame in the input, and -store it in the file ‘out.crc’: -

                 
                ffmpeg -i INPUT -f framecrc out.crc
                -
                - -

                You can print the CRC of each decoded frame to stdout with the command: -

                 
                ffmpeg -i INPUT -f framecrc -
                -
                - -

                You can select the output format of each frame with ffmpeg by -specifying the audio and video codec and format. For example, to -compute the CRC of each decoded input audio frame converted to PCM -unsigned 8-bit and of each decoded input video frame converted to -MPEG-2 video, use the command: -

                 
                ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
                -
                - -

                See also the crc muxer. -

                -

                -

                -

                15.3 image2

                - -

                Image file muxer. -

                -

                The image file muxer writes video frames to image files. -

                -

                The output filenames are specified by a pattern, which can be used to -produce sequentially numbered series of files. -The pattern may contain the string "%d" or "%0Nd", this string -specifies the position of the characters representing a numbering in -the filenames. If the form "%0Nd" is used, the string -representing the number in each filename is 0-padded to N -digits. The literal character ’%’ can be specified in the pattern with -the string "%%". -

                -

                If the pattern contains "%d" or "%0Nd", the first filename of -the file list specified will contain the number 1, all the following -numbers will be sequential. -

                -

                The pattern may contain a suffix which is used to automatically -determine the format of the image files to write. -

                -

                For example the pattern "img-%03d.bmp" will specify a sequence of -filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., -‘img-010.bmp’, etc. -The pattern "img%%-%d.jpg" will specify a sequence of filenames of the -form ‘img%-1.jpg’, ‘img%-2.jpg’, ..., ‘img%-10.jpg’, -etc. -

                -

                The following example shows how to use ffmpeg for creating a -sequence of files ‘img-001.jpeg’, ‘img-002.jpeg’, ..., -taking one image every second from the input video: -

                 
                ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg'
                -
                - -

                Note that with ffmpeg, if the format is not specified with the --f option and the output filename specifies an image file -format, the image2 muxer is automatically selected, so the previous -command can be written as: -

                 
                ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg'
                -
                - -

                Note also that the pattern must not necessarily contain "%d" or -"%0Nd", for example to create a single image file -‘img.jpeg’ from the input video you can employ the command: -

                 
                ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
                -
                - -

                The image muxer supports the .Y.U.V image file format. This format is -special in that that each image frame consists of three files, for -each of the YUV420P components. To read or write this image file format, -specify the name of the ’.Y’ file. The muxer will automatically open the -’.U’ and ’.V’ files as required. -

                - -

                15.4 mov

                - -

                MOV / MP4 muxer -

                -

                The muxer options are: -

                -
                -
                -moov_size bytes
                -

                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. -

                -
                - - -

                15.5 mpegts

                - -

                MPEG transport stream muxer. -

                -

                This muxer implements ISO 13818-1 and part of ETSI EN 300 468. -

                -

                The muxer options are: -

                -
                -
                -mpegts_original_network_id number
                -

                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. -

                -
                -mpegts_transport_stream_id number
                -

                Set the transport_stream_id (default 0x0001). This identifies a -transponder in DVB. -

                -
                -mpegts_service_id number
                -

                Set the service_id (default 0x0001) also known as program in DVB. -

                -
                -mpegts_pmt_start_pid number
                -

                Set the first PID for PMT (default 0x1000, max 0x1f00). -

                -
                -mpegts_start_pid number
                -

                Set the first PID for data packets (default 0x0100, max 0x0f00). -

                -
                - -

                The recognized metadata settings in mpegts muxer are service_provider -and service_name. If they are not set the default for -service_provider is "FFmpeg" and the default for -service_name is "Service01". -

                -
                 
                ffmpeg -i file.mpg -c copy \
                -     -mpegts_original_network_id 0x1122 \
                -     -mpegts_transport_stream_id 0x3344 \
                -     -mpegts_service_id 0x5566 \
                -     -mpegts_pmt_start_pid 0x1500 \
                -     -mpegts_start_pid 0x150 \
                -     -metadata service_provider="Some provider" \
                -     -metadata service_name="Some Channel" \
                -     -y out.ts
                -
                - - -

                15.6 null

                - -

                Null muxer. -

                -

                This muxer does not generate any output file, it is mainly useful for -testing or benchmarking purposes. -

                -

                For example to benchmark decoding with ffmpeg you can use the -command: -

                 
                ffmpeg -benchmark -i INPUT -f null out.null
                -
                - -

                Note that the above command does not read or write the ‘out.null’ -file, but specifying the output file is required by the ffmpeg -syntax. -

                -

                Alternatively you can write the command as: -

                 
                ffmpeg -benchmark -i INPUT -f null -
                -
                - - -

                15.7 matroska

                - -

                Matroska container muxer. -

                -

                This muxer implements the matroska and webm container specs. -

                -

                The recognized metadata settings in this muxer are: -

                -
                -
                title=title name
                -

                Name provided to a single track -

                -
                - -
                -
                language=language name
                -

                Specifies the language of the track in the Matroska languages form -

                -
                - -
                -
                stereo_mode=mode
                -

                Stereo 3D video layout of two views in a single video track -

                -
                mono
                -

                video is not stereo -

                -
                left_right
                -

                Both views are arranged side by side, Left-eye view is on the left -

                -
                bottom_top
                -

                Both views are arranged in top-bottom orientation, Left-eye view is at bottom -

                -
                top_bottom
                -

                Both views are arranged in top-bottom orientation, Left-eye view is on top -

                -
                checkerboard_rl
                -

                Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first -

                -
                checkerboard_lr
                -

                Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first -

                -
                row_interleaved_rl
                -

                Each view is constituted by a row based interleaving, Right-eye view is first row -

                -
                row_interleaved_lr
                -

                Each view is constituted by a row based interleaving, Left-eye view is first row -

                -
                col_interleaved_rl
                -

                Both views are arranged in a column based interleaving manner, Right-eye view is first column -

                -
                col_interleaved_lr
                -

                Both views are arranged in a column based interleaving manner, Left-eye view is first column -

                -
                anaglyph_cyan_red
                -

                All frames are in anaglyph format viewable through red-cyan filters -

                -
                right_left
                -

                Both views are arranged side by side, Right-eye view is on the left -

                -
                anaglyph_green_magenta
                -

                All frames are in anaglyph format viewable through green-magenta filters -

                -
                block_lr
                -

                Both eyes laced in one Block, Left-eye view is first -

                -
                block_rl
                -

                Both eyes laced in one Block, Right-eye view is first -

                -
                -
                -
                - -

                For example a 3D WebM clip can be created using the following command line: -

                 
                ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
                -
                - - -

                15.8 segment

                - -

                Basic stream segmenter. -

                -

                The segmenter muxer outputs streams to a number of separate files of nearly -fixed duration. Output filename pattern can be set in a fashion similar to -image2. -

                -

                Every segment starts with a video keyframe, if a video stream is present. -The segment muxer works best with a single constant frame rate video. -

                -

                Optionally it can generate a flat list of the created segments, one segment -per line. -

                -
                -
                segment_format format
                -

                Override the inner container format, by default it is guessed by the filename -extension. -

                -
                segment_time t
                -

                Set segment duration to t seconds. -

                -
                segment_list name
                -

                Generate also a listfile named name. -

                -
                segment_list_size size
                -

                Overwrite the listfile once it reaches size entries. -

                -
                - -
                 
                ffmpeg -i in.mkv -c copy -map 0 -f segment -list out.list out%03d.nut
                -
                - - - -

                16. Input Devices

                - -

                Input devices are configured elements in FFmpeg which allow to access -the data coming from a multimedia device attached to your system. -

                -

                When you configure your FFmpeg build, all the supported input devices -are enabled by default. You can list all available ones using the -configure option "–list-indevs". -

                -

                You can disable all the input devices using the configure option -"–disable-indevs", and selectively enable an input device using the -option "–enable-indev=INDEV", or you can disable a particular -input device using the option "–disable-indev=INDEV". -

                -

                The option "-formats" of the ff* tools will display the list of -supported input devices (amongst the demuxers). -

                -

                A description of the currently available input devices follows. -

                - -

                16.1 alsa

                - -

                ALSA (Advanced Linux Sound Architecture) input device. -

                -

                To enable this input device during configuration you need libasound -installed on your system. -

                -

                This device allows capturing from an ALSA device. The name of the -device to capture has to be an ALSA card identifier. -

                -

                An ALSA identifier has the syntax: -

                 
                hw:CARD[,DEV[,SUBDEV]]
                -
                - -

                where the DEV and SUBDEV components are optional. -

                -

                The three arguments (in order: CARD,DEV,SUBDEV) -specify card number or identifier, device number and subdevice number -(-1 means any). -

                -

                To see the list of cards currently recognized by your system check the -files ‘/proc/asound/cards’ and ‘/proc/asound/devices’. -

                -

                For example to capture with ffmpeg from an ALSA device with -card id 0, you may run the command: -

                 
                ffmpeg -f alsa -i hw:0 alsaout.wav
                -
                - -

                For more information see: -http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html -

                - -

                16.2 bktr

                - -

                BSD video input device. -

                - -

                16.3 dshow

                - -

                Windows DirectShow input device. -

                -

                DirectShow support is enabled when FFmpeg is built with mingw-w64. -Currently only audio and video devices are supported. -

                -

                Multiple devices may be opened as separate inputs, but they may also be -opened on the same input, which should improve synchronism between them. -

                -

                The input name should be in the format: -

                -
                 
                TYPE=NAME[:TYPE=NAME]
                -
                - -

                where TYPE can be either audio or video, -and NAME is the device’s name. -

                - -

                16.3.1 Options

                - -

                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. -

                -
                -
                video_size
                -

                Set the video size in the captured video. -

                -
                -
                framerate
                -

                Set the framerate in the captured video. -

                -
                -
                sample_rate
                -

                Set the sample rate (in Hz) of the captured audio. -

                -
                -
                sample_size
                -

                Set the sample size (in bits) of the captured audio. -

                -
                -
                channels
                -

                Set the number of channels in the captured audio. -

                -
                -
                list_devices
                -

                If set to ‘true’, print a list of devices and exit. -

                -
                -
                list_options
                -

                If set to ‘true’, print a list of selected device’s options -and exit. -

                -
                -
                video_device_number
                -

                Set video device number for devices with same name (starts at 0, -defaults to 0). -

                -
                -
                audio_device_number
                -

                Set audio device number for devices with same name (starts at 0, -defaults to 0). -

                -
                -
                - - -

                16.3.2 Examples

                - -
                  -
                • -Print the list of DirectShow supported devices and exit: - + + + + - + + @@ -245,12 +255,14 @@ library: + + @@ -263,6 +275,7 @@ library: game and different game cutscenes repacked for use with ScummVM. + @@ -273,27 +286,32 @@ library: - + - + + + + + + @@ -312,12 +330,14 @@ library: + + @@ -327,6 +347,7 @@ library: + @@ -344,8 +365,9 @@ library: + - + @@ -370,10 +392,12 @@ library: + + @@ -381,13 +405,15 @@ library: + + - + @@ -395,8 +421,9 @@ library: + - + @@ -420,9 +447,11 @@ following image formats are supported:
                   
                  $ ffmpeg -list_devices true -f dshow -i dummy
                  +
                • +To force CBR video output: +
                   
                  ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
                   
                • -Open video device Camera: -
                   
                  $ ffmpeg -f dshow -i video="Camera"
                  -
                  - -
                • -Open second video device with name Camera: -
                   
                  $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
                  -
                  - -
                • -Open video device Camera and audio device Microphone: -
                   
                  $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
                  -
                  - -
                • -Print the list of supported options in selected device and exit: -
                   
                  $ ffmpeg -list_options true -f dshow -i video="Camera"
                  +The four options lmin, lmax, mblmin and mblmax use ’lambda’ units,
                  +but you may use the QP2LAMBDA constant to easily convert from ’q’ units:
                  +
                   
                  ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
                   
                  - -

                  16.4 dv1394

                  -

                  Linux DV 1394 input device. -

                  - -

                  16.5 fbdev

                  - -

                  Linux framebuffer input device. -

                  -

                  The Linux framebuffer is a graphic hardware-independent abstraction -layer to show graphics on a computer monitor, typically on the -console. It is accessed through a file device node, usually -‘/dev/fb0’. -

                  -

                  For more detailed information read the file -Documentation/fb/framebuffer.txt included in the Linux source tree. -

                  -

                  To record from the framebuffer device ‘/dev/fb0’ with -ffmpeg: -

                   
                  ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
                  -
                  - -

                  You can take a single screenshot image with the command: -

                   
                  ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
                  -
                  - -

                  See also http://linux-fbdev.sourceforge.net/, and fbset(1). -

                  - -

                  16.6 jack

                  - -

                  JACK input device. -

                  -

                  To enable this input device during configuration you need libjack -installed on your system. -

                  -

                  A JACK input device creates one or more JACK writable clients, one for -each audio channel, with name client_name:input_N, where -client_name is the name provided by the application, and N -is a number which identifies the channel. -Each writable client will send the acquired data to the FFmpeg input -device. -

                  -

                  Once you have created one or more JACK readable clients, you need to -connect them to one or more JACK writable clients. -

                  -

                  To connect or disconnect JACK clients you can use the jack_connect -and jack_disconnect programs, or do it through a graphical interface, -for example with qjackctl. -

                  -

                  To list the JACK clients and their properties you can invoke the command -jack_lsp. -

                  -

                  Follows an example which shows how to capture a JACK readable client -with ffmpeg. -

                   
                  # Create a JACK writable client with name "ffmpeg".
                  -$ ffmpeg -f jack -i ffmpeg -y out.wav
                  -
                  -# Start the sample jack_metro readable client.
                  -$ jack_metro -b 120 -d 0.2 -f 4000
                  -
                  -# List the current JACK clients.
                  -$ jack_lsp -c
                  -system:capture_1
                  -system:capture_2
                  -system:playback_1
                  -system:playback_2
                  -ffmpeg:input_1
                  -metro:120_bpm
                  -
                  -# Connect metro to the ffmpeg writable client.
                  -$ jack_connect metro:120_bpm ffmpeg:input_1
                  -
                  - -

                  For more information read: -http://jackaudio.org/ -

                  - -

                  16.7 lavfi

                  - -

                  Libavfilter input virtual device. -

                  -

                  This input device reads data from the open output pads of a libavfilter -filtergraph. -

                  -

                  For each filtergraph open output, the input device will create a -corresponding stream which is mapped to the generated output. Currently -only video data is supported. The filtergraph is specified through the -option ‘graph’. -

                  - -

                  16.7.1 Options

                  - -
                  -
                  graph
                  -

                  Specify the filtergraph to use as input. Each video open output must be -labelled by a unique string of the form "outN", where N is a -number starting from 0 corresponding to the mapped input stream -generated by the device. -The first unlabelled output is automatically assigned to the "out0" -label, but all the others need to be specified explicitly. -

                  -

                  If not specified defaults to the filename specified for the input -device. -

                  -
                  - - -

                  16.7.2 Examples

                  - -
                    -
                  • -Create a color video stream and play it back with ffplay: -
                     
                    ffplay -f lavfi -graph "color=pink [out0]" dummy
                    -
                    - -
                  • -As the previous example, but use filename for specifying the graph -description, and omit the "out0" label: -
                     
                    ffplay -f lavfi color=pink
                    -
                    - -
                  • -Create three different video test filtered sources and play them: -
                     
                    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
                    -
                    - -
                  • -Read an audio stream from a file using the amovie source and play it -back with ffplay: -
                     
                    ffplay -f lavfi "amovie=test.wav"
                    -
                    - -
                  • -Read an audio stream and a video stream and play it back with -ffplay: -
                     
                    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
                    -
                    - -
                  - - -

                  16.8 libdc1394

                  - -

                  IIDC1394 input device, based on libdc1394 and libraw1394. -

                  - -

                  16.9 openal

                  - -

                  The OpenAL input device provides audio capture on all systems with a -working OpenAL 1.1 implementation. -

                  -

                  To enable this input device during configuration, you need OpenAL -headers and libraries installed on your system, and need to configure -FFmpeg with --enable-openal. -

                  -

                  OpenAL headers and libraries should be provided as part of your OpenAL -implementation, or as an additional download (an SDK). Depending on your -installation you may need to specify additional flags via the ---extra-cflags and --extra-ldflags for allowing the build -system to locate the OpenAL headers and libraries. -

                  -

                  An incomplete list of OpenAL implementations follows: -

                  -
                  -
                  Creative
                  -

                  The official Windows implementation, providing hardware acceleration -with supported devices and software fallback. -See http://openal.org/. -

                  -
                  OpenAL Soft
                  -

                  Portable, open source (LGPL) software implementation. Includes -backends for the most common sound APIs on the Windows, Linux, -Solaris, and BSD operating systems. -See http://kcat.strangesoft.net/openal.html. -

                  -
                  Apple
                  -

                  OpenAL is part of Core Audio, the official Mac OS X Audio interface. -See http://developer.apple.com/technologies/mac/audio-and-video.html -

                  -
                  - -

                  This device allows to capture from an audio input device handled -through OpenAL. -

                  -

                  You need to specify the name of the device to capture in the provided -filename. If the empty string is provided, the device will -automatically select the default device. You can get the list of the -supported devices by using the option list_devices. -

                  - -

                  16.9.1 Options

                  - -
                  -
                  channels
                  -

                  Set the number of channels in the captured audio. Only the values -‘1’ (monaural) and ‘2’ (stereo) are currently supported. -Defaults to ‘2’. -

                  -
                  -
                  sample_size
                  -

                  Set the sample size (in bits) of the captured audio. Only the values -‘8’ and ‘16’ are currently supported. Defaults to -‘16’. -

                  -
                  -
                  sample_rate
                  -

                  Set the sample rate (in Hz) of the captured audio. -Defaults to ‘44.1k’. -

                  -
                  -
                  list_devices
                  -

                  If set to ‘true’, print a list of devices and exit. -Defaults to ‘false’. -

                  -
                  -
                  - - -

                  16.9.2 Examples

                  - -

                  Print the list of OpenAL supported devices and exit: -

                   
                  $ ffmpeg -list_devices true -f openal -i dummy out.ogg
                  -
                  - -

                  Capture from the OpenAL device ‘DR-BT101 via PulseAudio’: -

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
                  -
                  - -

                  Capture from the default device (note the empty string ” as filename): -

                   
                  $ ffmpeg -f openal -i '' out.ogg
                  -
                  - -

                  Capture from two devices simultaneously, writing to two different files, -within the same ffmpeg command: -

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
                  -
                  -

                  Note: not all OpenAL implementations support multiple simultaneous capture - -try the latest OpenAL Soft if the above does not work. -

                  - -

                  16.10 oss

                  - -

                  Open Sound System input device. -

                  -

                  The filename to provide to the input device is the device node -representing the OSS input device, and is usually set to -‘/dev/dsp’. -

                  -

                  For example to grab from ‘/dev/dsp’ using ffmpeg use the -command: -

                   
                  ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
                  -
                  - -

                  For more information about OSS see: -http://manuals.opensound.com/usersguide/dsp.html -

                  - -

                  16.11 pulse

                  - -

                  pulseaudio input device. -

                  -

                  To enable this input device during configuration you need libpulse-simple -installed in your system. -

                  -

                  The filename to provide to the input device is a source device or the -string "default" -

                  -

                  To list the pulse source devices and their properties you can invoke -the command pactl list sources. -

                  -
                   
                  ffmpeg -f pulse -i default /tmp/pulse.wav
                  -
                  - - -

                  16.11.1 server AVOption

                  - -

                  The syntax is: -

                   
                  -server server name
                  -
                  - -

                  Connects to a specific server. -

                  - -

                  16.11.2 name AVOption

                  - -

                  The syntax is: -

                   
                  -name application name
                  -
                  - -

                  Specify the application name pulse will use when showing active clients, -by default it is the LIBAVFORMAT_IDENT string -

                  - -

                  16.11.3 stream_name AVOption

                  - -

                  The syntax is: -

                   
                  -stream_name stream name
                  -
                  - -

                  Specify the stream name pulse will use when showing active streams, -by default it is "record" -

                  - -

                  16.11.4 sample_rate AVOption

                  - -

                  The syntax is: -

                   
                  -sample_rate samplerate
                  -
                  - -

                  Specify the samplerate in Hz, by default 48kHz is used. -

                  - -

                  16.11.5 channels AVOption

                  - -

                  The syntax is: -

                   
                  -channels N
                  -
                  - -

                  Specify the channels in use, by default 2 (stereo) is set. -

                  - -

                  16.11.6 frame_size AVOption

                  - -

                  The syntax is: -

                   
                  -frame_size bytes
                  -
                  - -

                  Specify the number of byte per frame, by default it is set to 1024. -

                  - -

                  16.11.7 fragment_size AVOption

                  - -

                  The syntax is: -

                   
                  -fragment_size bytes
                  -
                  - -

                  Specify the minimal buffering fragment in pulseaudio, it will affect the -audio latency. By default it is unset. -

                  - -

                  16.12 sndio

                  - -

                  sndio input device. -

                  -

                  To enable this input device during configuration you need libsndio -installed on your system. -

                  -

                  The filename to provide to the input device is the device node -representing the sndio input device, and is usually set to -‘/dev/audio0’. -

                  -

                  For example to grab from ‘/dev/audio0’ using ffmpeg use the -command: -

                   
                  ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
                  -
                  - - -

                  16.13 video4linux and video4linux2

                  - -

                  Video4Linux and Video4Linux2 input video devices. -

                  -

                  The name of the device to grab is a file device node, usually Linux -systems tend to automatically create such nodes when the device -(e.g. an USB webcam) is plugged into the system, and has a name of the -kind ‘/dev/videoN’, where N is a number associated to -the device. -

                  -

                  Video4Linux and Video4Linux2 devices only support a limited set of -widthxheight sizes and framerates. You can check which are -supported for example with the command dov4l for Video4Linux -devices and using -list_formats all for Video4Linux2 devices. -

                  -

                  If the size for the device is set to 0x0, the input device will -try to auto-detect the size to use. -Only for the video4linux2 device, if the frame rate is set to 0/0 the -input device will use the frame rate value already set in the driver. -

                  -

                  Video4Linux support is deprecated since Linux 2.6.30, and will be -dropped in later versions. -

                  -

                  Note that if FFmpeg is build with v4l-utils support ("–enable-libv4l2" -option), it will always be used. -

                  -

                  Follow some usage examples of the video4linux devices with the ff* -tools. -

                   
                  # Grab and show the input of a video4linux device, frame rate is set
                  -# to the default of 25/1.
                  -ffplay -s 320x240 -f video4linux /dev/video0
                  -
                  -# Grab and show the input of a video4linux2 device, auto-adjust size.
                  -ffplay -f video4linux2 /dev/video0
                  -
                  -# Grab and record the input of a video4linux2 device, auto-adjust size,
                  -# frame rate value defaults to 0/0 so it is read from the video4linux2
                  -# driver.
                  -ffmpeg -f video4linux2 -i /dev/video0 out.mpeg
                  -
                  - -

                  "v4l" and "v4l2" can be used as aliases for the respective "video4linux" and -"video4linux2". -

                  - -

                  16.14 vfwcap

                  - -

                  VfW (Video for Windows) capture input device. -

                  -

                  The filename passed as input is the capture driver number, ranging from -0 to 9. You may use "list" as filename to print a list of drivers. Any -other filename will be interpreted as device number 0. -

                  - -

                  16.15 x11grab

                  - -

                  X11 video input device. -

                  -

                  This device allows to capture a region of an X11 display. -

                  -

                  The filename passed as input has the syntax: -

                   
                  [hostname]:display_number.screen_number[+x_offset,y_offset]
                  -
                  - -

                  hostname:display_number.screen_number specifies the -X11 display name of the screen to grab from. hostname can be -omitted, and defaults to "localhost". The environment variable -DISPLAY contains the default display name. -

                  -

                  x_offset and y_offset specify the offsets of the grabbed -area with respect to the top-left border of the X11 screen. They -default to 0. -

                  -

                  Check the X11 documentation (e.g. man X) for more detailed information. -

                  -

                  Use the dpyinfo program for getting basic information about the -properties of your X11 display (e.g. grep for "name" or "dimensions"). -

                  -

                  For example to grab from ‘:0.0’ using ffmpeg: -

                   
                  ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpg
                  -
                  -# Grab at position 10,20.
                  -ffmpeg -f x11grab -r 25 -s cif -i :0.0+10,20 out.mpg
                  -
                  - - -

                  16.15.1 follow_mouse AVOption

                  - -

                  The syntax is: -

                   
                  -follow_mouse centered|PIXELS
                  -
                  - -

                  When it is specified with "centered", the grabbing region follows the mouse -pointer and keeps the pointer at the center of region; otherwise, the region -follows only when the mouse pointer reaches within PIXELS (greater than -zero) to the edge of region. -

                  -

                  For example: -

                   
                  ffmpeg -f x11grab -follow_mouse centered -r 25 -s cif -i :0.0 out.mpg
                  -
                  -# Follows only when the mouse pointer reaches within 100 pixels to edge
                  -ffmpeg -f x11grab -follow_mouse 100 -r 25 -s cif -i :0.0 out.mpg
                  -
                  - - -

                  16.15.2 show_region AVOption

                  - -

                  The syntax is: -

                   
                  -show_region 1
                  -
                  - -

                  If show_region AVOption is specified with 1, then the grabbing -region will be indicated on screen. With this option, it’s easy to know what is -being grabbed if only a portion of the screen is grabbed. -

                  -

                  For example: -

                   
                  ffmpeg -f x11grab -show_region 1 -r 25 -s cif -i :0.0+10,20 out.mpg
                  -
                  -# With follow_mouse
                  -ffmpeg -f x11grab -follow_mouse centered -show_region 1  -r 25 -s cif -i :0.0 out.mpg
                  -
                  - - -

                  17. Output Devices

                  - -

                  Output devices are configured elements in FFmpeg which allow to write -multimedia data to an output device attached to your system. -

                  -

                  When you configure your FFmpeg build, all the supported output devices -are enabled by default. You can list all available ones using the -configure option "–list-outdevs". -

                  -

                  You can disable all the output devices using the configure option -"–disable-outdevs", and selectively enable an output device using the -option "–enable-outdev=OUTDEV", or you can disable a particular -input device using the option "–disable-outdev=OUTDEV". -

                  -

                  The option "-formats" of the ff* tools will display the list of -enabled output devices (amongst the muxers). -

                  -

                  A description of the currently available output devices follows. -

                  - -

                  17.1 alsa

                  - -

                  ALSA (Advanced Linux Sound Architecture) output device. -

                  - -

                  17.2 oss

                  - -

                  OSS (Open Sound System) output device. -

                  - -

                  17.3 sdl

                  - -

                  SDL (Simple DirectMedia Layer) output device. -

                  -

                  This output devices allows to show a video stream in an SDL -window. Only one SDL window is allowed per application, so you can -have only one instance of this output device in an application. -

                  -

                  To enable this output device you need libsdl installed on your system -when configuring your build. -

                  -

                  For more information about SDL, check: -http://www.libsdl.org/ -

                  - -

                  17.3.1 Options

                  - -
                  -
                  window_title
                  -

                  Set the SDL window title, if not specified default to the filename -specified for the output device. -

                  -
                  -
                  icon_title
                  -

                  Set the name of the iconified SDL window, if not specified it is set -to the same value of window_title. -

                  -
                  -
                  window_size
                  -

                  Set the SDL window size, can be a string of the form -widthxheight or a video size abbreviation. -If not specified it defaults to the size of the input video. -

                  -
                  - - -

                  17.3.2 Examples

                  - -

                  The following command shows the ffmpeg output is an -SDL window, forcing its size to the qcif format: -

                   
                  ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
                  -
                  - - -

                  17.4 sndio

                  - -

                  sndio audio output device. -

                  - -

                  18. Protocols

                  - -

                  Protocols are configured elements in FFmpeg which allow to access -resources which require the use of a particular protocol. -

                  -

                  When you configure your FFmpeg build, all the supported protocols are -enabled by default. You can list all available ones using the -configure option "–list-protocols". -

                  -

                  You can disable all the protocols using the configure option -"–disable-protocols", and selectively enable a protocol using the -option "–enable-protocol=PROTOCOL", or you can disable a -particular protocol using the option -"–disable-protocol=PROTOCOL". -

                  -

                  The option "-protocols" of the ff* tools will display the list of -supported protocols. -

                  -

                  A description of the currently available protocols follows. -

                  - -

                  18.1 applehttp

                  - -

                  Read Apple HTTP Live Streaming compliant segmented stream as -a uniform one. The M3U8 playlists describing the segments can be -remote HTTP resources or local files, accessed using the standard -file protocol. -HTTP is default, specific protocol can be declared by specifying -"+proto" after the applehttp URI scheme name, where proto -is either "file" or "http". -

                  -
                   
                  applehttp://host/path/to/remote/resource.m3u8
                  -applehttp+http://host/path/to/remote/resource.m3u8
                  -applehttp+file://path/to/local/resource.m3u8
                  -
                  - - -

                  18.2 concat

                  - -

                  Physical concatenation protocol. -

                  -

                  Allow to read and seek from many resource in sequence as if they were -a unique resource. -

                  -

                  A URL accepted by this protocol has the syntax: -

                   
                  concat:URL1|URL2|...|URLN
                  -
                  - -

                  where URL1, URL2, ..., URLN are the urls of the -resource to be concatenated, each one possibly specifying a distinct -protocol. -

                  -

                  For example to read a sequence of files ‘split1.mpeg’, -‘split2.mpeg’, ‘split3.mpeg’ with ffplay use the -command: -

                   
                  ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
                  -
                  - -

                  Note that you may need to escape the character "|" which is special for -many shells. -

                  - -

                  18.3 file

                  - -

                  File access protocol. -

                  -

                  Allow to read from or read to a file. -

                  -

                  For example to read from a file ‘input.mpeg’ with ffmpeg -use the command: -

                   
                  ffmpeg -i file:input.mpeg output.mpeg
                  -
                  - -

                  The ff* tools default to the file protocol, that is a resource -specified with the name "FILE.mpeg" is interpreted as the URL -"file:FILE.mpeg". -

                  - -

                  18.4 gopher

                  - -

                  Gopher protocol. -

                  - -

                  18.5 http

                  - -

                  HTTP (Hyper Text Transfer Protocol). -

                  - -

                  18.6 mmst

                  - -

                  MMS (Microsoft Media Server) protocol over TCP. -

                  - -

                  18.7 mmsh

                  - -

                  MMS (Microsoft Media Server) protocol over HTTP. -

                  -

                  The required syntax is: -

                   
                  mmsh://server[:port][/app][/playpath]
                  -
                  - - -

                  18.8 md5

                  - -

                  MD5 output protocol. -

                  -

                  Computes the MD5 hash of the data to be written, and on close writes -this to the designated output or stdout if none is specified. It can -be used to test muxers without writing an actual file. -

                  -

                  Some examples follow. -

                   
                  # Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
                  -ffmpeg -i input.flv -f avi -y md5:output.avi.md5
                  -
                  -# Write the MD5 hash of the encoded AVI file to stdout.
                  -ffmpeg -i input.flv -f avi -y md5:
                  -
                  - -

                  Note that some formats (typically MOV) require the output protocol to -be seekable, so they will fail with the MD5 output protocol. -

                  - -

                  18.9 pipe

                  - -

                  UNIX pipe access protocol. -

                  -

                  Allow to read and write from UNIX pipes. -

                  -

                  The accepted syntax is: -

                   
                  pipe:[number]
                  -
                  - -

                  number is the number corresponding to the file descriptor of the -pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number -is not specified, by default the stdout file descriptor will be used -for writing, stdin for reading. -

                  -

                  For example to read from stdin with ffmpeg: -

                   
                  cat test.wav | ffmpeg -i pipe:0
                  -# ...this is the same as...
                  -cat test.wav | ffmpeg -i pipe:
                  -
                  - -

                  For writing to stdout with ffmpeg: -

                   
                  ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
                  -# ...this is the same as...
                  -ffmpeg -i test.wav -f avi pipe: | cat > test.avi
                  -
                  - -

                  Note that some formats (typically MOV), require the output protocol to -be seekable, so they will fail with the pipe output protocol. -

                  - -

                  18.10 rtmp

                  - -

                  Real-Time Messaging Protocol. -

                  -

                  The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia -content across a TCP/IP network. -

                  -

                  The required syntax is: -

                   
                  rtmp://server[:port][/app][/playpath]
                  -
                  - -

                  The accepted parameters are: -

                  -
                  server
                  -

                  The address of the RTMP server. -

                  -
                  -
                  port
                  -

                  The number of the TCP port to use (by default is 1935). -

                  -
                  -
                  app
                  -

                  It is the name of the application to access. It usually corresponds to -the path where the application is installed on the RTMP server -(e.g. ‘/ondemand/’, ‘/flash/live/’, etc.). -

                  -
                  -
                  playpath
                  -

                  It is the path or name of the resource to play with reference to the -application specified in app, may be prefixed by "mp4:". -

                  -
                  -
                  - -

                  For example to read with ffplay a multimedia resource named -"sample" from the application "vod" from an RTMP server "myserver": -

                   
                  ffplay rtmp://myserver/vod/sample
                  -
                  - - -

                  18.11 rtmp, rtmpe, rtmps, rtmpt, rtmpte

                  - -

                  Real-Time Messaging Protocol and its variants supported through -librtmp. -

                  -

                  Requires the presence of the librtmp headers and library during -configuration. You need to explicitly configure the build with -"–enable-librtmp". If enabled this will replace the native RTMP -protocol. -

                  -

                  This protocol provides most client functions and a few server -functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), -encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled -variants of these encrypted types (RTMPTE, RTMPTS). -

                  -

                  The required syntax is: -

                   
                  rtmp_proto://server[:port][/app][/playpath] options
                  -
                  - -

                  where rtmp_proto is one of the strings "rtmp", "rtmpt", "rtmpe", -"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and -server, port, app and playpath have the same -meaning as specified for the RTMP native protocol. -options contains a list of space-separated options of the form -key=val. -

                  -

                  See the librtmp manual page (man 3 librtmp) for more information. -

                  -

                  For example, to stream a file in real-time to an RTMP server using -ffmpeg: -

                   
                  ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
                  -
                  - -

                  To play the same stream using ffplay: -

                   
                  ffplay "rtmp://myserver/live/mystream live=1"
                  -
                  - - -

                  18.12 rtp

                  - -

                  Real-Time Protocol. -

                  - -

                  18.13 rtsp

                  - -

                  RTSP is not technically a protocol handler in libavformat, it is a demuxer -and muxer. The demuxer supports both normal RTSP (with data transferred -over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with -data transferred over RDT). -

                  -

                  The muxer can be used to send a stream using RTSP ANNOUNCE to a server -supporting it (currently Darwin Streaming Server and Mischa Spiegelmock’s -RTSP server). -

                  -

                  The required syntax for a RTSP url is: -

                   
                  rtsp://hostname[:port]/path
                  -
                  - -

                  The following options (set on the ffmpeg/ffplay command -line, or set in code via AVOptions or in avformat_open_input), -are supported: -

                  -

                  Flags for rtsp_transport: -

                  -
                  -
                  udp
                  -

                  Use UDP as lower transport protocol. -

                  -
                  -
                  tcp
                  -

                  Use TCP (interleaving within the RTSP control channel) as lower -transport protocol. -

                  -
                  -
                  udp_multicast
                  -

                  Use UDP multicast as lower transport protocol. -

                  -
                  -
                  http
                  -

                  Use HTTP tunneling as lower transport protocol, which is useful for -passing proxies. -

                  -
                  - -

                  Multiple lower transport protocols may be specified, in that case they are -tried one at a time (if the setup of one fails, the next one is tried). -For the muxer, only the tcp and udp options are supported. -

                  -

                  Flags for rtsp_flags: -

                  -
                  -
                  filter_src
                  -

                  Accept packets only from negotiated peer address and port. -

                  -
                  - -

                  When receiving data over UDP, the demuxer tries to reorder received packets -(since they may arrive out of order, or packets may get lost totally). In -order for this to be enabled, a maximum delay must be specified in the -max_delay field of AVFormatContext. -

                  -

                  When watching multi-bitrate Real-RTSP streams with ffplay, the -streams to display can be chosen with -vst n and --ast n for video and audio respectively, and can be switched -on the fly by pressing v and a. -

                  -

                  Example command lines: -

                  -

                  To watch a stream over UDP, with a max reordering delay of 0.5 seconds: -

                  -
                   
                  ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
                  -
                  - -

                  To watch a stream tunneled over HTTP: -

                  -
                   
                  ffplay -rtsp_transport http rtsp://server/video.mp4
                  -
                  - -

                  To send a stream in realtime to a RTSP server, for others to watch: -

                  -
                   
                  ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
                  -
                  - - -

                  18.14 sap

                  - -

                  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. -

                  - -

                  18.14.1 Muxer

                  - -

                  The syntax for a SAP url given to the muxer is: -

                   
                  sap://destination[:port][?options]
                  -
                  - -

                  The RTP packets are sent to destination on port port, -or to port 5004 if no port is specified. -options is a &-separated list. The following options -are supported: -

                  -
                  -
                  announce_addr=address
                  -

                  Specify the destination IP address for sending the announcements to. -If omitted, the announcements are sent to the commonly used SAP -announcement multicast address 224.2.127.254 (sap.mcast.net), or -ff0e::2:7ffe if destination is an IPv6 address. -

                  -
                  -
                  announce_port=port
                  -

                  Specify the port to send the announcements on, defaults to -9875 if not specified. -

                  -
                  -
                  ttl=ttl
                  -

                  Specify the time to live value for the announcements and RTP packets, -defaults to 255. -

                  -
                  -
                  same_port=0|1
                  -

                  If set to 1, send all RTP streams on the same port pair. If zero (the -default), all streams are sent on unique ports, with each stream on a -port 2 numbers higher than the previous. -VLC/Live555 requires this to be set to 1, to be able to receive the stream. -The RTP stack in libavformat for receiving requires all streams to be sent -on unique ports. -

                  -
                  - -

                  Example command lines follow. -

                  -

                  To broadcast a stream on the local subnet, for watching in VLC: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1
                  -
                  - -

                  Similarly, for watching in ffplay: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255
                  -
                  - -

                  And for watching in ffplay, over IPv6: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]
                  -
                  - - -

                  18.14.2 Demuxer

                  - -

                  The syntax for a SAP url given to the demuxer is: -

                   
                  sap://[address][:port]
                  -
                  - -

                  address is the multicast address to listen for announcements on, -if omitted, the default 224.2.127.254 (sap.mcast.net) is used. port -is the port that is listened on, 9875 if omitted. -

                  -

                  The demuxers listens for announcements on the given address and port. -Once an announcement is received, it tries to receive that particular stream. -

                  -

                  Example command lines follow. -

                  -

                  To play back the first stream announced on the normal SAP multicast address: -

                  -
                   
                  ffplay sap://
                  -
                  - -

                  To play back the first stream announced on one the default IPv6 SAP multicast address: -

                  -
                   
                  ffplay sap://[ff0e::2:7ffe]
                  -
                  - - -

                  18.15 tcp

                  - -

                  Trasmission Control Protocol. -

                  -

                  The required syntax for a TCP url is: -

                   
                  tcp://hostname:port[?options]
                  -
                  - -
                  -
                  listen
                  -

                  Listen for an incoming connection -

                  -
                   
                  ffmpeg -i input -f format tcp://hostname:port?listen
                  -ffplay tcp://hostname:port
                  -
                  - -
                  -
                  - - -

                  18.16 udp

                  - -

                  User Datagram Protocol. -

                  -

                  The required syntax for a UDP url is: -

                   
                  udp://hostname:port[?options]
                  -
                  - -

                  options contains a list of &-seperated options of the form key=val. -Follow the list of supported options. -

                  -
                  -
                  buffer_size=size
                  -

                  set the UDP buffer size in bytes -

                  -
                  -
                  localport=port
                  -

                  override the local UDP port to bind with -

                  -
                  -
                  localaddr=addr
                  -

                  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. -

                  -
                  -
                  pkt_size=size
                  -

                  set the size in bytes of UDP packets -

                  -
                  -
                  reuse=1|0
                  -

                  explicitly allow or disallow reusing UDP sockets -

                  -
                  -
                  ttl=ttl
                  -

                  set the time to live value (for multicast only) -

                  -
                  -
                  connect=1|0
                  -

                  Initialize the UDP socket with connect(). In this case, the -destination address can’t be changed with ff_udp_set_remote_url later. -If the destination address isn’t known at the start, this option can -be specified in ff_udp_set_remote_url, too. -This allows finding out the source address for the packets with getsockname, -and makes writes return with AVERROR(ECONNREFUSED) if "destination -unreachable" is received. -For receiving, this gives the benefit of only receiving packets from -the specified peer address/port. -

                  -
                  - -

                  Some usage examples of the udp protocol with ffmpeg follow. -

                  -

                  To stream over UDP to a remote endpoint: -

                   
                  ffmpeg -i input -f format udp://hostname:port
                  -
                  - -

                  To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer: -

                   
                  ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
                  -
                  - -

                  To receive over UDP from a remote endpoint: -

                   
                  ffmpeg -i udp://[multicast-address]:port
                  -
                  - - -

                  19. Bitstream Filters

                  - -

                  When you configure your FFmpeg build, all the supported bitstream -filters are enabled by default. You can list all available ones using -the configure option --list-bsfs. -

                  -

                  You can disable all the bitstream filters using the configure option ---disable-bsfs, and selectively enable any bitstream filter using -the option --enable-bsf=BSF, or you can disable a particular -bitstream filter using the option --disable-bsf=BSF. -

                  -

                  The option -bsfs of the ff* tools will display the list of -all the supported bitstream filters included in your build. -

                  -

                  Below is a description of the currently available bitstream filters. -

                  - -

                  19.1 aac_adtstoasc

                  - - -

                  19.2 chomp

                  - - -

                  19.3 dump_extradata

                  - - -

                  19.4 h264_mp4toannexb

                  - -

                  Convert an H.264 bitstream from length prefixed mode to start code -prefixed mode (as defined in the Annex B of the ITU-T H.264 -specification). -

                  -

                  This is required by some streaming formats, typically the MPEG-2 -transport stream format ("mpegts"). -

                  -

                  For example to remux an MP4 file containing an H.264 stream to mpegts -format with ffmpeg, you can use the command: -

                  -
                   
                  ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
                  -
                  - - -

                  19.5 imx_dump_header

                  - - -

                  19.6 mjpeg2jpeg

                  - -

                  Convert MJPEG/AVI1 packets to full JPEG/JFIF packets. -

                  -

                  MJPEG is a video codec wherein each video frame is essentially a -JPEG image. The individual frames can be extracted without loss, -e.g. by -

                  -
                   
                  ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
                  -
                  - -

                  Unfortunately, these chunks are incomplete JPEG images, because -they lack the DHT segment required for decoding. Quoting from -http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml: -

                  -

                  Avery Lee, writing in the rec.video.desktop newsgroup in 2001, -commented that "MJPEG, or at least the MJPEG in AVIs having the -MJPG fourcc, is restricted JPEG with a fixed – and *omitted* – -Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2, -and it must use basic Huffman encoding, not arithmetic or -progressive. . . . You can indeed extract the MJPEG frames and -decode them with a regular JPEG decoder, but you have to prepend -the DHT segment to them, or else the decoder won’t have any idea -how to decompress the data. The exact table necessary is given in -the OpenDML spec." -

                  -

                  This bitstream filter patches the header of frames extracted from an MJPEG -stream (carrying the AVI1 header ID and lacking a DHT segment) to -produce fully qualified JPEG images. -

                  -
                   
                  ffmpeg -i mjpeg-movie.avi -c:v copy -vbsf mjpeg2jpeg frame_%d.jpg
                  -exiftran -i -9 frame*.jpg
                  -ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
                  -
                  - - -

                  19.7 mjpega_dump_header

                  - - -

                  19.8 movsub

                  - - -

                  19.9 mp3_header_compress

                  - - -

                  19.10 mp3_header_decompress

                  - - -

                  19.11 noise

                  - - -

                  19.12 remove_extradata

                  - - -

                  20. Filtergraph description

                  - -

                  A filtergraph is a directed graph of connected filters. It can contain -cycles, and there can be multiple links between a pair of -filters. Each link has one input pad on one side connecting it to one -filter from which it takes its input, and one output pad on the other -side connecting it to the one filter accepting its output. -

                  -

                  Each filter in a filtergraph is an instance of a filter class -registered in the application, which defines the features and the -number of input and output pads of the filter. -

                  -

                  A filter with no input pads is called a "source", a filter with no -output pads is called a "sink". -

                  - -

                  20.1 Filtergraph syntax

                  - -

                  A filtergraph can be represented using a textual representation, which -is recognized by the -vf option of the ff* -tools, and by the avfilter_graph_parse() function defined in -‘libavfilter/avfiltergraph.h’. -

                  -

                  A filterchain consists of a sequence of connected filters, each one -connected to the previous one in the sequence. A filterchain is -represented by a list of ","-separated filter descriptions. -

                  -

                  A filtergraph consists of a sequence of filterchains. A sequence of -filterchains is represented by a list of ";"-separated filterchain -descriptions. -

                  -

                  A filter is represented by a string of the form: -[in_link_1]...[in_link_N]filter_name=arguments[out_link_1]...[out_link_M] -

                  -

                  filter_name is the name of the filter class of which the -described filter is an instance of, and has to be the name of one of -the filter classes registered in the program. -The name of the filter class is optionally followed by a string -"=arguments". -

                  -

                  arguments is a string which contains the parameters used to -initialize the filter instance, and are described in the filter -descriptions below. -

                  -

                  The list of arguments can be quoted using the character "’" as initial -and ending mark, and the character ’\’ for escaping the characters -within the quoted text; otherwise the argument string is considered -terminated when the next special character (belonging to the set -"[]=;,") is encountered. -

                  -

                  The name and arguments of the filter are optionally preceded and -followed by a list of link labels. -A link label allows to name a link and associate it to a filter output -or input pad. The preceding labels in_link_1 -... in_link_N, are associated to the filter input pads, -the following labels out_link_1 ... out_link_M, are -associated to the output pads. -

                  -

                  When two link labels with the same name are found in the -filtergraph, a link between the corresponding input and output pad is -created. -

                  -

                  If an output pad is not labelled, it is linked by default to the first -unlabelled input pad of the next filter in the filterchain. -For example in the filterchain: -

                   
                  nullsrc, split[L1], [L2]overlay, nullsink
                  -
                  -

                  the split filter instance has two output pads, and the overlay filter -instance two input pads. The first output pad of split is labelled -"L1", the first input pad of overlay is labelled "L2", and the second -output pad of split is linked to the second input pad of overlay, -which are both unlabelled. -

                  -

                  In a complete filterchain all the unlabelled filter input and output -pads must be connected. A filtergraph is considered valid if all the -filter input and output pads of all the filterchains are connected. -

                  -

                  Follows a BNF description for the filtergraph syntax: -

                   
                  NAME             ::= sequence of alphanumeric characters and '_'
                  -LINKLABEL        ::= "[" NAME "]"
                  -LINKLABELS       ::= LINKLABEL [LINKLABELS]
                  -FILTER_ARGUMENTS ::= sequence of chars (eventually quoted)
                  -FILTER           ::= [LINKNAMES] NAME ["=" ARGUMENTS] [LINKNAMES]
                  -FILTERCHAIN      ::= FILTER [,FILTERCHAIN]
                  -FILTERGRAPH      ::= FILTERCHAIN [;FILTERGRAPH]
                  -
                  - - - -

                  21. Audio Filters

                  - -

                  When you configure your FFmpeg build, you can disable any of the -existing filters using --disable-filters. -The configure output will show the audio filters included in your -build. -

                  -

                  Below is a description of the currently available audio filters. -

                  - -

                  21.1 aconvert

                  - -

                  Convert the input audio format to the specified formats. -

                  -

                  The filter accepts a string of the form: -"sample_format:channel_layout:packing_format". -

                  -

                  sample_format specifies the sample format, and can be a string or -the corresponding numeric value defined in ‘libavutil/samplefmt.h’. -

                  -

                  channel_layout specifies the channel layout, and can be a string -or the corresponding number value defined in ‘libavutil/audioconvert.h’. -

                  -

                  packing_format specifies the type of packing in output, can be one -of "planar" or "packed", or the corresponding numeric values "0" or "1". -

                  -

                  The special parameter "auto", signifies that the filter will -automatically select the output format depending on the output filter. -

                  -

                  Some examples follow. -

                  -
                    -
                  • -Convert input to unsigned 8-bit, stereo, packed: -
                     
                    aconvert=u8:stereo:packed
                    -
                    - -
                  • -Convert input to unsigned 8-bit, automatically select out channel layout -and packing format: -
                     
                    aconvert=u8:auto:auto
                    -
                    -
                  - - -

                  21.2 aformat

                  - -

                  Convert the input audio to one of the specified formats. The framework will -negotiate the most appropriate format to minimize conversions. -

                  -

                  The filter accepts three lists of formats, separated by ":", in the form: -"sample_formats:channel_layouts:packing_formats". -

                  -

                  Elements in each list are separated by "," which has to be escaped in the -filtergraph specification. -

                  -

                  The special parameter "all", in place of a list of elements, signifies all -supported formats. -

                  -

                  Some examples follow: -

                   
                  aformat=u8\\,s16:mono:packed
                  -
                  -aformat=s16:mono\\,stereo:all
                  -
                  - - -

                  21.3 amerge

                  - -

                  Merge two audio streams into a single multi-channel stream. -

                  -

                  This filter does not need any argument. -

                  -

                  If the channel layouts of the inputs are disjoint, and therefore compatible, -the channel layout of the output will be set accordingly and the channels -will be reordered as necessary. If the channel layouts of the inputs are not -disjoint, the output will have all the channels of the first input then all -the channels of the second input, in that order, and the channel layout of -the output will be the default value corresponding to the total number of -channels. -

                  -

                  For example, if the first input is in 2.1 (FL+FR+LF) and the second input -is FC+BL+BR, then the output will be in 5.1, with the channels in the -following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the -first input, b1 is the first channel of the second input). -

                  -

                  On the other hand, if both input are in stereo, the output channels will be -in the default order: a1, a2, b1, b2, and the channel layout will be -arbitrarily set to 4.0, which may or may not be the expected value. -

                  -

                  Both inputs must have the same sample rate, format and packing. -

                  -

                  If inputs do not have the same duration, the output will stop with the -shortest. -

                  -

                  Example: merge two mono files into a stereo stream: -

                   
                  amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
                  -
                  - - -

                  21.4 anull

                  - -

                  Pass the audio source unchanged to the output. -

                  - -

                  21.5 aresample

                  - -

                  Resample the input audio to the specified sample rate. -

                  -

                  The filter accepts exactly one parameter, the output sample rate. If not -specified then the filter will automatically convert between its input -and output sample rates. -

                  -

                  For example, to resample the input audio to 44100Hz: -

                   
                  aresample=44100
                  -
                  - - -

                  21.6 ashowinfo

                  - -

                  Show a line containing various information for each input audio frame. -The input audio is not modified. -

                  -

                  The shown line contains a sequence of key/value pairs of the form -key:value. -

                  -

                  A description of each shown parameter follows: -

                  -
                  -
                  n
                  -

                  sequential number of the input frame, starting from 0 -

                  -
                  -
                  pts
                  -

                  presentation TimeStamp of the input frame, expressed as a number of -time base units. The time base unit depends on the filter input pad, and -is usually 1/sample_rate. -

                  -
                  -
                  pts_time
                  -

                  presentation TimeStamp of the input frame, expressed as a number of -seconds -

                  -
                  -
                  pos
                  -

                  position of the frame in the input stream, -1 if this information in -unavailable and/or meaningless (for example in case of synthetic audio) -

                  -
                  -
                  fmt
                  -

                  sample format name -

                  -
                  -
                  chlayout
                  -

                  channel layout description -

                  -
                  -
                  nb_samples
                  -

                  number of samples (per each channel) contained in the filtered frame -

                  -
                  -
                  rate
                  -

                  sample rate for the audio frame -

                  -
                  -
                  planar
                  -

                  if the packing format is planar, 0 if packed -

                  -
                  -
                  checksum
                  -

                  Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame -

                  -
                  -
                  plane_checksum
                  -

                  Adler-32 checksum (printed in hexadecimal) for each input frame plane, -expressed in the form "[c0 c1 c2 c3 c4 c5 -c6 c7]" -

                  -
                  - - -

                  21.7 asplit

                  - -

                  Pass on the input audio to two outputs. Both outputs are identical to -the input audio. -

                  -

                  For example: -

                   
                  [in] asplit[out0], showaudio[out1]
                  -
                  - -

                  will create two separate outputs from the same input, one cropped and -one padded. -

                  - -

                  21.8 astreamsync

                  - -

                  Forward two audio streams and control the order the buffers are forwarded. -

                  -

                  The argument to the filter is an expression deciding which stream should be -forwarded next: if the result is negative, the first stream is forwarded; if -the result is positive or zero, the second stream is forwarded. It can use -the following variables: -

                  -
                  -
                  b1 b2
                  -

                  number of buffers forwarded so far on each stream -

                  -
                  s1 s2
                  -

                  number of samples forwarded so far on each stream -

                  -
                  t1 t2
                  -

                  current timestamp of each stream -

                  -
                  - -

                  The default value is t1-t2, which means to always forward the stream -that has a smaller timestamp. -

                  -

                  Example: stress-test amerge by randomly sending buffers on the wrong -input, while avoiding too much of a desynchronization: -

                   
                  amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
                  -[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
                  -[a2] [b2] amerge
                  -
                  - - -

                  21.9 earwax

                  - -

                  Make audio easier to listen to on headphones. -

                  -

                  This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio -so that when listened to on headphones the stereo image is moved from -inside your head (standard for headphones) to outside and in front of -the listener (standard for speakers). -

                  -

                  Ported from SoX. -

                  - -

                  21.10 pan

                  - -

                  Mix channels with specific gain levels. The filter accepts the output -channel layout followed by a set of channels definitions. -

                  -

                  This filter is also designed to remap efficiently the channels of an audio -stream. -

                  -

                  The filter accepts parameters of the form: -"l:outdef:outdef:..." -

                  -
                  -
                  l
                  -

                  output channel layout or number of channels -

                  -
                  -
                  outdef
                  -

                  output channel specification, of the form: -"out_name=[gain*]in_name[+[gain*]in_name...]" -

                  -
                  -
                  out_name
                  -

                  output channel to define, either a channel name (FL, FR, etc.) or a channel -number (c0, c1, etc.) -

                  -
                  -
                  gain
                  -

                  multiplicative coefficient for the channel, 1 leaving the volume unchanged -

                  -
                  -
                  in_name
                  -

                  input channel to use, see out_name for details; it is not possible to mix -named and numbered input channels -

                  -
                  - -

                  If the ‘=’ in a channel specification is replaced by ‘<’, then the gains for -that specification will be renormalized so that the total is 1, thus -avoiding clipping noise. -

                  - -

                  21.10.1 Mixing examples

                  - -

                  For example, if you want to down-mix from stereo to mono, but with a bigger -factor for the left channel: -

                   
                  pan=1:c0=0.9*c0+0.1*c1
                  -
                  - -

                  A customized down-mix to stereo that works automatically for 3-, 4-, 5- and -7-channels surround: -

                   
                  pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
                  -
                  - -

                  Note that ffmpeg integrates a default down-mix (and up-mix) system -that should be preferred (see "-ac" option) unless you have very specific -needs. -

                  - -

                  21.10.2 Remapping examples

                  - -

                  The channel remapping will be effective if, and only if: -

                  -
                    -
                  • gain coefficients are zeroes or ones, -
                  • only one input per channel output, -
                  • the number of output channels is supported by libswresample (16 at the - moment) -
                  - -

                  If all these conditions are satisfied, the filter will notify the user ("Pure -channel mapping detected"), and use an optimized and lossless method to do the -remapping. -

                  -

                  For example, if you have a 5.1 source and want a stereo audio stream by -dropping the extra channels: -

                   
                  pan="stereo: c0=FL : c1=FR"
                  -
                  - -

                  Given the same source, you can also switch front left and front right channels -and keep the input channel layout: -

                   
                  pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
                  -
                  - -

                  If the input is a stereo audio stream, you can mute the front left channel (and -still keep the stereo channel layout) with: -

                   
                  pan="stereo:c1=c1"
                  -
                  - -

                  Still with a stereo audio stream input, you can copy the right channel in both -front left and right: -

                   
                  pan="stereo: c0=FR : c1=FR"
                  -
                  - - -

                  21.11 silencedetect

                  - -

                  Detect silence in an audio stream. -

                  -

                  This filter logs a message when it detects that the input audio volume is less -or equal to a noise tolerance value for a duration greater or equal to the -minimum detected noise duration. -

                  -

                  The printed times and duration are expressed in seconds. -

                  -
                  -
                  duration, d
                  -

                  Set silence duration until notification (default is 2 seconds). -

                  -
                  -
                  noise, n
                  -

                  Set noise tolerance. Can be specified in dB (in case "dB" is appended to the -specified value) or amplitude ratio. Default is -60dB, or 0.001. -

                  -
                  - -

                  Detect 5 seconds of silence with -50dB noise tolerance: -

                   
                  silencedetect=n=-50dB:d=5
                  -
                  - -

                  Complete example with ffmpeg to detect silence with 0.0001 noise -tolerance in ‘silence.mp3’: -

                   
                  ffmpeg -f lavfi -i amovie=silence.mp3,silencedetect=noise=0.0001 -f null -
                  -
                  - - -

                  21.12 volume

                  - -

                  Adjust the input audio volume. -

                  -

                  The filter accepts exactly one parameter vol, which expresses -how the audio volume will be increased or decreased. -

                  -

                  Output values are clipped to the maximum value. -

                  -

                  If vol is expressed as a decimal number, the output audio -volume is given by the relation: -

                   
                  output_volume = vol * input_volume
                  -
                  - -

                  If vol is expressed as a decimal number followed by the string -"dB", the value represents the requested change in decibels of the -input audio power, and the output audio volume is given by the -relation: -

                   
                  output_volume = 10^(vol/20) * input_volume
                  -
                  - -

                  Otherwise vol is considered an expression and its evaluated -value is used for computing the output audio volume according to the -first relation. -

                  -

                  Default value for vol is 1.0. -

                  - -

                  21.12.1 Examples

                  - -
                    -
                  • -Half the input audio volume: -
                     
                    volume=0.5
                    -
                    - -

                    The above example is equivalent to: -

                     
                    volume=1/2
                    -
                    - -
                  • -Decrease input audio power by 12 decibels: -
                     
                    volume=-12dB
                    -
                    -
                  - - - -

                  22. Audio Sources

                  - -

                  Below is a description of the currently available audio sources. -

                  - -

                  22.1 abuffer

                  - -

                  Buffer audio frames, and make them available to the filter chain. -

                  -

                  This source is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/asrc_abuffer.h’. -

                  -

                  It accepts the following mandatory parameters: -sample_rate:sample_fmt:channel_layout:packing -

                  -
                  -
                  sample_rate
                  -

                  The sample rate of the incoming audio buffers. -

                  -
                  -
                  sample_fmt
                  -

                  The sample format of the incoming audio buffers. -Either a sample format name or its corresponging integer representation from -the enum AVSampleFormat in ‘libavutil/samplefmt.h’ -

                  -
                  -
                  channel_layout
                  -

                  The channel layout of the incoming audio buffers. -Either a channel layout name from channel_layout_map in -‘libavutil/audioconvert.c’ or its corresponding integer representation -from the AV_CH_LAYOUT_* macros in ‘libavutil/audioconvert.h’ -

                  -
                  -
                  packing
                  -

                  Either "packed" or "planar", or their integer representation: 0 or 1 -respectively. -

                  -
                  -
                  - -

                  For example: -

                   
                  abuffer=44100:s16:stereo:planar
                  -
                  - -

                  will instruct the source to accept planar 16bit signed stereo at 44100Hz. -Since the sample format with name "s16" corresponds to the number -1 and the "stereo" channel layout corresponds to the value 3, this is -equivalent to: -

                   
                  abuffer=44100:1:3:1
                  -
                  - - -

                  22.2 aevalsrc

                  - -

                  Generate an audio signal specified by an expression. -

                  -

                  This source accepts in input one or more expressions (one for each -channel), which are evaluated and used to generate a corresponding -audio signal. -

                  -

                  It accepts the syntax: exprs[::options]. -exprs is a list of expressions separated by ":", one for each -separate channel. The output channel layout depends on the number of -provided expressions, up to 8 channels are supported. -

                  -

                  options is an optional sequence of key=value pairs, -separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  duration, d
                  -

                  Set the minimum duration of the sourced audio. See the function -av_parse_time() for the accepted format. -Note that the resulting duration may be greater than the specified -duration, as the generated audio is always cut at the end of a -complete frame. -

                  -

                  If not specified, or the expressed duration is negative, the audio is -supposed to be generated forever. -

                  -
                  -
                  nb_samples, n
                  -

                  Set the number of samples per channel per each output frame, -default to 1024. -

                  -
                  -
                  sample_rate, s
                  -

                  Specify the sample rate, default to 44100. -

                  -
                  - -

                  Each expression in exprs can contain the following constants: -

                  -
                  -
                  n
                  -

                  number of the evaluated sample, starting from 0 -

                  -
                  -
                  t
                  -

                  time of the evaluated sample expressed in seconds, starting from 0 -

                  -
                  -
                  s
                  -

                  sample rate -

                  -
                  -
                  - - -

                  22.2.1 Examples

                  - -
                    -
                  • -Generate silence: -
                     
                    aevalsrc=0
                    -
                    - -
                  • - -Generate a sin signal with frequency of 440 Hz, set sample rate to -8000 Hz: -
                     
                    aevalsrc="sin(440*2*PI*t)::s=8000"
                    -
                    - -
                  • -Generate white noise: -
                     
                    aevalsrc="-2+random(0)"
                    -
                    - -
                  • -Generate an amplitude modulated signal: -
                     
                    aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
                    -
                    - -
                  • -Generate 2.5 Hz binaural beats on a 360 Hz carrier: -
                     
                    aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) : 0.1*sin(2*PI*(360+2.5/2)*t)"
                    -
                    - -
                  - - -

                  22.3 amovie

                  - -

                  Read an audio stream from a movie container. -

                  -

                  It accepts the syntax: movie_name[:options] where -movie_name is the name of the resource to read (not necessarily -a file but also a device or a stream accessed through some protocol), -and options is an optional sequence of key=value -pairs, separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  format_name, f
                  -

                  Specify the format assumed for the movie to read, and can be either -the name of a container or an input device. If not specified the -format is guessed from movie_name or by probing. -

                  -
                  -
                  seek_point, sp
                  -

                  Specify the seek point in seconds, the frames will be output -starting from this seek point, the parameter is evaluated with -av_strtod so the numerical value may be suffixed by an IS -postfix. Default value is "0". -

                  -
                  -
                  stream_index, si
                  -

                  Specify the index of the audio stream to read. If the value is -1, -the best suited audio stream will be automatically selected. Default -value is "-1". -

                  -
                  -
                  - - -

                  22.4 anullsrc

                  - -

                  Null audio source, return unprocessed audio frames. It is mainly useful -as a template and to be employed in analysis / debugging tools, or as -the source for filters which ignore the input data (for example the sox -synth filter). -

                  -

                  It accepts an optional sequence of key=value pairs, -separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  sample_rate, s
                  -

                  Specify the sample rate, and defaults to 44100. -

                  -
                  -
                  channel_layout, cl
                  -
                  -

                  Specify the channel layout, and can be either an integer or a string -representing a channel layout. The default value of channel_layout -is "stereo". -

                  -

                  Check the channel_layout_map definition in -‘libavcodec/audioconvert.c’ for the mapping between strings and -channel layout values. -

                  -
                  -
                  nb_samples, n
                  -

                  Set the number of samples per requested frames. -

                  -
                  -
                  - -

                  Follow some examples: -

                   
                  #  set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
                  -anullsrc=r=48000:cl=4
                  -
                  -# same as
                  -anullsrc=r=48000:cl=mono
                  -
                  - - - -

                  23. Audio Sinks

                  - -

                  Below is a description of the currently available audio sinks. -

                  - -

                  23.1 abuffersink

                  - -

                  Buffer audio frames, and make them available to the end of filter chain. -

                  -

                  This sink is mainly intended for programmatic use, in particular -through the interface defined in ‘libavfilter/buffersink.h’. -

                  -

                  It requires a pointer to an AVABufferSinkContext structure, which -defines the incoming buffers’ formats, to be passed as the opaque -parameter to avfilter_init_filter for initialization. -

                  - -

                  23.2 anullsink

                  - -

                  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. -

                  - - -

                  24. Video Filters

                  - -

                  When you configure your FFmpeg build, you can disable any of the -existing filters using --disable-filters. -The configure output will show the video filters included in your -build. -

                  -

                  Below is a description of the currently available video filters. -

                  - -

                  24.1 ass

                  - -

                  Draw ASS (Advanced Substation Alpha) subtitles on top of input video -using the libass library. -

                  -

                  To enable compilation of this filter you need to configure FFmpeg with ---enable-libass. -

                  -

                  This filter accepts in input the name of the ass file to render. -

                  -

                  For example, to render the file ‘sub.ass’ on top of the input -video, use the command: -

                   
                  ass=sub.ass
                  -
                  - - -

                  24.2 blackframe

                  - -

                  Detect frames that are (almost) completely black. Can be useful to -detect chapter transitions or commercials. Output lines consist of -the frame number of the detected frame, the percentage of blackness, -the position in the file if known or -1 and the timestamp in seconds. -

                  -

                  In order to display the output lines, you need to set the loglevel at -least to the AV_LOG_INFO value. -

                  -

                  The filter accepts the syntax: -

                   
                  blackframe[=amount:[threshold]]
                  -
                  - -

                  amount is the percentage of the pixels that have to be below the -threshold, and defaults to 98. -

                  -

                  threshold is the threshold below which a pixel value is -considered black, and defaults to 32. -

                  - -

                  24.3 boxblur

                  - -

                  Apply boxblur algorithm to the input video. -

                  -

                  This filter accepts the parameters: -luma_radius:luma_power:chroma_radius:chroma_power:alpha_radius:alpha_power -

                  -

                  Chroma and alpha parameters are optional, if not specified they default -to the corresponding values set for luma_radius and -luma_power. -

                  -

                  luma_radius, chroma_radius, and alpha_radius represent -the radius in pixels of the box used for blurring the corresponding -input plane. They are expressions, and can contain the following -constants: -

                  -
                  w, h
                  -

                  the input width and height in pixels -

                  -
                  -
                  cw, ch
                  -

                  the input chroma image width and height in pixels -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  - -

                  The radius must be a non-negative number, and must not be greater than -the value of the expression min(w,h)/2 for the luma and alpha planes, -and of min(cw,ch)/2 for the chroma planes. -

                  -

                  luma_power, chroma_power, and alpha_power represent -how many times the boxblur filter is applied to the corresponding -plane. -

                  -

                  Some examples follow: -

                  -
                    -
                  • -Apply a boxblur filter with luma, chroma, and alpha radius -set to 2: -
                     
                    boxblur=2:1
                    -
                    - -
                  • -Set luma radius to 2, alpha and chroma radius to 0 -
                     
                    boxblur=2:1:0:0:0:0
                    -
                    - -
                  • -Set luma and chroma radius to a fraction of the video dimension -
                     
                    boxblur=min(h\,w)/10:1:min(cw\,ch)/10:1
                    -
                    - -
                  - - -

                  24.4 copy

                  - -

                  Copy the input source unchanged to the output. Mainly useful for -testing purposes. -

                  - -

                  24.5 crop

                  - -

                  Crop the input video to out_w:out_h:x:y. -

                  -

                  The parameters are expressions containing the following constants: -

                  -
                  -
                  x, y
                  -

                  the computed values for x and y. They are evaluated for -each new frame. -

                  -
                  -
                  in_w, in_h
                  -

                  the input width and height -

                  -
                  -
                  iw, ih
                  -

                  same as in_w and in_h -

                  -
                  -
                  out_w, out_h
                  -

                  the output (cropped) width and height -

                  -
                  -
                  ow, oh
                  -

                  same as out_w and out_h -

                  -
                  -
                  a
                  -

                  same as iw / ih -

                  -
                  -
                  sar
                  -

                  input sample aspect ratio -

                  -
                  -
                  dar
                  -

                  input display aspect ratio, it is the same as (iw / ih) * sar -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  -
                  n
                  -

                  the number of input frame, starting from 0 -

                  -
                  -
                  pos
                  -

                  the position in the file of the input frame, NAN if unknown -

                  -
                  -
                  t
                  -

                  timestamp expressed in seconds, NAN if the input timestamp is unknown -

                  -
                  -
                  - -

                  The out_w and out_h parameters specify the expressions for -the width and height of the output (cropped) video. They are -evaluated just at the configuration of the filter. -

                  -

                  The default value of out_w is "in_w", and the default value of -out_h is "in_h". -

                  -

                  The expression for out_w may depend on the value of out_h, -and the expression for out_h may depend on out_w, but they -cannot depend on x and y, as x and y are -evaluated after out_w and out_h. -

                  -

                  The x and y parameters specify the expressions for the -position of the top-left corner of the output (non-cropped) area. They -are evaluated for each frame. If the evaluated value is not valid, it -is approximated to the nearest valid value. -

                  -

                  The default value of x is "(in_w-out_w)/2", and the default -value for y is "(in_h-out_h)/2", which set the cropped area at -the center of the input image. -

                  -

                  The expression for x may depend on y, and the expression -for y may depend on x. -

                  -

                  Follow some examples: -

                   
                  # crop the central input area with size 100x100
                  -crop=100:100
                  -
                  -# crop the central input area with size 2/3 of the input video
                  -"crop=2/3*in_w:2/3*in_h"
                  -
                  -# crop the input video central square
                  -crop=in_h
                  -
                  -# delimit the rectangle with the top-left corner placed at position
                  -# 100:100 and the right-bottom corner corresponding to the right-bottom
                  -# corner of the input image.
                  -crop=in_w-100:in_h-100:100:100
                  -
                  -# crop 10 pixels from the left and right borders, and 20 pixels from
                  -# the top and bottom borders
                  -"crop=in_w-2*10:in_h-2*20"
                  -
                  -# keep only the bottom right quarter of the input image
                  -"crop=in_w/2:in_h/2:in_w/2:in_h/2"
                  -
                  -# crop height for getting Greek harmony
                  -"crop=in_w:1/PHI*in_w"
                  -
                  -# trembling effect
                  -"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)"
                  -
                  -# erratic camera effect depending on timestamp
                  -"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"
                  -
                  -# set x depending on the value of y
                  -"crop=in_w/2:in_h/2:y:10+10*sin(n/10)"
                  -
                  - - -

                  24.6 cropdetect

                  - -

                  Auto-detect crop size. -

                  -

                  Calculate necessary cropping parameters and prints the recommended -parameters through the logging system. The detected dimensions -correspond to the non-black area of the input video. -

                  -

                  It accepts the syntax: -

                   
                  cropdetect[=limit[:round[:reset]]]
                  -
                  - -
                  -
                  limit
                  -

                  Threshold, which can be optionally specified from nothing (0) to -everything (255), defaults to 24. -

                  -
                  -
                  round
                  -

                  Value which the width/height should be divisible by, defaults to -16. The offset is automatically adjusted to center the video. Use 2 to -get only even dimensions (needed for 4:2:2 video). 16 is best when -encoding to most video codecs. -

                  -
                  -
                  reset
                  -

                  Counter that determines after how many frames cropdetect will reset -the previously detected largest video area and start over to detect -the current optimal crop area. Defaults to 0. -

                  -

                  This can be useful when channel logos distort the video area. 0 -indicates never reset and return the largest area encountered during -playback. -

                  -
                  - - -

                  24.7 delogo

                  - -

                  Suppress a TV station logo by a simple interpolation of the surrounding -pixels. Just set a rectangle covering the logo and watch it disappear -(and sometimes something even uglier appear - your mileage may vary). -

                  -

                  The filter accepts parameters as a string of the form -"x:y:w:h:band", or as a list of -key=value pairs, separated by ":". -

                  -

                  The description of the accepted parameters follows. -

                  -
                  -
                  x, y
                  -

                  Specify the top left corner coordinates of the logo. They must be -specified. -

                  -
                  -
                  w, h
                  -

                  Specify the width and height of the logo to clear. They must be -specified. -

                  -
                  -
                  band, t
                  -

                  Specify the thickness of the fuzzy edge of the rectangle (added to -w and h). The default value is 4. -

                  -
                  -
                  show
                  -

                  When set to 1, a green rectangle is drawn on the screen to simplify -finding the right x, y, w, h parameters, and -band is set to 4. The default value is 0. -

                  -
                  -
                  - -

                  Some examples follow. -

                  -
                    -
                  • -Set a rectangle covering the area with top left corner coordinates 0,0 -and size 100x77, setting a band of size 10: -
                     
                    delogo=0:0:100:77:10
                    -
                    - -
                  • -As the previous example, but use named options: -
                     
                    delogo=x=0:y=0:w=100:h=77:band=10
                    -
                    - -
                  - - -

                  24.8 deshake

                  - -

                  Attempt to fix small changes in horizontal and/or vertical shift. This -filter helps remove camera shake from hand-holding a camera, bumping a -tripod, moving on a vehicle, etc. -

                  -

                  The filter accepts parameters as a string of the form -"x:y:w:h:rx:ry:edge:blocksize:contrast:search:filename" -

                  -

                  A description of the accepted parameters follows. -

                  -
                  -
                  x, y, w, h
                  -

                  Specify a rectangular area where to limit the search for motion -vectors. -If desired the search for motion vectors can be limited to a -rectangular area of the frame defined by its top left corner, width -and height. These parameters have the same meaning as the drawbox -filter which can be used to visualise the position of the bounding -box. -

                  -

                  This is useful when simultaneous movement of subjects within the frame -might be confused for camera motion by the motion vector search. -

                  -

                  If any or all of x, y, w and h are set to -1 -then the full frame is used. This allows later options to be set -without specifying the bounding box for the motion vector search. -

                  -

                  Default - search the whole frame. -

                  -
                  -
                  rx, ry
                  -

                  Specify the maximum extent of movement in x and y directions in the -range 0-64 pixels. Default 16. -

                  -
                  -
                  edge
                  -

                  Specify how to generate pixels to fill blanks at the edge of the -frame. An integer from 0 to 3 as follows: -

                  -
                  0
                  -

                  Fill zeroes at blank locations -

                  -
                  1
                  -

                  Original image at blank locations -

                  -
                  2
                  -

                  Extruded edge value at blank locations -

                  -
                  3
                  -

                  Mirrored edge at blank locations -

                  -
                  - -

                  The default setting is mirror edge at blank locations. -

                  -
                  -
                  blocksize
                  -

                  Specify the blocksize to use for motion search. Range 4-128 pixels, -default 8. -

                  -
                  -
                  contrast
                  -

                  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. -

                  -
                  -
                  search
                  -

                  Specify the search strategy 0 = exhaustive search, 1 = less exhaustive -search. Default - exhaustive search. -

                  -
                  -
                  filename
                  -

                  If set then a detailed log of the motion search is written to the -specified file. -

                  -
                  -
                  - - -

                  24.9 drawbox

                  - -

                  Draw a colored box on the input image. -

                  -

                  It accepts the syntax: -

                   
                  drawbox=x:y:width:height:color
                  -
                  - -
                  -
                  x, y
                  -

                  Specify the top left corner coordinates of the box. Default to 0. -

                  -
                  -
                  width, height
                  -

                  Specify the width and height of the box, if 0 they are interpreted as -the input width and height. Default to 0. -

                  -
                  -
                  color
                  -

                  Specify the color of the box to write, it can be the name of a color -(case insensitive match) or a 0xRRGGBB[AA] sequence. -

                  -
                  - -

                  Follow some examples: -

                   
                  # draw a black box around the edge of the input image
                  -drawbox
                  -
                  -# draw a box with color red and an opacity of 50%
                  -drawbox=10:20:200:60:red@0.5"
                  -
                  - - -

                  24.10 drawtext

                  - -

                  Draw text string or text from specified file on top of video using the -libfreetype library. -

                  -

                  To enable compilation of this filter you need to configure FFmpeg with ---enable-libfreetype. -

                  -

                  The filter also recognizes strftime() sequences in the provided text -and expands them accordingly. Check the documentation of strftime(). -

                  -

                  The filter accepts parameters as a list of key=value pairs, -separated by ":". -

                  -

                  The description of the accepted parameters follows. -

                  -
                  -
                  fontfile
                  -

                  The font file to be used for drawing text. Path must be included. -This parameter is mandatory. -

                  -
                  -
                  text
                  -

                  The text string to be drawn. The text must be a sequence of UTF-8 -encoded characters. -This parameter is mandatory if no file is specified with the parameter -textfile. -

                  -
                  -
                  textfile
                  -

                  A text file containing text to be drawn. The text must be a sequence -of UTF-8 encoded characters. -

                  -

                  This parameter is mandatory if no text string is specified with the -parameter text. -

                  -

                  If both text and textfile are specified, an error is thrown. -

                  -
                  -
                  x, y
                  -

                  The expressions which specify the offsets where text will be drawn -within the video frame. They are relative to the top/left border of the -output image. -

                  -

                  The default value of x and y is "0". -

                  -

                  See below for the list of accepted constants. -

                  -
                  -
                  fontsize
                  -

                  The font size to be used for drawing text. -The default value of fontsize is 16. -

                  -
                  -
                  fontcolor
                  -

                  The color to be used for drawing fonts. -Either a string (e.g. "red") or in 0xRRGGBB[AA] format -(e.g. "0xff000033"), possibly followed by an alpha specifier. -The default value of fontcolor is "black". -

                  -
                  -
                  boxcolor
                  -

                  The color to be used for drawing box around text. -Either a string (e.g. "yellow") or in 0xRRGGBB[AA] format -(e.g. "0xff00ff"), possibly followed by an alpha specifier. -The default value of boxcolor is "white". -

                  -
                  -
                  box
                  -

                  Used to draw a box around text using background color. -Value should be either 1 (enable) or 0 (disable). -The default value of box is 0. -

                  -
                  -
                  shadowx, shadowy
                  -

                  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". -

                  -
                  -
                  shadowcolor
                  -

                  The color to be used for drawing a shadow behind the drawn text. It -can be a color name (e.g. "yellow") or a string in the 0xRRGGBB[AA] -form (e.g. "0xff00ff"), possibly followed by an alpha specifier. -The default value of shadowcolor is "black". -

                  -
                  -
                  ft_load_flags
                  -

                  Flags to be used for loading the fonts. -

                  -

                  The flags map the corresponding flags supported by libfreetype, and are -a combination of the following values: -

                  -
                  default
                  -
                  no_scale
                  -
                  no_hinting
                  -
                  render
                  -
                  no_bitmap
                  -
                  vertical_layout
                  -
                  force_autohint
                  -
                  crop_bitmap
                  -
                  pedantic
                  -
                  ignore_global_advance_width
                  -
                  no_recurse
                  -
                  ignore_transform
                  -
                  monochrome
                  -
                  linear_design
                  -
                  no_autohint
                  -
                  end table
                  -
                  - -

                  Default value is "render". -

                  -

                  For more information consult the documentation for the FT_LOAD_* -libfreetype flags. -

                  -
                  -
                  tabsize
                  -

                  The size in number of spaces to use for rendering the tab. -Default value is 4. -

                  -
                  - -

                  The parameters for x and y are expressions containing the -following constants: -

                  -
                  -
                  W, H
                  -

                  the input width and height -

                  -
                  -
                  tw, text_w
                  -

                  the width of the rendered text -

                  -
                  -
                  th, text_h
                  -

                  the height of the rendered text -

                  -
                  -
                  lh, line_h
                  -

                  the height of each text line -

                  -
                  -
                  sar
                  -

                  input sample aspect ratio -

                  -
                  -
                  dar
                  -

                  input display aspect ratio, it is the same as (w / h) * sar -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  -
                  max_glyph_w
                  -

                  maximum glyph width, that is the maximum width for all the glyphs -contained in the rendered text -

                  -
                  -
                  max_glyph_h
                  -

                  maximum glyph height, that is the maximum height for all the glyphs -contained in the rendered text, it is equivalent to ascent - -descent. -

                  -
                  -
                  max_glyph_a, ascent
                  -
                  -

                  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. -

                  -
                  -
                  max_glyph_d, descent
                  -

                  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. -

                  -
                  -
                  n
                  -

                  the number of input frame, starting from 0 -

                  -
                  -
                  t
                  -

                  timestamp expressed in seconds, NAN if the input timestamp is unknown -

                  -
                  -
                  timecode
                  -

                  initial timecode representation in "hh:mm:ss[:;.]ff" format. It can be used -with or without text parameter. rate option must be specified. -Note that timecode options are not effective if FFmpeg is build with ---disable-avcodec. -

                  -
                  -
                  r, rate
                  -

                  frame rate (timecode only) -

                  -
                  - -

                  Some examples follow. -

                  -
                    -
                  • -Draw "Test Text" with font FreeSerif, using the default values for the -optional parameters. - -
                     
                    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
                    -
                    - -
                  • -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%. - -
                     
                    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
                    -          x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
                    -
                    - -

                    Note that the double quotes are not necessary if spaces are not used -within the parameter list. -

                    -
                  • -Show the text at the center of the video frame: -
                     
                    drawtext=fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
                    -
                    - -
                  • -Show a text line sliding from right to left in the last row of the video -frame. The file ‘LONG_LINE’ is assumed to contain a single line -with no newlines. -
                     
                    drawtext=fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t
                    -
                    - -
                  • -Show the content of file ‘CREDITS’ off the bottom of the frame and scroll up. -
                     
                    drawtext=fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
                    -
                    - -
                  • -Draw a single green letter "g", at the center of the input video. -The glyph baseline is placed at half screen height. -
                     
                    drawtext=fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent
                    -
                    - -
                  - -

                  For more information about libfreetype, check: -http://www.freetype.org/. -

                  - -

                  24.11 fade

                  - -

                  Apply fade-in/out effect to input video. -

                  -

                  It accepts the parameters: -type:start_frame:nb_frames[:options] -

                  -

                  type specifies if the effect type, can be either "in" for -fade-in, or "out" for a fade-out effect. -

                  -

                  start_frame specifies the number of the start frame for starting -to apply the fade effect. -

                  -

                  nb_frames specifies the number of frames for which the fade -effect has to last. At the end of the fade-in effect the output video -will have the same intensity as the input video, at the end of the -fade-out transition the output video will be completely black. -

                  -

                  options is an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                  -
                  -
                  type, t
                  -

                  See type. -

                  -
                  -
                  start_frame, s
                  -

                  See start_frame. -

                  -
                  -
                  nb_frames, n
                  -

                  See nb_frames. -

                  -
                  -
                  alpha
                  -

                  If set to 1, fade only alpha channel, if one exists on the input. -Default value is 0. -

                  -
                  - -

                  A few usage examples follow, usable too as test scenarios. -

                   
                  # fade in first 30 frames of video
                  -fade=in:0:30
                  -
                  -# fade out last 45 frames of a 200-frame video
                  -fade=out:155:45
                  -
                  -# fade in first 25 frames and fade out last 25 frames of a 1000-frame video
                  -fade=in:0:25, fade=out:975:25
                  -
                  -# make first 5 frames black, then fade in from frame 5-24
                  -fade=in:5:20
                  -
                  -# fade in alpha over first 25 frames of video
                  -fade=in:0:25:alpha=1
                  -
                  - - -

                  24.12 fieldorder

                  - -

                  Transform the field order of the input video. -

                  -

                  It accepts one parameter which specifies the required field order that -the input interlaced video will be transformed to. The parameter can -assume one of the following values: -

                  -
                  -
                  0 or bff
                  -

                  output bottom field first -

                  -
                  1 or tff
                  -

                  output top field first -

                  -
                  - -

                  Default value is "tff". -

                  -

                  Transformation is achieved by shifting the picture content up or down -by one line, and filling the remaining line with appropriate picture content. -This method is consistent with most broadcast field order converters. -

                  -

                  If the input video is not flagged as being interlaced, or it is already -flagged as being of the required output field order then this filter does -not alter the incoming video. -

                  -

                  This filter is very useful when converting to or from PAL DV material, -which is bottom field first. -

                  -

                  For example: -

                   
                  ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
                  -
                  - - -

                  24.13 fifo

                  - -

                  Buffer input images and send them when they are requested. -

                  -

                  This filter is mainly useful when auto-inserted by the libavfilter -framework. -

                  -

                  The filter does not take parameters. -

                  - -

                  24.14 format

                  - -

                  Convert the input video to one of the specified pixel formats. -Libavfilter will try to pick one that is supported for the input to -the next filter. -

                  -

                  The filter accepts a list of pixel format names, separated by ":", -for example "yuv420p:monow:rgb24". -

                  -

                  Some examples follow: -

                   
                  # convert the input video to the format "yuv420p"
                  -format=yuv420p
                  -
                  -# convert the input video to any of the formats in the list
                  -format=yuv420p:yuv444p:yuv410p
                  -
                  - -

                  -

                  -

                  24.15 frei0r

                  - -

                  Apply a frei0r effect to the input video. -

                  -

                  To enable compilation of this filter you need to install the frei0r -header and configure FFmpeg with --enable-frei0r. -

                  -

                  The filter supports the syntax: -

                   
                  filter_name[{:|=}param1:param2:...:paramN]
                  -
                  - -

                  filter_name is the name to the frei0r effect to load. If the -environment variable FREI0R_PATH is defined, the frei0r effect -is searched in each one of the directories specified by the colon -separated list in FREIOR_PATH, otherwise in the standard frei0r -paths, which are in this order: ‘HOME/.frei0r-1/lib/’, -‘/usr/local/lib/frei0r-1/’, ‘/usr/lib/frei0r-1/’. -

                  -

                  param1, param2, ... , paramN specify the parameters -for the frei0r effect. -

                  -

                  A frei0r effect parameter can be a boolean (whose values are specified -with "y" and "n"), a double, a color (specified by the syntax -R/G/B, R, G, and B being float -numbers from 0.0 to 1.0) or by an av_parse_color() color -description), a position (specified by the syntax X/Y, -X and Y being float numbers) and a string. -

                  -

                  The number and kind of parameters depend on the loaded effect. If an -effect parameter is not specified the default value is set. -

                  -

                  Some examples follow: -

                   
                  # apply the distort0r effect, set the first two double parameters
                  -frei0r=distort0r:0.5:0.01
                  -
                  -# apply the colordistance effect, takes a color as first parameter
                  -frei0r=colordistance:0.2/0.3/0.4
                  -frei0r=colordistance:violet
                  -frei0r=colordistance:0x112233
                  -
                  -# apply the perspective effect, specify the top left and top right
                  -# image positions
                  -frei0r=perspective:0.2/0.2:0.8/0.2
                  -
                  - -

                  For more information see: -http://piksel.org/frei0r -

                  - -

                  24.16 gradfun

                  - -

                  Fix the banding artifacts that are sometimes introduced into nearly flat -regions by truncation to 8bit color depth. -Interpolate the gradients that should go where the bands are, and -dither them. -

                  -

                  This filter is designed for playback only. Do not use it prior to -lossy compression, because compression tends to lose the dither and -bring back the bands. -

                  -

                  The filter takes two optional parameters, separated by ’:’: -strength:radius -

                  -

                  strength is the maximum amount by which the filter will change -any one pixel. Also the threshold for detecting nearly flat -regions. Acceptable values range from .51 to 255, default value is -1.2, out-of-range values will be clipped to the valid range. -

                  -

                  radius is the neighborhood to fit the gradient to. A larger -radius makes for smoother gradients, but also prevents the filter from -modifying the pixels near detailed regions. Acceptable values are -8-32, default value is 16, out-of-range values will be clipped to the -valid range. -

                  -
                   
                  # default parameters
                  -gradfun=1.2:16
                  -
                  -# omitting radius
                  -gradfun=1.2
                  -
                  - - -

                  24.17 hflip

                  - -

                  Flip the input video horizontally. -

                  -

                  For example to horizontally flip the input video with ffmpeg: -

                   
                  ffmpeg -i in.avi -vf "hflip" out.avi
                  -
                  - - -

                  24.18 hqdn3d

                  - -

                  High precision/quality 3d denoise filter. This filter aims to reduce -image noise producing smooth images and making still images really -still. It should enhance compressibility. -

                  -

                  It accepts the following optional parameters: -luma_spatial:chroma_spatial:luma_tmp:chroma_tmp -

                  -
                  -
                  luma_spatial
                  -

                  a non-negative float number which specifies spatial luma strength, -defaults to 4.0 -

                  -
                  -
                  chroma_spatial
                  -

                  a non-negative float number which specifies spatial chroma strength, -defaults to 3.0*luma_spatial/4.0 -

                  -
                  -
                  luma_tmp
                  -

                  a float number which specifies luma temporal strength, defaults to -6.0*luma_spatial/4.0 -

                  -
                  -
                  chroma_tmp
                  -

                  a float number which specifies chroma temporal strength, defaults to -luma_tmp*chroma_spatial/luma_spatial -

                  -
                  - - -

                  24.19 lut, lutrgb, lutyuv

                  - -

                  Compute a look-up table for binding each pixel component input value -to an output value, and apply it to input video. -

                  -

                  lutyuv applies a lookup table to a YUV input video, lutrgb -to an RGB input video. -

                  -

                  These filters accept in input a ":"-separated list of options, which -specify the expressions used for computing the lookup table for the -corresponding pixel component values. -

                  -

                  The lut filter requires either YUV or RGB pixel formats in -input, and accepts the options: -

                  -
                  c0
                  -

                  first pixel component -

                  -
                  c1
                  -

                  second pixel component -

                  -
                  c2
                  -

                  third pixel component -

                  -
                  c3
                  -

                  fourth pixel component, corresponds to the alpha component -

                  -
                  - -

                  The exact component associated to each option depends on the format in -input. -

                  -

                  The lutrgb filter requires RGB pixel formats in input, and -accepts the options: -

                  -
                  r
                  -

                  red component -

                  -
                  g
                  -

                  green component -

                  -
                  b
                  -

                  blue component -

                  -
                  a
                  -

                  alpha component -

                  -
                  - -

                  The lutyuv filter requires YUV pixel formats in input, and -accepts the options: -

                  -
                  y
                  -

                  Y/luminance component -

                  -
                  u
                  -

                  U/Cb component -

                  -
                  v
                  -

                  V/Cr component -

                  -
                  a
                  -

                  alpha component -

                  -
                  - -

                  The expressions can contain the following constants and functions: -

                  -
                  -
                  w, h
                  -

                  the input width and height -

                  -
                  -
                  val
                  -

                  input value for the pixel component -

                  -
                  -
                  clipval
                  -

                  the input value clipped in the minval-maxval range -

                  -
                  -
                  maxval
                  -

                  maximum value for the pixel component -

                  -
                  -
                  minval
                  -

                  minimum value for the pixel component -

                  -
                  -
                  negval
                  -

                  the negated value for the pixel component value clipped in the -minval-maxval range , it corresponds to the expression -"maxval-clipval+minval" -

                  -
                  -
                  clip(val)
                  -

                  the computed value in val clipped in the -minval-maxval range -

                  -
                  -
                  gammaval(gamma)
                  -

                  the computed gamma correction value of the pixel component value -clipped in the minval-maxval range, corresponds to the -expression -"pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval" -

                  -
                  -
                  - -

                  All expressions default to "val". -

                  -

                  Some examples follow: -

                   
                  # negate input video
                  -lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
                  -lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
                  -
                  -# the above is the same as
                  -lutrgb="r=negval:g=negval:b=negval"
                  -lutyuv="y=negval:u=negval:v=negval"
                  -
                  -# negate luminance
                  -lutyuv=y=negval
                  -
                  -# remove chroma components, turns the video into a graytone image
                  -lutyuv="u=128:v=128"
                  -
                  -# apply a luma burning effect
                  -lutyuv="y=2*val"
                  -
                  -# remove green and blue components
                  -lutrgb="g=0:b=0"
                  -
                  -# set a constant alpha channel value on input
                  -format=rgba,lutrgb=a="maxval-minval/2"
                  -
                  -# correct luminance gamma by a 0.5 factor
                  -lutyuv=y=gammaval(0.5)
                  -
                  - - -

                  24.20 mp

                  - -

                  Apply an MPlayer filter to the input video. -

                  -

                  This filter provides a wrapper around most of the filters of -MPlayer/MEncoder. -

                  -

                  This wrapper is considered experimental. Some of the wrapped filters -may not work properly and we may drop support for them, as they will -be implemented natively into FFmpeg. Thus you should avoid -depending on them when writing portable scripts. -

                  -

                  The filters accepts the parameters: -filter_name[:=]filter_params -

                  -

                  filter_name is the name of a supported MPlayer filter, -filter_params is a string containing the parameters accepted by -the named filter. -

                  -

                  The list of the currently supported filters follows: -

                  -
                  2xsai
                  -
                  decimate
                  -
                  denoise3d
                  -
                  detc
                  -
                  dint
                  -
                  divtc
                  -
                  down3dright
                  -
                  dsize
                  -
                  eq2
                  -
                  eq
                  -
                  field
                  -
                  fil
                  -
                  fixpts
                  -
                  framestep
                  -
                  fspp
                  -
                  geq
                  -
                  harddup
                  -
                  hqdn3d
                  -
                  hue
                  -
                  il
                  -
                  ilpack
                  -
                  ivtc
                  -
                  kerndeint
                  -
                  mcdeint
                  -
                  mirror
                  -
                  noise
                  -
                  ow
                  -
                  palette
                  -
                  perspective
                  -
                  phase
                  -
                  pp7
                  -
                  pullup
                  -
                  qp
                  -
                  rectangle
                  -
                  remove-logo
                  -
                  rotate
                  -
                  sab
                  -
                  screenshot
                  -
                  smartblur
                  -
                  softpulldown
                  -
                  softskip
                  -
                  spp
                  -
                  swapuv
                  -
                  telecine
                  -
                  tile
                  -
                  tinterlace
                  -
                  unsharp
                  -
                  uspp
                  -
                  yuvcsp
                  -
                  yvu9
                  -
                  - -

                  The parameter syntax and behavior for the listed filters are the same -of the corresponding MPlayer filters. For detailed instructions check -the "VIDEO FILTERS" section in the MPlayer manual. -

                  -

                  Some examples follow: -

                   
                  # remove a logo by interpolating the surrounding pixels
                  -mp=delogo=200:200:80:20:1
                  -
                  -# adjust gamma, brightness, contrast
                  -mp=eq2=1.0:2:0.5
                  -
                  -# tweak hue and saturation
                  -mp=hue=100:-10
                  -
                  - -

                  See also mplayer(1), http://www.mplayerhq.hu/. -

                  - -

                  24.21 negate

                  - -

                  Negate input video. -

                  -

                  This filter accepts an integer in input, if non-zero it negates the -alpha component (if available). The default value in input is 0. -

                  - -

                  24.22 noformat

                  - -

                  Force libavfilter not to use any of the specified pixel formats for the -input to the next filter. -

                  -

                  The filter accepts a list of pixel format names, separated by ":", -for example "yuv420p:monow:rgb24". -

                  -

                  Some examples follow: -

                   
                  # force libavfilter to use a format different from "yuv420p" for the
                  -# input to the vflip filter
                  -noformat=yuv420p,vflip
                  -
                  -# convert the input video to any of the formats not contained in the list
                  -noformat=yuv420p:yuv444p:yuv410p
                  -
                  - - -

                  24.23 null

                  - -

                  Pass the video source unchanged to the output. -

                  - -

                  24.24 ocv

                  - -

                  Apply video transform using libopencv. -

                  -

                  To enable this filter install libopencv library and headers and -configure FFmpeg with --enable-libopencv. -

                  -

                  The filter takes the parameters: filter_name{:=}filter_params. -

                  -

                  filter_name is the name of the libopencv filter to apply. -

                  -

                  filter_params specifies the parameters to pass to the libopencv -filter. If not specified the default values are assumed. -

                  -

                  Refer to the official libopencv documentation for more precise -information: -http://opencv.willowgarage.com/documentation/c/image_filtering.html -

                  -

                  Follows the list of supported libopencv filters. -

                  -

                  -

                  -

                  24.24.1 dilate

                  - -

                  Dilate an image by using a specific structuring element. -This filter corresponds to the libopencv function cvDilate. -

                  -

                  It accepts the parameters: struct_el:nb_iterations. -

                  -

                  struct_el represents a structuring element, and has the syntax: -colsxrows+anchor_xxanchor_y/shape -

                  -

                  cols and rows represent the number of columns and rows of -the structuring element, anchor_x and anchor_y the anchor -point, and shape the shape for the structuring element, and -can be one of the values "rect", "cross", "ellipse", "custom". -

                  -

                  If the value for shape is "custom", it must be followed by a -string of the form "=filename". The file with name -filename is assumed to represent a binary image, with each -printable character corresponding to a bright pixel. When a custom -shape is used, cols and rows are ignored, the number -or columns and rows of the read file are assumed instead. -

                  -

                  The default value for struct_el is "3x3+0x0/rect". -

                  -

                  nb_iterations specifies the number of times the transform is -applied to the image, and defaults to 1. -

                  -

                  Follow some example: -

                   
                  # use the default values
                  -ocv=dilate
                  -
                  -# dilate using a structuring element with a 5x5 cross, iterate two times
                  -ocv=dilate=5x5+2x2/cross:2
                  -
                  -# read the shape from the file diamond.shape, iterate two times
                  -# the file diamond.shape may contain a pattern of characters like this:
                  -#   *
                  -#  ***
                  -# *****
                  -#  ***
                  -#   *
                  -# the specified cols and rows are ignored (but not the anchor point coordinates)
                  -ocv=0x0+2x2/custom=diamond.shape:2
                  -
                  - - -

                  24.24.2 erode

                  - -

                  Erode an image by using a specific structuring element. -This filter corresponds to the libopencv function cvErode. -

                  -

                  The filter accepts the parameters: struct_el:nb_iterations, -with the same syntax and semantics as the dilate filter. -

                  - -

                  24.24.3 smooth

                  - -

                  Smooth the input video. -

                  -

                  The filter takes the following parameters: -type:param1:param2:param3:param4. -

                  -

                  type is the type of smooth filter to apply, and can be one of -the following values: "blur", "blur_no_scale", "median", "gaussian", -"bilateral". The default value is "gaussian". -

                  -

                  param1, param2, param3, and param4 are -parameters whose meanings depend on smooth type. param1 and -param2 accept integer positive values or 0, param3 and -param4 accept float values. -

                  -

                  The default value for param1 is 3, the default value for the -other parameters is 0. -

                  -

                  These parameters correspond to the parameters assigned to the -libopencv function cvSmooth. -

                  -

                  -

                  -

                  24.25 overlay

                  - -

                  Overlay one video on top of another. -

                  -

                  It takes two inputs and one output, the first input is the "main" -video on which the second input is overlayed. -

                  -

                  It accepts the parameters: x:y[:options]. -

                  -

                  x is the x coordinate of the overlayed video on the main video, -y is the y coordinate. x and y are expressions containing -the following parameters: -

                  -
                  -
                  main_w, main_h
                  -

                  main input width and height -

                  -
                  -
                  W, H
                  -

                  same as main_w and main_h -

                  -
                  -
                  overlay_w, overlay_h
                  -

                  overlay input width and height -

                  -
                  -
                  w, h
                  -

                  same as overlay_w and overlay_h -

                  -
                  - -

                  options is an optional list of key=value pairs, -separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  rgb
                  -

                  If set to 1, force the filter to accept inputs in the RGB -color space. Default value is 0. -

                  -
                  - -

                  Be aware that frames are taken from each input video in timestamp -order, hence, if their initial timestamps differ, it is a a good idea -to pass the two inputs through a setpts=PTS-STARTPTS filter to -have them begin in the same zero timestamp, as it does the example for -the movie filter. -

                  -

                  Follow some examples: -

                   
                  # draw the overlay at 10 pixels from the bottom right
                  -# corner of the main video.
                  -overlay=main_w-overlay_w-10:main_h-overlay_h-10
                  -
                  -# insert a transparent PNG logo in the bottom left corner of the input
                  -movie=logo.png [logo];
                  -[in][logo] overlay=10:main_h-overlay_h-10 [out]
                  -
                  -# insert 2 different transparent PNG logos (second logo on bottom
                  -# right corner):
                  -movie=logo1.png [logo1];
                  -movie=logo2.png [logo2];
                  -[in][logo1]       overlay=10:H-h-10 [in+logo1];
                  -[in+logo1][logo2] overlay=W-w-10:H-h-10 [out]
                  -
                  -# add a transparent color layer on top of the main video,
                  -# WxH specifies the size of the main input to the overlay filter
                  -color=red.3:WxH [over]; [in][over] overlay [out]
                  -
                  - -

                  You can chain together more overlays but the efficiency of such -approach is yet to be tested. -

                  - -

                  24.26 pad

                  - -

                  Add paddings to the input image, and places the original input at the -given coordinates x, y. -

                  -

                  It accepts the following parameters: -width:height:x:y:color. -

                  -

                  The parameters width, height, x, and y are -expressions containing the following constants: -

                  -
                  -
                  in_w, in_h
                  -

                  the input video width and height -

                  -
                  -
                  iw, ih
                  -

                  same as in_w and in_h -

                  -
                  -
                  out_w, out_h
                  -

                  the output width and height, that is the size of the padded area as -specified by the width and height expressions -

                  -
                  -
                  ow, oh
                  -

                  same as out_w and out_h -

                  -
                  -
                  x, y
                  -

                  x and y offsets as specified by the x and y -expressions, or NAN if not yet specified -

                  -
                  -
                  a
                  -

                  same as iw / ih -

                  -
                  -
                  sar
                  -

                  input sample aspect ratio -

                  -
                  -
                  dar
                  -

                  input display aspect ratio, it is the same as (iw / ih) * sar -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  - -

                  Follows the description of the accepted parameters. -

                  -
                  -
                  width, height
                  -
                  -

                  Specify the size of the output image with the paddings added. If the -value for width or height is 0, the corresponding input size -is used for the output. -

                  -

                  The width expression can reference the value set by the -height expression, and vice versa. -

                  -

                  The default value of width and height is 0. -

                  -
                  -
                  x, y
                  -
                  -

                  Specify the offsets where to place the input image in the padded area -with respect to the top/left border of the output image. -

                  -

                  The x expression can reference the value set by the y -expression, and vice versa. -

                  -

                  The default value of x and y is 0. -

                  -
                  -
                  color
                  -
                  -

                  Specify the color of the padded area, it can be the name of a color -(case insensitive match) or a 0xRRGGBB[AA] sequence. -

                  -

                  The default value of color is "black". -

                  -
                  -
                  - -

                  Some examples follow: -

                  -
                   
                  # Add paddings with color "violet" to the input video. Output video
                  -# size is 640x480, the top-left corner of the input video is placed at
                  -# column 0, row 40.
                  -pad=640:480:0:40:violet
                  -
                  -# pad the input to get an output with dimensions increased bt 3/2,
                  -# and put the input video at the center of the padded area
                  -pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
                  -
                  -# pad the input to get a squared output with size equal to the maximum
                  -# value between the input width and height, and put the input video at
                  -# the center of the padded area
                  -pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
                  -
                  -# pad the input to get a final w/h ratio of 16:9
                  -pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
                  -
                  -# for anamorphic video, in order to set the output display aspect ratio,
                  -# it is necessary to use sar in the expression, according to the relation:
                  -# (ih * X / ih) * sar = output_dar
                  -# X = output_dar / sar
                  -pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
                  -
                  -# double output size and put the input video in the bottom-right
                  -# corner of the output padded area
                  -pad="2*iw:2*ih:ow-iw:oh-ih"
                  -
                  - - -

                  24.27 pixdesctest

                  - -

                  Pixel format descriptor test filter, mainly useful for internal -testing. The output video should be equal to the input video. -

                  -

                  For example: -

                   
                  format=monow, pixdesctest
                  -
                  - -

                  can be used to test the monowhite pixel format descriptor definition. -

                  - -

                  24.28 scale

                  - -

                  Scale the input video to width:height[:interl={1|-1}] and/or convert the image format. -

                  -

                  The parameters width and height are expressions containing -the following constants: -

                  -
                  -
                  in_w, in_h
                  -

                  the input width and height -

                  -
                  -
                  iw, ih
                  -

                  same as in_w and in_h -

                  -
                  -
                  out_w, out_h
                  -

                  the output (cropped) width and height -

                  -
                  -
                  ow, oh
                  -

                  same as out_w and out_h -

                  -
                  -
                  a
                  -

                  same as iw / ih -

                  -
                  -
                  sar
                  -

                  input sample aspect ratio -

                  -
                  -
                  dar
                  -

                  input display aspect ratio, it is the same as (iw / ih) * sar -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  - -

                  If the input image format is different from the format requested by -the next filter, the scale filter will convert the input to the -requested format. -

                  -

                  If the value for width or height is 0, the respective input -size is used for the output. -

                  -

                  If the value for width or height is -1, the scale filter will -use, for the respective output size, a value that maintains the aspect -ratio of the input image. -

                  -

                  The default value of width and height is 0. -

                  -

                  Valid values for the optional parameter interl are: -

                  -
                  -
                  1
                  -

                  force interlaced aware scaling -

                  -
                  -
                  -1
                  -

                  select interlaced aware scaling depending on whether the source frames -are flagged as interlaced or not -

                  -
                  - -

                  Some examples follow: -

                   
                  # scale the input video to a size of 200x100.
                  -scale=200:100
                  -
                  -# scale the input to 2x
                  -scale=2*iw:2*ih
                  -# the above is the same as
                  -scale=2*in_w:2*in_h
                  -
                  -# scale the input to half size
                  -scale=iw/2:ih/2
                  -
                  -# increase the width, and set the height to the same size
                  -scale=3/2*iw:ow
                  -
                  -# seek for Greek harmony
                  -scale=iw:1/PHI*iw
                  -scale=ih*PHI:ih
                  -
                  -# increase the height, and set the width to 3/2 of the height
                  -scale=3/2*oh:3/5*ih
                  -
                  -# increase the size, but make the size a multiple of the chroma
                  -scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
                  -
                  -# increase the width to a maximum of 500 pixels, keep the same input aspect ratio
                  -scale='min(500\, iw*3/2):-1'
                  -
                  - - -

                  24.29 select

                  -

                  Select frames to pass in output. -

                  -

                  It accepts in input an expression, which is evaluated for each input -frame. If the expression is evaluated to a non-zero value, the frame -is selected and passed to the output, otherwise it is discarded. -

                  -

                  The expression can contain the following constants: -

                  -
                  -
                  n
                  -

                  the sequential number of the filtered frame, starting from 0 -

                  -
                  -
                  selected_n
                  -

                  the sequential number of the selected frame, starting from 0 -

                  -
                  -
                  prev_selected_n
                  -

                  the sequential number of the last selected frame, NAN if undefined -

                  -
                  -
                  TB
                  -

                  timebase of the input timestamps -

                  -
                  -
                  pts
                  -

                  the PTS (Presentation TimeStamp) of the filtered video frame, -expressed in TB units, NAN if undefined -

                  -
                  -
                  t
                  -

                  the PTS (Presentation TimeStamp) of the filtered video frame, -expressed in seconds, NAN if undefined -

                  -
                  -
                  prev_pts
                  -

                  the PTS of the previously filtered video frame, NAN if undefined -

                  -
                  -
                  prev_selected_pts
                  -

                  the PTS of the last previously filtered video frame, NAN if undefined -

                  -
                  -
                  prev_selected_t
                  -

                  the PTS of the last previously selected video frame, NAN if undefined -

                  -
                  -
                  start_pts
                  -

                  the PTS of the first video frame in the video, NAN if undefined -

                  -
                  -
                  start_t
                  -

                  the time of the first video frame in the video, NAN if undefined -

                  -
                  -
                  pict_type
                  -

                  the type of the filtered frame, can assume one of the following -values: -

                  -
                  I
                  -
                  P
                  -
                  B
                  -
                  S
                  -
                  SI
                  -
                  SP
                  -
                  BI
                  -
                  - -
                  -
                  interlace_type
                  -

                  the frame interlace type, can assume one of the following values: -

                  -
                  PROGRESSIVE
                  -

                  the frame is progressive (not interlaced) -

                  -
                  TOPFIRST
                  -

                  the frame is top-field-first -

                  -
                  BOTTOMFIRST
                  -

                  the frame is bottom-field-first -

                  -
                  - -
                  -
                  key
                  -

                  1 if the filtered frame is a key-frame, 0 otherwise -

                  -
                  -
                  pos
                  -

                  the position in the file of the filtered frame, -1 if the information -is not available (e.g. for synthetic video) -

                  -
                  - -

                  The default value of the select expression is "1". -

                  -

                  Some examples follow: -

                  -
                   
                  # select all frames in input
                  -select
                  -
                  -# the above is the same as:
                  -select=1
                  -
                  -# skip all frames:
                  -select=0
                  -
                  -# select only I-frames
                  -select='eq(pict_type\,I)'
                  -
                  -# select one frame every 100
                  -select='not(mod(n\,100))'
                  -
                  -# select only frames contained in the 10-20 time interval
                  -select='gte(t\,10)*lte(t\,20)'
                  -
                  -# select only I frames contained in the 10-20 time interval
                  -select='gte(t\,10)*lte(t\,20)*eq(pict_type\,I)'
                  -
                  -# select frames with a minimum distance of 10 seconds
                  -select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
                  -
                  - -

                  -

                  -

                  24.30 setdar

                  - -

                  Set the Display Aspect Ratio for the filter output video. -

                  -

                  This is done by changing the specified Sample (aka Pixel) Aspect -Ratio, according to the following equation: -DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR -

                  -

                  Keep in mind that this filter does not modify the pixel dimensions of -the video frame. Also the display aspect ratio set by this filter may -be changed by later filters in the filterchain, e.g. in case of -scaling or if another "setdar" or a "setsar" filter is applied. -

                  -

                  The filter accepts a parameter string which represents the wanted -display aspect ratio. -The parameter can be a floating point number string, or an expression -of the form num:den, where num and den are the -numerator and denominator of the aspect ratio. -If the parameter is not specified, it is assumed the value "0:1". -

                  -

                  For example to change the display aspect ratio to 16:9, specify: -

                   
                  setdar=16:9
                  -# the above is equivalent to
                  -setdar=1.77777
                  -
                  - -

                  See also the setsar filter documentation. -

                  - -

                  24.31 setpts

                  - -

                  Change the PTS (presentation timestamp) of the input video frames. -

                  -

                  Accept in input an expression evaluated through the eval API, which -can contain the following constants: -

                  -
                  -
                  PTS
                  -

                  the presentation timestamp in input -

                  -
                  -
                  N
                  -

                  the count of the input frame, starting from 0. -

                  -
                  -
                  STARTPTS
                  -

                  the PTS of the first video frame -

                  -
                  -
                  INTERLACED
                  -

                  tell if the current frame is interlaced -

                  -
                  -
                  POS
                  -

                  original position in the file of the frame, or undefined if undefined -for the current frame -

                  -
                  -
                  PREV_INPTS
                  -

                  previous input PTS -

                  -
                  -
                  PREV_OUTPTS
                  -

                  previous output PTS -

                  -
                  -
                  - -

                  Some examples follow: -

                  -
                   
                  # start counting PTS from zero
                  -setpts=PTS-STARTPTS
                  -
                  -# fast motion
                  -setpts=0.5*PTS
                  -
                  -# slow motion
                  -setpts=2.0*PTS
                  -
                  -# fixed rate 25 fps
                  -setpts=N/(25*TB)
                  -
                  -# fixed rate 25 fps with some jitter
                  -setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
                  -
                  - -

                  -

                  -

                  24.32 setsar

                  - -

                  Set the Sample (aka Pixel) Aspect Ratio for the filter output video. -

                  -

                  Note that as a consequence of the application of this filter, the -output display aspect ratio will change according to the following -equation: -DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR -

                  -

                  Keep in mind that the sample aspect ratio set by this filter may be -changed by later filters in the filterchain, e.g. if another "setsar" -or a "setdar" filter is applied. -

                  -

                  The filter accepts a parameter string which represents the wanted -sample aspect ratio. -The parameter can be a floating point number string, or an expression -of the form num:den, where num and den are the -numerator and denominator of the aspect ratio. -If the parameter is not specified, it is assumed the value "0:1". -

                  -

                  For example to change the sample aspect ratio to 10:11, specify: -

                   
                  setsar=10:11
                  -
                  - - -

                  24.33 settb

                  - -

                  Set the timebase to use for the output frames timestamps. -It is mainly useful for testing timebase configuration. -

                  -

                  It accepts in input an arithmetic expression representing a rational. -The expression can contain the constants "AVTB" (the -default timebase), and "intb" (the input timebase). -

                  -

                  The default value for the input is "intb". -

                  -

                  Follow some examples. -

                  -
                   
                  # set the timebase to 1/25
                  -settb=1/25
                  -
                  -# set the timebase to 1/10
                  -settb=0.1
                  -
                  -#set the timebase to 1001/1000
                  -settb=1+0.001
                  -
                  -#set the timebase to 2*intb
                  -settb=2*intb
                  -
                  -#set the default timebase value
                  -settb=AVTB
                  -
                  - - -

                  24.34 showinfo

                  - -

                  Show a line containing various information for each input video frame. -The input video is not modified. -

                  -

                  The shown line contains a sequence of key/value pairs of the form -key:value. -

                  -

                  A description of each shown parameter follows: -

                  -
                  -
                  n
                  -

                  sequential number of the input frame, starting from 0 -

                  -
                  -
                  pts
                  -

                  Presentation TimeStamp of the input frame, expressed as a number of -time base units. The time base unit depends on the filter input pad. -

                  -
                  -
                  pts_time
                  -

                  Presentation TimeStamp of the input frame, expressed as a number of -seconds -

                  -
                  -
                  pos
                  -

                  position of the frame in the input stream, -1 if this information in -unavailable and/or meaningless (for example in case of synthetic video) -

                  -
                  -
                  fmt
                  -

                  pixel format name -

                  -
                  -
                  sar
                  -

                  sample aspect ratio of the input frame, expressed in the form -num/den -

                  -
                  -
                  s
                  -

                  size of the input frame, expressed in the form -widthxheight -

                  -
                  -
                  i
                  -

                  interlaced mode ("P" for "progressive", "T" for top field first, "B" -for bottom field first) -

                  -
                  -
                  iskey
                  -

                  1 if the frame is a key frame, 0 otherwise -

                  -
                  -
                  type
                  -

                  picture type of the input frame ("I" for an I-frame, "P" for a -P-frame, "B" for a B-frame, "?" for unknown type). -Check also the documentation of the AVPictureType enum and of -the av_get_picture_type_char function defined in -‘libavutil/avutil.h’. -

                  -
                  -
                  checksum
                  -

                  Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame -

                  -
                  -
                  plane_checksum
                  -

                  Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, -expressed in the form "[c0 c1 c2 c3]" -

                  -
                  - - -

                  24.35 slicify

                  - -

                  Pass the images of input video on to next video filter as multiple -slices. -

                  -
                   
                  ffmpeg -i in.avi -vf "slicify=32" out.avi
                  -
                  - -

                  The filter accepts the slice height as parameter. If the parameter is -not specified it will use the default value of 16. -

                  -

                  Adding this in the beginning of filter chains should make filtering -faster due to better use of the memory cache. -

                  - -

                  24.36 split

                  - -

                  Pass on the input video to two outputs. Both outputs are identical to -the input video. -

                  -

                  For example: -

                   
                  [in] split [splitout1][splitout2];
                  -[splitout1] crop=100:100:0:0    [cropout];
                  -[splitout2] pad=200:200:100:100 [padout];
                  -
                  - -

                  will create two separate outputs from the same input, one cropped and -one padded. -

                  - -

                  24.37 thumbnail

                  -

                  Select the most representative frame in a given sequence of consecutive frames. -

                  -

                  It accepts as argument the frames batch size to analyze (default N=100); -in a set of N frames, the filter will pick one of them, and then handle -the next batch of N frames until the end. -

                  -

                  Since the filter keeps track of the whole frames sequence, a bigger N -value will result in a higher memory usage, so a high value is not recommended. -

                  -

                  The following example extract one picture each 50 frames: -

                   
                  thumbnail=50
                  -
                  - -

                  Complete example of a thumbnail creation with ffmpeg: -

                   
                  ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
                  -
                  - - -

                  24.38 tinterlace

                  - -

                  Perform various types of temporal field interlacing. -

                  -

                  Frames are counted starting from 1, so the first input frame is -considered odd. -

                  -

                  This filter accepts a single parameter specifying the mode. Available -modes are: -

                  -
                  -
                  0
                  -

                  Move odd frames into the upper field, even into the lower field, -generating a double height frame at half framerate. -

                  -
                  -
                  1
                  -

                  Only output even frames, odd frames are dropped, generating a frame with -unchanged height at half framerate. -

                  -
                  -
                  2
                  -

                  Only output odd frames, even frames are dropped, generating a frame with -unchanged height at half framerate. -

                  -
                  -
                  3
                  -

                  Expand each frame to full height, but pad alternate lines with black, -generating a frame with double height at the same input framerate. -

                  -
                  -
                  4
                  -

                  Interleave the upper field from odd frames with the lower field from -even frames, generating a frame with unchanged height at half framerate. -

                  -
                  -
                  5
                  -

                  Interleave the lower field from odd frames with the upper field from -even frames, generating a frame with unchanged height at half framerate. -

                  -
                  - -

                  Default mode is 0. -

                  - -

                  24.39 transpose

                  - -

                  Transpose rows with columns in the input video and optionally flip it. -

                  -

                  It accepts a parameter representing an integer, which can assume the -values: -

                  -
                  -
                  0
                  -

                  Rotate by 90 degrees counterclockwise and vertically flip (default), that is: -

                   
                  L.R     L.l
                  -. . ->  . .
                  -l.r     R.r
                  -
                  - -
                  -
                  1
                  -

                  Rotate by 90 degrees clockwise, that is: -

                   
                  L.R     l.L
                  -. . ->  . .
                  -l.r     r.R
                  -
                  - -
                  -
                  2
                  -

                  Rotate by 90 degrees counterclockwise, that is: -

                   
                  L.R     R.r
                  -. . ->  . .
                  -l.r     L.l
                  -
                  - -
                  -
                  3
                  -

                  Rotate by 90 degrees clockwise and vertically flip, that is: -

                   
                  L.R     r.R
                  -. . ->  . .
                  -l.r     l.L
                  -
                  -
                  -
                  - - -

                  24.40 unsharp

                  - -

                  Sharpen or blur the input video. -

                  -

                  It accepts the following parameters: -luma_msize_x:luma_msize_y:luma_amount:chroma_msize_x:chroma_msize_y:chroma_amount -

                  -

                  Negative values for the amount will blur the input video, while positive -values will sharpen. All parameters are optional and default to the -equivalent of the string ’5:5:1.0:5:5:0.0’. -

                  -
                  -
                  luma_msize_x
                  -

                  Set the luma matrix horizontal size. It can be an integer between 3 -and 13, default value is 5. -

                  -
                  -
                  luma_msize_y
                  -

                  Set the luma matrix vertical size. It can be an integer between 3 -and 13, default value is 5. -

                  -
                  -
                  luma_amount
                  -

                  Set the luma effect strength. It can be a float number between -2.0 -and 5.0, default value is 1.0. -

                  -
                  -
                  chroma_msize_x
                  -

                  Set the chroma matrix horizontal size. It can be an integer between 3 -and 13, default value is 5. -

                  -
                  -
                  chroma_msize_y
                  -

                  Set the chroma matrix vertical size. It can be an integer between 3 -and 13, default value is 5. -

                  -
                  -
                  chroma_amount
                  -

                  Set the chroma effect strength. It can be a float number between -2.0 -and 5.0, default value is 0.0. -

                  -
                  -
                  - -
                   
                  # Strong luma sharpen effect parameters
                  -unsharp=7:7:2.5
                  -
                  -# Strong blur of both luma and chroma parameters
                  -unsharp=7:7:-2:7:7:-2
                  -
                  -# Use the default values with ffmpeg
                  -ffmpeg -i in.avi -vf "unsharp" out.mp4
                  -
                  - - -

                  24.41 vflip

                  - -

                  Flip the input video vertically. -

                  -
                   
                  ffmpeg -i in.avi -vf "vflip" out.avi
                  -
                  - - -

                  24.42 yadif

                  - -

                  Deinterlace the input video ("yadif" means "yet another deinterlacing -filter"). -

                  -

                  It accepts the optional parameters: mode:parity:auto. -

                  -

                  mode specifies the interlacing mode to adopt, accepts one of the -following values: -

                  -
                  -
                  0
                  -

                  output 1 frame for each frame -

                  -
                  1
                  -

                  output 1 frame for each field -

                  -
                  2
                  -

                  like 0 but skips spatial interlacing check -

                  -
                  3
                  -

                  like 1 but skips spatial interlacing check -

                  -
                  - -

                  Default value is 0. -

                  -

                  parity specifies the picture field parity assumed for the input -interlaced video, accepts one of the following values: -

                  -
                  -
                  0
                  -

                  assume top field first -

                  -
                  1
                  -

                  assume bottom field first -

                  -
                  -1
                  -

                  enable automatic detection -

                  -
                  - -

                  Default value is -1. -If interlacing is unknown or decoder does not export this information, -top field first will be assumed. -

                  -

                  auto specifies if deinterlacer should trust the interlaced flag -and only deinterlace frames marked as interlaced -

                  -
                  -
                  0
                  -

                  deinterlace all frames -

                  -
                  1
                  -

                  only deinterlace frames marked as interlaced -

                  -
                  - -

                  Default value is 0. -

                  - - -

                  25. Video Sources

                  - -

                  Below is a description of the currently available video sources. -

                  - -

                  25.1 buffer

                  - -

                  Buffer video frames, and make them available to the filter chain. -

                  -

                  This source is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/vsrc_buffer.h’. -

                  -

                  It accepts the following parameters: -width:height:pix_fmt_string:timebase_num:timebase_den:sample_aspect_ratio_num:sample_aspect_ratio.den:scale_params -

                  -

                  All the parameters but scale_params need to be explicitly -defined. -

                  -

                  Follows the list of the accepted parameters. -

                  -
                  -
                  width, height
                  -

                  Specify the width and height of the buffered video frames. -

                  -
                  -
                  pix_fmt_string
                  -

                  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. -

                  -
                  -
                  timebase_num, timebase_den
                  -

                  Specify numerator and denomitor of the timebase assumed by the -timestamps of the buffered frames. -

                  -
                  -
                  sample_aspect_ratio.num, sample_aspect_ratio.den
                  -

                  Specify numerator and denominator of the sample aspect ratio assumed -by the video frames. -

                  -
                  -
                  scale_params
                  -

                  Specify the optional parameters to be used for the scale filter which -is automatically inserted when an input change is detected in the -input size or format. -

                  -
                  - -

                  For example: -

                   
                  buffer=320:240:yuv410p:1:24:1:1
                  -
                  + +

                  8. See Also

                  -

                  will instruct the source to accept video frames with size 320x240 and -with format "yuv410p", assuming 1/24 as the timestamps timebase and -square pixels (1:1 sample aspect ratio). -Since the pixel format with name "yuv410p" corresponds to the number 6 -(check the enum PixelFormat definition in ‘libavutil/pixfmt.h’), -this example corresponds to: -

                   
                  buffer=320:240:6:1:24:1:1
                  -
                  - - -

                  25.2 cellauto

                  - -

                  Create a pattern generated by an elementary cellular automaton. -

                  -

                  The initial state of the cellular automaton can be defined through the -‘filename’, and ‘pattern’ options. If such options are -not specified an initial state is created randomly. -

                  -

                  At each new frame a new row in the video is filled with the result of -the cellular automaton next generation. The behavior when the whole -frame is filled is defined by the ‘scroll’ option. -

                  -

                  This source accepts a list of options in the form of -key=value pairs separated by ":". A description of the -accepted options follows. -

                  -
                  -
                  filename, f
                  -

                  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. -

                  -
                  -
                  pattern, p
                  -

                  Read the initial cellular automaton state, i.e. the starting row, from -the specified string. -

                  -

                  Each non-whitespace character in the string is considered an alive -cell, a newline will terminate the row, and further characters in the -string will be ignored. -

                  -
                  -
                  rate, r
                  -

                  Set the video rate, that is the number of frames generated per second. -Default is 25. -

                  -
                  -
                  random_fill_ratio, ratio
                  -

                  Set the random fill ratio for the initial cellular automaton row. It -is a floating point number value ranging from 0 to 1, defaults to -1/PHI. -

                  -

                  This option is ignored when a file or a pattern is specified. -

                  -
                  -
                  random_seed, seed
                  -

                  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. -

                  -
                  -
                  rule
                  -

                  Set the cellular automaton rule, it is a number ranging from 0 to 255. -Default value is 110. -

                  -
                  -
                  size, s
                  -

                  Set the size of the output video. -

                  -

                  If ‘filename’ or ‘pattern’ is specified, the size is set -by default to the width of the specified initial state row, and the -height is set to width * PHI. -

                  -

                  If ‘size’ is set, it must contain the width of the specified -pattern string, and the specified pattern will be centered in the -larger row. -

                  -

                  If a filename or a pattern string is not specified, the size value -defaults to "320x518" (used for a randomly generated initial state). -

                  -
                  -
                  scroll
                  -

                  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. -

                  -
                  -
                  start_full, full
                  -

                  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. -

                  -
                  -
                  stitch
                  -

                  If set to 1, stitch the left and right row edges together. -This is the default behavior, for disabling set the value to 0. -

                  -
                  - - -

                  25.2.1 Examples

                  - -
                    -
                  • -Read the initial state from ‘pattern’, and specify an output of -size 200x400. -
                     
                    cellauto=f=pattern:s=200x400
                    -
                    - -
                  • -Generate a random initial row with a width of 200 cells, with a fill -ratio of 2/3: -
                     
                    cellauto=ratio=2/3:s=200x200
                    -
                    - -
                  • -Create a pattern generated by rule 18 starting by a single alive cell -centered on an initial row with width 100: -
                     
                    cellauto=p=@:s=100x400:full=0:rule=18
                    -
                    - -
                  • -Specify a more elaborated initial pattern: -
                     
                    cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
                    -
                    - -
                  - - -

                  25.3 color

                  - -

                  Provide an uniformly colored input. -

                  -

                  It accepts the following parameters: -color:frame_size:frame_rate -

                  -

                  Follows the description of the accepted parameters. -

                  -
                  -
                  color
                  -

                  Specify the color of the source. It can be the name of a color (case -insensitive match) or a 0xRRGGBB[AA] sequence, possibly followed by an -alpha specifier. The default value is "black". -

                  -
                  -
                  frame_size
                  -

                  Specify the size of the sourced video, it may be a string of the form -widthxheight, or the name of a size abbreviation. The -default value is "320x240". -

                  -
                  -
                  frame_rate
                  -

                  Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                  -
                  -
                  - -

                  For example the following graph description will generate a red source -with an opacity of 0.2, with size "qcif" and a frame rate of 10 -frames per second, which will be overlayed over the source connected -to the pad with identifier "in". -

                  -
                   
                  "color=red@0.2:qcif:10 [color]; [in][color] overlay [out]"
                  -
                  - - -

                  25.4 movie

                  - -

                  Read a video stream from a movie container. -

                  -

                  It accepts the syntax: movie_name[:options] where -movie_name is the name of the resource to read (not necessarily -a file but also a device or a stream accessed through some protocol), -and options is an optional sequence of key=value -pairs, separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  format_name, f
                  -

                  Specifies the format assumed for the movie to read, and can be either -the name of a container or an input device. If not specified the -format is guessed from movie_name or by probing. -

                  -
                  -
                  seek_point, sp
                  -

                  Specifies the seek point in seconds, the frames will be output -starting from this seek point, the parameter is evaluated with -av_strtod so the numerical value may be suffixed by an IS -postfix. Default value is "0". -

                  -
                  -
                  stream_index, si
                  -

                  Specifies the index of the video stream to read. If the value is -1, -the best suited video stream will be automatically selected. Default -value is "-1". -

                  -
                  -
                  - -

                  This filter allows to overlay a second video on top of main input of -a filtergraph as shown in this graph: -

                   
                  input -----------> deltapts0 --> overlay --> output
                  -                                    ^
                  -                                    |
                  -movie --> scale--> deltapts1 -------+
                  -
                  - -

                  Some examples follow: -

                   
                  # skip 3.2 seconds from the start of the avi file in.avi, and overlay it
                  -# on top of the input labelled as "in".
                  -movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [movie];
                  -[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out]
                  -
                  -# read from a video4linux2 device, and overlay it on top of the input
                  -# labelled as "in"
                  -movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [movie];
                  -[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out]
                  -
                  -
                  - - -

                  25.5 mptestsrc

                  - -

                  Generate various test patterns, as generated by the MPlayer test filter. -

                  -

                  The size of the generated video is fixed, and is 256x256. -This source is useful in particular for testing encoding features. -

                  -

                  This source accepts an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                  -
                  -
                  rate, r
                  -

                  Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                  -
                  -
                  duration, d
                  -

                  Set the video duration of the sourced video. The accepted syntax is: -

                   
                  [-]HH[:MM[:SS[.m...]]]
                  -[-]S+[.m...]
                  -
                  -

                  See also the function av_parse_time(). -

                  -

                  If not specified, or the expressed duration is negative, the video is -supposed to be generated forever. -

                  -
                  -
                  test, t
                  -
                  -

                  Set the number or the name of the test to perform. Supported tests are: -

                  -
                  dc_luma
                  -
                  dc_chroma
                  -
                  freq_luma
                  -
                  freq_chroma
                  -
                  amp_luma
                  -
                  amp_chroma
                  -
                  cbp
                  -
                  mv
                  -
                  ring1
                  -
                  ring2
                  -
                  all
                  -
                  - -

                  Default value is "all", which will cycle through the list of all tests. -

                  -
                  - -

                  For example the following: -

                   
                  testsrc=t=dc_luma
                  -
                  - -

                  will generate a "dc_luma" test pattern. -

                  - -

                  25.6 frei0r_src

                  - -

                  Provide a frei0r source. -

                  -

                  To enable compilation of this filter you need to install the frei0r -header and configure FFmpeg with --enable-frei0r. -

                  -

                  The source supports the syntax: -

                   
                  size:rate:src_name[{=|:}param1:param2:...:paramN]
                  -
                  - -

                  size is the size of the video to generate, may be a string of the -form widthxheight or a frame size abbreviation. -rate is the rate of the video to generate, may be a string of -the form num/den or a frame rate abbreviation. -src_name is the name to the frei0r source to load. For more -information regarding frei0r and how to set the parameters read the -section frei0r in the description of the video filters. +

                  ffmpeg-all, +ffplay, ffprobe, ffserver, +ffmpeg-utils, +ffmpeg-scaler, +ffmpeg-resampler, +ffmpeg-codecs, +ffmpeg-bitstream-filters, +ffmpeg-formats, +ffmpeg-devices, +ffmpeg-protocols, +ffmpeg-filters

                  -

                  Some examples follow: -

                   
                  # generate a frei0r partik0l source with size 200x200 and frame rate 10
                  -# which is overlayed on the overlay filter main input
                  -frei0r_src=200x200:10:partik0l=1234 [overlay]; [in][overlay] overlay
                  -
                  - -

                  25.7 life

                  + +

                  9. Authors

                  -

                  Generate a life pattern. +

                  The FFmpeg developers.

                  -

                  This source is based on a generalization of John Conway’s life game. +

                  For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org.

                  -

                  The sourced input represents a life grid, each pixel represents a cell -which can be in one of two possible states, alive or dead. Every cell -interacts with its eight neighbours, which are the cells that are -horizontally, vertically, or diagonally adjacent. -

                  -

                  At each interaction the grid evolves according to the adopted rule, -which specifies the number of neighbor alive cells which will make a -cell stay alive or born. The ‘rule’ option allows to specify -the rule to adopt. -

                  -

                  This source accepts a list of options in the form of -key=value pairs separated by ":". A description of the -accepted options follows. -

                  -
                  -
                  filename, f
                  -

                  Set the file from which to read the initial grid state. In the file, -each non-whitespace character is considered an alive cell, and newline -is used to delimit the end of each row. -

                  -

                  If this option is not specified, the initial grid is generated -randomly. -

                  -
                  -
                  rate, r
                  -

                  Set the video rate, that is the number of frames generated per second. -Default is 25. -

                  -
                  -
                  random_fill_ratio, ratio
                  -

                  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. -

                  -
                  -
                  random_seed, seed
                  -

                  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. -

                  -
                  -
                  rule
                  -

                  Set the life rule. -

                  -

                  A rule can be specified with a code of the kind "SNS/BNB", -where NS and NB are sequences of numbers in the range 0-8, -NS specifies the number of alive neighbor cells which make a -live cell stay alive, and NB the number of alive neighbor cells -which make a dead cell to become alive (i.e. to "born"). -"s" and "b" can be used in place of "S" and "B", respectively. -

                  -

                  Alternatively a rule can be specified by an 18-bits integer. The 9 -high order bits are used to encode the next cell state if it is alive -for each number of neighbor alive cells, the low order bits specify -the rule for "borning" new cells. Higher order bits encode for an -higher number of neighbor cells. -For example the number 6153 = (12<<9)+9 specifies a stay alive -rule of 12 and a born rule of 9, which corresponds to "S23/B03". -

                  -

                  Default value is "S23/B3", which is the original Conway’s game of life -rule, and will keep a cell alive if it has 2 or 3 neighbor alive -cells, and will born a new cell if there are three alive cells around -a dead cell. -

                  -
                  -
                  size, s
                  -

                  Set the size of the output video. -

                  -

                  If ‘filename’ is specified, the size is set by default to the -same size of the input file. If ‘size’ is set, it must contain -the size specified in the input file, and the initial grid defined in -that file is centered in the larger resulting area. -

                  -

                  If a filename is not specified, the size value defaults to "320x240" -(used for a randomly generated initial grid). -

                  -
                  -
                  stitch
                  -

                  If set to 1, stitch the left and right grid edges together, and the -top and bottom edges also. Defaults to 1. -

                  -
                  -
                  mold
                  -

                  Set cell mold speed. If set, a dead cell will go from ‘death_color’ to -‘mold_color’ with a step of ‘mold’. ‘mold’ can have a -value from 0 to 255. -

                  -
                  -
                  life_color
                  -

                  Set the color of living (or new born) cells. -

                  -
                  -
                  death_color
                  -

                  Set the color of dead cells. If ‘mold’ is set, this is the first color -used to represent a dead cell. -

                  -
                  -
                  mold_color
                  -

                  Set mold color, for definitely dead and moldy cells. -

                  -
                  - - -

                  25.7.1 Examples

                  - -
                    -
                  • -Read a grid from ‘pattern’, and center it on a grid of size -300x300 pixels: -
                     
                    life=f=pattern:s=300x300
                    -
                    - -
                  • -Generate a random grid of size 200x200, with a fill ratio of 2/3: -
                     
                    life=ratio=2/3:s=200x200
                    -
                    - -
                  • -Specify a custom rule for evolving a randomly generated grid: -
                     
                    life=rule=S14/B34
                    -
                    - -
                  • -Full example with slow death effect (mold) using ffplay: -
                     
                    ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
                    -
                    -
                  - - -

                  25.8 nullsrc, rgbtestsrc, testsrc

                  - -

                  The nullsrc source returns unprocessed video frames. It is -mainly useful to be employed in analysis / debugging tools, or as the -source for filters which ignore the input data. -

                  -

                  The rgbtestsrc source generates an RGB test pattern useful for -detecting RGB vs BGR issues. You should see a red, green and blue -stripe from top to bottom. -

                  -

                  The testsrc source generates a test video pattern, showing a -color pattern, a scrolling gradient and a timestamp. This is mainly -intended for testing purposes. -

                  -

                  These sources accept an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                  -
                  -
                  size, s
                  -

                  Specify the size of the sourced video, it may be a string of the form -widthxheight, or the name of a size abbreviation. The -default value is "320x240". -

                  -
                  -
                  rate, r
                  -

                  Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                  -
                  -
                  sar
                  -

                  Set the sample aspect ratio of the sourced video. -

                  -
                  -
                  duration, d
                  -

                  Set the video duration of the sourced video. The accepted syntax is: -

                   
                  [-]HH[:MM[:SS[.m...]]]
                  -[-]S+[.m...]
                  -
                  -

                  See also the function av_parse_time(). -

                  -

                  If not specified, or the expressed duration is negative, the video is -supposed to be generated forever. -

                  -
                  -
                  decimals, n
                  -

                  Set the number of decimals to show in the timestamp, only used in the -testsrc source. -

                  -

                  The displayed timestamp value will correspond to the original -timestamp value multiplied by the power of 10 of the specified -value. Default value is 0. -

                  -
                  - -

                  For example the following: -

                   
                  testsrc=duration=5.3:size=qcif:rate=10
                  -
                  - -

                  will generate a video with a duration of 5.3 seconds, with size -176x144 and a frame rate of 10 frames per second. -

                  -

                  If the input content is to be ignored, nullsrc can be used. The -following command generates noise in the luminance plane by employing -the mp=geq filter: -

                   
                  nullsrc=s=256x256, mp=geq=random(1)*255:128:128
                  -
                  - - - -

                  26. Video Sinks

                  - -

                  Below is a description of the currently available video sinks. -

                  - -

                  26.1 buffersink

                  - -

                  Buffer video frames, and make them available to the end of the filter -graph. -

                  -

                  This sink is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/buffersink.h’. -

                  -

                  It does not require a string parameter in input, but you need to -specify a pointer to a list of supported pixel formats terminated by --1 in the opaque parameter provided to avfilter_init_filter -when initializing this sink. -

                  - -

                  26.2 nullsink

                  - -

                  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. +

                  Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree.

                  - -

                  27. Metadata

                  - -

                  FFmpeg is able to dump metadata from media files into a simple UTF-8-encoded -INI-like text file and then load it back using the metadata muxer/demuxer. -

                  -

                  The file format is as follows: -

                    -
                  1. -A file consists of a header and a number of metadata tags divided into sections, -each on its own line. - -
                  2. -The header is a ’;FFMETADATA’ string, followed by a version number (now 1). - -
                  3. -Metadata tags are of the form ’key=value’ - -
                  4. -Immediately after header follows global metadata - -
                  5. -After global metadata there may be sections with per-stream/per-chapter -metadata. - -
                  6. -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. - -
                  7. -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. - -
                  8. -Empty lines and lines starting with ’;’ or ’#’ are ignored. - -
                  9. -Metadata keys or values containing special characters (’=’, ’;’, ’#’, ’\’ and a -newline) must be escaped with a backslash ’\’. - -
                  10. -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’). -
                  - -

                  A ffmetadata file might look like this: -

                   
                  ;FFMETADATA1
                  -title=bike\\shed
                  -;this is a comment
                  -artist=FFmpeg troll team
                  -
                  -[CHAPTER]
                  -TIMEBASE=1/1000
                  -START=0
                  -#chapter ends at 0:01:00
                  -END=60000
                  -title=chapter \#1
                  -[STREAM]
                  -title=multi\
                  -line
                  -
                  - - - -

                  - - - +
                  +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                  diff --git a/extern/ffmpeg/doc/ffplay-all.html b/extern/ffmpeg/doc/ffplay-all.html new file mode 100644 index 0000000000..65f9881933 --- /dev/null +++ b/extern/ffmpeg/doc/ffplay-all.html @@ -0,0 +1,21641 @@ + + + + + +FFmpeg documentation : ffplay + + + + + + + + + + +
                  +
                  + + +

                  ffplay Documentation

                  + + +

                  Table of Contents

                  +
                  + + +
                  + + +

                  1. Synopsis

                  + +

                  ffplay [options] [‘input_file’] +

                  + +

                  2. Description

                  + +

                  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. +

                  + +

                  3. Options

                  + +

                  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’. +

                  +

                  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. +

                  +

                  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. +

                  +

                  +

                  +

                  3.1 Stream specifiers

                  +

                  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. +

                  +

                  A stream specifier is a string generally appended to the option name and +separated from it by a colon. E.g. -codec:a:1 ac3 contains the +a:1 stream specifier, which matches the second audio stream. Therefore, it +would select the ac3 codec for the second audio stream. +

                  +

                  A stream specifier can match several streams, so that the option is applied to all +of them. E.g. the stream specifier in -b:a 128k matches all audio +streams. +

                  +

                  An empty stream specifier matches all streams. For example, -codec copy +or -codec: copy would copy all the streams without reencoding. +

                  +

                  Possible forms of stream specifiers are: +

                  +
                  stream_index
                  +

                  Matches the stream with this index. E.g. -threads:1 4 would set the +thread count for the second stream to 4. +

                  +
                  stream_type[:stream_index]
                  +

                  stream_type is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle, +’d’ for data, and ’t’ for attachments. If stream_index is given, then it matches +stream number stream_index of this type. Otherwise, it matches all +streams of this type. +

                  +
                  p:program_id[:stream_index]
                  +

                  If stream_index is given, then it matches the stream with number stream_index +in the program with the id program_id. Otherwise, it matches all streams in the +program. +

                  +
                  #stream_id
                  +

                  Matches the stream by a format-specific ID. +

                  +
                  + + +

                  3.2 Generic options

                  + +

                  These options are shared amongst the ff* tools. +

                  +
                  +
                  -L
                  +

                  Show license. +

                  +
                  +
                  -h, -?, -help, --help [arg]
                  +

                  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. +

                  +

                  Possible values of arg are: +

                  +
                  long
                  +

                  Print advanced tool options in addition to the basic tool options. +

                  +
                  +
                  full
                  +

                  Print complete list of options, including shared and private options +for encoders, decoders, demuxers, muxers, filters, etc. +

                  +
                  +
                  decoder=decoder_name
                  +

                  Print detailed information about the decoder named decoder_name. Use the +‘-decoders’ option to get a list of all decoders. +

                  +
                  +
                  encoder=encoder_name
                  +

                  Print detailed information about the encoder named encoder_name. Use the +‘-encoders’ option to get a list of all encoders. +

                  +
                  +
                  demuxer=demuxer_name
                  +

                  Print detailed information about the demuxer named demuxer_name. Use the +‘-formats’ option to get a list of all demuxers and muxers. +

                  +
                  +
                  muxer=muxer_name
                  +

                  Print detailed information about the muxer named muxer_name. Use the +‘-formats’ option to get a list of all muxers and demuxers. +

                  +
                  +
                  filter=filter_name
                  +

                  Print detailed information about the filter name filter_name. Use the +‘-filters’ option to get a list of all filters. +

                  +
                  + +
                  +
                  -version
                  +

                  Show version. +

                  +
                  +
                  -formats
                  +

                  Show available formats. +

                  +
                  +
                  -codecs
                  +

                  Show all codecs known to libavcodec. +

                  +

                  Note that the term ’codec’ is used throughout this documentation as a shortcut +for what is more correctly called a media bitstream format. +

                  +
                  +
                  -decoders
                  +

                  Show available decoders. +

                  +
                  +
                  -encoders
                  +

                  Show all available encoders. +

                  +
                  +
                  -bsfs
                  +

                  Show available bitstream filters. +

                  +
                  +
                  -protocols
                  +

                  Show available protocols. +

                  +
                  +
                  -filters
                  +

                  Show available libavfilter filters. +

                  +
                  +
                  -pix_fmts
                  +

                  Show available pixel formats. +

                  +
                  +
                  -sample_fmts
                  +

                  Show available sample formats. +

                  +
                  +
                  -layouts
                  +

                  Show channel names and standard channel layouts. +

                  +
                  +
                  -colors
                  +

                  Show recognized color names. +

                  +
                  +
                  -loglevel [repeat+]loglevel | -v [repeat+]loglevel
                  +

                  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. +loglevel is a number or a string containing one of the following values: +

                  +
                  quiet
                  +

                  Show nothing at all; be silent. +

                  +
                  panic
                  +

                  Only show fatal errors which could lead the process to crash, such as +and assert failure. This is not currently used for anything. +

                  +
                  fatal
                  +

                  Only show fatal errors. These are errors after which the process absolutely +cannot continue after. +

                  +
                  error
                  +

                  Show all errors, including ones which can be recovered from. +

                  +
                  warning
                  +

                  Show all warnings and errors. Any message related to possibly +incorrect or unexpected events will be shown. +

                  +
                  info
                  +

                  Show informative messages during processing. This is in addition to +warnings and errors. This is the default value. +

                  +
                  verbose
                  +

                  Same as info, except more verbose. +

                  +
                  debug
                  +

                  Show everything, including debugging information. +

                  +
                  + +

                  By default the program logs to stderr, if coloring is supported by the +terminal, colors are used to mark errors and warnings. Log coloring +can be disabled setting the environment variable +AV_LOG_FORCE_NOCOLOR or NO_COLOR, or can be forced setting +the environment variable AV_LOG_FORCE_COLOR. +The use of the environment variable NO_COLOR is deprecated and +will be dropped in a following FFmpeg version. +

                  +
                  +
                  -report
                  +

                  Dump full command line and console output to a file named +program-YYYYMMDD-HHMMSS.log in the current +directory. +This file can be useful for bug reports. +It also implies -loglevel verbose. +

                  +

                  Setting the environment variable FFREPORT 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: +

                  +
                  file
                  +

                  set the file name to use for the report; %p is expanded to the name +of the program, %t is expanded to a timestamp, %% is expanded +to a plain % +

                  +
                  + +

                  Errors in parsing the environment variable are not fatal, and will not +appear in the report. +

                  +
                  +
                  -cpuflags flags (global)
                  +

                  Allows setting and clearing cpu flags. This option is intended +for testing. Do not use it unless you know what you’re doing. +

                   
                  ffmpeg -cpuflags -sse+mmx ...
                  +ffmpeg -cpuflags mmx ...
                  +ffmpeg -cpuflags 0 ...
                  +
                  +

                  Possible flags for this option are: +

                  +
                  x86
                  +
                  +
                  mmx
                  +
                  mmxext
                  +
                  sse
                  +
                  sse2
                  +
                  sse2slow
                  +
                  sse3
                  +
                  sse3slow
                  +
                  ssse3
                  +
                  atom
                  +
                  sse4.1
                  +
                  sse4.2
                  +
                  avx
                  +
                  xop
                  +
                  fma4
                  +
                  3dnow
                  +
                  3dnowext
                  +
                  cmov
                  +
                  +
                  +
                  ARM
                  +
                  +
                  armv5te
                  +
                  armv6
                  +
                  armv6t2
                  +
                  vfp
                  +
                  vfpv3
                  +
                  neon
                  +
                  +
                  +
                  PowerPC
                  +
                  +
                  altivec
                  +
                  +
                  +
                  Specific Processors
                  +
                  +
                  pentium2
                  +
                  pentium3
                  +
                  pentium4
                  +
                  k6
                  +
                  k62
                  +
                  athlon
                  +
                  athlonxp
                  +
                  k8
                  +
                  +
                  +
                  + +
                  +
                  -opencl_options options (global)
                  +

                  Set OpenCL environment options. This option is only available when +FFmpeg has been compiled with --enable-opencl. +

                  +

                  options must be a list of key=value option pairs +separated by ’:’. See the “OpenCL Options” section in the +ffmpeg-utils manual for the list of supported options. +

                  +
                  + + +

                  3.3 AVOptions

                  + +

                  These options are provided directly by the libavformat, libavdevice and +libavcodec libraries. To see the list of available AVOptions, use the +‘-help’ option. They are separated into two categories: +

                  +
                  generic
                  +

                  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. +

                  +
                  private
                  +

                  These options are specific to the given container, device or codec. Private +options are listed under their corresponding containers/devices/codecs. +

                  +
                  + +

                  For example to write an ID3v2.3 header instead of a default ID3v2.4 to +an MP3 file, use the ‘id3v2_version’ private option of the MP3 +muxer: +

                   
                  ffmpeg -i input.flac -id3v2_version 3 out.mp3
                  +
                  + +

                  All codec AVOptions are per-stream, and thus a stream specifier +should be attached to them. +

                  +

                  Note: the ‘-nooption’ syntax cannot be used for boolean +AVOptions, use ‘-option 0’/‘-option 1’. +

                  +

                  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. +

                  + +

                  3.4 Main options

                  + +
                  +
                  -x width
                  +

                  Force displayed width. +

                  +
                  -y height
                  +

                  Force displayed height. +

                  +
                  -s size
                  +

                  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. +

                  +
                  -an
                  +

                  Disable audio. +

                  +
                  -vn
                  +

                  Disable video. +

                  +
                  -ss pos
                  +

                  Seek to a given position in seconds. +

                  +
                  -t duration
                  +

                  play <duration> seconds of audio/video +

                  +
                  -bytes
                  +

                  Seek by bytes. +

                  +
                  -nodisp
                  +

                  Disable graphical display. +

                  +
                  -f fmt
                  +

                  Force format. +

                  +
                  -window_title title
                  +

                  Set window title (default is the input filename). +

                  +
                  -loop number
                  +

                  Loops movie playback <number> times. 0 means forever. +

                  +
                  -showmode mode
                  +

                  Set the show mode to use. +Available values for mode are: +

                  +
                  0, video
                  +

                  show video +

                  +
                  1, waves
                  +

                  show audio waves +

                  +
                  2, rdft
                  +

                  show audio frequency band using RDFT ((Inverse) Real Discrete Fourier Transform) +

                  +
                  + +

                  Default value is "video", if video is not present or cannot be played +"rdft" is automatically selected. +

                  +

                  You can interactively cycle through the available show modes by +pressing the key <w>. +

                  +
                  +
                  -vf filtergraph
                  +

                  Create the filtergraph specified by filtergraph and use it to +filter the video stream. +

                  +

                  filtergraph 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 +in, and the output to the label out. See the +ffmpeg-filters manual for more information about the filtergraph +syntax. +

                  +
                  +
                  -af filtergraph
                  +

                  filtergraph 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). +

                  +
                  +
                  -i input_file
                  +

                  Read input_file. +

                  +
                  + + +

                  3.5 Advanced options

                  +
                  +
                  -pix_fmt format
                  +

                  Set pixel format. +This option has been deprecated in favor of private options, try -pixel_format. +

                  +
                  +
                  -stats
                  +

                  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 -nostats. +

                  +
                  +
                  -bug
                  +

                  Work around bugs. +

                  +
                  -fast
                  +

                  Non-spec-compliant optimizations. +

                  +
                  -genpts
                  +

                  Generate pts. +

                  +
                  -rtp_tcp
                  +

                  Force RTP/TCP protocol usage instead of RTP/UDP. It is only meaningful +if you are streaming with the RTSP protocol. +

                  +
                  -sync type
                  +

                  Set the master clock to audio (type=audio), video +(type=video) or external (type=ext). Default is audio. The +master clock is used to control audio-video synchronization. Most media +players use audio as master clock, but in some cases (streaming or high +quality broadcast) it is necessary to change that. This option is mainly +used for debugging purposes. +

                  +
                  -threads count
                  +

                  Set the thread count. +

                  +
                  -ast audio_stream_number
                  +

                  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. +

                  +
                  -vst video_stream_number
                  +

                  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. +

                  +
                  -sst subtitle_stream_number
                  +

                  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. +

                  +
                  -autoexit
                  +

                  Exit when video is done playing. +

                  +
                  -exitonkeydown
                  +

                  Exit if any key is pressed. +

                  +
                  -exitonmousedown
                  +

                  Exit if any mouse button is pressed. +

                  +
                  +
                  -codec:media_specifier codec_name
                  +

                  Force a specific decoder implementation for the stream identified by +media_specifier, which can assume the values a (audio), +v (video), and s subtitle. +

                  +
                  +
                  -acodec codec_name
                  +

                  Force a specific audio decoder. +

                  +
                  +
                  -vcodec codec_name
                  +

                  Force a specific video decoder. +

                  +
                  +
                  -scodec codec_name
                  +

                  Force a specific subtitle decoder. +

                  +
                  + + +

                  3.6 While playing

                  + +
                  +
                  <q, ESC>
                  +

                  Quit. +

                  +
                  +
                  <f>
                  +

                  Toggle full screen. +

                  +
                  +
                  <p, SPC>
                  +

                  Pause. +

                  +
                  +
                  <a>
                  +

                  Cycle audio channel in the curret program. +

                  +
                  +
                  <v>
                  +

                  Cycle video channel. +

                  +
                  +
                  <t>
                  +

                  Cycle subtitle channel in the current program. +

                  +
                  +
                  <c>
                  +

                  Cycle program. +

                  +
                  +
                  <w>
                  +

                  Show audio waves. +

                  +
                  +
                  <left/right>
                  +

                  Seek backward/forward 10 seconds. +

                  +
                  +
                  <down/up>
                  +

                  Seek backward/forward 1 minute. +

                  +
                  +
                  <page down/page up>
                  +

                  Seek backward/forward 10 minutes. +

                  +
                  +
                  <mouse click>
                  +

                  Seek to percentage in file corresponding to fraction of width. +

                  +
                  +
                  + + + +

                  4. Syntax

                  + +

                  This section documents the syntax and formats employed by the FFmpeg +libraries and tools. +

                  +

                  +

                  +

                  4.1 Quoting and escaping

                  + +

                  FFmpeg adopts the following quoting and escaping mechanism, unless +explicitly specified. The following rules are applied: +

                  +
                    +
                  • +' and \ 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. + +
                  • +A special character is escaped by prefixing it with a ’\’. + +
                  • +All characters enclosed between ” are included literally in the +parsed string. The quote character ' itself cannot be quoted, +so you may need to close the quote and escape it. + +
                  • +Leading and trailing whitespaces, unless escaped or quoted, are +removed from the parsed string. +
                  + +

                  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. +

                  +

                  The function av_get_token defined in +‘libavutil/avstring.h’ can be used to parse a token quoted or +escaped according to the rules defined above. +

                  +

                  The tool ‘tools/ffescape’ in the FFmpeg source tree can be used +to automatically quote or escape a string in a script. +

                  + +

                  4.1.1 Examples

                  + +
                    +
                  • +Escape the string Crime d'Amour containing the ' special +character: +
                     
                    Crime d\'Amour
                    +
                    + +
                  • +The string above contains a quote, so the ' needs to be escaped +when quoting it: +
                     
                    'Crime d'\''Amour'
                    +
                    + +
                  • +Include leading or trailing whitespaces using quoting: +
                     
                    '  this string starts and ends with whitespaces  '
                    +
                    + +
                  • +Escaping and quoting can be mixed together: +
                     
                    ' The string '\'string\'' is a string '
                    +
                    + +
                  • +To include a literal \ you can use either escaping or quoting: +
                     
                    'c:\foo' can be written as c:\\foo
                    +
                    +
                  + +

                  +

                  +

                  4.2 Date

                  + +

                  The accepted syntax is: +

                   
                  [(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
                  +now
                  +
                  + +

                  If the value is "now" it takes the current time. +

                  +

                  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. +

                  +

                  +

                  +

                  4.3 Time duration

                  + +

                  There are two accepted syntaxes for expressing time duration. +

                  +
                   
                  [-][HH:]MM:SS[.m...]
                  +
                  + +

                  HH expresses the number of hours, MM the number of minutes +for a maximum of 2 digits, and SS the number of seconds for a +maximum of 2 digits. The m at the end expresses decimal value for +SS. +

                  +

                  or +

                  +
                   
                  [-]S+[.m...]
                  +
                  + +

                  S expresses the number of seconds, with the optional decimal part +m. +

                  +

                  In both expressions, the optional ‘-’ indicates negative duration. +

                  + +

                  4.3.1 Examples

                  + +

                  The following examples are all valid time duration: +

                  +
                  +
                  55
                  +

                  55 seconds +

                  +
                  +
                  12:03:45
                  +

                  12 hours, 03 minutes and 45 seconds +

                  +
                  +
                  23.189
                  +

                  23.189 seconds +

                  +
                  + +

                  +

                  +

                  4.4 Video size

                  +

                  Specify the size of the sourced video, it may be a string of the form +widthxheight, or the name of a size abbreviation. +

                  +

                  The following abbreviations are recognized: +

                  +
                  ntsc
                  +

                  720x480 +

                  +
                  pal
                  +

                  720x576 +

                  +
                  qntsc
                  +

                  352x240 +

                  +
                  qpal
                  +

                  352x288 +

                  +
                  sntsc
                  +

                  640x480 +

                  +
                  spal
                  +

                  768x576 +

                  +
                  film
                  +

                  352x240 +

                  +
                  ntsc-film
                  +

                  352x240 +

                  +
                  sqcif
                  +

                  128x96 +

                  +
                  qcif
                  +

                  176x144 +

                  +
                  cif
                  +

                  352x288 +

                  +
                  4cif
                  +

                  704x576 +

                  +
                  16cif
                  +

                  1408x1152 +

                  +
                  qqvga
                  +

                  160x120 +

                  +
                  qvga
                  +

                  320x240 +

                  +
                  vga
                  +

                  640x480 +

                  +
                  svga
                  +

                  800x600 +

                  +
                  xga
                  +

                  1024x768 +

                  +
                  uxga
                  +

                  1600x1200 +

                  +
                  qxga
                  +

                  2048x1536 +

                  +
                  sxga
                  +

                  1280x1024 +

                  +
                  qsxga
                  +

                  2560x2048 +

                  +
                  hsxga
                  +

                  5120x4096 +

                  +
                  wvga
                  +

                  852x480 +

                  +
                  wxga
                  +

                  1366x768 +

                  +
                  wsxga
                  +

                  1600x1024 +

                  +
                  wuxga
                  +

                  1920x1200 +

                  +
                  woxga
                  +

                  2560x1600 +

                  +
                  wqsxga
                  +

                  3200x2048 +

                  +
                  wquxga
                  +

                  3840x2400 +

                  +
                  whsxga
                  +

                  6400x4096 +

                  +
                  whuxga
                  +

                  7680x4800 +

                  +
                  cga
                  +

                  320x200 +

                  +
                  ega
                  +

                  640x350 +

                  +
                  hd480
                  +

                  852x480 +

                  +
                  hd720
                  +

                  1280x720 +

                  +
                  hd1080
                  +

                  1920x1080 +

                  +
                  2k
                  +

                  2048x1080 +

                  +
                  2kflat
                  +

                  1998x1080 +

                  +
                  2kscope
                  +

                  2048x858 +

                  +
                  4k
                  +

                  4096x2160 +

                  +
                  4kflat
                  +

                  3996x2160 +

                  +
                  4kscope
                  +

                  4096x1716 +

                  +
                  nhd
                  +

                  640x360 +

                  +
                  hqvga
                  +

                  240x160 +

                  +
                  wqvga
                  +

                  400x240 +

                  +
                  fwqvga
                  +

                  432x240 +

                  +
                  hvga
                  +

                  480x320 +

                  +
                  qhd
                  +

                  960x540 +

                  +
                  + +

                  +

                  +

                  4.5 Video rate

                  + +

                  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 +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. +

                  +

                  The following abbreviations are recognized: +

                  +
                  ntsc
                  +

                  30000/1001 +

                  +
                  pal
                  +

                  25/1 +

                  +
                  qntsc
                  +

                  30000/1001 +

                  +
                  qpal
                  +

                  25/1 +

                  +
                  sntsc
                  +

                  30000/1001 +

                  +
                  spal
                  +

                  25/1 +

                  +
                  film
                  +

                  24/1 +

                  +
                  ntsc-film
                  +

                  24000/1001 +

                  +
                  + +

                  +

                  +

                  4.6 Ratio

                  + +

                  A ratio can be expressed as an expression, or in the form +numerator:denominator. +

                  +

                  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. +

                  +

                  The undefined value can be expressed using the "0:0" string. +

                  +

                  +

                  +

                  4.7 Color

                  + +

                  It can be the name of a color as defined below (case insensitive match) or a +[0x|#]RRGGBB[AA] sequence, possibly followed by @ and a string +representing the alpha component. +

                  +

                  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 (‘0x00’ or ‘0.0’ means completely +transparent, ‘0xff’ or ‘1.0’ completely opaque). If the alpha +component is not specified then ‘0xff’ is assumed. +

                  +

                  The string ‘random’ will result in a random color. +

                  +

                  The following names of colors are recognized: +

                  +
                  AliceBlue
                  +

                  0xF0F8FF +

                  +
                  AntiqueWhite
                  +

                  0xFAEBD7 +

                  +
                  Aqua
                  +

                  0x00FFFF +

                  +
                  Aquamarine
                  +

                  0x7FFFD4 +

                  +
                  Azure
                  +

                  0xF0FFFF +

                  +
                  Beige
                  +

                  0xF5F5DC +

                  +
                  Bisque
                  +

                  0xFFE4C4 +

                  +
                  Black
                  +

                  0x000000 +

                  +
                  BlanchedAlmond
                  +

                  0xFFEBCD +

                  +
                  Blue
                  +

                  0x0000FF +

                  +
                  BlueViolet
                  +

                  0x8A2BE2 +

                  +
                  Brown
                  +

                  0xA52A2A +

                  +
                  BurlyWood
                  +

                  0xDEB887 +

                  +
                  CadetBlue
                  +

                  0x5F9EA0 +

                  +
                  Chartreuse
                  +

                  0x7FFF00 +

                  +
                  Chocolate
                  +

                  0xD2691E +

                  +
                  Coral
                  +

                  0xFF7F50 +

                  +
                  CornflowerBlue
                  +

                  0x6495ED +

                  +
                  Cornsilk
                  +

                  0xFFF8DC +

                  +
                  Crimson
                  +

                  0xDC143C +

                  +
                  Cyan
                  +

                  0x00FFFF +

                  +
                  DarkBlue
                  +

                  0x00008B +

                  +
                  DarkCyan
                  +

                  0x008B8B +

                  +
                  DarkGoldenRod
                  +

                  0xB8860B +

                  +
                  DarkGray
                  +

                  0xA9A9A9 +

                  +
                  DarkGreen
                  +

                  0x006400 +

                  +
                  DarkKhaki
                  +

                  0xBDB76B +

                  +
                  DarkMagenta
                  +

                  0x8B008B +

                  +
                  DarkOliveGreen
                  +

                  0x556B2F +

                  +
                  Darkorange
                  +

                  0xFF8C00 +

                  +
                  DarkOrchid
                  +

                  0x9932CC +

                  +
                  DarkRed
                  +

                  0x8B0000 +

                  +
                  DarkSalmon
                  +

                  0xE9967A +

                  +
                  DarkSeaGreen
                  +

                  0x8FBC8F +

                  +
                  DarkSlateBlue
                  +

                  0x483D8B +

                  +
                  DarkSlateGray
                  +

                  0x2F4F4F +

                  +
                  DarkTurquoise
                  +

                  0x00CED1 +

                  +
                  DarkViolet
                  +

                  0x9400D3 +

                  +
                  DeepPink
                  +

                  0xFF1493 +

                  +
                  DeepSkyBlue
                  +

                  0x00BFFF +

                  +
                  DimGray
                  +

                  0x696969 +

                  +
                  DodgerBlue
                  +

                  0x1E90FF +

                  +
                  FireBrick
                  +

                  0xB22222 +

                  +
                  FloralWhite
                  +

                  0xFFFAF0 +

                  +
                  ForestGreen
                  +

                  0x228B22 +

                  +
                  Fuchsia
                  +

                  0xFF00FF +

                  +
                  Gainsboro
                  +

                  0xDCDCDC +

                  +
                  GhostWhite
                  +

                  0xF8F8FF +

                  +
                  Gold
                  +

                  0xFFD700 +

                  +
                  GoldenRod
                  +

                  0xDAA520 +

                  +
                  Gray
                  +

                  0x808080 +

                  +
                  Green
                  +

                  0x008000 +

                  +
                  GreenYellow
                  +

                  0xADFF2F +

                  +
                  HoneyDew
                  +

                  0xF0FFF0 +

                  +
                  HotPink
                  +

                  0xFF69B4 +

                  +
                  IndianRed
                  +

                  0xCD5C5C +

                  +
                  Indigo
                  +

                  0x4B0082 +

                  +
                  Ivory
                  +

                  0xFFFFF0 +

                  +
                  Khaki
                  +

                  0xF0E68C +

                  +
                  Lavender
                  +

                  0xE6E6FA +

                  +
                  LavenderBlush
                  +

                  0xFFF0F5 +

                  +
                  LawnGreen
                  +

                  0x7CFC00 +

                  +
                  LemonChiffon
                  +

                  0xFFFACD +

                  +
                  LightBlue
                  +

                  0xADD8E6 +

                  +
                  LightCoral
                  +

                  0xF08080 +

                  +
                  LightCyan
                  +

                  0xE0FFFF +

                  +
                  LightGoldenRodYellow
                  +

                  0xFAFAD2 +

                  +
                  LightGreen
                  +

                  0x90EE90 +

                  +
                  LightGrey
                  +

                  0xD3D3D3 +

                  +
                  LightPink
                  +

                  0xFFB6C1 +

                  +
                  LightSalmon
                  +

                  0xFFA07A +

                  +
                  LightSeaGreen
                  +

                  0x20B2AA +

                  +
                  LightSkyBlue
                  +

                  0x87CEFA +

                  +
                  LightSlateGray
                  +

                  0x778899 +

                  +
                  LightSteelBlue
                  +

                  0xB0C4DE +

                  +
                  LightYellow
                  +

                  0xFFFFE0 +

                  +
                  Lime
                  +

                  0x00FF00 +

                  +
                  LimeGreen
                  +

                  0x32CD32 +

                  +
                  Linen
                  +

                  0xFAF0E6 +

                  +
                  Magenta
                  +

                  0xFF00FF +

                  +
                  Maroon
                  +

                  0x800000 +

                  +
                  MediumAquaMarine
                  +

                  0x66CDAA +

                  +
                  MediumBlue
                  +

                  0x0000CD +

                  +
                  MediumOrchid
                  +

                  0xBA55D3 +

                  +
                  MediumPurple
                  +

                  0x9370D8 +

                  +
                  MediumSeaGreen
                  +

                  0x3CB371 +

                  +
                  MediumSlateBlue
                  +

                  0x7B68EE +

                  +
                  MediumSpringGreen
                  +

                  0x00FA9A +

                  +
                  MediumTurquoise
                  +

                  0x48D1CC +

                  +
                  MediumVioletRed
                  +

                  0xC71585 +

                  +
                  MidnightBlue
                  +

                  0x191970 +

                  +
                  MintCream
                  +

                  0xF5FFFA +

                  +
                  MistyRose
                  +

                  0xFFE4E1 +

                  +
                  Moccasin
                  +

                  0xFFE4B5 +

                  +
                  NavajoWhite
                  +

                  0xFFDEAD +

                  +
                  Navy
                  +

                  0x000080 +

                  +
                  OldLace
                  +

                  0xFDF5E6 +

                  +
                  Olive
                  +

                  0x808000 +

                  +
                  OliveDrab
                  +

                  0x6B8E23 +

                  +
                  Orange
                  +

                  0xFFA500 +

                  +
                  OrangeRed
                  +

                  0xFF4500 +

                  +
                  Orchid
                  +

                  0xDA70D6 +

                  +
                  PaleGoldenRod
                  +

                  0xEEE8AA +

                  +
                  PaleGreen
                  +

                  0x98FB98 +

                  +
                  PaleTurquoise
                  +

                  0xAFEEEE +

                  +
                  PaleVioletRed
                  +

                  0xD87093 +

                  +
                  PapayaWhip
                  +

                  0xFFEFD5 +

                  +
                  PeachPuff
                  +

                  0xFFDAB9 +

                  +
                  Peru
                  +

                  0xCD853F +

                  +
                  Pink
                  +

                  0xFFC0CB +

                  +
                  Plum
                  +

                  0xDDA0DD +

                  +
                  PowderBlue
                  +

                  0xB0E0E6 +

                  +
                  Purple
                  +

                  0x800080 +

                  +
                  Red
                  +

                  0xFF0000 +

                  +
                  RosyBrown
                  +

                  0xBC8F8F +

                  +
                  RoyalBlue
                  +

                  0x4169E1 +

                  +
                  SaddleBrown
                  +

                  0x8B4513 +

                  +
                  Salmon
                  +

                  0xFA8072 +

                  +
                  SandyBrown
                  +

                  0xF4A460 +

                  +
                  SeaGreen
                  +

                  0x2E8B57 +

                  +
                  SeaShell
                  +

                  0xFFF5EE +

                  +
                  Sienna
                  +

                  0xA0522D +

                  +
                  Silver
                  +

                  0xC0C0C0 +

                  +
                  SkyBlue
                  +

                  0x87CEEB +

                  +
                  SlateBlue
                  +

                  0x6A5ACD +

                  +
                  SlateGray
                  +

                  0x708090 +

                  +
                  Snow
                  +

                  0xFFFAFA +

                  +
                  SpringGreen
                  +

                  0x00FF7F +

                  +
                  SteelBlue
                  +

                  0x4682B4 +

                  +
                  Tan
                  +

                  0xD2B48C +

                  +
                  Teal
                  +

                  0x008080 +

                  +
                  Thistle
                  +

                  0xD8BFD8 +

                  +
                  Tomato
                  +

                  0xFF6347 +

                  +
                  Turquoise
                  +

                  0x40E0D0 +

                  +
                  Violet
                  +

                  0xEE82EE +

                  +
                  Wheat
                  +

                  0xF5DEB3 +

                  +
                  White
                  +

                  0xFFFFFF +

                  +
                  WhiteSmoke
                  +

                  0xF5F5F5 +

                  +
                  Yellow
                  +

                  0xFFFF00 +

                  +
                  YellowGreen
                  +

                  0x9ACD32 +

                  +
                  + +

                  +

                  +

                  4.8 Channel Layout

                  + +

                  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. +

                  +

                  Individual channels are identified by an id, as given by the table +below: +

                  +
                  FL
                  +

                  front left +

                  +
                  FR
                  +

                  front right +

                  +
                  FC
                  +

                  front center +

                  +
                  LFE
                  +

                  low frequency +

                  +
                  BL
                  +

                  back left +

                  +
                  BR
                  +

                  back right +

                  +
                  FLC
                  +

                  front left-of-center +

                  +
                  FRC
                  +

                  front right-of-center +

                  +
                  BC
                  +

                  back center +

                  +
                  SL
                  +

                  side left +

                  +
                  SR
                  +

                  side right +

                  +
                  TC
                  +

                  top center +

                  +
                  TFL
                  +

                  top front left +

                  +
                  TFC
                  +

                  top front center +

                  +
                  TFR
                  +

                  top front right +

                  +
                  TBL
                  +

                  top back left +

                  +
                  TBC
                  +

                  top back center +

                  +
                  TBR
                  +

                  top back right +

                  +
                  DL
                  +

                  downmix left +

                  +
                  DR
                  +

                  downmix right +

                  +
                  WL
                  +

                  wide left +

                  +
                  WR
                  +

                  wide right +

                  +
                  SDL
                  +

                  surround direct left +

                  +
                  SDR
                  +

                  surround direct right +

                  +
                  LFE2
                  +

                  low frequency 2 +

                  +
                  + +

                  Standard channel layout compositions can be specified by using the +following identifiers: +

                  +
                  mono
                  +

                  FC +

                  +
                  stereo
                  +

                  FL+FR +

                  +
                  2.1
                  +

                  FL+FR+LFE +

                  +
                  3.0
                  +

                  FL+FR+FC +

                  +
                  3.0(back)
                  +

                  FL+FR+BC +

                  +
                  4.0
                  +

                  FL+FR+FC+BC +

                  +
                  quad
                  +

                  FL+FR+BL+BR +

                  +
                  quad(side)
                  +

                  FL+FR+SL+SR +

                  +
                  3.1
                  +

                  FL+FR+FC+LFE +

                  +
                  5.0
                  +

                  FL+FR+FC+BL+BR +

                  +
                  5.0(side)
                  +

                  FL+FR+FC+SL+SR +

                  +
                  4.1
                  +

                  FL+FR+FC+LFE+BC +

                  +
                  5.1
                  +

                  FL+FR+FC+LFE+BL+BR +

                  +
                  5.1(side)
                  +

                  FL+FR+FC+LFE+SL+SR +

                  +
                  6.0
                  +

                  FL+FR+FC+BC+SL+SR +

                  +
                  6.0(front)
                  +

                  FL+FR+FLC+FRC+SL+SR +

                  +
                  hexagonal
                  +

                  FL+FR+FC+BL+BR+BC +

                  +
                  6.1
                  +

                  FL+FR+FC+LFE+BC+SL+SR +

                  +
                  6.1
                  +

                  FL+FR+FC+LFE+BL+BR+BC +

                  +
                  6.1(front)
                  +

                  FL+FR+LFE+FLC+FRC+SL+SR +

                  +
                  7.0
                  +

                  FL+FR+FC+BL+BR+SL+SR +

                  +
                  7.0(front)
                  +

                  FL+FR+FC+FLC+FRC+SL+SR +

                  +
                  7.1
                  +

                  FL+FR+FC+LFE+BL+BR+SL+SR +

                  +
                  7.1(wide)
                  +

                  FL+FR+FC+LFE+BL+BR+FLC+FRC +

                  +
                  7.1(wide-side)
                  +

                  FL+FR+FC+LFE+FLC+FRC+SL+SR +

                  +
                  octagonal
                  +

                  FL+FR+FC+BL+BR+BC+SL+SR +

                  +
                  downmix
                  +

                  DL+DR +

                  +
                  + +

                  A custom channel layout can be specified as a sequence of terms, separated by +’+’ or ’|’. Each term can be: +

                    +
                  • +the name of a standard channel layout (e.g. ‘mono’, +‘stereo’, ‘4.0’, ‘quad’, ‘5.0’, etc.) + +
                  • +the name of a single channel (e.g. ‘FL’, ‘FR’, ‘FC’, ‘LFE’, etc.) + +
                  • +a number of channels, in decimal, optionally followed by ’c’, yielding +the default channel layout for that number of channels (see the +function av_get_default_channel_layout) + +
                  • +a channel layout mask, in hexadecimal starting with "0x" (see the +AV_CH_* macros in ‘libavutil/channel_layout.h’. +
                  + +

                  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"). +

                  +

                  See also the function av_get_channel_layout defined in +‘libavutil/channel_layout.h’. +

                  + +

                  5. Expression Evaluation

                  + +

                  When evaluating an arithmetic expression, FFmpeg uses an internal +formula evaluator, implemented through the ‘libavutil/eval.h’ +interface. +

                  +

                  An expression may contain unary, binary operators, constants, and +functions. +

                  +

                  Two expressions expr1 and expr2 can be combined to form +another expression "expr1;expr2". +expr1 and expr2 are evaluated in turn, and the new +expression evaluates to the value of expr2. +

                  +

                  The following binary operators are available: +, -, +*, /, ^. +

                  +

                  The following unary operators are available: +, -. +

                  +

                  The following functions are available: +

                  +
                  abs(x)
                  +

                  Compute absolute value of x. +

                  +
                  +
                  acos(x)
                  +

                  Compute arccosine of x. +

                  +
                  +
                  asin(x)
                  +

                  Compute arcsine of x. +

                  +
                  +
                  atan(x)
                  +

                  Compute arctangent of x. +

                  +
                  +
                  between(x, min, max)
                  +

                  Return 1 if x is greater than or equal to min and lesser than or +equal to max, 0 otherwise. +

                  +
                  +
                  bitand(x, y)
                  +
                  bitor(x, y)
                  +

                  Compute bitwise and/or operation on x and y. +

                  +

                  The results of the evaluation of x and y are converted to +integers before executing the bitwise operation. +

                  +

                  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). +

                  +
                  +
                  ceil(expr)
                  +

                  Round the value of expression expr upwards to the nearest +integer. For example, "ceil(1.5)" is "2.0". +

                  +
                  +
                  cos(x)
                  +

                  Compute cosine of x. +

                  +
                  +
                  cosh(x)
                  +

                  Compute hyperbolic cosine of x. +

                  +
                  +
                  eq(x, y)
                  +

                  Return 1 if x and y are equivalent, 0 otherwise. +

                  +
                  +
                  exp(x)
                  +

                  Compute exponential of x (with base e, the Euler’s number). +

                  +
                  +
                  floor(expr)
                  +

                  Round the value of expression expr downwards to the nearest +integer. For example, "floor(-1.5)" is "-2.0". +

                  +
                  +
                  gauss(x)
                  +

                  Compute Gauss function of x, corresponding to +exp(-x*x/2) / sqrt(2*PI). +

                  +
                  +
                  gcd(x, y)
                  +

                  Return the greatest common divisor of x and y. If both x and +y are 0 or either or both are less than zero then behavior is undefined. +

                  +
                  +
                  gt(x, y)
                  +

                  Return 1 if x is greater than y, 0 otherwise. +

                  +
                  +
                  gte(x, y)
                  +

                  Return 1 if x is greater than or equal to y, 0 otherwise. +

                  +
                  +
                  hypot(x, y)
                  +

                  This function is similar to the C function with the same name; it returns +"sqrt(x*x + y*y)", the length of the hypotenuse of a +right triangle with sides of length x and y, or the distance of the +point (x, y) from the origin. +

                  +
                  +
                  if(x, y)
                  +

                  Evaluate x, and if the result is non-zero return the result of +the evaluation of y, return 0 otherwise. +

                  +
                  +
                  if(x, y, z)
                  +

                  Evaluate x, and if the result is non-zero return the evaluation +result of y, otherwise the evaluation result of z. +

                  +
                  +
                  ifnot(x, y)
                  +

                  Evaluate x, and if the result is zero return the result of the +evaluation of y, return 0 otherwise. +

                  +
                  +
                  ifnot(x, y, z)
                  +

                  Evaluate x, and if the result is zero return the evaluation +result of y, otherwise the evaluation result of z. +

                  +
                  +
                  isinf(x)
                  +

                  Return 1.0 if x is +/-INFINITY, 0.0 otherwise. +

                  +
                  +
                  isnan(x)
                  +

                  Return 1.0 if x is NAN, 0.0 otherwise. +

                  +
                  +
                  ld(var)
                  +

                  Allow to load the value of the internal variable with number +var, which was previously stored with st(var, expr). +The function returns the loaded value. +

                  +
                  +
                  log(x)
                  +

                  Compute natural logarithm of x. +

                  +
                  +
                  lt(x, y)
                  +

                  Return 1 if x is lesser than y, 0 otherwise. +

                  +
                  +
                  lte(x, y)
                  +

                  Return 1 if x is lesser than or equal to y, 0 otherwise. +

                  +
                  +
                  max(x, y)
                  +

                  Return the maximum between x and y. +

                  +
                  +
                  min(x, y)
                  +

                  Return the maximum between x and y. +

                  +
                  +
                  mod(x, y)
                  +

                  Compute the remainder of division of x by y. +

                  +
                  +
                  not(expr)
                  +

                  Return 1.0 if expr is zero, 0.0 otherwise. +

                  +
                  +
                  pow(x, y)
                  +

                  Compute the power of x elevated y, it is equivalent to +"(x)^(y)". +

                  +
                  +
                  print(t)
                  +
                  print(t, l)
                  +

                  Print the value of expression t with loglevel l. If +l is not specified then a default log level is used. +Returns the value of the expression printed. +

                  +

                  Prints t with loglevel l +

                  +
                  +
                  random(x)
                  +

                  Return a pseudo random value between 0.0 and 1.0. x is the index of the +internal variable which will be used to save the seed/state. +

                  +
                  +
                  root(expr, max)
                  +

                  Find an input value for which the function represented by expr +with argument ld(0) is 0 in the interval 0..max. +

                  +

                  The expression in expr must denote a continuous function or the +result is undefined. +

                  +

                  ld(0) 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 +ld(0). When the expression evaluates to 0 then the +corresponding input value will be returned. +

                  +
                  +
                  sin(x)
                  +

                  Compute sine of x. +

                  +
                  +
                  sinh(x)
                  +

                  Compute hyperbolic sine of x. +

                  +
                  +
                  sqrt(expr)
                  +

                  Compute the square root of expr. This is equivalent to +"(expr)^.5". +

                  +
                  +
                  squish(x)
                  +

                  Compute expression 1/(1 + exp(4*x)). +

                  +
                  +
                  st(var, expr)
                  +

                  Allow to store the value of the expression expr in an internal +variable. var specifies the number of the variable where to +store the value, and it is a value ranging from 0 to 9. The function +returns the value stored in the internal variable. +Note, Variables are currently not shared between expressions. +

                  +
                  +
                  tan(x)
                  +

                  Compute tangent of x. +

                  +
                  +
                  tanh(x)
                  +

                  Compute hyperbolic tangent of x. +

                  +
                  +
                  taylor(expr, x)
                  +
                  taylor(expr, x, id)
                  +

                  Evaluate a Taylor series at x, given an expression representing +the ld(id)-th derivative of a function at 0. +

                  +

                  When the series does not converge the result is undefined. +

                  +

                  ld(id) is used to represent the derivative order in expr, +which means that the given expression will be evaluated multiple times +with various input values that the expression can access through +ld(id). If id is not specified then 0 is assumed. +

                  +

                  Note, when you have the derivatives at y instead of 0, +taylor(expr, x-y) can be used. +

                  +
                  +
                  time(0)
                  +

                  Return the current (wallclock) time in seconds. +

                  +
                  +
                  trunc(expr)
                  +

                  Round the value of expression expr towards zero to the nearest +integer. For example, "trunc(-1.5)" is "-1.0". +

                  +
                  +
                  while(cond, expr)
                  +

                  Evaluate expression expr while the expression cond is +non-zero, and returns the value of the last expr evaluation, or +NAN if cond was always false. +

                  +
                  + +

                  The following constants are available: +

                  +
                  PI
                  +

                  area of the unit disc, approximately 3.14 +

                  +
                  E
                  +

                  exp(1) (Euler’s number), approximately 2.718 +

                  +
                  PHI
                  +

                  golden ratio (1+sqrt(5))/2, approximately 1.618 +

                  +
                  + +

                  Assuming that an expression is considered "true" if it has a non-zero +value, note that: +

                  +

                  * works like AND +

                  +

                  + works like OR +

                  +

                  For example the construct: +

                   
                  if (A AND B) then C
                  +
                  +

                  is equivalent to: +

                   
                  if(A*B, C)
                  +
                  + +

                  In your C code, you can extend the list of unary and binary functions, +and define recognized constants, so that they are available for your +expressions. +

                  +

                  The evaluator also recognizes the International System 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. +

                  +

                  The list of available International System prefixes follows, with +indication of the corresponding powers of 10 and of 2. +

                  +
                  y
                  +

                  10^-24 / 2^-80 +

                  +
                  z
                  +

                  10^-21 / 2^-70 +

                  +
                  a
                  +

                  10^-18 / 2^-60 +

                  +
                  f
                  +

                  10^-15 / 2^-50 +

                  +
                  p
                  +

                  10^-12 / 2^-40 +

                  +
                  n
                  +

                  10^-9 / 2^-30 +

                  +
                  u
                  +

                  10^-6 / 2^-20 +

                  +
                  m
                  +

                  10^-3 / 2^-10 +

                  +
                  c
                  +

                  10^-2 +

                  +
                  d
                  +

                  10^-1 +

                  +
                  h
                  +

                  10^2 +

                  +
                  k
                  +

                  10^3 / 2^10 +

                  +
                  K
                  +

                  10^3 / 2^10 +

                  +
                  M
                  +

                  10^6 / 2^20 +

                  +
                  G
                  +

                  10^9 / 2^30 +

                  +
                  T
                  +

                  10^12 / 2^40 +

                  +
                  P
                  +

                  10^15 / 2^40 +

                  +
                  E
                  +

                  10^18 / 2^50 +

                  +
                  Z
                  +

                  10^21 / 2^60 +

                  +
                  Y
                  +

                  10^24 / 2^70 +

                  +
                  + + + +

                  6. OpenCL Options

                  + +

                  When FFmpeg is configured with --enable-opencl, it is possible +to set the options for the global OpenCL context. +

                  +

                  The list of supported options follows: +

                  +
                  +
                  build_options
                  +

                  Set build options used to compile the registered kernels. +

                  +

                  See reference "OpenCL Specification Version: 1.2 chapter 5.6.4". +

                  +
                  +
                  platform_idx
                  +

                  Select the index of the platform to run OpenCL code. +

                  +

                  The specified index must be one of the indexes in the device list +which can be obtained with av_opencl_get_device_list(). +

                  +
                  +
                  device_idx
                  +

                  Select the index of the device used to run OpenCL code. +

                  +

                  The specifed index must be one of the indexes in the device list which +can be obtained with av_opencl_get_device_list(). +

                  +
                  +
                  + +

                  +

                  +

                  7. Codec Options

                  + +

                  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. +

                  +

                  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. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools, or by setting the value explicitly in the +AVCodecContext options or using the ‘libavutil/opt.h’ API +for programmatic use. +

                  +

                  The list of supported options follow: +

                  +
                  +
                  b integer (encoding,audio,video)
                  +

                  Set bitrate in bits/s. Default value is 200K. +

                  +
                  +
                  ab integer (encoding,audio)
                  +

                  Set audio bitrate (in bits/s). Default value is 128K. +

                  +
                  +
                  bt integer (encoding,video)
                  +

                  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. +

                  +
                  +
                  flags flags (decoding/encoding,audio,video,subtitles)
                  +

                  Set generic flags. +

                  +

                  Possible values: +

                  +
                  mv4
                  +

                  Use four motion vector by macroblock (mpeg4). +

                  +
                  qpel
                  +

                  Use 1/4 pel motion compensation. +

                  +
                  loop
                  +

                  Use loop filter. +

                  +
                  qscale
                  +

                  Use fixed qscale. +

                  +
                  gmc
                  +

                  Use gmc. +

                  +
                  mv0
                  +

                  Always try a mb with mv=<0,0>. +

                  +
                  input_preserved
                  +
                  pass1
                  +

                  Use internal 2pass ratecontrol in first pass mode. +

                  +
                  pass2
                  +

                  Use internal 2pass ratecontrol in second pass mode. +

                  +
                  gray
                  +

                  Only decode/encode grayscale. +

                  +
                  emu_edge
                  +

                  Do not draw edges. +

                  +
                  psnr
                  +

                  Set error[?] variables during encoding. +

                  +
                  truncated
                  +
                  naq
                  +

                  Normalize adaptive quantization. +

                  +
                  ildct
                  +

                  Use interlaced DCT. +

                  +
                  low_delay
                  +

                  Force low delay. +

                  +
                  global_header
                  +

                  Place global headers in extradata instead of every keyframe. +

                  +
                  bitexact
                  +

                  Use only bitexact stuff (except (I)DCT). +

                  +
                  aic
                  +

                  Apply H263 advanced intra coding / mpeg4 ac prediction. +

                  +
                  cbp
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  qprd
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  ilme
                  +

                  Apply interlaced motion estimation. +

                  +
                  cgop
                  +

                  Use closed gop. +

                  +
                  + +
                  +
                  me_method integer (encoding,video)
                  +

                  Set motion estimation method. +

                  +

                  Possible values: +

                  +
                  zero
                  +

                  zero motion estimation (fastest) +

                  +
                  full
                  +

                  full motion estimation (slowest) +

                  +
                  epzs
                  +

                  EPZS motion estimation (default) +

                  +
                  esa
                  +

                  esa motion estimation (alias for full) +

                  +
                  tesa
                  +

                  tesa motion estimation +

                  +
                  dia
                  +

                  dia motion estimation (alias for epzs) +

                  +
                  log
                  +

                  log motion estimation +

                  +
                  phods
                  +

                  phods motion estimation +

                  +
                  x1
                  +

                  X1 motion estimation +

                  +
                  hex
                  +

                  hex motion estimation +

                  +
                  umh
                  +

                  umh motion estimation +

                  +
                  iter
                  +

                  iter motion estimation +

                  +
                  + +
                  +
                  extradata_size integer
                  +

                  Set extradata size. +

                  +
                  +
                  time_base rational number
                  +

                  Set codec time base. +

                  +

                  It is the fundamental unit of time (in seconds) in terms of which +frame timestamps are represented. For fixed-fps content, timebase +should be 1 / frame_rate and timestamp increments should be +identically 1. +

                  +
                  +
                  g integer (encoding,video)
                  +

                  Set the group of picture size. Default value is 12. +

                  +
                  +
                  ar integer (decoding/encoding,audio)
                  +

                  Set audio sampling rate (in Hz). +

                  +
                  +
                  ac integer (decoding/encoding,audio)
                  +

                  Set number of audio channels. +

                  +
                  +
                  cutoff integer (encoding,audio)
                  +

                  Set cutoff bandwidth. +

                  +
                  +
                  frame_size integer (encoding,audio)
                  +

                  Set audio frame size. +

                  +

                  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. +

                  +
                  +
                  frame_number integer
                  +

                  Set the frame number. +

                  +
                  +
                  delay integer
                  +
                  qcomp float (encoding,video)
                  +

                  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. +

                  +
                  +
                  qblur float (encoding,video)
                  +

                  Set video quantizer scale blur (VBR). +

                  +
                  +
                  qmin integer (encoding,video)
                  +

                  Set min video quantizer scale (VBR). Must be included between -1 and +69, default value is 2. +

                  +
                  +
                  qmax integer (encoding,video)
                  +

                  Set max video quantizer scale (VBR). Must be included between -1 and +1024, default value is 31. +

                  +
                  +
                  qdiff integer (encoding,video)
                  +

                  Set max difference between the quantizer scale (VBR). +

                  +
                  +
                  bf integer (encoding,video)
                  +

                  Set max number of B frames. +

                  +
                  +
                  b_qfactor float (encoding,video)
                  +

                  Set qp factor between P and B frames. +

                  +
                  +
                  rc_strategy integer (encoding,video)
                  +

                  Set ratecontrol method. +

                  +
                  +
                  b_strategy integer (encoding,video)
                  +

                  Set strategy to choose between I/P/B-frames. +

                  +
                  +
                  ps integer (encoding,video)
                  +

                  Set RTP payload size in bytes. +

                  +
                  +
                  mv_bits integer
                  +
                  header_bits integer
                  +
                  i_tex_bits integer
                  +
                  p_tex_bits integer
                  +
                  i_count integer
                  +
                  p_count integer
                  +
                  skip_count integer
                  +
                  misc_bits integer
                  +
                  frame_bits integer
                  +
                  codec_tag integer
                  +
                  bug flags (decoding,video)
                  +

                  Workaround not auto detected encoder bugs. +

                  +

                  Possible values: +

                  +
                  autodetect
                  +
                  old_msmpeg4
                  +

                  some old lavc generated msmpeg4v3 files (no autodetection) +

                  +
                  xvid_ilace
                  +

                  Xvid interlacing bug (autodetected if fourcc==XVIX) +

                  +
                  ump4
                  +

                  (autodetected if fourcc==UMP4) +

                  +
                  no_padding
                  +

                  padding bug (autodetected) +

                  +
                  amv
                  +
                  ac_vlc
                  +

                  illegal vlc bug (autodetected per fourcc) +

                  +
                  qpel_chroma
                  +
                  std_qpel
                  +

                  old standard qpel (autodetected per fourcc/version) +

                  +
                  qpel_chroma2
                  +
                  direct_blocksize
                  +

                  direct-qpel-blocksize bug (autodetected per fourcc/version) +

                  +
                  edge
                  +

                  edge padding bug (autodetected per fourcc/version) +

                  +
                  hpel_chroma
                  +
                  dc_clip
                  +
                  ms
                  +

                  Workaround various bugs in microsoft broken decoders. +

                  +
                  trunc
                  +

                  trancated frames +

                  +
                  + +
                  +
                  lelim integer (encoding,video)
                  +

                  Set single coefficient elimination threshold for luminance (negative +values also consider DC coefficient). +

                  +
                  +
                  celim integer (encoding,video)
                  +

                  Set single coefficient elimination threshold for chrominance (negative +values also consider dc coefficient) +

                  +
                  +
                  strict integer (decoding/encoding,audio,video)
                  +

                  Specify how strictly to follow the standards. +

                  +

                  Possible values: +

                  +
                  very
                  +

                  strictly conform to a older more strict version of the spec or reference software +

                  +
                  strict
                  +

                  strictly conform to all the things in the spec no matter what consequences +

                  +
                  normal
                  +
                  unofficial
                  +

                  allow unofficial extensions +

                  +
                  experimental
                  +

                  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. +

                  +
                  + +
                  +
                  b_qoffset float (encoding,video)
                  +

                  Set QP offset between P and B frames. +

                  +
                  +
                  err_detect flags (decoding,audio,video)
                  +

                  Set error detection flags. +

                  +

                  Possible values: +

                  +
                  crccheck
                  +

                  verify embedded CRCs +

                  +
                  bitstream
                  +

                  detect bitstream specification deviations +

                  +
                  buffer
                  +

                  detect improper bitstream length +

                  +
                  explode
                  +

                  abort decoding on minor error detection +

                  +
                  careful
                  +

                  consider things that violate the spec and have not been seen in the wild as errors +

                  +
                  compliant
                  +

                  consider all spec non compliancies as errors +

                  +
                  aggressive
                  +

                  consider things that a sane encoder should not do as an error +

                  +
                  + +
                  +
                  has_b_frames integer
                  +
                  block_align integer
                  +
                  mpeg_quant integer (encoding,video)
                  +

                  Use MPEG quantizers instead of H.263. +

                  +
                  +
                  qsquish float (encoding,video)
                  +

                  How to keep quantizer between qmin and qmax (0 = clip, 1 = use +differentiable function). +

                  +
                  +
                  rc_qmod_amp float (encoding,video)
                  +

                  Set experimental quantizer modulation. +

                  +
                  +
                  rc_qmod_freq integer (encoding,video)
                  +

                  Set experimental quantizer modulation. +

                  +
                  +
                  rc_override_count integer
                  +
                  rc_eq string (encoding,video)
                  +

                  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. +

                  +
                  +
                  maxrate integer (encoding,audio,video)
                  +

                  Set max bitrate tolerance (in bits/s). Requires bufsize to be set. +

                  +
                  +
                  minrate integer (encoding,audio,video)
                  +

                  Set min bitrate tolerance (in bits/s). Most useful in setting up a CBR +encode. It is of little use elsewise. +

                  +
                  +
                  bufsize integer (encoding,audio,video)
                  +

                  Set ratecontrol buffer size (in bits). +

                  +
                  +
                  rc_buf_aggressivity float (encoding,video)
                  +

                  Currently useless. +

                  +
                  +
                  i_qfactor float (encoding,video)
                  +

                  Set QP factor between P and I frames. +

                  +
                  +
                  i_qoffset float (encoding,video)
                  +

                  Set QP offset between P and I frames. +

                  +
                  +
                  rc_init_cplx float (encoding,video)
                  +

                  Set initial complexity for 1-pass encoding. +

                  +
                  +
                  dct integer (encoding,video)
                  +

                  Set DCT algorithm. +

                  +

                  Possible values: +

                  +
                  auto
                  +

                  autoselect a good one (default) +

                  +
                  fastint
                  +

                  fast integer +

                  +
                  int
                  +

                  accurate integer +

                  +
                  mmx
                  +
                  altivec
                  +
                  faan
                  +

                  floating point AAN DCT +

                  +
                  + +
                  +
                  lumi_mask float (encoding,video)
                  +

                  Compress bright areas stronger than medium ones. +

                  +
                  +
                  tcplx_mask float (encoding,video)
                  +

                  Set temporal complexity masking. +

                  +
                  +
                  scplx_mask float (encoding,video)
                  +

                  Set spatial complexity masking. +

                  +
                  +
                  p_mask float (encoding,video)
                  +

                  Set inter masking. +

                  +
                  +
                  dark_mask float (encoding,video)
                  +

                  Compress dark areas stronger than medium ones. +

                  +
                  +
                  idct integer (decoding/encoding,video)
                  +

                  Select IDCT implementation. +

                  +

                  Possible values: +

                  +
                  auto
                  +
                  int
                  +
                  simple
                  +
                  simplemmx
                  +
                  arm
                  +
                  altivec
                  +
                  sh4
                  +
                  simplearm
                  +
                  simplearmv5te
                  +
                  simplearmv6
                  +
                  simpleneon
                  +
                  simplealpha
                  +
                  ipp
                  +
                  xvidmmx
                  +
                  faani
                  +

                  floating point AAN IDCT +

                  +
                  + +
                  +
                  slice_count integer
                  +
                  ec flags (decoding,video)
                  +

                  Set error concealment strategy. +

                  +

                  Possible values: +

                  +
                  guess_mvs
                  +

                  iterative motion vector (MV) search (slow) +

                  +
                  deblock
                  +

                  use strong deblock filter for damaged MBs +

                  +
                  + +
                  +
                  bits_per_coded_sample integer
                  +
                  pred integer (encoding,video)
                  +

                  Set prediction method. +

                  +

                  Possible values: +

                  +
                  left
                  +
                  plane
                  +
                  median
                  +
                  + +
                  +
                  aspect rational number (encoding,video)
                  +

                  Set sample aspect ratio. +

                  +
                  +
                  debug flags (decoding/encoding,audio,video,subtitles)
                  +

                  Print specific debug info. +

                  +

                  Possible values: +

                  +
                  pict
                  +

                  picture info +

                  +
                  rc
                  +

                  rate control +

                  +
                  bitstream
                  +
                  mb_type
                  +

                  macroblock (MB) type +

                  +
                  qp
                  +

                  per-block quantization parameter (QP) +

                  +
                  mv
                  +

                  motion vector +

                  +
                  dct_coeff
                  +
                  skip
                  +
                  startcode
                  +
                  pts
                  +
                  er
                  +

                  error recognition +

                  +
                  mmco
                  +

                  memory management control operations (H.264) +

                  +
                  bugs
                  +
                  vis_qp
                  +

                  visualize quantization parameter (QP), lower QP are tinted greener +

                  +
                  vis_mb_type
                  +

                  visualize block types +

                  +
                  buffers
                  +

                  picture buffer allocations +

                  +
                  thread_ops
                  +

                  threading operations +

                  +
                  + +
                  +
                  vismv integer (decoding,video)
                  +

                  Visualize motion vectors (MVs). +

                  +

                  Possible values: +

                  +
                  pf
                  +

                  forward predicted MVs of P-frames +

                  +
                  bf
                  +

                  forward predicted MVs of B-frames +

                  +
                  bb
                  +

                  backward predicted MVs of B-frames +

                  +
                  + +
                  +
                  cmp integer (encoding,video)
                  +

                  Set full pel me compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  subcmp integer (encoding,video)
                  +

                  Set sub pel me compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  mbcmp integer (encoding,video)
                  +

                  Set macroblock compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  ildctcmp integer (encoding,video)
                  +

                  Set interlaced dct compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  dia_size integer (encoding,video)
                  +

                  Set diamond type & size for motion estimation. +

                  +
                  +
                  last_pred integer (encoding,video)
                  +

                  Set amount of motion predictors from the previous frame. +

                  +
                  +
                  preme integer (encoding,video)
                  +

                  Set pre motion estimation. +

                  +
                  +
                  precmp integer (encoding,video)
                  +

                  Set pre motion estimation compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  pre_dia_size integer (encoding,video)
                  +

                  Set diamond type & size for motion estimation pre-pass. +

                  +
                  +
                  subq integer (encoding,video)
                  +

                  Set sub pel motion estimation quality. +

                  +
                  +
                  dtg_active_format integer
                  +
                  me_range integer (encoding,video)
                  +

                  Set limit motion vectors range (1023 for DivX player). +

                  +
                  +
                  ibias integer (encoding,video)
                  +

                  Set intra quant bias. +

                  +
                  +
                  pbias integer (encoding,video)
                  +

                  Set inter quant bias. +

                  +
                  +
                  color_table_id integer
                  +
                  global_quality integer (encoding,audio,video)
                  +
                  coder integer (encoding,video)
                  +
                  +

                  Possible values: +

                  +
                  vlc
                  +

                  variable length coder / huffman coder +

                  +
                  ac
                  +

                  arithmetic coder +

                  +
                  raw
                  +

                  raw (no encoding) +

                  +
                  rle
                  +

                  run-length coder +

                  +
                  deflate
                  +

                  deflate-based coder +

                  +
                  + +
                  +
                  context integer (encoding,video)
                  +

                  Set context model. +

                  +
                  +
                  slice_flags integer
                  +
                  xvmc_acceleration integer
                  +
                  mbd integer (encoding,video)
                  +

                  Set macroblock decision algorithm (high quality mode). +

                  +

                  Possible values: +

                  +
                  simple
                  +

                  use mbcmp (default) +

                  +
                  bits
                  +

                  use fewest bits +

                  +
                  rd
                  +

                  use best rate distortion +

                  +
                  + +
                  +
                  stream_codec_tag integer
                  +
                  sc_threshold integer (encoding,video)
                  +

                  Set scene change threshold. +

                  +
                  +
                  lmin integer (encoding,video)
                  +

                  Set min lagrange factor (VBR). +

                  +
                  +
                  lmax integer (encoding,video)
                  +

                  Set max lagrange factor (VBR). +

                  +
                  +
                  nr integer (encoding,video)
                  +

                  Set noise reduction. +

                  +
                  +
                  rc_init_occupancy integer (encoding,video)
                  +

                  Set number of bits which should be loaded into the rc buffer before +decoding starts. +

                  +
                  +
                  flags2 flags (decoding/encoding,audio,video)
                  +
                  +

                  Possible values: +

                  +
                  fast
                  +

                  Allow non spec compliant speedup tricks. +

                  +
                  sgop
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  noout
                  +

                  Skip bitstream encoding. +

                  +
                  ignorecrop
                  +

                  Ignore cropping information from sps. +

                  +
                  local_header
                  +

                  Place global headers at every keyframe instead of in extradata. +

                  +
                  chunks
                  +

                  Frame data might be split into multiple chunks. +

                  +
                  showall
                  +

                  Show all frames before the first keyframe. +

                  +
                  skiprd
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  + +
                  +
                  error integer (encoding,video)
                  +
                  qns integer (encoding,video)
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  +
                  threads integer (decoding/encoding,video)
                  +
                  +

                  Possible values: +

                  +
                  auto
                  +

                  detect a good number of threads +

                  +
                  + +
                  +
                  me_threshold integer (encoding,video)
                  +

                  Set motion estimation threshold. +

                  +
                  +
                  mb_threshold integer (encoding,video)
                  +

                  Set macroblock threshold. +

                  +
                  +
                  dc integer (encoding,video)
                  +

                  Set intra_dc_precision. +

                  +
                  +
                  nssew integer (encoding,video)
                  +

                  Set nsse weight. +

                  +
                  +
                  skip_top integer (decoding,video)
                  +

                  Set number of macroblock rows at the top which are skipped. +

                  +
                  +
                  skip_bottom integer (decoding,video)
                  +

                  Set number of macroblock rows at the bottom which are skipped. +

                  +
                  +
                  profile integer (encoding,audio,video)
                  +
                  +

                  Possible values: +

                  +
                  unknown
                  +
                  aac_main
                  +
                  aac_low
                  +
                  aac_ssr
                  +
                  aac_ltp
                  +
                  aac_he
                  +
                  aac_he_v2
                  +
                  aac_ld
                  +
                  aac_eld
                  +
                  mpeg2_aac_low
                  +
                  mpeg2_aac_he
                  +
                  dts
                  +
                  dts_es
                  +
                  dts_96_24
                  +
                  dts_hd_hra
                  +
                  dts_hd_ma
                  +
                  + +
                  +
                  level integer (encoding,audio,video)
                  +
                  +

                  Possible values: +

                  +
                  unknown
                  +
                  + +
                  +
                  lowres integer (decoding,audio,video)
                  +

                  Decode at 1= 1/2, 2=1/4, 3=1/8 resolutions. +

                  +
                  +
                  skip_threshold integer (encoding,video)
                  +

                  Set frame skip threshold. +

                  +
                  +
                  skip_factor integer (encoding,video)
                  +

                  Set frame skip factor. +

                  +
                  +
                  skip_exp integer (encoding,video)
                  +

                  Set frame skip exponent. +

                  +
                  +
                  skipcmp integer (encoding,video)
                  +

                  Set frame skip compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  border_mask float (encoding,video)
                  +

                  Increase the quantizer for macroblocks close to borders. +

                  +
                  +
                  mblmin integer (encoding,video)
                  +

                  Set min macroblock lagrange factor (VBR). +

                  +
                  +
                  mblmax integer (encoding,video)
                  +

                  Set max macroblock lagrange factor (VBR). +

                  +
                  +
                  mepc integer (encoding,video)
                  +

                  Set motion estimation bitrate penalty compensation (1.0 = 256). +

                  +
                  +
                  skip_loop_filter integer (decoding,video)
                  +
                  skip_idct integer (decoding,video)
                  +
                  skip_frame integer (decoding,video)
                  +
                  +

                  Make decoder discard processing depending on the frame type selected +by the option value. +

                  +

                  skip_loop_filter’ skips frame loop filtering, ‘skip_idct’ +skips frame IDCT/dequantization, ‘skip_frame’ skips decoding. +

                  +

                  Possible values: +

                  +
                  none
                  +

                  Discard no frame. +

                  +
                  +
                  default
                  +

                  Discard useless frames like 0-sized frames. +

                  +
                  +
                  noref
                  +

                  Discard all non-reference frames. +

                  +
                  +
                  bidir
                  +

                  Discard all bidirectional frames. +

                  +
                  +
                  nokey
                  +

                  Discard all frames excepts keyframes. +

                  +
                  +
                  all
                  +

                  Discard all frames. +

                  +
                  + +

                  Default value is ‘default’. +

                  +
                  +
                  bidir_refine integer (encoding,video)
                  +

                  Refine the two motion vectors used in bidirectional macroblocks. +

                  +
                  +
                  brd_scale integer (encoding,video)
                  +

                  Downscale frames for dynamic B-frame decision. +

                  +
                  +
                  keyint_min integer (encoding,video)
                  +

                  Set minimum interval between IDR-frames. +

                  +
                  +
                  refs integer (encoding,video)
                  +

                  Set reference frames to consider for motion compensation. +

                  +
                  +
                  chromaoffset integer (encoding,video)
                  +

                  Set chroma qp offset from luma. +

                  +
                  +
                  trellis integer (encoding,audio,video)
                  +

                  Set rate-distortion optimal quantization. +

                  +
                  +
                  sc_factor integer (encoding,video)
                  +

                  Set value multiplied by qscale for each frame and added to +scene_change_score. +

                  +
                  +
                  mv0_threshold integer (encoding,video)
                  +
                  b_sensitivity integer (encoding,video)
                  +

                  Adjust sensitivity of b_frame_strategy 1. +

                  +
                  +
                  compression_level integer (encoding,audio,video)
                  +
                  min_prediction_order integer (encoding,audio)
                  +
                  max_prediction_order integer (encoding,audio)
                  +
                  timecode_frame_start integer (encoding,video)
                  +

                  Set GOP timecode frame start number, in non drop frame format. +

                  +
                  +
                  request_channels integer (decoding,audio)
                  +

                  Set desired number of audio channels. +

                  +
                  +
                  bits_per_raw_sample integer
                  +
                  channel_layout integer (decoding/encoding,audio)
                  +
                  +

                  Possible values: +

                  +
                  request_channel_layout integer (decoding,audio)
                  +
                  +

                  Possible values: +

                  +
                  rc_max_vbv_use float (encoding,video)
                  +
                  rc_min_vbv_use float (encoding,video)
                  +
                  ticks_per_frame integer (decoding/encoding,audio,video)
                  +
                  color_primaries integer (decoding/encoding,video)
                  +
                  color_trc integer (decoding/encoding,video)
                  +
                  colorspace integer (decoding/encoding,video)
                  +
                  color_range integer (decoding/encoding,video)
                  +
                  chroma_sample_location integer (decoding/encoding,video)
                  +
                  log_level_offset integer
                  +

                  Set the log level offset. +

                  +
                  +
                  slices integer (encoding,video)
                  +

                  Number of slices, used in parallelized encoding. +

                  +
                  +
                  thread_type flags (decoding/encoding,video)
                  +

                  Select multithreading type. +

                  +

                  Possible values: +

                  +
                  slice
                  +
                  frame
                  +
                  +
                  +
                  audio_service_type integer (encoding,audio)
                  +

                  Set audio service type. +

                  +

                  Possible values: +

                  +
                  ma
                  +

                  Main Audio Service +

                  +
                  ef
                  +

                  Effects +

                  +
                  vi
                  +

                  Visually Impaired +

                  +
                  hi
                  +

                  Hearing Impaired +

                  +
                  di
                  +

                  Dialogue +

                  +
                  co
                  +

                  Commentary +

                  +
                  em
                  +

                  Emergency +

                  +
                  vo
                  +

                  Voice Over +

                  +
                  ka
                  +

                  Karaoke +

                  +
                  + +
                  +
                  request_sample_fmt sample_fmt (decoding,audio)
                  +

                  Set sample format audio decoders should prefer. Default value is +none. +

                  +
                  +
                  pkt_timebase rational number
                  +
                  sub_charenc encoding (decoding,subtitles)
                  +

                  Set the input subtitles character encoding. +

                  +
                  +
                  field_order field_order (video)
                  +

                  Set/override the field order of the video. +Possible values: +

                  +
                  progressive
                  +

                  Progressive video +

                  +
                  tt
                  +

                  Interlaced video, top field coded and displayed first +

                  +
                  bb
                  +

                  Interlaced video, bottom field coded and displayed first +

                  +
                  tb
                  +

                  Interlaced video, top coded first, bottom displayed first +

                  +
                  bt
                  +

                  Interlaced video, bottom coded first, top displayed first +

                  +
                  + +
                  +
                  skip_alpha integer (decoding,video)
                  +

                  Set to 1 to disable processing alpha (transparency). This works like the +‘gray’ flag in the ‘flags’ option which skips chroma information +instead of alpha. Default is 0. +

                  +
                  + + + +

                  8. Decoders

                  + +

                  Decoders are configured elements in FFmpeg which allow the decoding of +multimedia streams. +

                  +

                  When you configure your FFmpeg build, all the supported native decoders +are enabled by default. Decoders requiring an external library must be enabled +manually via the corresponding --enable-lib option. You can list all +available decoders using the configure option --list-decoders. +

                  +

                  You can disable all the decoders with the configure option +--disable-decoders and selectively enable / disable single decoders +with the options --enable-decoder=DECODER / +--disable-decoder=DECODER. +

                  +

                  The option -codecs of the ff* tools will display the list of +enabled decoders. +

                  + + +

                  9. Video Decoders

                  + +

                  A description of some of the currently available video decoders +follows. +

                  + +

                  9.1 rawvideo

                  + +

                  Raw video decoder. +

                  +

                  This decoder decodes rawvideo streams. +

                  + +

                  9.1.1 Options

                  + +
                  +
                  top top_field_first
                  +

                  Specify the assumed field type of the input video. +

                  +
                  -1
                  +

                  the video is assumed to be progressive (default) +

                  +
                  0
                  +

                  bottom-field-first is assumed +

                  +
                  1
                  +

                  top-field-first is assumed +

                  +
                  + +
                  +
                  + + + +

                  10. Audio Decoders

                  + + +

                  10.1 ffwavesynth

                  + +

                  Internal wave synthetizer. +

                  +

                  This decoder generates wave patterns according to predefined sequences. Its +use is purely internal and the format of the data it accepts is not publicly +documented. +

                  + +

                  10.2 libcelt

                  + +

                  libcelt decoder wrapper. +

                  +

                  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 --enable-libcelt. +

                  + +

                  10.3 libgsm

                  + +

                  libgsm decoder wrapper. +

                  +

                  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 --enable-libgsm. +

                  +

                  This decoder supports both the ordinary GSM and the Microsoft variant. +

                  + +

                  10.4 libilbc

                  + +

                  libilbc decoder wrapper. +

                  +

                  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 +--enable-libilbc. +

                  + +

                  10.4.1 Options

                  + +

                  The following option is supported by the libilbc wrapper. +

                  +
                  +
                  enhance
                  +
                  +

                  Enable the enhancement of the decoded audio when set to 1. The default +value is 0 (disabled). +

                  +
                  +
                  + + +

                  10.5 libopencore-amrnb

                  + +

                  libopencore-amrnb decoder wrapper. +

                  +

                  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 --enable-libopencore-amrnb. +

                  +

                  An FFmpeg native decoder for AMR-NB exists, so users can decode AMR-NB +without this library. +

                  + +

                  10.6 libopencore-amrwb

                  + +

                  libopencore-amrwb decoder wrapper. +

                  +

                  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 --enable-libopencore-amrwb. +

                  +

                  An FFmpeg native decoder for AMR-WB exists, so users can decode AMR-WB +without this library. +

                  + +

                  10.7 libopus

                  + +

                  libopus decoder wrapper. +

                  +

                  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 +--enable-libopus. +

                  + + +

                  11. Subtitles Decoders

                  + + +

                  11.1 dvdsub

                  + +

                  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. +

                  + +

                  11.1.1 Options

                  + +
                  +
                  palette
                  +

                  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. +

                  +

                  The format for this option is a string containing 16 24-bits hexadecimal +numbers (without 0x prefix) separated by comas, for example 0d00ee, +ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, +7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b. +

                  +
                  + + +

                  11.2 libzvbi-teletext

                  + +

                  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 +--enable-libzvbi. +

                  + +

                  11.2.1 Options

                  + +
                  +
                  txt_page
                  +

                  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 *. +

                  +
                  txt_chop_top
                  +

                  Discards the top teletext line. Default value is 1. +

                  +
                  txt_format
                  +

                  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. +

                  +
                  txt_left
                  +

                  X offset of generated bitmaps, default is 0. +

                  +
                  txt_top
                  +

                  Y offset of generated bitmaps, default is 0. +

                  +
                  txt_chop_spaces
                  +

                  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. +

                  +
                  txt_duration
                  +

                  Sets the display duration of the decoded teletext pages or subtitles in +miliseconds. Default value is 30000 which is 30 seconds. +

                  +
                  txt_transparent
                  +

                  Force transparent background of the generated teletext bitmaps. Default value +is 0 which means an opaque (black) background. +

                  +
                  + + +

                  12. Encoders

                  + +

                  Encoders are configured elements in FFmpeg which allow the encoding of +multimedia streams. +

                  +

                  When you configure your FFmpeg build, all the supported native encoders +are enabled by default. Encoders requiring an external library must be enabled +manually via the corresponding --enable-lib option. You can list all +available encoders using the configure option --list-encoders. +

                  +

                  You can disable all the encoders with the configure option +--disable-encoders and selectively enable / disable single encoders +with the options --enable-encoder=ENCODER / +--disable-encoder=ENCODER. +

                  +

                  The option -codecs of the ff* tools will display the list of +enabled encoders. +

                  + + +

                  13. Audio Encoders

                  + +

                  A description of some of the currently available audio encoders +follows. +

                  +

                  +

                  +

                  13.1 aac

                  + +

                  Advanced Audio Coding (AAC) encoder. +

                  +

                  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 +‘strict’ option to ‘experimental’ or lower. +

                  +

                  As this encoder is experimental, unexpected behavior may exist from time to +time. For a more stable AAC encoder, see libvo-aacenc. However, be warned +that it has a worse quality reported by some users. +

                  + + +

                  13.1.1 Options

                  + +
                  +
                  b
                  +

                  Set bit rate in bits/s. Setting this automatically activates constant bit rate +(CBR) mode. +

                  +
                  +
                  q
                  +

                  Set quality for variable bit rate (VBR) mode. This option is valid only using +the ffmpeg command-line tool. For library interface users, use +‘global_quality’. +

                  +
                  +
                  stereo_mode
                  +

                  Set stereo encoding mode. Possible values: +

                  +
                  +
                  auto
                  +

                  Automatically selected by the encoder. +

                  +
                  +
                  ms_off
                  +

                  Disable middle/side encoding. This is the default. +

                  +
                  +
                  ms_force
                  +

                  Force middle/side encoding. +

                  +
                  + +
                  +
                  aac_coder
                  +

                  Set AAC encoder coding method. Possible values: +

                  +
                  +
                  faac
                  +

                  FAAC-inspired method. +

                  +

                  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. +

                  +

                  The quality of this method is comparable to the two loop searching method +descibed below, but somewhat a little better and slower. +

                  +
                  +
                  anmr
                  +

                  Average noise to mask ratio (ANMR) trellis-based solution. +

                  +

                  This has a theoretic best quality out of all the coding methods, but at the +cost of the slowest speed. +

                  +
                  +
                  twoloop
                  +

                  Two loop searching (TLS) method. +

                  +

                  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. +

                  +

                  This method produces similar quality with the FAAC method and is the default. +

                  +
                  +
                  fast
                  +

                  Constant quantizer method. +

                  +

                  This method sets a constant quantizer for all bands. This is the fastest of all +the methods, yet produces the worst quality. +

                  +
                  +
                  + +
                  +
                  + + +

                  13.2 ac3 and ac3_fixed

                  + +

                  AC-3 audio encoders. +

                  +

                  These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as +the undocumented RealAudio 3 (a.k.a. dnet). +

                  +

                  The ac3 encoder uses floating-point math, while the ac3_fixed +encoder only uses fixed-point integer math. This does not mean that one is +always faster, just that one or the other may be better suited to a +particular system. The floating-point encoder will generally produce better +quality audio for a given bitrate. The ac3_fixed encoder is not the +default codec for any of the output formats, so it must be specified explicitly +using the option -acodec ac3_fixed in order to use it. +

                  + +

                  13.2.1 AC-3 Metadata

                  + +

                  The AC-3 metadata options are used to set parameters that describe the audio, +but in most cases do not affect the audio encoding itself. Some of the options +do directly affect or influence the decoding and playback of the resulting +bitstream, while others are just for informational purposes. A few of the +options will add bits to the output stream that could otherwise be used for +audio data, and will thus affect the quality of the output. Those will be +indicated accordingly with a note in the option list below. +

                  +

                  These parameters are described in detail in several publicly-available +documents. +

                  + + +

                  13.2.1.1 Metadata Control Options

                  + +
                  +
                  -per_frame_metadata boolean
                  +

                  Allow Per-Frame Metadata. Specifies if the encoder should check for changing +metadata for each frame. +

                  +
                  0
                  +

                  The metadata values set at initialization will be used for every frame in the +stream. (default) +

                  +
                  1
                  +

                  Metadata values can be changed before encoding each frame. +

                  +
                  + +
                  +
                  + + +

                  13.2.1.2 Downmix Levels

                  + +
                  +
                  -center_mixlev level
                  +

                  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: +

                  +
                  0.707
                  +

                  Apply -3dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain (default) +

                  +
                  0.500
                  +

                  Apply -6dB gain +

                  +
                  + +
                  +
                  -surround_mixlev level
                  +

                  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: +

                  +
                  0.707
                  +

                  Apply -3dB gain +

                  +
                  0.500
                  +

                  Apply -6dB gain (default) +

                  +
                  0.000
                  +

                  Silence Surround Channel(s) +

                  +
                  + +
                  +
                  + + +

                  13.2.1.3 Audio Production Information

                  +

                  Audio Production Information is optional information describing the mixing +environment. Either none or both of the fields are written to the bitstream. +

                  +
                  +
                  -mixing_level number
                  +

                  Mixing Level. Specifies peak sound pressure level (SPL) in the production +environment when the mix was mastered. Valid values are 80 to 111, or -1 for +unknown or not indicated. The default value is -1, but that value cannot be +used if the Audio Production Information is written to the bitstream. Therefore, +if the room_type option is not the default value, the mixing_level +option must not be -1. +

                  +
                  +
                  -room_type type
                  +

                  Room Type. Describes the equalization used during the final mixing session at +the studio or on the dubbing stage. A large room is a dubbing stage with the +industry standard X-curve equalization; a small room has flat equalization. +This field will not be written to the bitstream if both the mixing_level +option and the room_type option have the default values. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  large
                  +

                  Large Room +

                  +
                  2
                  +
                  small
                  +

                  Small Room +

                  +
                  + +
                  +
                  + + +

                  13.2.1.4 Other Metadata Options

                  + +
                  +
                  -copyright boolean
                  +

                  Copyright Indicator. Specifies whether a copyright exists for this audio. +

                  +
                  0
                  +
                  off
                  +

                  No Copyright Exists (default) +

                  +
                  1
                  +
                  on
                  +

                  Copyright Exists +

                  +
                  + +
                  +
                  -dialnorm value
                  +

                  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. +

                  +
                  +
                  -dsur_mode mode
                  +

                  Dolby Surround Mode. Specifies whether the stereo signal uses Dolby Surround +(Pro Logic). This field will only be written to the bitstream if the audio +stream is stereo. Using this option does NOT mean the encoder will actually +apply Dolby Surround processing. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  off
                  +

                  Not Dolby Surround Encoded +

                  +
                  2
                  +
                  on
                  +

                  Dolby Surround Encoded +

                  +
                  + +
                  +
                  -original boolean
                  +

                  Original Bit Stream Indicator. Specifies whether this audio is from the +original source and not a copy. +

                  +
                  0
                  +
                  off
                  +

                  Not Original Source +

                  +
                  1
                  +
                  on
                  +

                  Original Source (default) +

                  +
                  + +
                  +
                  + + +

                  13.2.2 Extended Bitstream Information

                  +

                  The extended bitstream options are part of the Alternate Bit Stream Syntax as +specified in Annex D of the A/52:2010 standard. It is grouped into 2 parts. +If any one parameter in a group is specified, all values in that group will be +written to the bitstream. Default values are used for those that are written +but have not been specified. If the mixing levels are written, the decoder +will use these values instead of the ones specified in the center_mixlev +and surround_mixlev options if it supports the Alternate Bit Stream +Syntax. +

                  + +

                  13.2.2.1 Extended Bitstream Information - Part 1

                  + +
                  +
                  -dmix_mode mode
                  +

                  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. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  ltrt
                  +

                  Lt/Rt Downmix Preferred +

                  +
                  2
                  +
                  loro
                  +

                  Lo/Ro Downmix Preferred +

                  +
                  + +
                  +
                  -ltrt_cmixlev level
                  +

                  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. +

                  +
                  1.414
                  +

                  Apply +3dB gain +

                  +
                  1.189
                  +

                  Apply +1.5dB gain +

                  +
                  1.000
                  +

                  Apply 0dB gain +

                  +
                  0.841
                  +

                  Apply -1.5dB gain +

                  +
                  0.707
                  +

                  Apply -3.0dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain (default) +

                  +
                  0.500
                  +

                  Apply -6.0dB gain +

                  +
                  0.000
                  +

                  Silence Center Channel +

                  +
                  + +
                  +
                  -ltrt_surmixlev level
                  +

                  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. +

                  +
                  0.841
                  +

                  Apply -1.5dB gain +

                  +
                  0.707
                  +

                  Apply -3.0dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain +

                  +
                  0.500
                  +

                  Apply -6.0dB gain (default) +

                  +
                  0.000
                  +

                  Silence Surround Channel(s) +

                  +
                  + +
                  +
                  -loro_cmixlev level
                  +

                  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. +

                  +
                  1.414
                  +

                  Apply +3dB gain +

                  +
                  1.189
                  +

                  Apply +1.5dB gain +

                  +
                  1.000
                  +

                  Apply 0dB gain +

                  +
                  0.841
                  +

                  Apply -1.5dB gain +

                  +
                  0.707
                  +

                  Apply -3.0dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain (default) +

                  +
                  0.500
                  +

                  Apply -6.0dB gain +

                  +
                  0.000
                  +

                  Silence Center Channel +

                  +
                  + +
                  +
                  -loro_surmixlev level
                  +

                  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. +

                  +
                  0.841
                  +

                  Apply -1.5dB gain +

                  +
                  0.707
                  +

                  Apply -3.0dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain +

                  +
                  0.500
                  +

                  Apply -6.0dB gain (default) +

                  +
                  0.000
                  +

                  Silence Surround Channel(s) +

                  +
                  + +
                  +
                  + + +

                  13.2.2.2 Extended Bitstream Information - Part 2

                  + +
                  +
                  -dsurex_mode mode
                  +

                  Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX +(7.1 matrixed to 5.1). Using this option does NOT mean the encoder will actually +apply Dolby Surround EX processing. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  on
                  +

                  Dolby Surround EX Off +

                  +
                  2
                  +
                  off
                  +

                  Dolby Surround EX On +

                  +
                  + +
                  +
                  -dheadphone_mode mode
                  +

                  Dolby Headphone Mode. Indicates whether the stream uses Dolby Headphone +encoding (multi-channel matrixed to 2.0 for use with headphones). Using this +option does NOT mean the encoder will actually apply Dolby Headphone +processing. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  on
                  +

                  Dolby Headphone Off +

                  +
                  2
                  +
                  off
                  +

                  Dolby Headphone On +

                  +
                  + +
                  +
                  -ad_conv_type type
                  +

                  A/D Converter Type. Indicates whether the audio has passed through HDCD A/D +conversion. +

                  +
                  0
                  +
                  standard
                  +

                  Standard A/D Converter (default) +

                  +
                  1
                  +
                  hdcd
                  +

                  HDCD A/D Converter +

                  +
                  + +
                  +
                  + + +

                  13.2.3 Other AC-3 Encoding Options

                  + +
                  +
                  -stereo_rematrixing boolean
                  +

                  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. +

                  +
                  +
                  + + +

                  13.2.4 Floating-Point-Only AC-3 Encoding Options

                  + +

                  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. +

                  +
                  +
                  -channel_coupling boolean
                  +

                  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. +

                  +
                  -1
                  +
                  auto
                  +

                  Selected by Encoder (default) +

                  +
                  0
                  +
                  off
                  +

                  Disable Channel Coupling +

                  +
                  1
                  +
                  on
                  +

                  Enable Channel Coupling +

                  +
                  + +
                  +
                  -cpl_start_band number
                  +

                  Coupling Start Band. Sets the channel coupling start band, from 1 to 15. If a +value higher than the bandwidth is used, it will be reduced to 1 less than the +coupling end band. If auto is used, the start band will be determined by +the encoder based on the bit rate, sample rate, and channel layout. This option +has no effect if channel coupling is disabled. +

                  +
                  -1
                  +
                  auto
                  +

                  Selected by Encoder (default) +

                  +
                  + +
                  +
                  + +

                  +

                  +

                  13.3 libmp3lame

                  + +

                  LAME (Lame Ain’t an MP3 Encoder) MP3 encoder wrapper. +

                  +

                  Requires the presence of the libmp3lame headers and library during +configuration. You need to explicitly configure the build with +--enable-libmp3lame. +

                  +

                  See libshine for a fixed-point MP3 encoder, although with a +lower quality. +

                  + +

                  13.3.1 Options

                  + +

                  The following options are supported by the libmp3lame wrapper. The +lame-equivalent of the options are listed in parentheses. +

                  +
                  +
                  b (-b)
                  +

                  Set bitrate expressed in bits/s for CBR. LAME bitrate is +expressed in kilobits/s. +

                  +
                  +
                  q (-V)
                  +

                  Set constant quality setting for VBR. This option is valid only +using the ffmpeg command-line tool. For library interface +users, use ‘global_quality’. +

                  +
                  +
                  compression_level (-q)
                  +

                  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. +

                  +
                  +
                  reservoir
                  +

                  Enable use of bit reservoir when set to 1. Default value is 1. LAME +has this enabled by default, but can be overriden by use +‘--nores’ option. +

                  +
                  +
                  joint_stereo (-m j)
                  +

                  Enable the encoder to use (on a frame by frame basis) either L/R +stereo or mid/side stereo. Default value is 1. +

                  +
                  +
                  + + +

                  13.4 libopencore-amrnb

                  + +

                  OpenCORE Adaptive Multi-Rate Narrowband encoder. +

                  +

                  Requires the presence of the libopencore-amrnb headers and library during +configuration. You need to explicitly configure the build with +--enable-libopencore-amrnb --enable-version3. +

                  +

                  This is a mono-only encoder. Officially it only supports 8000Hz sample rate, +but you can override it by setting ‘strict’ to ‘unofficial’ or +lower. +

                  + +

                  13.4.1 Options

                  + +
                  +
                  b
                  +

                  Set bitrate in bits per second. Only the following bitrates are supported, +otherwise libavcodec will round to the nearest valid bitrate. +

                  +
                  +
                  4750
                  +
                  5150
                  +
                  5900
                  +
                  6700
                  +
                  7400
                  +
                  7950
                  +
                  10200
                  +
                  12200
                  +
                  + +
                  +
                  dtx
                  +

                  Allow discontinuous transmission (generate comfort noise) when set to 1. The +default value is 0 (disabled). +

                  +
                  +
                  + +

                  +

                  +

                  13.5 libshine

                  + +

                  Shine Fixed-Point MP3 encoder wrapper. +

                  +

                  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. +

                  +

                  This encoder only supports stereo and mono input. This is also CBR-only. +

                  +

                  The original project (last updated in early 2007) is at +http://sourceforge.net/projects/libshine-fxp/. We only support the +updated fork by the Savonet/Liquidsoap project at https://github.com/savonet/shine. +

                  +

                  Requires the presence of the libshine headers and library during +configuration. You need to explicitly configure the build with +--enable-libshine. +

                  +

                  See also libmp3lame. +

                  + +

                  13.5.1 Options

                  + +

                  The following options are supported by the libshine wrapper. The +shineenc-equivalent of the options are listed in parentheses. +

                  +
                  +
                  b (-b)
                  +

                  Set bitrate expressed in bits/s for CBR. shineenc-b’ option +is expressed in kilobits/s. +

                  +
                  +
                  + + +

                  13.6 libtwolame

                  + +

                  TwoLAME MP2 encoder wrapper. +

                  +

                  Requires the presence of the libtwolame headers and library during +configuration. You need to explicitly configure the build with +--enable-libtwolame. +

                  + +

                  13.6.1 Options

                  + +

                  The following options are supported by the libtwolame wrapper. The +twolame-equivalent options follow the FFmpeg ones and are in +parentheses. +

                  +
                  +
                  b (-b)
                  +

                  Set bitrate expressed in bits/s for CBR. twolameb’ +option is expressed in kilobits/s. Default value is 128k. +

                  +
                  +
                  q (-V)
                  +

                  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 +ffmpeg command-line tool. For library interface users, +use ‘global_quality’. +

                  +
                  +
                  mode (--mode)
                  +

                  Set the mode of the resulting audio. Possible values: +

                  +
                  +
                  auto
                  +

                  Choose mode automatically based on the input. This is the default. +

                  +
                  stereo
                  +

                  Stereo +

                  +
                  joint_stereo
                  +

                  Joint stereo +

                  +
                  dual_channel
                  +

                  Dual channel +

                  +
                  mono
                  +

                  Mono +

                  +
                  + +
                  +
                  psymodel (--psyc-mode)
                  +

                  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. +

                  +
                  +
                  energy_levels (--energy)
                  +

                  Enable energy levels extensions when set to 1. The default value is +0 (disabled). +

                  +
                  +
                  error_protection (--protect)
                  +

                  Enable CRC error protection when set to 1. The default value is 0 +(disabled). +

                  +
                  +
                  copyright (--copyright)
                  +

                  Set MPEG audio copyright flag when set to 1. The default value is 0 +(disabled). +

                  +
                  +
                  original (--original)
                  +

                  Set MPEG audio original flag when set to 1. The default value is 0 +(disabled). +

                  +
                  +
                  + +

                  +

                  +

                  13.7 libvo-aacenc

                  + +

                  VisualOn AAC encoder. +

                  +

                  Requires the presence of the libvo-aacenc headers and library during +configuration. You need to explicitly configure the build with +--enable-libvo-aacenc --enable-version3. +

                  +

                  This encoder is considered to be worse than the +native experimental FFmpeg AAC encoder, according to +multiple sources. +

                  + +

                  13.7.1 Options

                  + +

                  The VisualOn AAC encoder only support encoding AAC-LC and up to 2 +channels. It is also CBR-only. +

                  +
                  +
                  b
                  +

                  Set bit rate in bits/s. +

                  +
                  +
                  + + +

                  13.8 libvo-amrwbenc

                  + +

                  VisualOn Adaptive Multi-Rate Wideband encoder. +

                  +

                  Requires the presence of the libvo-amrwbenc headers and library during +configuration. You need to explicitly configure the build with +--enable-libvo-amrwbenc --enable-version3. +

                  +

                  This is a mono-only encoder. Officially it only supports 16000Hz sample +rate, but you can override it by setting ‘strict’ to +‘unofficial’ or lower. +

                  + +

                  13.8.1 Options

                  + +
                  +
                  b
                  +

                  Set bitrate in bits/s. Only the following bitrates are supported, otherwise +libavcodec will round to the nearest valid bitrate. +

                  +
                  +
                  6600
                  +
                  8850
                  +
                  12650
                  +
                  14250
                  +
                  15850
                  +
                  18250
                  +
                  19850
                  +
                  23050
                  +
                  23850
                  +
                  + +
                  +
                  dtx
                  +

                  Allow discontinuous transmission (generate comfort noise) when set to 1. The +default value is 0 (disabled). +

                  +
                  +
                  + + +

                  13.9 libopus

                  + +

                  libopus Opus Interactive Audio Codec encoder wrapper. +

                  +

                  Requires the presence of the libopus headers and library during +configuration. You need to explicitly configure the build with +--enable-libopus. +

                  + +

                  13.9.1 Option Mapping

                  + +

                  Most libopus options are modeled after the opusenc utility from +opus-tools. The following is an option mapping chart describing options +supported by the libopus wrapper, and their opusenc-equivalent +in parentheses. +

                  +
                  +
                  b (bitrate)
                  +

                  Set the bit rate in bits/s. FFmpeg’s ‘b’ option is +expressed in bits/s, while opusenc’s ‘bitrate’ in +kilobits/s. +

                  +
                  +
                  vbr (vbr, hard-cbr, and cvbr)
                  +

                  Set VBR mode. The FFmpeg ‘vbr’ option has the following +valid arguments, with the their opusenc equivalent options +in parentheses: +

                  +
                  +
                  off (hard-cbr)
                  +

                  Use constant bit rate encoding. +

                  +
                  +
                  on (vbr)
                  +

                  Use variable bit rate encoding (the default). +

                  +
                  +
                  constrained (cvbr)
                  +

                  Use constrained variable bit rate encoding. +

                  +
                  + +
                  +
                  compression_level (comp)
                  +

                  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. +

                  +
                  +
                  frame_duration (framesize)
                  +

                  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. +

                  +
                  +
                  packet_loss (expect-loss)
                  +

                  Set expected packet loss percentage. The default is 0. +

                  +
                  +
                  application (N.A.)
                  +

                  Set intended application type. Valid options are listed below: +

                  +
                  +
                  voip
                  +

                  Favor improved speech intelligibility. +

                  +
                  audio
                  +

                  Favor faithfulness to the input (the default). +

                  +
                  lowdelay
                  +

                  Restrict to only the lowest delay modes. +

                  +
                  + +
                  +
                  cutoff (N.A.)
                  +

                  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). +

                  +
                  +
                  + + +

                  13.10 libvorbis

                  + +

                  libvorbis encoder wrapper. +

                  +

                  Requires the presence of the libvorbisenc headers and library during +configuration. You need to explicitly configure the build with +--enable-libvorbis. +

                  + +

                  13.10.1 Options

                  + +

                  The following options are supported by the libvorbis wrapper. The +oggenc-equivalent of the options are listed in parentheses. +

                  +

                  To get a more accurate and extensive documentation of the libvorbis +options, consult the libvorbisenc’s and oggenc’s documentations. +See http://xiph.org/vorbis/, +http://wiki.xiph.org/Vorbis-tools, and oggenc(1). +

                  +
                  +
                  b (-b)
                  +

                  Set bitrate expressed in bits/s for ABR. oggenc-b’ is +expressed in kilobits/s. +

                  +
                  +
                  q (-q)
                  +

                  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 ‘3.0’. +

                  +

                  This option is valid only using the ffmpeg command-line tool. +For library interface users, use ‘global_quality’. +

                  +
                  +
                  cutoff (--advanced-encode-option lowpass_frequency=N)
                  +

                  Set cutoff bandwidth in Hz, a value of 0 disables cutoff. oggenc’s +related option is expressed in kHz. The default value is ‘0’ (cutoff +disabled). +

                  +
                  +
                  minrate (-m)
                  +

                  Set minimum bitrate expressed in bits/s. oggenc-m’ is +expressed in kilobits/s. +

                  +
                  +
                  maxrate (-M)
                  +

                  Set maximum bitrate expressed in bits/s. oggenc-M’ is +expressed in kilobits/s. This only has effect on ABR mode. +

                  +
                  +
                  iblock (--advanced-encode-option impulse_noisetune=N)
                  +

                  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. +

                  +
                  +
                  + + +

                  13.11 libwavpack

                  + +

                  A wrapper providing WavPack encoding through libwavpack. +

                  +

                  Only lossless mode using 32-bit integer samples is supported currently. +The ‘compression_level’ option can be used to control speed vs. +compression tradeoff, with the values mapped to libwavpack as follows: +

                  +
                  +
                  0
                  +

                  Fast mode - corresponding to the wavpack ‘-f’ option. +

                  +
                  +
                  1
                  +

                  Normal (default) settings. +

                  +
                  +
                  2
                  +

                  High quality - corresponding to the wavpack ‘-h’ option. +

                  +
                  +
                  3
                  +

                  Very high quality - corresponding to the wavpack ‘-hh’ option. +

                  +
                  +
                  4-8
                  +

                  Same as 3, but with extra processing enabled - corresponding to the wavpack +‘-x’ option. I.e. 4 is the same as ‘-x2’ and 8 is the same as +‘-x6’. +

                  +
                  +
                  + + + +

                  14. Video Encoders

                  + +

                  A description of some of the currently available video encoders +follows. +

                  + +

                  14.1 libtheora

                  + +

                  Theora format supported through libtheora. +

                  +

                  Requires the presence of the libtheora headers and library during +configuration. You need to explicitly configure the build with +--enable-libtheora. +

                  + +

                  14.1.1 Options

                  + +

                  The following global options are mapped to internal libtheora options +which affect the quality and the bitrate of the encoded stream. +

                  +
                  +
                  b
                  +

                  Set the video bitrate, only works if the qscale flag in +‘flags’ is not enabled. +

                  +
                  +
                  flags
                  +

                  Used to enable constant quality mode encoding through the +‘qscale’ flag, and to enable the pass1 and pass2 +modes. +

                  +
                  +
                  g
                  +

                  Set the GOP size. +

                  +
                  +
                  global_quality
                  +

                  Set the global quality in lambda units, only works if the +qscale flag in ‘flags’ is enabled. The value is clipped +in the [0 - 10*FF_QP2LAMBDA] range, and then multiplied for 6.3 +to get a value in the native libtheora range [0-63]. A higher value +corresponds to a higher quality. +

                  +

                  For example, to set maximum constant quality encoding with +ffmpeg: +

                   
                  ffmpeg -i INPUT -flags:v qscale -global_quality:v "10*QP2LAMBDA" -codec:v libtheora OUTPUT.ogg
                  +
                  +
                  +
                  + + +

                  14.2 libvpx

                  + +

                  VP8 format supported through libvpx. +

                  +

                  Requires the presence of the libvpx headers and library during configuration. +You need to explicitly configure the build with --enable-libvpx. +

                  + +

                  14.2.1 Options

                  + +

                  Mapping from FFmpeg to libvpx options with conversion notes in parentheses. +

                  +
                  +
                  threads
                  +

                  g_threads +

                  +
                  +
                  profile
                  +

                  g_profile +

                  +
                  +
                  vb
                  +

                  rc_target_bitrate +

                  +
                  +
                  g
                  +

                  kf_max_dist +

                  +
                  +
                  keyint_min
                  +

                  kf_min_dist +

                  +
                  +
                  qmin
                  +

                  rc_min_quantizer +

                  +
                  +
                  qmax
                  +

                  rc_max_quantizer +

                  +
                  +
                  bufsize, vb
                  +

                  rc_buf_sz +(bufsize * 1000 / vb) +

                  +

                  rc_buf_optimal_sz +(bufsize * 1000 / vb * 5 / 6) +

                  +
                  +
                  rc_init_occupancy, vb
                  +

                  rc_buf_initial_sz +(rc_init_occupancy * 1000 / vb) +

                  +
                  +
                  rc_buffer_aggressivity
                  +

                  rc_undershoot_pct +

                  +
                  +
                  skip_threshold
                  +

                  rc_dropframe_thresh +

                  +
                  +
                  qcomp
                  +

                  rc_2pass_vbr_bias_pct +

                  +
                  +
                  maxrate, vb
                  +

                  rc_2pass_vbr_maxsection_pct +(maxrate * 100 / vb) +

                  +
                  +
                  minrate, vb
                  +

                  rc_2pass_vbr_minsection_pct +(minrate * 100 / vb) +

                  +
                  +
                  minrate, maxrate, vb
                  +

                  VPX_CBR +(minrate == maxrate == vb) +

                  +
                  +
                  crf
                  +

                  VPX_CQ, VP8E_SET_CQ_LEVEL +

                  +
                  +
                  quality
                  +
                  +
                  best
                  +

                  VPX_DL_BEST_QUALITY +

                  +
                  good
                  +

                  VPX_DL_GOOD_QUALITY +

                  +
                  realtime
                  +

                  VPX_DL_REALTIME +

                  +
                  + +
                  +
                  speed
                  +

                  VP8E_SET_CPUUSED +

                  +
                  +
                  nr
                  +

                  VP8E_SET_NOISE_SENSITIVITY +

                  +
                  +
                  mb_threshold
                  +

                  VP8E_SET_STATIC_THRESHOLD +

                  +
                  +
                  slices
                  +

                  VP8E_SET_TOKEN_PARTITIONS +

                  +
                  +
                  max-intra-rate
                  +

                  VP8E_SET_MAX_INTRA_BITRATE_PCT +

                  +
                  +
                  force_key_frames
                  +

                  VPX_EFLAG_FORCE_KF +

                  +
                  +
                  Alternate reference frame related
                  +
                  +
                  vp8flags altref
                  +

                  VP8E_SET_ENABLEAUTOALTREF +

                  +
                  arnr_max_frames
                  +

                  VP8E_SET_ARNR_MAXFRAMES +

                  +
                  arnr_type
                  +

                  VP8E_SET_ARNR_TYPE +

                  +
                  arnr_strength
                  +

                  VP8E_SET_ARNR_STRENGTH +

                  +
                  rc_lookahead
                  +

                  g_lag_in_frames +

                  +
                  + +
                  +
                  vp8flags error_resilient
                  +

                  g_error_resilient +

                  +
                  +
                  + +

                  For more information about libvpx see: +http://www.webmproject.org/ +

                  + +

                  14.3 libx264

                  + +

                  x264 H.264/MPEG-4 AVC encoder wrapper. +

                  +

                  This encoder requires the presence of the libx264 headers and library +during configuration. You need to explicitly configure the build with +--enable-libx264. +

                  +

                  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). +

                  +

                  Many libx264 encoder options are mapped to FFmpeg global codec +options, while unique encoder options are provided through private +options. Additionally the ‘x264opts’ and ‘x264-params’ +private options allows to pass a list of key=value tuples as accepted +by the libx264 x264_param_parse function. +

                  +

                  The x264 project website is at +http://www.videolan.org/developers/x264.html. +

                  + +

                  14.3.1 Options

                  + +

                  The following options are supported by the libx264 wrapper. The +x264-equivalent options or values are listed in parentheses +for easy migration. +

                  +

                  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 +the Codec Options chapter. +

                  +

                  To get a more accurate and extensive documentation of the libx264 +options, invoke the command x264 --full-help or consult +the libx264 documentation. +

                  +
                  +
                  b (bitrate)
                  +

                  Set bitrate in bits/s. Note that FFmpeg’s ‘b’ option is +expressed in bits/s, while x264’s ‘bitrate’ is in +kilobits/s. +

                  +
                  +
                  bf (bframes)
                  +
                  g (keyint)
                  +
                  qmax (qpmax)
                  +
                  qmin (qpmin)
                  +
                  qdiff (qpstep)
                  +
                  qblur (qblur)
                  +
                  qcomp (qcomp)
                  +
                  refs (ref)
                  +
                  sc_threshold (scenecut)
                  +
                  trellis (trellis)
                  +
                  nr (nr)
                  +
                  me_range (merange)
                  +
                  me_method (me)
                  +

                  Set motion estimation method. Possible values in the decreasing order +of speed: +

                  +
                  +
                  dia (dia)
                  +
                  epzs (dia)
                  +

                  Diamond search with radius 1 (fastest). ‘epzs’ is an alias for +‘dia’. +

                  +
                  hex (hex)
                  +

                  Hexagonal search with radius 2. +

                  +
                  umh (umh)
                  +

                  Uneven multi-hexagon search. +

                  +
                  esa (esa)
                  +

                  Exhaustive search. +

                  +
                  tesa (tesa)
                  +

                  Hadamard exhaustive search (slowest). +

                  +
                  + +
                  +
                  subq (subme)
                  +
                  b_strategy (b-adapt)
                  +
                  keyint_min (min-keyint)
                  +
                  coder
                  +

                  Set entropy encoder. Possible values: +

                  +
                  +
                  ac
                  +

                  Enable CABAC. +

                  +
                  +
                  vlc
                  +

                  Enable CAVLC and disable CABAC. It generates the same effect as +x264’s ‘--no-cabac’ option. +

                  +
                  + +
                  +
                  cmp
                  +

                  Set full pixel motion estimation comparation algorithm. Possible values: +

                  +
                  +
                  chroma
                  +

                  Enable chroma in motion estimation. +

                  +
                  +
                  sad
                  +

                  Ignore chroma in motion estimation. It generates the same effect as +x264’s ‘--no-chroma-me’ option. +

                  +
                  + +
                  +
                  threads (threads)
                  +
                  thread_type
                  +

                  Set multithreading technique. Possible values: +

                  +
                  +
                  slice
                  +

                  Slice-based multithreading. It generates the same effect as +x264’s ‘--sliced-threads’ option. +

                  +
                  frame
                  +

                  Frame-based multithreading. +

                  +
                  + +
                  +
                  flags
                  +

                  Set encoding flags. It can be used to disable closed GOP and enable +open GOP by setting it to -cgop. The result is similar to +the behavior of x264’s ‘--open-gop’ option. +

                  +
                  +
                  rc_init_occupancy (vbv-init)
                  +
                  preset (preset)
                  +

                  Set the encoding preset. +

                  +
                  +
                  tune (tune)
                  +

                  Set tuning of the encoding params. +

                  +
                  +
                  profile (profile)
                  +

                  Set profile restrictions. +

                  +
                  +
                  fastfirstpass
                  +

                  Enable fast settings when encoding first pass, when set to 1. When set +to 0, it has the same effect of x264’s +‘--slow-firstpass’ option. +

                  +
                  +
                  crf (crf)
                  +

                  Set the quality for constant quality mode. +

                  +
                  +
                  crf_max (crf-max)
                  +

                  In CRF mode, prevents VBV from lowering quality beyond this point. +

                  +
                  +
                  qp (qp)
                  +

                  Set constant quantization rate control method parameter. +

                  +
                  +
                  aq-mode (aq-mode)
                  +

                  Set AQ method. Possible values: +

                  +
                  +
                  none (0)
                  +

                  Disabled. +

                  +
                  +
                  variance (1)
                  +

                  Variance AQ (complexity mask). +

                  +
                  +
                  autovariance (2)
                  +

                  Auto-variance AQ (experimental). +

                  +
                  + +
                  +
                  aq-strength (aq-strength)
                  +

                  Set AQ strength, reduce blocking and blurring in flat and textured areas. +

                  +
                  +
                  psy
                  +

                  Use psychovisual optimizations when set to 1. When set to 0, it has the +same effect as x264’s ‘--no-psy’ option. +

                  +
                  +
                  psy-rd (psy-rd)
                  +

                  Set strength of psychovisual optimization, in +psy-rd:psy-trellis format. +

                  +
                  +
                  rc-lookahead (rc-lookahead)
                  +

                  Set number of frames to look ahead for frametype and ratecontrol. +

                  +
                  +
                  weightb
                  +

                  Enable weighted prediction for B-frames when set to 1. When set to 0, +it has the same effect as x264’s ‘--no-weightb’ option. +

                  +
                  +
                  weightp (weightp)
                  +

                  Set weighted prediction method for P-frames. Possible values: +

                  +
                  +
                  none (0)
                  +

                  Disabled +

                  +
                  simple (1)
                  +

                  Enable only weighted refs +

                  +
                  smart (2)
                  +

                  Enable both weighted refs and duplicates +

                  +
                  + +
                  +
                  ssim (ssim)
                  +

                  Enable calculation and printing SSIM stats after the encoding. +

                  +
                  +
                  intra-refresh (intra-refresh)
                  +

                  Enable the use of Periodic Intra Refresh instead of IDR frames when set +to 1. +

                  +
                  +
                  bluray-compat (bluray-compat)
                  +

                  Configure the encoder to be compatible with the bluray standard. +It is a shorthand for setting "bluray-compat=1 force-cfr=1". +

                  +
                  +
                  b-bias (b-bias)
                  +

                  Set the influence on how often B-frames are used. +

                  +
                  +
                  b-pyramid (b-pyramid)
                  +

                  Set method for keeping of some B-frames as references. Possible values: +

                  +
                  +
                  none (none)
                  +

                  Disabled. +

                  +
                  strict (strict)
                  +

                  Strictly hierarchical pyramid. +

                  +
                  normal (normal)
                  +

                  Non-strict (not Blu-ray compatible). +

                  +
                  + +
                  +
                  mixed-refs
                  +

                  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 x264’s ‘--no-mixed-refs’ option. +

                  +
                  +
                  8x8dct
                  +

                  Enable adaptive spatial transform (high profile 8x8 transform) +when set to 1. When set to 0, it has the same effect as +x264’s ‘--no-8x8dct’ option. +

                  +
                  +
                  fast-pskip
                  +

                  Enable early SKIP detection on P-frames when set to 1. When set +to 0, it has the same effect as x264’s +‘--no-fast-pskip’ option. +

                  +
                  +
                  aud (aud)
                  +

                  Enable use of access unit delimiters when set to 1. +

                  +
                  +
                  mbtree
                  +

                  Enable use macroblock tree ratecontrol when set to 1. When set +to 0, it has the same effect as x264’s +‘--no-mbtree’ option. +

                  +
                  +
                  deblock (deblock)
                  +

                  Set loop filter parameters, in alpha:beta form. +

                  +
                  +
                  cplxblur (cplxblur)
                  +

                  Set fluctuations reduction in QP (before curve compression). +

                  +
                  +
                  partitions (partitions)
                  +

                  Set partitions to consider as a comma-separated list of. Possible +values in the list: +

                  +
                  +
                  p8x8
                  +

                  8x8 P-frame partition. +

                  +
                  p4x4
                  +

                  4x4 P-frame partition. +

                  +
                  b8x8
                  +

                  4x4 B-frame partition. +

                  +
                  i8x8
                  +

                  8x8 I-frame partition. +

                  +
                  i4x4
                  +

                  4x4 I-frame partition. +(Enabling ‘p4x4’ requires ‘p8x8’ to be enabled. Enabling +‘i8x8’ requires adaptive spatial transform (‘8x8dct’ +option) to be enabled.) +

                  +
                  none (none)
                  +

                  Do not consider any partitions. +

                  +
                  all (all)
                  +

                  Consider every partition. +

                  +
                  + +
                  +
                  direct-pred (direct)
                  +

                  Set direct MV prediction mode. Possible values: +

                  +
                  +
                  none (none)
                  +

                  Disable MV prediction. +

                  +
                  spatial (spatial)
                  +

                  Enable spatial predicting. +

                  +
                  temporal (temporal)
                  +

                  Enable temporal predicting. +

                  +
                  auto (auto)
                  +

                  Automatically decided. +

                  +
                  + +
                  +
                  slice-max-size (slice-max-size)
                  +

                  Set the limit of the size of each slice in bytes. If not specified +but RTP payload size (‘ps’) is specified, that is used. +

                  +
                  +
                  stats (stats)
                  +

                  Set the file name for multi-pass stats. +

                  +
                  +
                  nal-hrd (nal-hrd)
                  +

                  Set signal HRD information (requires ‘vbv-bufsize’ to be set). +Possible values: +

                  +
                  +
                  none (none)
                  +

                  Disable HRD information signaling. +

                  +
                  vbr (vbr)
                  +

                  Variable bit rate. +

                  +
                  cbr (cbr)
                  +

                  Constant bit rate (not allowed in MP4 container). +

                  +
                  + +
                  +
                  x264opts (N.A.)
                  +

                  Set any x264 option, see x264 --fullhelp for a list. +

                  +

                  Argument is a list of key=value couples separated by +":". In filter and psy-rd 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. +

                  +

                  For example to specify libx264 encoding options with ffmpeg: +

                   
                  ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
                  +
                  + +
                  +
                  x264-params (N.A.)
                  +

                  Override the x264 configuration using a :-separated list of key=value +parameters. +

                  +

                  This option is functionally the same as the ‘x264opts’, but is +duplicated for compability with the Libav fork. +

                  +

                  For example to specify libx264 encoding options with ffmpeg: +

                   
                  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
                  +
                  +
                  +
                  + +

                  Encoding ffpresets for common usages are provided so they can be used with the +general presets system (e.g. passing the ‘pre’ option). +

                  + +

                  14.4 libxvid

                  + +

                  Xvid MPEG-4 Part 2 encoder wrapper. +

                  +

                  This encoder requires the presence of the libxvidcore headers and library +during configuration. You need to explicitly configure the build with +--enable-libxvid --enable-gpl. +

                  +

                  The native mpeg4 encoder supports the MPEG-4 Part 2 format, so +users can encode to this format without this library. +

                  + +

                  14.4.1 Options

                  + +

                  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 the Codec Options chapter for their documentation. The other shared options +which are not listed have no effect for the libxvid encoder. +

                  +
                  +
                  b
                  +
                  g
                  +
                  qmin
                  +
                  qmax
                  +
                  mpeg_quant
                  +
                  threads
                  +
                  bf
                  +
                  b_qfactor
                  +
                  b_qoffset
                  +
                  flags
                  +

                  Set specific encoding flags. Possible values: +

                  +
                  +
                  mv4
                  +

                  Use four motion vector by macroblock. +

                  +
                  +
                  aic
                  +

                  Enable high quality AC prediction. +

                  +
                  +
                  gray
                  +

                  Only encode grayscale. +

                  +
                  +
                  gmc
                  +

                  Enable the use of global motion compensation (GMC). +

                  +
                  +
                  qpel
                  +

                  Enable quarter-pixel motion compensation. +

                  +
                  +
                  cgop
                  +

                  Enable closed GOP. +

                  +
                  +
                  global_header
                  +

                  Place global headers in extradata instead of every keyframe. +

                  +
                  +
                  + +
                  +
                  trellis
                  +
                  me_method
                  +

                  Set motion estimation method. Possible values in decreasing order of +speed and increasing order of quality: +

                  +
                  +
                  zero
                  +

                  Use no motion estimation (default). +

                  +
                  +
                  phods
                  +
                  x1
                  +
                  log
                  +

                  Enable advanced diamond zonal search for 16x16 blocks and half-pixel +refinement for 16x16 blocks. ‘x1’ and ‘log’ are aliases for +‘phods’. +

                  +
                  +
                  epzs
                  +

                  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. +

                  +
                  +
                  full
                  +

                  Enable all of the things described above, plus extended 16x16 and 8x8 +blocks search. +

                  +
                  + +
                  +
                  mbd
                  +

                  Set macroblock decision algorithm. Possible values in the increasing +order of quality: +

                  +
                  +
                  simple
                  +

                  Use macroblock comparing function algorithm (default). +

                  +
                  +
                  bits
                  +

                  Enable rate distortion-based half pixel and quarter pixel refinement for +16x16 blocks. +

                  +
                  +
                  rd
                  +

                  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. +

                  +
                  + +
                  +
                  lumi_aq
                  +

                  Enable lumi masking adaptive quantization when set to 1. Default is 0 +(disabled). +

                  +
                  +
                  variance_aq
                  +

                  Enable variance adaptive quantization when set to 1. Default is 0 +(disabled). +

                  +

                  When combined with ‘lumi_aq’, 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. +

                  +
                  +
                  ssim
                  +

                  Set structural similarity (SSIM) displaying method. Possible values: +

                  +
                  +
                  off
                  +

                  Disable displaying of SSIM information. +

                  +
                  +
                  avg
                  +

                  Output average SSIM at the end of encoding to stdout. The format of +showing the average SSIM is: +

                  +
                   
                  Average SSIM: %f
                  +
                  + +

                  For users who are not familiar with C, %f means a float number, or +a decimal (e.g. 0.939232). +

                  +
                  +
                  frame
                  +

                  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: +

                  +
                   
                         SSIM: avg: %1.3f min: %1.3f max: %1.3f
                  +
                  + +

                  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). +

                  +
                  +
                  + +
                  +
                  ssim_acc
                  +

                  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. +

                  +
                  +
                  + + +

                  14.5 png

                  + +

                  PNG image encoder. +

                  + +

                  14.5.1 Private options

                  + +
                  +
                  dpi integer
                  +

                  Set physical density of pixels, in dots per inch, unset by default +

                  +
                  dpm integer
                  +

                  Set physical density of pixels, in dots per meter, unset by default +

                  +
                  + + +

                  14.6 ProRes

                  + +

                  Apple ProRes encoder. +

                  +

                  FFmpeg contains 2 ProRes encoders, the prores-aw and prores-ks encoder. +The used encoder can be choosen with the -vcodec option. +

                  + +

                  14.6.1 Private Options for prores-ks

                  + +
                  +
                  profile integer
                  +

                  Select the ProRes profile to encode +

                  +
                  proxy
                  +
                  lt
                  +
                  standard
                  +
                  hq
                  +
                  4444
                  +
                  + +
                  +
                  quant_mat integer
                  +

                  Select quantization matrix. +

                  +
                  auto
                  +
                  default
                  +
                  proxy
                  +
                  lt
                  +
                  standard
                  +
                  hq
                  +
                  +

                  If set to auto, the matrix matching the profile will be picked. +If not set, the matrix providing the highest quality, default, will be +picked. +

                  +
                  +
                  bits_per_mb integer
                  +

                  How many bits to allot for coding one macroblock. Different profiles use +between 200 and 2400 bits per macroblock, the maximum is 8000. +

                  +
                  +
                  mbs_per_slice integer
                  +

                  Number of macroblocks in each slice (1-8); the default value (8) +should be good in almost all situations. +

                  +
                  +
                  vendor string
                  +

                  Override the 4-byte vendor ID. +A custom vendor ID like apl0 would claim the stream was produced by +the Apple encoder. +

                  +
                  +
                  alpha_bits integer
                  +

                  Specify number of bits for alpha component. +Possible values are 0, 8 and 16. +Use 0 to disable alpha plane coding. +

                  +
                  +
                  + + +

                  14.6.2 Speed considerations

                  + +

                  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. +

                  +

                  Setting a higher ‘bits_per_mb’ limit will improve the speed. +

                  +

                  For the fastest encoding speed set the ‘qscale’ parameter (4 is the +recommended value) and do not set a size constraint. +

                  + +

                  15. Bitstream Filters

                  + +

                  When you configure your FFmpeg build, all the supported bitstream +filters are enabled by default. You can list all available ones using +the configure option --list-bsfs. +

                  +

                  You can disable all the bitstream filters using the configure option +--disable-bsfs, and selectively enable any bitstream filter using +the option --enable-bsf=BSF, or you can disable a particular +bitstream filter using the option --disable-bsf=BSF. +

                  +

                  The option -bsfs of the ff* tools will display the list of +all the supported bitstream filters included in your build. +

                  +

                  Below is a description of the currently available bitstream filters. +

                  + +

                  15.1 aac_adtstoasc

                  + +

                  Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration +bitstream filter. +

                  +

                  This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4 +ADTS header and removes the ADTS header. +

                  +

                  This is required for example when copying an AAC stream from a raw +ADTS AAC container to a FLV or a MOV/MP4 file. +

                  + +

                  15.2 chomp

                  + +

                  Remove zero padding at the end of a packet. +

                  + +

                  15.3 dump_extra

                  + +

                  Add extradata to the beginning of the filtered packets. +

                  +

                  The additional argument specifies which packets should be filtered. +It accepts the values: +

                  +
                  a
                  +

                  add extradata to all key packets, but only if local_header is +set in the ‘flags2’ codec context field +

                  +
                  +
                  k
                  +

                  add extradata to all key packets +

                  +
                  +
                  e
                  +

                  add extradata to all packets +

                  +
                  + +

                  If not specified it is assumed ‘k’. +

                  +

                  For example the following ffmpeg command forces a global +header (thus disabling individual packet headers) in the H.264 packets +generated by the libx264 encoder, but corrects them by adding +the header stored in extradata to the key packets: +

                   
                  ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
                  +
                  + + +

                  15.4 h264_mp4toannexb

                  + +

                  Convert an H.264 bitstream from length prefixed mode to start code +prefixed mode (as defined in the Annex B of the ITU-T H.264 +specification). +

                  +

                  This is required by some streaming formats, typically the MPEG-2 +transport stream format ("mpegts"). +

                  +

                  For example to remux an MP4 file containing an H.264 stream to mpegts +format with ffmpeg, you can use the command: +

                  +
                   
                  ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
                  +
                  + + +

                  15.5 imx_dump_header

                  + + +

                  15.6 mjpeg2jpeg

                  + +

                  Convert MJPEG/AVI1 packets to full JPEG/JFIF packets. +

                  +

                  MJPEG is a video codec wherein each video frame is essentially a +JPEG image. The individual frames can be extracted without loss, +e.g. by +

                  +
                   
                  ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
                  +
                  + +

                  Unfortunately, these chunks are incomplete JPEG images, because +they lack the DHT segment required for decoding. Quoting from +http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml: +

                  +

                  Avery Lee, writing in the rec.video.desktop newsgroup in 2001, +commented that "MJPEG, or at least the MJPEG in AVIs having the +MJPG fourcc, is restricted JPEG with a fixed – and *omitted* – +Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2, +and it must use basic Huffman encoding, not arithmetic or +progressive. . . . You can indeed extract the MJPEG frames and +decode them with a regular JPEG decoder, but you have to prepend +the DHT segment to them, or else the decoder won’t have any idea +how to decompress the data. The exact table necessary is given in +the OpenDML spec." +

                  +

                  This bitstream filter patches the header of frames extracted from an MJPEG +stream (carrying the AVI1 header ID and lacking a DHT segment) to +produce fully qualified JPEG images. +

                  +
                   
                  ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
                  +exiftran -i -9 frame*.jpg
                  +ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
                  +
                  + + +

                  15.7 mjpega_dump_header

                  + + +

                  15.8 movsub

                  + + +

                  15.9 mp3_header_compress

                  + + +

                  15.10 mp3_header_decompress

                  + + +

                  15.11 noise

                  + + +

                  15.12 remove_extra

                  + + +

                  16. Format Options

                  + +

                  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. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools, or by setting the value explicitly in the +AVFormatContext options or using the ‘libavutil/opt.h’ API +for programmatic use. +

                  +

                  The list of supported options follows: +

                  +
                  +
                  avioflags flags (input/output)
                  +

                  Possible values: +

                  +
                  direct
                  +

                  Reduce buffering. +

                  +
                  + +
                  +
                  probesize integer (input)
                  +

                  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. +

                  +
                  +
                  packetsize integer (output)
                  +

                  Set packet size. +

                  +
                  +
                  fflags flags (input/output)
                  +

                  Set format flags. +

                  +

                  Possible values: +

                  +
                  ignidx
                  +

                  Ignore index. +

                  +
                  genpts
                  +

                  Generate PTS. +

                  +
                  nofillin
                  +

                  Do not fill in missing values that can be exactly calculated. +

                  +
                  noparse
                  +

                  Disable AVParsers, this needs +nofillin too. +

                  +
                  igndts
                  +

                  Ignore DTS. +

                  +
                  discardcorrupt
                  +

                  Discard corrupted frames. +

                  +
                  sortdts
                  +

                  Try to interleave output packets by DTS. +

                  +
                  keepside
                  +

                  Do not merge side data. +

                  +
                  latm
                  +

                  Enable RTP MP4A-LATM payload. +

                  +
                  nobuffer
                  +

                  Reduce the latency introduced by optional buffering +

                  +
                  + +
                  +
                  seek2any integer (input)
                  +

                  Allow seeking to non-keyframes on demuxer level when supported if set to 1. +Default is 0. +

                  +
                  +
                  analyzeduration integer (input)
                  +

                  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. +

                  +
                  +
                  cryptokey hexadecimal string (input)
                  +

                  Set decryption key. +

                  +
                  +
                  indexmem integer (input)
                  +

                  Set max memory used for timestamp index (per stream). +

                  +
                  +
                  rtbufsize integer (input)
                  +

                  Set max memory used for buffering real-time frames. +

                  +
                  +
                  fdebug flags (input/output)
                  +

                  Print specific debug info. +

                  +

                  Possible values: +

                  +
                  ts
                  +
                  + +
                  +
                  max_delay integer (input/output)
                  +

                  Set maximum muxing or demuxing delay in microseconds. +

                  +
                  +
                  fpsprobesize integer (input)
                  +

                  Set number of frames used to probe fps. +

                  +
                  +
                  audio_preload integer (output)
                  +

                  Set microseconds by which audio packets should be interleaved earlier. +

                  +
                  +
                  chunk_duration integer (output)
                  +

                  Set microseconds for each chunk. +

                  +
                  +
                  chunk_size integer (output)
                  +

                  Set size in bytes for each chunk. +

                  +
                  +
                  err_detect, f_err_detect flags (input)
                  +

                  Set error detection flags. f_err_detect is deprecated and +should be used only via the ffmpeg tool. +

                  +

                  Possible values: +

                  +
                  crccheck
                  +

                  Verify embedded CRCs. +

                  +
                  bitstream
                  +

                  Detect bitstream specification deviations. +

                  +
                  buffer
                  +

                  Detect improper bitstream length. +

                  +
                  explode
                  +

                  Abort decoding on minor error detection. +

                  +
                  careful
                  +

                  Consider things that violate the spec and have not been seen in the +wild as errors. +

                  +
                  compliant
                  +

                  Consider all spec non compliancies as errors. +

                  +
                  aggressive
                  +

                  Consider things that a sane encoder should not do as an error. +

                  +
                  + +
                  +
                  use_wallclock_as_timestamps integer (input)
                  +

                  Use wallclock as timestamps. +

                  +
                  +
                  avoid_negative_ts integer (output)
                  +

                  Shift timestamps to make them non-negative. A value of 1 enables shifting, +a value of 0 disables it, the default value of -1 enables shifting +when required by the target format. +

                  +

                  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. +

                  +

                  Also note that this affects only leading negative timestamps, and not +non-monotonic negative timestamps. +

                  +
                  +
                  skip_initial_bytes integer (input)
                  +

                  Set number of bytes to skip before reading header and frames if set to 1. +Default is 0. +

                  +
                  +
                  correct_ts_overflow integer (input)
                  +

                  Correct single timestamp overflows if set to 1. Default is 1. +

                  +
                  +
                  flush_packets integer (output)
                  +

                  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. +

                  +
                  + + +

                  +

                  +

                  16.1 Format stream specifiers

                  + +

                  Format stream specifiers allow selection of one or more streams that +match specific properties. +

                  +

                  Possible forms of stream specifiers are: +

                  +
                  stream_index
                  +

                  Matches the stream with this index. +

                  +
                  +
                  stream_type[:stream_index]
                  +

                  stream_type is one of following: ’v’ for video, ’a’ for audio, +’s’ for subtitle, ’d’ for data, and ’t’ for attachments. If +stream_index is given, then it matches the stream number +stream_index of this type. Otherwise, it matches all streams of +this type. +

                  +
                  +
                  p:program_id[:stream_index]
                  +

                  If stream_index is given, then it matches the stream with number +stream_index in the program with the id +program_id. Otherwise, it matches all streams in the program. +

                  +
                  +
                  #stream_id
                  +

                  Matches the stream by a format-specific ID. +

                  +
                  + +

                  The exact semantics of stream specifiers is defined by the +avformat_match_stream_specifier() function declared in the +‘libavformat/avformat.h’ header. +

                  + +

                  17. Demuxers

                  + +

                  Demuxers are configured elements in FFmpeg that can read the +multimedia streams from a particular type of file. +

                  +

                  When you configure your FFmpeg build, all the supported demuxers +are enabled by default. You can list all available ones using the +configure option --list-demuxers. +

                  +

                  You can disable all the demuxers using the configure option +--disable-demuxers, and selectively enable a single demuxer with +the option --enable-demuxer=DEMUXER, or disable it +with the option --disable-demuxer=DEMUXER. +

                  +

                  The option -formats of the ff* tools will display the list of +enabled demuxers. +

                  +

                  The description of some of the currently available demuxers follows. +

                  + +

                  17.1 applehttp

                  + +

                  Apple HTTP Live Streaming demuxer. +

                  +

                  This demuxer presents all AVStreams from all variant streams. +The id field is set to the bitrate variant index number. By setting +the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), +the caller can decide which variant streams to actually receive. +The total bitrate of the variant that the stream belongs to is +available in a metadata key named "variant_bitrate". +

                  + +

                  17.2 asf

                  + +

                  Advanced Systems Format demuxer. +

                  +

                  This demuxer is used to demux ASF files and MMS network streams. +

                  +
                  +
                  -no_resync_search bool
                  +

                  Do not try to resynchronize by looking for a certain optional start code. +

                  +
                  + +

                  +

                  +

                  17.3 concat

                  + +

                  Virtual concatenation script demuxer. +

                  +

                  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. +

                  +

                  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. +

                  +

                  All files must have the same streams (same codecs, same time base, etc.). +

                  +

                  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 +duration directive can be used to override the duration stored in +each file. +

                  + +

                  17.3.1 Syntax

                  + +

                  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: +

                  +
                  +
                  file path
                  +

                  Path to a file to read; special characters and spaces must be escaped with +backslash or single quotes. +

                  +

                  All subsequent directives apply to that file. +

                  +
                  +
                  ffconcat version 1.0
                  +

                  Identify the script type and version. It also sets the ‘safe’ option +to 1 if it was to its default -1. +

                  +

                  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. +

                  +
                  +
                  duration dur
                  +

                  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. +

                  +

                  If the duration is set for all files, then it is possible to seek in the +whole concatenated video. +

                  +
                  +
                  + + +

                  17.3.2 Options

                  + +

                  This demuxer accepts the following option: +

                  +
                  +
                  safe
                  +

                  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. +

                  +

                  If set to 0, any file name is accepted. +

                  +

                  The default is -1, it is equivalent to 1 if the format was automatically +probed and 0 otherwise. +

                  +
                  +
                  + + +

                  17.4 flv

                  + +

                  Adobe Flash Video Format demuxer. +

                  +

                  This demuxer is used to demux FLV files and RTMP network streams. +

                  +
                  +
                  -flv_metadata bool
                  +

                  Allocate the streams according to the onMetaData array content. +

                  +
                  + + +

                  17.5 libgme

                  + +

                  The Game Music Emu library is a collection of video game music file emulators. +

                  +

                  See http://code.google.com/p/game-music-emu/ for more information. +

                  +

                  Some files have multiple tracks. The demuxer will pick the first track by +default. The ‘track_index’ option can be used to select a different +track. Track indexes start at 0. The demuxer exports the number of tracks as +tracks meta data entry. +

                  +

                  For very large files, the ‘max_size’ option may have to be adjusted. +

                  + +

                  17.6 libquvi

                  + +

                  Play media from Internet services using the quvi project. +

                  +

                  The demuxer accepts a ‘format’ option to request a specific quality. It +is by default set to best. +

                  +

                  See http://quvi.sourceforge.net/ for more information. +

                  +

                  FFmpeg needs to be built with --enable-libquvi for this demuxer to be +enabled. +

                  + +

                  17.7 image2

                  + +

                  Image file demuxer. +

                  +

                  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 pattern_type. +

                  +

                  The pattern may contain a suffix which is used to automatically +determine the format of the images contained in the files. +

                  +

                  The size, the pixel format, and the format of each image must be the +same for all the files in the sequence. +

                  +

                  This demuxer accepts the following options: +

                  +
                  framerate
                  +

                  Set the frame rate for the video stream. It defaults to 25. +

                  +
                  loop
                  +

                  If set to 1, loop over the input. Default value is 0. +

                  +
                  pattern_type
                  +

                  Select the pattern type used to interpret the provided filename. +

                  +

                  pattern_type accepts one of the following values. +

                  +
                  sequence
                  +

                  Select a sequence pattern type, used to specify a sequence of files +indexed by sequential numbers. +

                  +

                  A sequence pattern may contain the string "%d" or "%0Nd", which +specifies the position of the characters representing a sequential +number in each filename matched by the pattern. If the form +"%d0Nd" is used, the string representing the number in each +filename is 0-padded and N is the total number of 0-padded +digits representing the number. The literal character ’%’ can be +specified in the pattern with the string "%%". +

                  +

                  If the sequence pattern contains "%d" or "%0Nd", the first filename of +the file list specified by the pattern must contain a number +inclusively contained between start_number and +start_number+start_number_range-1, and all the following +numbers must be sequential. +

                  +

                  For example the pattern "img-%03d.bmp" will match a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc.; the pattern "i%%m%%g-%d.jpg" will match a +sequence of filenames of the form ‘i%m%g-1.jpg’, +‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, etc. +

                  +

                  Note that the pattern must not necessarily contain "%d" or +"%0Nd", for example to convert a single image file +‘img.jpeg’ you can employ the command: +

                   
                  ffmpeg -i img.jpeg img.png
                  +
                  + +
                  +
                  glob
                  +

                  Select a glob wildcard pattern type. +

                  +

                  The pattern is interpreted like a glob() pattern. This is only +selectable if libavformat was compiled with globbing support. +

                  +
                  +
                  glob_sequence (deprecated, will be removed)
                  +

                  Select a mixed glob wildcard/sequence pattern. +

                  +

                  If your version of libavformat was compiled with globbing support, and +the provided pattern contains at least one glob meta character among +%*?[]{} that is preceded by an unescaped "%", the pattern is +interpreted like a glob() pattern, otherwise it is interpreted +like a sequence pattern. +

                  +

                  All glob special characters %*?[]{} must be prefixed +with "%". To escape a literal "%" you shall use "%%". +

                  +

                  For example the pattern foo-%*.jpeg will match all the +filenames prefixed by "foo-" and terminating with ".jpeg", and +foo-%?%?%?.jpeg will match all the filenames prefixed with +"foo-", followed by a sequence of three characters, and terminating +with ".jpeg". +

                  +

                  This pattern type is deprecated in favor of glob and +sequence. +

                  +
                  + +

                  Default value is glob_sequence. +

                  +
                  pixel_format
                  +

                  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. +

                  +
                  start_number
                  +

                  Set the index of the file matched by the image file pattern to start +to read from. Default value is 0. +

                  +
                  start_number_range
                  +

                  Set the index interval range to check when looking for the first image +file in the sequence, starting from start_number. Default value +is 5. +

                  +
                  ts_from_file
                  +

                  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. +

                  +
                  video_size
                  +

                  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. +

                  +
                  + + +

                  17.7.1 Examples

                  + +
                    +
                  • +Use ffmpeg for creating a video from the images in the file +sequence ‘img-001.jpeg’, ‘img-002.jpeg’, ..., assuming an +input frame rate of 10 frames per second: +
                     
                    ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
                    +
                    + +
                  • +As above, but start by reading from a file with index 100 in the sequence: +
                     
                    ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
                    +
                    + +
                  • +Read images matching the "*.png" glob pattern , that is all the files +terminating with the ".png" suffix: +
                     
                    ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
                    +
                    +
                  + + +

                  17.8 mpegts

                  + +

                  MPEG-2 transport stream demuxer. +

                  +
                  +
                  fix_teletext_pts
                  +

                  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. +

                  +
                  + + +

                  17.9 rawvideo

                  + +

                  Raw video demuxer. +

                  +

                  This demuxer allows 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. +

                  +

                  This demuxer accepts the following options: +

                  +
                  framerate
                  +

                  Set input video frame rate. Default value is 25. +

                  +
                  +
                  pixel_format
                  +

                  Set the input video pixel format. Default value is yuv420p. +

                  +
                  +
                  video_size
                  +

                  Set the input video size. This value must be specified explicitly. +

                  +
                  + +

                  For example to read a rawvideo file ‘input.raw’ with +ffplay, assuming a pixel format of rgb24, a video +size of 320x240, and a frame rate of 10 images per second, use +the command: +

                   
                  ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
                  +
                  + + +

                  17.10 sbg

                  + +

                  SBaGen script demuxer. +

                  +

                  This demuxer reads the script language used by SBaGen +http://uazu.net/sbagen/ to generate binaural beats sessions. A SBG +script looks like that: +

                   
                  -SE
                  +a: 300-2.5/3 440+4.5/0
                  +b: 300-2.5/0 440+4.5/3
                  +off: -
                  +NOW      == a
                  ++0:07:00 == b
                  ++0:14:00 == a
                  ++0:21:00 == b
                  ++0:30:00    off
                  +
                  + +

                  A SBG script can mix absolute and relative timestamps. If the script uses +either only absolute timestamps (including the script start time) or only +relative ones, then its layout is fixed, and the conversion is +straightforward. On the other hand, if the script mixes both kind of +timestamps, then the NOW reference for relative timestamps will be +taken from the current time of day at the time the script is read, and the +script layout will be frozen according to that reference. That means that if +the script is directly played, the actual times will match the absolute +timestamps up to the sound controller’s clock accuracy, but if the user +somehow pauses the playback or seeks, all times will be shifted accordingly. +

                  + +

                  17.11 tedcaptions

                  + +

                  JSON captions used for TED Talks. +

                  +

                  TED does not provide links to the captions, but they can be guessed from the +page. The file ‘tools/bookmarklets.html’ from the FFmpeg source tree +contains a bookmarklet to expose them. +

                  +

                  This demuxer accepts the following option: +

                  +
                  start_time
                  +

                  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. +

                  +
                  + +

                  Example: convert the captions to a format most players understand: +

                   
                  ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
                  +
                  + + +

                  18. Muxers

                  + +

                  Muxers are configured elements in FFmpeg which allow writing +multimedia streams to a particular type of file. +

                  +

                  When you configure your FFmpeg build, all the supported muxers +are enabled by default. You can list all available muxers using the +configure option --list-muxers. +

                  +

                  You can disable all the muxers with the configure option +--disable-muxers and selectively enable / disable single muxers +with the options --enable-muxer=MUXER / +--disable-muxer=MUXER. +

                  +

                  The option -formats of the ff* tools will display the list of +enabled muxers. +

                  +

                  A description of some of the currently available muxers follows. +

                  +

                  +

                  +

                  18.1 aiff

                  + +

                  Audio Interchange File Format muxer. +

                  +

                  It accepts the following options: +

                  +
                  +
                  write_id3v2
                  +

                  Enable ID3v2 tags writing when set to 1. Default is 0 (disabled). +

                  +
                  +
                  id3v2_version
                  +

                  Select ID3v2 version to write. Currently only version 3 and 4 (aka. +ID3v2.3 and ID3v2.4) are supported. The default is version 4. +

                  +
                  +
                  + +

                  +

                  +

                  18.2 crc

                  + +

                  CRC (Cyclic Redundancy Check) testing format. +

                  +

                  This muxer computes and prints the Adler-32 CRC of all the input audio +and video frames. By default audio frames are converted to signed +16-bit raw audio and video frames to raw video before computing the +CRC. +

                  +

                  The output of the muxer consists of a single line of the form: +CRC=0xCRC, where CRC is a hexadecimal number 0-padded to +8 digits containing the CRC for all the decoded input frames. +

                  +

                  For example to compute the CRC of the input, and store it in the file +‘out.crc’: +

                   
                  ffmpeg -i INPUT -f crc out.crc
                  +
                  + +

                  You can print the CRC to stdout with the command: +

                   
                  ffmpeg -i INPUT -f crc -
                  +
                  + +

                  You can select the output format of each frame with ffmpeg by +specifying the audio and video codec and format. For example to +compute the CRC of the input audio converted to PCM unsigned 8-bit +and the input video converted to MPEG-2 video, use the command: +

                   
                  ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
                  +
                  + +

                  See also the framecrc muxer. +

                  +

                  +

                  +

                  18.3 framecrc

                  + +

                  Per-packet CRC (Cyclic Redundancy Check) testing format. +

                  +

                  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. +

                  +

                  The output of the muxer consists of a line for each audio and video +packet of the form: +

                   
                  stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC
                  +
                  + +

                  CRC is a hexadecimal number 0-padded to 8 digits containing the +CRC of the packet. +

                  +

                  For example to compute the CRC of the audio and video frames in +‘INPUT’, converted to raw audio and video packets, and store it +in the file ‘out.crc’: +

                   
                  ffmpeg -i INPUT -f framecrc out.crc
                  +
                  + +

                  To print the information to stdout, use the command: +

                   
                  ffmpeg -i INPUT -f framecrc -
                  +
                  + +

                  With ffmpeg, 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: +

                   
                  ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
                  +
                  + +

                  See also the crc muxer. +

                  +

                  +

                  +

                  18.4 framemd5

                  + +

                  Per-packet MD5 testing format. +

                  +

                  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. +

                  +

                  The output of the muxer consists of a line for each audio and video +packet of the form: +

                   
                  stream_index, packet_dts, packet_pts, packet_duration, packet_size, MD5
                  +
                  + +

                  MD5 is a hexadecimal number representing the computed MD5 hash +for the packet. +

                  +

                  For example to compute the MD5 of the audio and video frames in +‘INPUT’, converted to raw audio and video packets, and store it +in the file ‘out.md5’: +

                   
                  ffmpeg -i INPUT -f framemd5 out.md5
                  +
                  + +

                  To print the information to stdout, use the command: +

                   
                  ffmpeg -i INPUT -f framemd5 -
                  +
                  + +

                  See also the md5 muxer. +

                  +

                  +

                  +

                  18.5 hls

                  + +

                  Apple HTTP Live Streaming muxer that segments MPEG-TS according to +the HTTP Live Streaming specification. +

                  +

                  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. +

                  +
                   
                  ffmpeg -i in.nut out.m3u8
                  +
                  + +
                  +
                  -hls_time seconds
                  +

                  Set the segment length in seconds. +

                  +
                  -hls_list_size size
                  +

                  Set the maximum number of playlist entries. +

                  +
                  -hls_wrap wrap
                  +

                  Set the number after which index wraps. +

                  +
                  -start_number number
                  +

                  Start the sequence from number. +

                  +
                  + +

                  +

                  +

                  18.6 ico

                  + +

                  ICO file muxer. +

                  +

                  Microsoft’s icon file format (ICO) has some strict limitations that should be noted: +

                  +
                    +
                  • +Size cannot exceed 256 pixels in any dimension + +
                  • +Only BMP and PNG images can be stored + +
                  • +If a BMP image is used, it must be one of the following pixel formats: +
                     
                    BMP Bit Depth      FFmpeg Pixel Format
                    +1bit               pal8
                    +4bit               pal8
                    +8bit               pal8
                    +16bit              rgb555le
                    +24bit              bgr24
                    +32bit              bgra
                    +
                    + +
                  • +If a BMP image is used, it must use the BITMAPINFOHEADER DIB header + +
                  • +If a PNG image is used, it must use the rgba pixel format +
                  + +

                  +

                  +

                  18.7 image2

                  + +

                  Image file muxer. +

                  +

                  The image file muxer writes video frames to image files. +

                  +

                  The output filenames are specified by a pattern, which can be used to +produce sequentially numbered series of files. +The pattern may contain the string "%d" or "%0Nd", this string +specifies the position of the characters representing a numbering in +the filenames. If the form "%0Nd" is used, the string +representing the number in each filename is 0-padded to N +digits. The literal character ’%’ can be specified in the pattern with +the string "%%". +

                  +

                  If the pattern contains "%d" or "%0Nd", the first filename of +the file list specified will contain the number 1, all the following +numbers will be sequential. +

                  +

                  The pattern may contain a suffix which is used to automatically +determine the format of the image files to write. +

                  +

                  For example the pattern "img-%03d.bmp" will specify a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc. +The pattern "img%%-%d.jpg" will specify a sequence of filenames of the +form ‘img%-1.jpg’, ‘img%-2.jpg’, ..., ‘img%-10.jpg’, +etc. +

                  +

                  The following example shows how to use ffmpeg for creating a +sequence of files ‘img-001.jpeg’, ‘img-002.jpeg’, ..., +taking one image every second from the input video: +

                   
                  ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg'
                  +
                  + +

                  Note that with ffmpeg, if the format is not specified with the +-f option and the output filename specifies an image file +format, the image2 muxer is automatically selected, so the previous +command can be written as: +

                   
                  ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg'
                  +
                  + +

                  Note also that the pattern must not necessarily contain "%d" or +"%0Nd", for example to create a single image file +‘img.jpeg’ from the input video you can employ the command: +

                   
                  ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
                  +
                  + +
                  +
                  start_number number
                  +

                  Start the sequence from number. Default value is 1. Must be a +non-negative number. +

                  +
                  +
                  -update number
                  +

                  If number is nonzero, the filename will always be interpreted as just a +filename, not a pattern, and this file will be continuously overwritten with new +images. +

                  +
                  +
                  + +

                  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. +

                  + +

                  18.8 matroska

                  + +

                  Matroska container muxer. +

                  +

                  This muxer implements the matroska and webm container specs. +

                  +

                  The recognized metadata settings in this muxer are: +

                  +
                  +
                  title=title name
                  +

                  Name provided to a single track +

                  +
                  + +
                  +
                  language=language name
                  +

                  Specifies the language of the track in the Matroska languages form +

                  +
                  + +
                  +
                  stereo_mode=mode
                  +

                  Stereo 3D video layout of two views in a single video track +

                  +
                  mono
                  +

                  video is not stereo +

                  +
                  left_right
                  +

                  Both views are arranged side by side, Left-eye view is on the left +

                  +
                  bottom_top
                  +

                  Both views are arranged in top-bottom orientation, Left-eye view is at bottom +

                  +
                  top_bottom
                  +

                  Both views are arranged in top-bottom orientation, Left-eye view is on top +

                  +
                  checkerboard_rl
                  +

                  Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first +

                  +
                  checkerboard_lr
                  +

                  Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first +

                  +
                  row_interleaved_rl
                  +

                  Each view is constituted by a row based interleaving, Right-eye view is first row +

                  +
                  row_interleaved_lr
                  +

                  Each view is constituted by a row based interleaving, Left-eye view is first row +

                  +
                  col_interleaved_rl
                  +

                  Both views are arranged in a column based interleaving manner, Right-eye view is first column +

                  +
                  col_interleaved_lr
                  +

                  Both views are arranged in a column based interleaving manner, Left-eye view is first column +

                  +
                  anaglyph_cyan_red
                  +

                  All frames are in anaglyph format viewable through red-cyan filters +

                  +
                  right_left
                  +

                  Both views are arranged side by side, Right-eye view is on the left +

                  +
                  anaglyph_green_magenta
                  +

                  All frames are in anaglyph format viewable through green-magenta filters +

                  +
                  block_lr
                  +

                  Both eyes laced in one Block, Left-eye view is first +

                  +
                  block_rl
                  +

                  Both eyes laced in one Block, Right-eye view is first +

                  +
                  +
                  +
                  + +

                  For example a 3D WebM clip can be created using the following command line: +

                   
                  ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
                  +
                  + +

                  This muxer supports the following options: +

                  +
                  +
                  reserve_index_space
                  +

                  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. +

                  +

                  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. +

                  +

                  Note that cues are only written if the output is seekable and this option will +have no effect if it is not. +

                  +
                  +
                  + +

                  +

                  +

                  18.9 md5

                  + +

                  MD5 testing format. +

                  +

                  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. +

                  +

                  The output of the muxer consists of a single line of the form: +MD5=MD5, where MD5 is a hexadecimal number representing +the computed MD5 hash. +

                  +

                  For example to compute the MD5 hash of the input converted to raw +audio and video, and store it in the file ‘out.md5’: +

                   
                  ffmpeg -i INPUT -f md5 out.md5
                  +
                  + +

                  You can print the MD5 to stdout with the command: +

                   
                  ffmpeg -i INPUT -f md5 -
                  +
                  + +

                  See also the framemd5 muxer. +

                  + +

                  18.10 MOV/MP4/ISMV

                  + +

                  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 faststart to the movflags, or +using the qt-faststart 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. +

                  +

                  Fragmentation is enabled by setting one of the AVOptions that define +how to cut the file into fragments: +

                  +
                  +
                  -moov_size bytes
                  +

                  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. +

                  +
                  -movflags frag_keyframe
                  +

                  Start a new fragment at each video keyframe. +

                  +
                  -frag_duration duration
                  +

                  Create fragments that are duration microseconds long. +

                  +
                  -frag_size size
                  +

                  Create fragments that contain up to size bytes of payload data. +

                  +
                  -movflags frag_custom
                  +

                  Allow the caller to manually choose when to cut fragments, by +calling av_write_frame(ctx, NULL) to write a fragment with +the packets written so far. (This is only useful with other +applications integrating libavformat, not from ffmpeg.) +

                  +
                  -min_frag_duration duration
                  +

                  Don’t create fragments that are shorter than duration microseconds long. +

                  +
                  + +

                  If more than one condition is specified, fragments are cut when +one of the specified conditions is fulfilled. The exception to this is +-min_frag_duration, which has to be fulfilled for any of the other +conditions to apply. +

                  +

                  Additionally, the way the output file is written can be adjusted +through a few other options: +

                  +
                  +
                  -movflags empty_moov
                  +

                  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. +

                  +

                  Files written with this option set do not work in QuickTime. +This option is implicitly set when writing ismv (Smooth Streaming) files. +

                  +
                  -movflags separate_moof
                  +

                  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. +

                  +

                  This option is implicitly set when writing ismv (Smooth Streaming) files. +

                  +
                  -movflags faststart
                  +

                  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. +

                  +
                  -movflags rtphint
                  +

                  Add RTP hinting tracks to the output file. +

                  +
                  + +

                  Smooth Streaming content can be pushed in real time to a publishing +point on IIS with this muxer. Example: +

                   
                  ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
                  +
                  + + +

                  18.11 mp3

                  + +

                  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 +id3v2_version option controls which one is used. The legacy ID3v1 tag is +not written by default, but may be enabled with the write_id3v1 option. +

                  +

                  For seekable output the muxer also writes 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 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 title and comment map to APIC +description and picture type respectively. See +http://id3.org/id3v2.4.0-frames for allowed picture types. +

                  +

                  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. +

                  +

                  Examples: +

                  +

                  Write an mp3 with an ID3v2.3 header and an ID3v1 footer: +

                   
                  ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
                  +
                  + +

                  To attach a picture to an mp3 file select both the audio and the picture stream +with map: +

                   
                  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
                  +
                  + + +

                  18.12 mpegts

                  + +

                  MPEG transport stream muxer. +

                  +

                  This muxer implements ISO 13818-1 and part of ETSI EN 300 468. +

                  +

                  The muxer options are: +

                  +
                  +
                  -mpegts_original_network_id number
                  +

                  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. +

                  +
                  -mpegts_transport_stream_id number
                  +

                  Set the transport_stream_id (default 0x0001). This identifies a +transponder in DVB. +

                  +
                  -mpegts_service_id number
                  +

                  Set the service_id (default 0x0001) also known as program in DVB. +

                  +
                  -mpegts_pmt_start_pid number
                  +

                  Set the first PID for PMT (default 0x1000, max 0x1f00). +

                  +
                  -mpegts_start_pid number
                  +

                  Set the first PID for data packets (default 0x0100, max 0x0f00). +

                  +
                  -mpegts_m2ts_mode number
                  +

                  Enable m2ts mode if set to 1. Default value is -1 which disables m2ts mode. +

                  +
                  -muxrate number
                  +

                  Set muxrate. +

                  +
                  -pes_payload_size number
                  +

                  Set minimum PES packet payload in bytes. +

                  +
                  -mpegts_flags flags
                  +

                  Set flags (see below). +

                  +
                  -mpegts_copyts number
                  +

                  Preserve original timestamps, if value is set to 1. Default value is -1, which +results in shifting timestamps so that they start from 0. +

                  +
                  -tables_version number
                  +

                  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: +

                   
                  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
                  +...
                  +
                  +
                  +
                  + +

                  Option mpegts_flags may take a set of such flags: +

                  +
                  +
                  resend_headers
                  +

                  Reemit PAT/PMT before writing the next packet. +

                  +
                  latm
                  +

                  Use LATM packetization for AAC. +

                  +
                  + +

                  The recognized metadata settings in mpegts muxer are service_provider +and service_name. If they are not set the default for +service_provider is "FFmpeg" and the default for +service_name is "Service01". +

                  +
                   
                  ffmpeg -i file.mpg -c copy \
                  +     -mpegts_original_network_id 0x1122 \
                  +     -mpegts_transport_stream_id 0x3344 \
                  +     -mpegts_service_id 0x5566 \
                  +     -mpegts_pmt_start_pid 0x1500 \
                  +     -mpegts_start_pid 0x150 \
                  +     -metadata service_provider="Some provider" \
                  +     -metadata service_name="Some Channel" \
                  +     -y out.ts
                  +
                  + + +

                  18.13 null

                  + +

                  Null muxer. +

                  +

                  This muxer does not generate any output file, it is mainly useful for +testing or benchmarking purposes. +

                  +

                  For example to benchmark decoding with ffmpeg you can use the +command: +

                   
                  ffmpeg -benchmark -i INPUT -f null out.null
                  +
                  + +

                  Note that the above command does not read or write the ‘out.null’ +file, but specifying the output file is required by the ffmpeg +syntax. +

                  +

                  Alternatively you can write the command as: +

                   
                  ffmpeg -benchmark -i INPUT -f null -
                  +
                  + + +

                  18.14 ogg

                  + +

                  Ogg container muxer. +

                  +
                  +
                  -page_duration duration
                  +

                  Preferred page duration, in microseconds. The muxer will attempt to create +pages that are approximately duration 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. +

                  +
                  + + +

                  18.15 segment, stream_segment, ssegment

                  + +

                  Basic stream segmenter. +

                  +

                  The segmenter muxer outputs streams to a number of separate files of nearly +fixed duration. Output filename pattern can be set in a fashion similar to +image2. +

                  +

                  stream_segment 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. +ssegment is a shorter alias for stream_segment. +

                  +

                  Every segment starts with a keyframe of the selected reference stream, +which is set through the ‘reference_stream’ option. +

                  +

                  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. +

                  +

                  The segment muxer works best with a single constant frame rate video. +

                  +

                  Optionally it can generate a list of the created segments, by setting +the option segment_list. The list type is specified by the +segment_list_type option. +

                  +

                  The segment muxer supports the following options: +

                  +
                  +
                  reference_stream specifier
                  +

                  Set the reference stream, as specified by the string specifier. +If specifier is set to auto, the reference is choosen +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 auto. +

                  +
                  +
                  segment_format format
                  +

                  Override the inner container format, by default it is guessed by the filename +extension. +

                  +
                  +
                  segment_list name
                  +

                  Generate also a listfile named name. If not specified no +listfile is generated. +

                  +
                  +
                  segment_list_flags flags
                  +

                  Set flags affecting the segment list generation. +

                  +

                  It currently supports the following flags: +

                  +
                  cache
                  +

                  Allow caching (only affects M3U8 list files). +

                  +
                  +
                  live
                  +

                  Allow live-friendly file generation. +

                  +
                  + +

                  Default value is samp. +

                  +
                  +
                  segment_list_size size
                  +

                  Update the list file so that it contains at most the last size +segments. If 0 the list file will contain all the segments. Default +value is 0. +

                  +
                  +
                  segment_list_type type
                  +

                  Specify the format for the segment list file. +

                  +

                  The following values are recognized: +

                  +
                  flat
                  +

                  Generate a flat list for the created segments, one segment per line. +

                  +
                  +
                  csv, ext
                  +

                  Generate a list for the created segments, one segment per line, +each line matching the format (comma-separated values): +

                   
                  segment_filename,segment_start_time,segment_end_time
                  +
                  + +

                  segment_filename 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. +

                  +

                  segment_start_time and segment_end_time specify +the segment start and end time expressed in seconds. +

                  +

                  A list file with the suffix ".csv" or ".ext" will +auto-select this format. +

                  +

                  ext’ is deprecated in favor or ‘csv’. +

                  +
                  +
                  ffconcat
                  +

                  Generate an ffconcat file for the created segments. The resulting file +can be read using the FFmpeg concat demuxer. +

                  +

                  A list file with the suffix ".ffcat" or ".ffconcat" will +auto-select this format. +

                  +
                  +
                  m3u8
                  +

                  Generate an extended M3U8 file, version 3, compliant with +http://tools.ietf.org/id/draft-pantos-http-live-streaming. +

                  +

                  A list file with the suffix ".m3u8" will auto-select this format. +

                  +
                  + +

                  If not specified the type is guessed from the list file name suffix. +

                  +
                  +
                  segment_time time
                  +

                  Set segment duration to time, the value must be a duration +specification. Default value is "2". See also the +‘segment_times’ option. +

                  +

                  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. +

                  +
                  +
                  segment_time_delta delta
                  +

                  Specify the accuracy time when selecting the start time for a +segment, expressed as a duration specification. Default value is "0". +

                  +

                  When delta is specified a key-frame will start a new segment if its +PTS satisfies the relation: +

                   
                  PTS >= start_time - time_delta
                  +
                  + +

                  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. +

                  +

                  In particular may be used in combination with the ‘ffmpeg’ option +force_key_frames. The key frame times specified by +force_key_frames 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*frame_rate should address the worst case mismatch between +the specified time and the time set by force_key_frames. +

                  +
                  +
                  segment_times times
                  +

                  Specify a list of split points. times contains a list of comma +separated duration specifications, in increasing order. See also +the ‘segment_time’ option. +

                  +
                  +
                  segment_frames frames
                  +

                  Specify a list of split video frame numbers. frames contains a +list of comma separated integer numbers, in increasing order. +

                  +

                  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. +

                  +
                  +
                  segment_wrap limit
                  +

                  Wrap around segment index once it reaches limit. +

                  +
                  +
                  segment_start_number number
                  +

                  Set the sequence number of the first segment. Defaults to 0. +

                  +
                  +
                  reset_timestamps 1|0
                  +

                  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 0 by default. +

                  +
                  +
                  initial_offset offset
                  +

                  Specify timestamp offset to apply to the output packet timestamps. The +argument must be a time duration specification, and defaults to 0. +

                  +
                  + + +

                  18.15.1 Examples

                  + +
                    +
                  • +To remux the content of file ‘in.mkv’ to a list of segments +‘out-000.nut’, ‘out-001.nut’, etc., and write the list of +generated segments to ‘out.list’: +
                     
                    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.list out%03d.nut
                    +
                    + +
                  • +As the example above, but segment the input file according to the split +points specified by the segment_times option: +
                     
                    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
                    +
                    + +
                  • +As the example above, but use the ffmpegforce_key_frames’ +option to force key frames in the input at the specified location, together +with the segment option ‘segment_time_delta’ to account for +possible roundings operated when setting key frame times. +
                     
                    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
                    +
                    +

                    In order to force key frames on the input file, transcoding is +required. +

                    +
                  • +Segment the input file by splitting the input file according to the +frame numbers sequence specified with the ‘segment_frames’ option: +
                     
                    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
                    +
                    + +
                  • +To convert the ‘in.mkv’ to TS segments using the libx264 +and libfaac encoders: +
                     
                    ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a libfaac -f ssegment -segment_list out.list out%03d.ts
                    +
                    + +
                  • +Segment the input file, and create an M3U8 live playlist (can be used +as live HLS source): +
                     
                    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
                    +
                    +
                  + + +

                  18.16 tee

                  + +

                  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. +

                  +

                  It is different from specifying several outputs to the ffmpeg +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. +

                  +

                  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 the “Quoting and escaping” section in the ffmpeg-utils +manual). +

                  +

                  Muxer options can be specified for each slave by prepending them as a list of +key=value 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. +

                  +

                  The following special options are also recognized: +

                  +
                  f
                  +

                  Specify the format name. Useful if it cannot be guessed from the +output name suffix. +

                  +
                  +
                  bsfs[/spec]
                  +

                  Specify a list of bitstream filters to apply to the specified +output. It is possible to specify to which streams a given bitstream +filter applies, by appending a stream specifier to the option +separated by /. If the stream specifier is not specified, the +bistream filters will be applied to all streams in the output. +

                  +

                  Several bitstream filters can be specified, separated by ",". +

                  +
                  +
                  select
                  +

                  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. +

                  +
                  + +

                  Some examples follow. +

                    +
                  • +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): +
                     
                    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/"
                    +
                    + +
                  • +Use ffmpeg to encode the input, and send the output +to three different destinations. The dump_extra 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 ‘out.aac’ in order to make it contain only +audio packets. +
                     
                    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"
                    +
                    +
                  + +

                  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 ‘global_header’ flag. +

                  + +

                  19. Metadata

                  + +

                  FFmpeg is able to dump metadata from media files into a simple UTF-8-encoded +INI-like text file and then load it back using the metadata muxer/demuxer. +

                  +

                  The file format is as follows: +

                    +
                  1. +A file consists of a header and a number of metadata tags divided into sections, +each on its own line. + +
                  2. +The header is a ’;FFMETADATA’ string, followed by a version number (now 1). + +
                  3. +Metadata tags are of the form ’key=value’ + +
                  4. +Immediately after header follows global metadata + +
                  5. +After global metadata there may be sections with per-stream/per-chapter +metadata. + +
                  6. +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. + +
                  7. +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. + +
                  8. +Empty lines and lines starting with ’;’ or ’#’ are ignored. + +
                  9. +Metadata keys or values containing special characters (’=’, ’;’, ’#’, ’\’ and a +newline) must be escaped with a backslash ’\’. + +
                  10. +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’). +
                  + +

                  A ffmetadata file might look like this: +

                   
                  ;FFMETADATA1
                  +title=bike\\shed
                  +;this is a comment
                  +artist=FFmpeg troll team
                  +
                  +[CHAPTER]
                  +TIMEBASE=1/1000
                  +START=0
                  +#chapter ends at 0:01:00
                  +END=60000
                  +title=chapter \#1
                  +[STREAM]
                  +title=multi\
                  +line
                  +
                  + +

                  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. +

                  +

                  Extracting an ffmetadata file with ‘ffmpeg’ goes as follows: +

                   
                  ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
                  +
                  + +

                  Reinserting edited metadata information from the FFMETADATAFILE file can +be done as: +

                   
                  ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
                  +
                  + + +

                  20. Protocols

                  + +

                  Protocols are configured elements in FFmpeg that enable access to +resources that require specific protocols. +

                  +

                  When you configure your FFmpeg build, all the supported protocols are +enabled by default. You can list all available ones using the +configure option "–list-protocols". +

                  +

                  You can disable all the protocols using the configure option +"–disable-protocols", and selectively enable a protocol using the +option "–enable-protocol=PROTOCOL", or you can disable a +particular protocol using the option +"–disable-protocol=PROTOCOL". +

                  +

                  The option "-protocols" of the ff* tools will display the list of +supported protocols. +

                  +

                  A description of the currently available protocols follows. +

                  + +

                  20.1 bluray

                  + +

                  Read BluRay playlist. +

                  +

                  The accepted options are: +

                  +
                  angle
                  +

                  BluRay angle +

                  +
                  +
                  chapter
                  +

                  Start chapter (1...N) +

                  +
                  +
                  playlist
                  +

                  Playlist to read (BDMV/PLAYLIST/?????.mpls) +

                  +
                  +
                  + +

                  Examples: +

                  +

                  Read longest playlist from BluRay mounted to /mnt/bluray: +

                   
                  bluray:/mnt/bluray
                  +
                  + +

                  Read angle 2 of playlist 4 from BluRay mounted to /mnt/bluray, start from chapter 2: +

                   
                  -playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
                  +
                  + + +

                  20.2 cache

                  + +

                  Caching wrapper for input stream. +

                  +

                  Cache the input stream to temporary file. It brings seeking capability to live streams. +

                  +
                   
                  cache:URL
                  +
                  + + +

                  20.3 concat

                  + +

                  Physical concatenation protocol. +

                  +

                  Allow to read and seek from many resource in sequence as if they were +a unique resource. +

                  +

                  A URL accepted by this protocol has the syntax: +

                   
                  concat:URL1|URL2|...|URLN
                  +
                  + +

                  where URL1, URL2, ..., URLN are the urls of the +resource to be concatenated, each one possibly specifying a distinct +protocol. +

                  +

                  For example to read a sequence of files ‘split1.mpeg’, +‘split2.mpeg’, ‘split3.mpeg’ with ffplay use the +command: +

                   
                  ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
                  +
                  + +

                  Note that you may need to escape the character "|" which is special for +many shells. +

                  + +

                  20.4 crypto

                  + +

                  AES-encrypted stream reading protocol. +

                  +

                  The accepted options are: +

                  +
                  key
                  +

                  Set the AES decryption key binary block from given hexadecimal representation. +

                  +
                  +
                  iv
                  +

                  Set the AES decryption initialization vector binary block from given hexadecimal representation. +

                  +
                  + +

                  Accepted URL formats: +

                   
                  crypto:URL
                  +crypto+URL
                  +
                  + + +

                  20.5 data

                  + +

                  Data in-line in the URI. See http://en.wikipedia.org/wiki/Data_URI_scheme. +

                  +

                  For example, to convert a GIF file given inline with ffmpeg: +

                   
                  ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
                  +
                  + + +

                  20.6 file

                  + +

                  File access protocol. +

                  +

                  Allow to read from or read to a file. +

                  +

                  For example to read from a file ‘input.mpeg’ with ffmpeg +use the command: +

                   
                  ffmpeg -i file:input.mpeg output.mpeg
                  +
                  + +

                  The ff* tools default to the file protocol, that is a resource +specified with the name "FILE.mpeg" is interpreted as the URL +"file:FILE.mpeg". +

                  +

                  This protocol accepts the following options: +

                  +
                  +
                  truncate
                  +

                  Truncate existing files on write, if set to 1. A value of 0 prevents +truncating. Default value is 1. +

                  +
                  +
                  blocksize
                  +

                  Set I/O operation maximum block size, in bytes. Default value is +INT_MAX, 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. +

                  +
                  + + +

                  20.7 ftp

                  + +

                  FTP (File Transfer Protocol). +

                  +

                  Allow to read from or write to remote resources using FTP protocol. +

                  +

                  Following syntax is required. +

                   
                  ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
                  +
                  + +

                  This protocol accepts the following options. +

                  +
                  +
                  timeout
                  +

                  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. +

                  +
                  +
                  ftp-anonymous-password
                  +

                  Password used when login as anonymous user. Typically an e-mail address +should be used. +

                  +
                  +
                  ftp-write-seekable
                  +

                  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. +

                  +
                  + +

                  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. +

                  + +

                  20.8 gopher

                  + +

                  Gopher protocol. +

                  + +

                  20.9 hls

                  + +

                  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 +"+proto" after the hls URI scheme name, where proto +is either "file" or "http". +

                  +
                   
                  hls+http://host/path/to/remote/resource.m3u8
                  +hls+file://path/to/local/resource.m3u8
                  +
                  + +

                  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. +

                  + +

                  20.10 http

                  + +

                  HTTP (Hyper Text Transfer Protocol). +

                  +

                  This protocol accepts the following options. +

                  +
                  +
                  seekable
                  +

                  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. +

                  +
                  +
                  chunked_post
                  +

                  If set to 1 use chunked transfer-encoding for posts, default is 1. +

                  +
                  +
                  headers
                  +

                  Set custom HTTP headers, can override built in default headers. The +value must be a string encoding the headers. +

                  +
                  +
                  content_type
                  +

                  Force a content type. +

                  +
                  +
                  user-agent
                  +

                  Override User-Agent header. If not specified the protocol will use a +string describing the libavformat build. +

                  +
                  +
                  multiple_requests
                  +

                  Use persistent connections if set to 1. By default it is 0. +

                  +
                  +
                  post_data
                  +

                  Set custom HTTP post data. +

                  +
                  +
                  timeout
                  +

                  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. +

                  +
                  +
                  mime_type
                  +

                  Set MIME type. +

                  +
                  +
                  icy
                  +

                  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 ‘icy_metadata_headers’ and ‘icy_metadata_packet’ options. +The default is 0. +

                  +
                  +
                  icy_metadata_headers
                  +

                  If the server supports ICY metadata, this contains the ICY specific HTTP reply +headers, separated with newline characters. +

                  +
                  +
                  icy_metadata_packet
                  +

                  If the server supports ICY metadata, and ‘icy’ was set to 1, this +contains the last non-empty metadata packet sent by the server. +

                  +
                  +
                  cookies
                  +

                  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. +

                  +
                  + + +

                  20.10.1 HTTP Cookies

                  + +

                  Some HTTP requests will be denied unless cookie values are passed in with the +request. The ‘cookies’ 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. +

                  +

                  The required syntax to play a stream specifying a cookie is: +

                   
                  ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
                  +
                  + + +

                  20.11 mmst

                  + +

                  MMS (Microsoft Media Server) protocol over TCP. +

                  + +

                  20.12 mmsh

                  + +

                  MMS (Microsoft Media Server) protocol over HTTP. +

                  +

                  The required syntax is: +

                   
                  mmsh://server[:port][/app][/playpath]
                  +
                  + + +

                  20.13 md5

                  + +

                  MD5 output protocol. +

                  +

                  Computes the MD5 hash of the data to be written, and on close writes +this to the designated output or stdout if none is specified. It can +be used to test muxers without writing an actual file. +

                  +

                  Some examples follow. +

                   
                  # Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
                  +ffmpeg -i input.flv -f avi -y md5:output.avi.md5
                  +
                  +# Write the MD5 hash of the encoded AVI file to stdout.
                  +ffmpeg -i input.flv -f avi -y md5:
                  +
                  + +

                  Note that some formats (typically MOV) require the output protocol to +be seekable, so they will fail with the MD5 output protocol. +

                  + +

                  20.14 pipe

                  + +

                  UNIX pipe access protocol. +

                  +

                  Allow to read and write from UNIX pipes. +

                  +

                  The accepted syntax is: +

                   
                  pipe:[number]
                  +
                  + +

                  number is the number corresponding to the file descriptor of the +pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number +is not specified, by default the stdout file descriptor will be used +for writing, stdin for reading. +

                  +

                  For example to read from stdin with ffmpeg: +

                   
                  cat test.wav | ffmpeg -i pipe:0
                  +# ...this is the same as...
                  +cat test.wav | ffmpeg -i pipe:
                  +
                  + +

                  For writing to stdout with ffmpeg: +

                   
                  ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
                  +# ...this is the same as...
                  +ffmpeg -i test.wav -f avi pipe: | cat > test.avi
                  +
                  + +

                  This protocol accepts the following options: +

                  +
                  +
                  blocksize
                  +

                  Set I/O operation maximum block size, in bytes. Default value is +INT_MAX, 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. +

                  +
                  + +

                  Note that some formats (typically MOV), require the output protocol to +be seekable, so they will fail with the pipe output protocol. +

                  + +

                  20.15 rtmp

                  + +

                  Real-Time Messaging Protocol. +

                  +

                  The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia +content across a TCP/IP network. +

                  +

                  The required syntax is: +

                   
                  rtmp://[username:password@]server[:port][/app][/instance][/playpath]
                  +
                  + +

                  The accepted parameters are: +

                  +
                  username
                  +

                  An optional username (mostly for publishing). +

                  +
                  +
                  password
                  +

                  An optional password (mostly for publishing). +

                  +
                  +
                  server
                  +

                  The address of the RTMP server. +

                  +
                  +
                  port
                  +

                  The number of the TCP port to use (by default is 1935). +

                  +
                  +
                  app
                  +

                  It is the name of the application to access. It usually corresponds to +the path where the application is installed on the RTMP server +(e.g. ‘/ondemand/’, ‘/flash/live/’, etc.). You can override +the value parsed from the URI through the rtmp_app option, too. +

                  +
                  +
                  playpath
                  +

                  It is the path or name of the resource to play with reference to the +application specified in app, may be prefixed by "mp4:". You +can override the value parsed from the URI through the rtmp_playpath +option, too. +

                  +
                  +
                  listen
                  +

                  Act as a server, listening for an incoming connection. +

                  +
                  +
                  timeout
                  +

                  Maximum time to wait for the incoming connection. Implies listen. +

                  +
                  + +

                  Additionally, the following parameters can be set via command line options +(or in code via AVOptions): +

                  +
                  rtmp_app
                  +

                  Name of application to connect on the RTMP server. This option +overrides the parameter specified in the URI. +

                  +
                  +
                  rtmp_buffer
                  +

                  Set the client buffer time in milliseconds. The default is 3000. +

                  +
                  +
                  rtmp_conn
                  +

                  Extra arbitrary AMF connection parameters, parsed from a string, +e.g. like B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0. +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. NB:myFlag:1). This option may be used multiple +times to construct arbitrary AMF sequences. +

                  +
                  +
                  rtmp_flashver
                  +

                  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>).) +

                  +
                  +
                  rtmp_flush_interval
                  +

                  Number of packets flushed in the same request (RTMPT only). The default +is 10. +

                  +
                  +
                  rtmp_live
                  +

                  Specify that the media is a live stream. No resuming or seeking in +live streams is possible. The default value is any, 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 live and +recorded. +

                  +
                  +
                  rtmp_pageurl
                  +

                  URL of the web page in which the media was embedded. By default no +value will be sent. +

                  +
                  +
                  rtmp_playpath
                  +

                  Stream identifier to play or to publish. This option overrides the +parameter specified in the URI. +

                  +
                  +
                  rtmp_subscribe
                  +

                  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. +

                  +
                  +
                  rtmp_swfhash
                  +

                  SHA256 hash of the decompressed SWF file (32 bytes). +

                  +
                  +
                  rtmp_swfsize
                  +

                  Size of the decompressed SWF file, required for SWFVerification. +

                  +
                  +
                  rtmp_swfurl
                  +

                  URL of the SWF player for the media. By default no value will be sent. +

                  +
                  +
                  rtmp_swfverify
                  +

                  URL to player swf file, compute hash/size automatically. +

                  +
                  +
                  rtmp_tcurl
                  +

                  URL of the target stream. Defaults to proto://host[:port]/app. +

                  +
                  +
                  + +

                  For example to read with ffplay a multimedia resource named +"sample" from the application "vod" from an RTMP server "myserver": +

                   
                  ffplay rtmp://myserver/vod/sample
                  +
                  + +

                  To publish to a password protected server, passing the playpath and +app names separately: +

                   
                  ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
                  +
                  + + +

                  20.16 rtmpe

                  + +

                  Encrypted Real-Time Messaging Protocol. +

                  +

                  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. +

                  + +

                  20.17 rtmps

                  + +

                  Real-Time Messaging Protocol over a secure SSL connection. +

                  +

                  The Real-Time Messaging Protocol (RTMPS) is used for streaming +multimedia content across an encrypted connection. +

                  + +

                  20.18 rtmpt

                  + +

                  Real-Time Messaging Protocol tunneled through HTTP. +

                  +

                  The Real-Time Messaging Protocol tunneled through HTTP (RTMPT) is used +for streaming multimedia content within HTTP requests to traverse +firewalls. +

                  + +

                  20.19 rtmpte

                  + +

                  Encrypted Real-Time Messaging Protocol tunneled through HTTP. +

                  +

                  The Encrypted Real-Time Messaging Protocol tunneled through HTTP (RTMPTE) +is used for streaming multimedia content within HTTP requests to traverse +firewalls. +

                  + +

                  20.20 rtmpts

                  + +

                  Real-Time Messaging Protocol tunneled through HTTPS. +

                  +

                  The Real-Time Messaging Protocol tunneled through HTTPS (RTMPTS) is used +for streaming multimedia content within HTTPS requests to traverse +firewalls. +

                  + +

                  20.21 libssh

                  + +

                  Secure File Transfer Protocol via libssh +

                  +

                  Allow to read from or write to remote resources using SFTP protocol. +

                  +

                  Following syntax is required. +

                  +
                   
                  sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
                  +
                  + +

                  This protocol accepts the following options. +

                  +
                  +
                  timeout
                  +

                  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. +

                  +
                  +
                  truncate
                  +

                  Truncate existing files on write, if set to 1. A value of 0 prevents +truncating. Default value is 1. +

                  +
                  +
                  + +

                  Example: Play a file stored on remote server. +

                  +
                   
                  ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
                  +
                  + + +

                  20.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte

                  + +

                  Real-Time Messaging Protocol and its variants supported through +librtmp. +

                  +

                  Requires the presence of the librtmp headers and library during +configuration. You need to explicitly configure the build with +"–enable-librtmp". If enabled this will replace the native RTMP +protocol. +

                  +

                  This protocol provides most client functions and a few server +functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), +encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled +variants of these encrypted types (RTMPTE, RTMPTS). +

                  +

                  The required syntax is: +

                   
                  rtmp_proto://server[:port][/app][/playpath] options
                  +
                  + +

                  where rtmp_proto is one of the strings "rtmp", "rtmpt", "rtmpe", +"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and +server, port, app and playpath have the same +meaning as specified for the RTMP native protocol. +options contains a list of space-separated options of the form +key=val. +

                  +

                  See the librtmp manual page (man 3 librtmp) for more information. +

                  +

                  For example, to stream a file in real-time to an RTMP server using +ffmpeg: +

                   
                  ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
                  +
                  + +

                  To play the same stream using ffplay: +

                   
                  ffplay "rtmp://myserver/live/mystream live=1"
                  +
                  + + +

                  20.23 rtp

                  + +

                  Real-time Transport Protocol. +

                  +

                  The required syntax for an RTP URL is: +rtp://hostname[:port][?option=val...] +

                  +

                  port specifies the RTP port to use. +

                  +

                  The following URL options are supported: +

                  +
                  +
                  ttl=n
                  +

                  Set the TTL (Time-To-Live) value (for multicast only). +

                  +
                  +
                  rtcpport=n
                  +

                  Set the remote RTCP port to n. +

                  +
                  +
                  localrtpport=n
                  +

                  Set the local RTP port to n. +

                  +
                  +
                  localrtcpport=n'
                  +

                  Set the local RTCP port to n. +

                  +
                  +
                  pkt_size=n
                  +

                  Set max packet size (in bytes) to n. +

                  +
                  +
                  connect=0|1
                  +

                  Do a connect() on the UDP socket (if set to 1) or not (if set +to 0). +

                  +
                  +
                  sources=ip[,ip]
                  +

                  List allowed source IP addresses. +

                  +
                  +
                  block=ip[,ip]
                  +

                  List disallowed (blocked) source IP addresses. +

                  +
                  +
                  write_to_source=0|1
                  +

                  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). +

                  +
                  +
                  localport=n
                  +

                  Set the local RTP port to n. +

                  +

                  This is a deprecated option. Instead, ‘localrtpport’ should be +used. +

                  +
                  +
                  + +

                  Important notes: +

                  +
                    +
                  1. +If ‘rtcpport’ is not set the RTCP port will be set to the RTP +port value plus 1. + +
                  2. +If ‘localrtpport’ (the local RTP port) is not set any available +port will be used for the local RTP and RTCP ports. + +
                  3. +If ‘localrtcpport’ (the local RTCP port) is not set it will be +set to the the local RTP port value plus 1. +
                  + + +

                  20.24 rtsp

                  + +

                  RTSP is not technically a protocol handler in libavformat, it is a demuxer +and muxer. The demuxer supports both normal RTSP (with data transferred +over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with +data transferred over RDT). +

                  +

                  The muxer can be used to send a stream using RTSP ANNOUNCE to a server +supporting it (currently Darwin Streaming Server and Mischa Spiegelmock’s +RTSP server). +

                  +

                  The required syntax for a RTSP url is: +

                   
                  rtsp://hostname[:port]/path
                  +
                  + +

                  The following options (set on the ffmpeg/ffplay command +line, or set in code via AVOptions or in avformat_open_input), +are supported: +

                  +

                  Flags for rtsp_transport: +

                  +
                  +
                  udp
                  +

                  Use UDP as lower transport protocol. +

                  +
                  +
                  tcp
                  +

                  Use TCP (interleaving within the RTSP control channel) as lower +transport protocol. +

                  +
                  +
                  udp_multicast
                  +

                  Use UDP multicast as lower transport protocol. +

                  +
                  +
                  http
                  +

                  Use HTTP tunneling as lower transport protocol, which is useful for +passing proxies. +

                  +
                  + +

                  Multiple lower transport protocols may be specified, in that case they are +tried one at a time (if the setup of one fails, the next one is tried). +For the muxer, only the tcp and udp options are supported. +

                  +

                  Flags for rtsp_flags: +

                  +
                  +
                  filter_src
                  +

                  Accept packets only from negotiated peer address and port. +

                  +
                  listen
                  +

                  Act as a server, listening for an incoming connection. +

                  +
                  + +

                  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 max_delay field of AVFormatContext). +

                  +

                  When watching multi-bitrate Real-RTSP streams with ffplay, the +streams to display can be chosen with -vst n and +-ast n for video and audio respectively, and can be switched +on the fly by pressing v and a. +

                  +

                  Example command lines: +

                  +

                  To watch a stream over UDP, with a max reordering delay of 0.5 seconds: +

                  +
                   
                  ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
                  +
                  + +

                  To watch a stream tunneled over HTTP: +

                  +
                   
                  ffplay -rtsp_transport http rtsp://server/video.mp4
                  +
                  + +

                  To send a stream in realtime to a RTSP server, for others to watch: +

                  +
                   
                  ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
                  +
                  + +

                  To receive a stream in realtime: +

                  +
                   
                  ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp output
                  +
                  + +
                  +
                  stimeout
                  +

                  Socket IO timeout in micro seconds. +

                  +
                  + + +

                  20.25 sap

                  + +

                  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. +

                  + +

                  20.25.1 Muxer

                  + +

                  The syntax for a SAP url given to the muxer is: +

                   
                  sap://destination[:port][?options]
                  +
                  + +

                  The RTP packets are sent to destination on port port, +or to port 5004 if no port is specified. +options is a &-separated list. The following options +are supported: +

                  +
                  +
                  announce_addr=address
                  +

                  Specify the destination IP address for sending the announcements to. +If omitted, the announcements are sent to the commonly used SAP +announcement multicast address 224.2.127.254 (sap.mcast.net), or +ff0e::2:7ffe if destination is an IPv6 address. +

                  +
                  +
                  announce_port=port
                  +

                  Specify the port to send the announcements on, defaults to +9875 if not specified. +

                  +
                  +
                  ttl=ttl
                  +

                  Specify the time to live value for the announcements and RTP packets, +defaults to 255. +

                  +
                  +
                  same_port=0|1
                  +

                  If set to 1, send all RTP streams on the same port pair. If zero (the +default), all streams are sent on unique ports, with each stream on a +port 2 numbers higher than the previous. +VLC/Live555 requires this to be set to 1, to be able to receive the stream. +The RTP stack in libavformat for receiving requires all streams to be sent +on unique ports. +

                  +
                  + +

                  Example command lines follow. +

                  +

                  To broadcast a stream on the local subnet, for watching in VLC: +

                  +
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1
                  +
                  + +

                  Similarly, for watching in ffplay: +

                  +
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255
                  +
                  + +

                  And for watching in ffplay, over IPv6: +

                  +
                   
                  ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]
                  +
                  + + +

                  20.25.2 Demuxer

                  + +

                  The syntax for a SAP url given to the demuxer is: +

                   
                  sap://[address][:port]
                  +
                  + +

                  address is the multicast address to listen for announcements on, +if omitted, the default 224.2.127.254 (sap.mcast.net) is used. port +is the port that is listened on, 9875 if omitted. +

                  +

                  The demuxers listens for announcements on the given address and port. +Once an announcement is received, it tries to receive that particular stream. +

                  +

                  Example command lines follow. +

                  +

                  To play back the first stream announced on the normal SAP multicast address: +

                  +
                   
                  ffplay sap://
                  +
                  + +

                  To play back the first stream announced on one the default IPv6 SAP multicast address: +

                  +
                   
                  ffplay sap://[ff0e::2:7ffe]
                  +
                  + + +

                  20.26 sctp

                  + +

                  Stream Control Transmission Protocol. +

                  +

                  The accepted URL syntax is: +

                   
                  sctp://host:port[?options]
                  +
                  + +

                  The protocol accepts the following options: +

                  +
                  listen
                  +

                  If set to any value, listen for an incoming connection. Outgoing connection is done by default. +

                  +
                  +
                  max_streams
                  +

                  Set the maximum number of streams. By default no limit is set. +

                  +
                  + + +

                  20.27 srtp

                  + +

                  Secure Real-time Transport Protocol. +

                  +

                  The accepted options are: +

                  +
                  srtp_in_suite
                  +
                  srtp_out_suite
                  +

                  Select input and output encoding suites. +

                  +

                  Supported values: +

                  +
                  AES_CM_128_HMAC_SHA1_80
                  +
                  SRTP_AES128_CM_HMAC_SHA1_80
                  +
                  AES_CM_128_HMAC_SHA1_32
                  +
                  SRTP_AES128_CM_HMAC_SHA1_32
                  +
                  + +
                  +
                  srtp_in_params
                  +
                  srtp_out_params
                  +

                  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. +

                  +
                  + + +

                  20.28 tcp

                  + +

                  Trasmission Control Protocol. +

                  +

                  The required syntax for a TCP url is: +

                   
                  tcp://hostname:port[?options]
                  +
                  + +
                  +
                  listen
                  +

                  Listen for an incoming connection +

                  +
                  +
                  timeout=microseconds
                  +

                  In read mode: if no data arrived in more than this time interval, raise error. +In write mode: if socket cannot be written in more than this time interval, raise error. +This also sets timeout on TCP connection establishing. +

                  +
                   
                  ffmpeg -i input -f format tcp://hostname:port?listen
                  +ffplay tcp://hostname:port
                  +
                  + +
                  +
                  + + +

                  20.29 tls

                  + +

                  Transport Layer Security (TLS) / Secure Sockets Layer (SSL) +

                  +

                  The required syntax for a TLS/SSL url is: +

                   
                  tls://hostname:port[?options]
                  +
                  + +

                  The following parameters can be set via command line options +(or in code via AVOptions): +

                  +
                  +
                  ca_file, cafile=filename
                  +

                  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. +

                  +
                  +
                  tls_verify=1|0
                  +

                  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.) +

                  +

                  This is disabled by default since it requires a CA database to be +provided by the caller in many cases. +

                  +
                  +
                  cert_file, cert=filename
                  +

                  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.) +

                  +
                  +
                  key_file, key=filename
                  +

                  A file containing the private key for the certificate. +

                  +
                  +
                  listen=1|0
                  +

                  If enabled, listen for connections on the provided port, and assume +the server role in the handshake instead of the client role. +

                  +
                  +
                  + +

                  Example command lines: +

                  +

                  To create a TLS/SSL server that serves an input stream. +

                  +
                   
                  ffmpeg -i input -f format tls://hostname:port?listen&cert=server.crt&key=server.key
                  +
                  + +

                  To play back a stream from the TLS/SSL server using ffplay: +

                  +
                   
                  ffplay tls://hostname:port
                  +
                  + + +

                  20.30 udp

                  + +

                  User Datagram Protocol. +

                  +

                  The required syntax for a UDP url is: +

                   
                  udp://hostname:port[?options]
                  +
                  + +

                  options contains a list of &-separated options of the form key=val. +

                  +

                  In case threading is enabled on the system, a circular buffer is used +to store the incoming data, which allows to reduce loss of data due to +UDP socket buffer overruns. The fifo_size and +overrun_nonfatal options are related to this buffer. +

                  +

                  The list of supported options follows. +

                  +
                  +
                  buffer_size=size
                  +

                  Set the UDP socket buffer size in bytes. This is used both for the +receiving and the sending buffer size. +

                  +
                  +
                  localport=port
                  +

                  Override the local UDP port to bind with. +

                  +
                  +
                  localaddr=addr
                  +

                  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. +

                  +
                  +
                  pkt_size=size
                  +

                  Set the size in bytes of UDP packets. +

                  +
                  +
                  reuse=1|0
                  +

                  Explicitly allow or disallow reusing UDP sockets. +

                  +
                  +
                  ttl=ttl
                  +

                  Set the time to live value (for multicast only). +

                  +
                  +
                  connect=1|0
                  +

                  Initialize the UDP socket with connect(). In this case, the +destination address can’t be changed with ff_udp_set_remote_url later. +If the destination address isn’t known at the start, this option can +be specified in ff_udp_set_remote_url, too. +This allows finding out the source address for the packets with getsockname, +and makes writes return with AVERROR(ECONNREFUSED) if "destination +unreachable" is received. +For receiving, this gives the benefit of only receiving packets from +the specified peer address/port. +

                  +
                  +
                  sources=address[,address]
                  +

                  Only receive packets sent to the multicast group from one of the +specified sender IP addresses. +

                  +
                  +
                  block=address[,address]
                  +

                  Ignore packets sent to the multicast group from the specified +sender IP addresses. +

                  +
                  +
                  fifo_size=units
                  +

                  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. +

                  +
                  +
                  overrun_nonfatal=1|0
                  +

                  Survive in case of UDP receiving circular buffer overrun. Default +value is 0. +

                  +
                  +
                  timeout=microseconds
                  +

                  In read mode: if no data arrived in more than this time interval, raise error. +

                  +
                  + +

                  Some usage examples of the UDP protocol with ffmpeg follow. +

                  +

                  To stream over UDP to a remote endpoint: +

                   
                  ffmpeg -i input -f format udp://hostname:port
                  +
                  + +

                  To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer: +

                   
                  ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
                  +
                  + +

                  To receive over UDP from a remote endpoint: +

                   
                  ffmpeg -i udp://[multicast-address]:port
                  +
                  + + +

                  20.31 unix

                  + +

                  Unix local socket +

                  +

                  The required syntax for a Unix socket URL is: +

                  +
                   
                  unix://filepath
                  +
                  + +

                  The following parameters can be set via command line options +(or in code via AVOptions): +

                  +
                  +
                  timeout
                  +

                  Timeout in ms. +

                  +
                  listen
                  +

                  Create the Unix socket in listening mode. +

                  +
                  + + +

                  21. Device Options

                  + +

                  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). +

                  +

                  In addition each input or output device may support so-called private +options, which are specific for that component. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools, or by setting the value explicitly in the device +AVFormatContext options or using the ‘libavutil/opt.h’ API +for programmatic use. +

                  + + +

                  22. Input Devices

                  + +

                  Input devices are configured elements in FFmpeg which allow to access +the data coming from a multimedia device attached to your system. +

                  +

                  When you configure your FFmpeg build, all the supported input devices +are enabled by default. You can list all available ones using the +configure option "–list-indevs". +

                  +

                  You can disable all the input devices using the configure option +"–disable-indevs", and selectively enable an input device using the +option "–enable-indev=INDEV", or you can disable a particular +input device using the option "–disable-indev=INDEV". +

                  +

                  The option "-formats" of the ff* tools will display the list of +supported input devices (amongst the demuxers). +

                  +

                  A description of the currently available input devices follows. +

                  + +

                  22.1 alsa

                  + +

                  ALSA (Advanced Linux Sound Architecture) input device. +

                  +

                  To enable this input device during configuration you need libasound +installed on your system. +

                  +

                  This device allows capturing from an ALSA device. The name of the +device to capture has to be an ALSA card identifier. +

                  +

                  An ALSA identifier has the syntax: +

                   
                  hw:CARD[,DEV[,SUBDEV]]
                  +
                  + +

                  where the DEV and SUBDEV components are optional. +

                  +

                  The three arguments (in order: CARD,DEV,SUBDEV) +specify card number or identifier, device number and subdevice number +(-1 means any). +

                  +

                  To see the list of cards currently recognized by your system check the +files ‘/proc/asound/cards’ and ‘/proc/asound/devices’. +

                  +

                  For example to capture with ffmpeg from an ALSA device with +card id 0, you may run the command: +

                   
                  ffmpeg -f alsa -i hw:0 alsaout.wav
                  +
                  + +

                  For more information see: +http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html +

                  + +

                  22.2 bktr

                  + +

                  BSD video input device. +

                  + +

                  22.3 dshow

                  + +

                  Windows DirectShow input device. +

                  +

                  DirectShow support is enabled when FFmpeg is built with the mingw-w64 project. +Currently only audio and video devices are supported. +

                  +

                  Multiple devices may be opened as separate inputs, but they may also be +opened on the same input, which should improve synchronism between them. +

                  +

                  The input name should be in the format: +

                  +
                   
                  TYPE=NAME[:TYPE=NAME]
                  +
                  + +

                  where TYPE can be either audio or video, +and NAME is the device’s name. +

                  + +

                  22.3.1 Options

                  + +

                  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. +

                  +
                  +
                  video_size
                  +

                  Set the video size in the captured video. +

                  +
                  +
                  framerate
                  +

                  Set the frame rate in the captured video. +

                  +
                  +
                  sample_rate
                  +

                  Set the sample rate (in Hz) of the captured audio. +

                  +
                  +
                  sample_size
                  +

                  Set the sample size (in bits) of the captured audio. +

                  +
                  +
                  channels
                  +

                  Set the number of channels in the captured audio. +

                  +
                  +
                  list_devices
                  +

                  If set to ‘true’, print a list of devices and exit. +

                  +
                  +
                  list_options
                  +

                  If set to ‘true’, print a list of selected device’s options +and exit. +

                  +
                  +
                  video_device_number
                  +

                  Set video device number for devices with same name (starts at 0, +defaults to 0). +

                  +
                  +
                  audio_device_number
                  +

                  Set audio device number for devices with same name (starts at 0, +defaults to 0). +

                  +
                  +
                  pixel_format
                  +

                  Select pixel format to be used by DirectShow. This may only be set when +the video codec is not set or set to rawvideo. +

                  +
                  +
                  audio_buffer_size
                  +

                  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 +http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx +

                  +
                  +
                  + + +

                  22.3.2 Examples

                  + +
                    +
                  • +Print the list of DirectShow supported devices and exit: +
                     
                    $ ffmpeg -list_devices true -f dshow -i dummy
                    +
                    + +
                  • +Open video device Camera: +
                     
                    $ ffmpeg -f dshow -i video="Camera"
                    +
                    + +
                  • +Open second video device with name Camera: +
                     
                    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
                    +
                    + +
                  • +Open video device Camera and audio device Microphone: +
                     
                    $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
                    +
                    + +
                  • +Print the list of supported options in selected device and exit: +
                     
                    $ ffmpeg -list_options true -f dshow -i video="Camera"
                    +
                    + +
                  + + +

                  22.4 dv1394

                  + +

                  Linux DV 1394 input device. +

                  + +

                  22.5 fbdev

                  + +

                  Linux framebuffer input device. +

                  +

                  The Linux framebuffer is a graphic hardware-independent abstraction +layer to show graphics on a computer monitor, typically on the +console. It is accessed through a file device node, usually +‘/dev/fb0’. +

                  +

                  For more detailed information read the file +Documentation/fb/framebuffer.txt included in the Linux source tree. +

                  +

                  To record from the framebuffer device ‘/dev/fb0’ with +ffmpeg: +

                   
                  ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
                  +
                  + +

                  You can take a single screenshot image with the command: +

                   
                  ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
                  +
                  + +

                  See also http://linux-fbdev.sourceforge.net/, and fbset(1). +

                  + +

                  22.6 iec61883

                  + +

                  FireWire DV/HDV input device using libiec61883. +

                  +

                  To enable this input device, you need libiec61883, libraw1394 and +libavc1394 installed on your system. Use the configure option +--enable-libiec61883 to compile with the device enabled. +

                  +

                  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. +

                  +

                  Specify the FireWire port to be used as input file, or "auto" +to choose the first port connected. +

                  + +

                  22.6.1 Options

                  + +
                  +
                  dvtype
                  +

                  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 ‘auto’, ‘dv’ and ‘hdv’ are supported. +

                  +
                  +
                  dvbuffer
                  +

                  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. +

                  +
                  +
                  dvguid
                  +

                  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. +

                  +
                  +
                  + + +

                  22.6.2 Examples

                  + +
                    +
                  • +Grab and show the input of a FireWire DV/HDV device. +
                     
                    ffplay -f iec61883 -i auto
                    +
                    + +
                  • +Grab and record the input of a FireWire DV/HDV device, +using a packet buffer of 100000 packets if the source is HDV. +
                     
                    ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg
                    +
                    + +
                  + + +

                  22.7 jack

                  + +

                  JACK input device. +

                  +

                  To enable this input device during configuration you need libjack +installed on your system. +

                  +

                  A JACK input device creates one or more JACK writable clients, one for +each audio channel, with name client_name:input_N, where +client_name is the name provided by the application, and N +is a number which identifies the channel. +Each writable client will send the acquired data to the FFmpeg input +device. +

                  +

                  Once you have created one or more JACK readable clients, you need to +connect them to one or more JACK writable clients. +

                  +

                  To connect or disconnect JACK clients you can use the jack_connect +and jack_disconnect programs, or do it through a graphical interface, +for example with qjackctl. +

                  +

                  To list the JACK clients and their properties you can invoke the command +jack_lsp. +

                  +

                  Follows an example which shows how to capture a JACK readable client +with ffmpeg. +

                   
                  # Create a JACK writable client with name "ffmpeg".
                  +$ ffmpeg -f jack -i ffmpeg -y out.wav
                  +
                  +# Start the sample jack_metro readable client.
                  +$ jack_metro -b 120 -d 0.2 -f 4000
                  +
                  +# List the current JACK clients.
                  +$ jack_lsp -c
                  +system:capture_1
                  +system:capture_2
                  +system:playback_1
                  +system:playback_2
                  +ffmpeg:input_1
                  +metro:120_bpm
                  +
                  +# Connect metro to the ffmpeg writable client.
                  +$ jack_connect metro:120_bpm ffmpeg:input_1
                  +
                  + +

                  For more information read: +http://jackaudio.org/ +

                  + +

                  22.8 lavfi

                  + +

                  Libavfilter input virtual device. +

                  +

                  This input device reads data from the open output pads of a libavfilter +filtergraph. +

                  +

                  For each filtergraph open output, the input device will create a +corresponding stream which is mapped to the generated output. Currently +only video data is supported. The filtergraph is specified through the +option ‘graph’. +

                  + +

                  22.8.1 Options

                  + +
                  +
                  graph
                  +

                  Specify the filtergraph to use as input. Each video open output must be +labelled by a unique string of the form "outN", where N is a +number starting from 0 corresponding to the mapped input stream +generated by the device. +The first unlabelled output is automatically assigned to the "out0" +label, but all the others need to be specified explicitly. +

                  +

                  If not specified defaults to the filename specified for the input +device. +

                  +
                  +
                  graph_file
                  +

                  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 graph. +

                  +
                  +
                  + + +

                  22.8.2 Examples

                  + +
                    +
                  • +Create a color video stream and play it back with ffplay: +
                     
                    ffplay -f lavfi -graph "color=c=pink [out0]" dummy
                    +
                    + +
                  • +As the previous example, but use filename for specifying the graph +description, and omit the "out0" label: +
                     
                    ffplay -f lavfi color=c=pink
                    +
                    + +
                  • +Create three different video test filtered sources and play them: +
                     
                    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
                    +
                    + +
                  • +Read an audio stream from a file using the amovie source and play it +back with ffplay: +
                     
                    ffplay -f lavfi "amovie=test.wav"
                    +
                    + +
                  • +Read an audio stream and a video stream and play it back with +ffplay: +
                     
                    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
                    +
                    + +
                  + + +

                  22.9 libdc1394

                  + +

                  IIDC1394 input device, based on libdc1394 and libraw1394. +

                  + +

                  22.10 openal

                  + +

                  The OpenAL input device provides audio capture on all systems with a +working OpenAL 1.1 implementation. +

                  +

                  To enable this input device during configuration, you need OpenAL +headers and libraries installed on your system, and need to configure +FFmpeg with --enable-openal. +

                  +

                  OpenAL headers and libraries should be provided as part of your OpenAL +implementation, or as an additional download (an SDK). Depending on your +installation you may need to specify additional flags via the +--extra-cflags and --extra-ldflags for allowing the build +system to locate the OpenAL headers and libraries. +

                  +

                  An incomplete list of OpenAL implementations follows: +

                  +
                  +
                  Creative
                  +

                  The official Windows implementation, providing hardware acceleration +with supported devices and software fallback. +See http://openal.org/. +

                  +
                  OpenAL Soft
                  +

                  Portable, open source (LGPL) software implementation. Includes +backends for the most common sound APIs on the Windows, Linux, +Solaris, and BSD operating systems. +See http://kcat.strangesoft.net/openal.html. +

                  +
                  Apple
                  +

                  OpenAL is part of Core Audio, the official Mac OS X Audio interface. +See http://developer.apple.com/technologies/mac/audio-and-video.html +

                  +
                  + +

                  This device allows to capture from an audio input device handled +through OpenAL. +

                  +

                  You need to specify the name of the device to capture in the provided +filename. If the empty string is provided, the device will +automatically select the default device. You can get the list of the +supported devices by using the option list_devices. +

                  + +

                  22.10.1 Options

                  + +
                  +
                  channels
                  +

                  Set the number of channels in the captured audio. Only the values +‘1’ (monaural) and ‘2’ (stereo) are currently supported. +Defaults to ‘2’. +

                  +
                  +
                  sample_size
                  +

                  Set the sample size (in bits) of the captured audio. Only the values +‘8’ and ‘16’ are currently supported. Defaults to +‘16’. +

                  +
                  +
                  sample_rate
                  +

                  Set the sample rate (in Hz) of the captured audio. +Defaults to ‘44.1k’. +

                  +
                  +
                  list_devices
                  +

                  If set to ‘true’, print a list of devices and exit. +Defaults to ‘false’. +

                  +
                  +
                  + + +

                  22.10.2 Examples

                  + +

                  Print the list of OpenAL supported devices and exit: +

                   
                  $ ffmpeg -list_devices true -f openal -i dummy out.ogg
                  +
                  + +

                  Capture from the OpenAL device ‘DR-BT101 via PulseAudio’: +

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
                  +
                  + +

                  Capture from the default device (note the empty string ” as filename): +

                   
                  $ ffmpeg -f openal -i '' out.ogg
                  +
                  + +

                  Capture from two devices simultaneously, writing to two different files, +within the same ffmpeg command: +

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
                  +
                  +

                  Note: not all OpenAL implementations support multiple simultaneous capture - +try the latest OpenAL Soft if the above does not work. +

                  + +

                  22.11 oss

                  + +

                  Open Sound System input device. +

                  +

                  The filename to provide to the input device is the device node +representing the OSS input device, and is usually set to +‘/dev/dsp’. +

                  +

                  For example to grab from ‘/dev/dsp’ using ffmpeg use the +command: +

                   
                  ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
                  +
                  + +

                  For more information about OSS see: +http://manuals.opensound.com/usersguide/dsp.html +

                  + +

                  22.12 pulse

                  + +

                  PulseAudio input device. +

                  +

                  To enable this output device you need to configure FFmpeg with --enable-libpulse. +

                  +

                  The filename to provide to the input device is a source device or the +string "default" +

                  +

                  To list the PulseAudio source devices and their properties you can invoke +the command pactl list sources. +

                  +

                  More information about PulseAudio can be found on http://www.pulseaudio.org. +

                  + +

                  22.12.1 Options

                  +
                  +
                  server
                  +

                  Connect to a specific PulseAudio server, specified by an IP address. +Default server is used when not provided. +

                  +
                  +
                  name
                  +

                  Specify the application name PulseAudio will use when showing active clients, +by default it is the LIBAVFORMAT_IDENT string. +

                  +
                  +
                  stream_name
                  +

                  Specify the stream name PulseAudio will use when showing active streams, +by default it is "record". +

                  +
                  +
                  sample_rate
                  +

                  Specify the samplerate in Hz, by default 48kHz is used. +

                  +
                  +
                  channels
                  +

                  Specify the channels in use, by default 2 (stereo) is set. +

                  +
                  +
                  frame_size
                  +

                  Specify the number of bytes per frame, by default it is set to 1024. +

                  +
                  +
                  fragment_size
                  +

                  Specify the minimal buffering fragment in PulseAudio, it will affect the +audio latency. By default it is unset. +

                  +
                  + + +

                  22.12.2 Examples

                  +

                  Record a stream from default device: +

                   
                  ffmpeg -f pulse -i default /tmp/pulse.wav
                  +
                  + + +

                  22.13 sndio

                  + +

                  sndio input device. +

                  +

                  To enable this input device during configuration you need libsndio +installed on your system. +

                  +

                  The filename to provide to the input device is the device node +representing the sndio input device, and is usually set to +‘/dev/audio0’. +

                  +

                  For example to grab from ‘/dev/audio0’ using ffmpeg use the +command: +

                   
                  ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
                  +
                  + + +

                  22.14 video4linux2, v4l2

                  + +

                  Video4Linux2 input video device. +

                  +

                  "v4l2" can be used as alias for "video4linux2". +

                  +

                  If FFmpeg is built with v4l-utils support (by using the +--enable-libv4l2 configure option), it is possible to use it with the +-use_libv4l2 input device option. +

                  +

                  The name of the device to grab is a file device node, usually Linux +systems tend to automatically create such nodes when the device +(e.g. an USB webcam) is plugged into the system, and has a name of the +kind ‘/dev/videoN’, where N is a number associated to +the device. +

                  +

                  Video4Linux2 devices usually support a limited set of +widthxheight sizes and frame rates. You can check which are +supported using -list_formats all for Video4Linux2 devices. +Some devices, like TV cards, support one or more standards. It is possible +to list all the supported standards using -list_standards all. +

                  +

                  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 +‘-timestamps abs’ or ‘-ts abs’ option can be used to force +conversion into the real time clock. +

                  +

                  Some usage examples of the video4linux2 device with ffmpeg +and ffplay: +

                    +
                  • +Grab and show the input of a video4linux2 device: +
                     
                    ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
                    +
                    + +
                  • +Grab and record the input of a video4linux2 device, leave the +frame rate and size as previously set: +
                     
                    ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
                    +
                    +
                  + +

                  For more information about Video4Linux, check http://linuxtv.org/. +

                  + +

                  22.14.1 Options

                  + +
                  +
                  standard
                  +

                  Set the standard. Must be the name of a supported standard. To get a +list of the supported standards, use the ‘list_standards’ +option. +

                  +
                  +
                  channel
                  +

                  Set the input channel number. Default to -1, which means using the +previously selected channel. +

                  +
                  +
                  video_size
                  +

                  Set the video frame size. The argument must be a string in the form +WIDTHxHEIGHT or a valid size abbreviation. +

                  +
                  +
                  pixel_format
                  +

                  Select the pixel format (only valid for raw video input). +

                  +
                  +
                  input_format
                  +

                  Set the preferred pixel format (for raw video) or a codec name. +This option allows to select the input format, when several are +available. +

                  +
                  +
                  framerate
                  +

                  Set the preferred video frame rate. +

                  +
                  +
                  list_formats
                  +

                  List available formats (supported pixel formats, codecs, and frame +sizes) and exit. +

                  +

                  Available values are: +

                  +
                  all
                  +

                  Show all available (compressed and non-compressed) formats. +

                  +
                  +
                  raw
                  +

                  Show only raw video (non-compressed) formats. +

                  +
                  +
                  compressed
                  +

                  Show only compressed formats. +

                  +
                  + +
                  +
                  list_standards
                  +

                  List supported standards and exit. +

                  +

                  Available values are: +

                  +
                  all
                  +

                  Show all supported standards. +

                  +
                  + +
                  +
                  timestamps, ts
                  +

                  Set type of timestamps for grabbed frames. +

                  +

                  Available values are: +

                  +
                  default
                  +

                  Use timestamps from the kernel. +

                  +
                  +
                  abs
                  +

                  Use absolute timestamps (wall clock). +

                  +
                  +
                  mono2abs
                  +

                  Force conversion from monotonic to absolute timestamps. +

                  +
                  + +

                  Default value is default. +

                  +
                  + + +

                  22.15 vfwcap

                  + +

                  VfW (Video for Windows) capture input device. +

                  +

                  The filename passed as input is the capture driver number, ranging from +0 to 9. You may use "list" as filename to print a list of drivers. Any +other filename will be interpreted as device number 0. +

                  + +

                  22.16 x11grab

                  + +

                  X11 video input device. +

                  +

                  This device allows to capture a region of an X11 display. +

                  +

                  The filename passed as input has the syntax: +

                   
                  [hostname]:display_number.screen_number[+x_offset,y_offset]
                  +
                  + +

                  hostname:display_number.screen_number specifies the +X11 display name of the screen to grab from. hostname can be +omitted, and defaults to "localhost". The environment variable +DISPLAY contains the default display name. +

                  +

                  x_offset and y_offset specify the offsets of the grabbed +area with respect to the top-left border of the X11 screen. They +default to 0. +

                  +

                  Check the X11 documentation (e.g. man X) for more detailed information. +

                  +

                  Use the dpyinfo program for getting basic information about the +properties of your X11 display (e.g. grep for "name" or "dimensions"). +

                  +

                  For example to grab from ‘:0.0’ using ffmpeg: +

                   
                  ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
                  +
                  + +

                  Grab at position 10,20: +

                   
                  ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
                  +
                  + + +

                  22.16.1 Options

                  + +
                  +
                  draw_mouse
                  +

                  Specify whether to draw the mouse pointer. A value of 0 specify +not to draw the pointer. Default value is 1. +

                  +
                  +
                  follow_mouse
                  +

                  Make the grabbed area follow the mouse. The argument can be +centered or a number of pixels PIXELS. +

                  +

                  When it is specified with "centered", the grabbing region follows the mouse +pointer and keeps the pointer at the center of region; otherwise, the region +follows only when the mouse pointer reaches within PIXELS (greater than +zero) to the edge of region. +

                  +

                  For example: +

                   
                  ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
                  +
                  + +

                  To follow only when the mouse pointer reaches within 100 pixels to edge: +

                   
                  ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
                  +
                  + +
                  +
                  framerate
                  +

                  Set the grabbing frame rate. Default value is ntsc, +corresponding to a frame rate of 30000/1001. +

                  +
                  +
                  show_region
                  +

                  Show grabbed region on screen. +

                  +

                  If show_region is specified with 1, 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. +

                  +

                  For example: +

                   
                  ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
                  +
                  + +

                  With follow_mouse: +

                   
                  ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
                  +
                  + +
                  +
                  video_size
                  +

                  Set the video frame size. Default value is vga. +

                  +
                  + + +

                  23. Output Devices

                  + +

                  Output devices are configured elements in FFmpeg that can write +multimedia data to an output device attached to your system. +

                  +

                  When you configure your FFmpeg build, all the supported output devices +are enabled by default. You can list all available ones using the +configure option "–list-outdevs". +

                  +

                  You can disable all the output devices using the configure option +"–disable-outdevs", and selectively enable an output device using the +option "–enable-outdev=OUTDEV", or you can disable a particular +input device using the option "–disable-outdev=OUTDEV". +

                  +

                  The option "-formats" of the ff* tools will display the list of +enabled output devices (amongst the muxers). +

                  +

                  A description of the currently available output devices follows. +

                  + +

                  23.1 alsa

                  + +

                  ALSA (Advanced Linux Sound Architecture) output device. +

                  + +

                  23.2 caca

                  + +

                  CACA output device. +

                  +

                  This output device allows 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. +

                  +

                  To enable this output device you need to configure FFmpeg with +--enable-libcaca. +libcaca is a graphics library that outputs text instead of pixels. +

                  +

                  For more information about libcaca, check: +http://caca.zoy.org/wiki/libcaca +

                  + +

                  23.2.1 Options

                  + +
                  +
                  window_title
                  +

                  Set the CACA window title, if not specified default to the filename +specified for the output device. +

                  +
                  +
                  window_size
                  +

                  Set the CACA window size, can be a string of the form +widthxheight or a video size abbreviation. +If not specified it defaults to the size of the input video. +

                  +
                  +
                  driver
                  +

                  Set display driver. +

                  +
                  +
                  algorithm
                  +

                  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 -list_dither algorithms. +

                  +
                  +
                  antialias
                  +

                  Set antialias method. Antialiasing smoothens the rendered +image and avoids the commonly seen staircase effect. +The accepted values are listed with -list_dither antialiases. +

                  +
                  +
                  charset
                  +

                  Set which characters are going to be used when rendering text. +The accepted values are listed with -list_dither charsets. +

                  +
                  +
                  color
                  +

                  Set color to be used when rendering text. +The accepted values are listed with -list_dither colors. +

                  +
                  +
                  list_drivers
                  +

                  If set to ‘true’, print a list of available drivers and exit. +

                  +
                  +
                  list_dither
                  +

                  List available dither options related to the argument. +The argument must be one of algorithms, antialiases, +charsets, colors. +

                  +
                  + + +

                  23.2.2 Examples

                  + +
                    +
                  • +The following command shows the ffmpeg output is an +CACA window, forcing its size to 80x25: +
                     
                    ffmpeg -i INPUT -vcodec rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
                    +
                    + +
                  • +Show the list of available drivers and exit: +
                     
                    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
                    +
                    + +
                  • +Show the list of available dither colors and exit: +
                     
                    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
                    +
                    +
                  + + +

                  23.3 fbdev

                  + +

                  Linux framebuffer output device. +

                  +

                  The Linux framebuffer is a graphic hardware-independent abstraction +layer to show graphics on a computer monitor, typically on the +console. It is accessed through a file device node, usually +‘/dev/fb0’. +

                  +

                  For more detailed information read the file +‘Documentation/fb/framebuffer.txt’ included in the Linux source tree. +

                  + +

                  23.3.1 Options

                  +
                  +
                  xoffset
                  +
                  yoffset
                  +

                  Set x/y coordinate of top left corner. Default is 0. +

                  +
                  + + +

                  23.3.2 Examples

                  +

                  Play a file on framebuffer device ‘/dev/fb0’. +Required pixel format depends on current framebuffer settings. +

                   
                  ffmpeg -re -i INPUT -vcodec rawvideo -pix_fmt bgra -f fbdev /dev/fb0
                  +
                  + +

                  See also http://linux-fbdev.sourceforge.net/, and fbset(1). +

                  + +

                  23.4 oss

                  + +

                  OSS (Open Sound System) output device. +

                  + +

                  23.5 pulse

                  + +

                  PulseAudio output device. +

                  +

                  To enable this output device you need to configure FFmpeg with --enable-libpulse. +

                  +

                  More information about PulseAudio can be found on http://www.pulseaudio.org +

                  + +

                  23.5.1 Options

                  +
                  +
                  server
                  +

                  Connect to a specific PulseAudio server, specified by an IP address. +Default server is used when not provided. +

                  +
                  +
                  name
                  +

                  Specify the application name PulseAudio will use when showing active clients, +by default it is the LIBAVFORMAT_IDENT string. +

                  +
                  +
                  stream_name
                  +

                  Specify the stream name PulseAudio will use when showing active streams, +by default it is set to the specified output name. +

                  +
                  +
                  device
                  +

                  Specify the device to use. Default device is used when not provided. +List of output devices can be obtained with command pactl list sinks. +

                  +
                  +
                  + + +

                  23.5.2 Examples

                  +

                  Play a file on default device on default server: +

                   
                  ffmpeg  -i INPUT -f pulse "stream name"
                  +
                  + + +

                  23.6 sdl

                  + +

                  SDL (Simple DirectMedia Layer) output device. +

                  +

                  This output device allows to show a video stream in an SDL +window. Only one SDL window is allowed per application, so you can +have only one instance of this output device in an application. +

                  +

                  To enable this output device you need libsdl installed on your system +when configuring your build. +

                  +

                  For more information about SDL, check: +http://www.libsdl.org/ +

                  + +

                  23.6.1 Options

                  + +
                  +
                  window_title
                  +

                  Set the SDL window title, if not specified default to the filename +specified for the output device. +

                  +
                  +
                  icon_title
                  +

                  Set the name of the iconified SDL window, if not specified it is set +to the same value of window_title. +

                  +
                  +
                  window_size
                  +

                  Set the SDL window size, can be a string of the form +widthxheight or a video size abbreviation. +If not specified it defaults to the size of the input video, +downscaled according to the aspect ratio. +

                  +
                  +
                  window_fullscreen
                  +

                  Set fullscreen mode when non-zero value is provided. +Zero is a default. +

                  +
                  + + +

                  23.6.2 Examples

                  + +

                  The following command shows the ffmpeg output is an +SDL window, forcing its size to the qcif format: +

                   
                  ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
                  +
                  + + +

                  23.7 sndio

                  + +

                  sndio audio output device. +

                  + +

                  23.8 xv

                  + +

                  XV (XVideo) output device. +

                  +

                  This output device allows to show a video stream in a X Window System +window. +

                  + +

                  23.8.1 Options

                  + +
                  +
                  display_name
                  +

                  Specify the hardware display name, which determines the display and +communications domain to be used. +

                  +

                  The display name or DISPLAY environment variable can be a string in +the format hostname[:number[.screen_number]]. +

                  +

                  hostname specifies the name of the host machine on which the +display is physically attached. number specifies the number of +the display server on that host machine. screen_number specifies +the screen to be used on that server. +

                  +

                  If unspecified, it defaults to the value of the DISPLAY environment +variable. +

                  +

                  For example, dual-headed:0.1 would specify screen 1 of display +0 on the machine named “dual-headed”. +

                  +

                  Check the X11 specification for more detailed information about the +display name format. +

                  +
                  +
                  window_size
                  +

                  Set the created window size, can be a string of the form +widthxheight or a video size abbreviation. If not +specified it defaults to the size of the input video. +

                  +
                  +
                  window_x
                  +
                  window_y
                  +

                  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. +

                  +
                  +
                  window_title
                  +

                  Set the window title, if not specified default to the filename +specified for the output device. +

                  +
                  + +

                  For more information about XVideo see http://www.x.org/. +

                  + +

                  23.8.2 Examples

                  + +
                    +
                  • +Decode, display and encode video input with ffmpeg at the +same time: +
                     
                    ffmpeg -i INPUT OUTPUT -f xv display
                    +
                    + +
                  • +Decode and display the input video to multiple X11 windows: +
                     
                    ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
                    +
                    +
                  + + +

                  24. Resampler Options

                  + +

                  The audio resampler supports the following named options. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools, option=value for the aresample filter, +by setting the value explicitly in the +SwrContext options or using the ‘libavutil/opt.h’ API for +programmatic use. +

                  +
                  +
                  ich, in_channel_count
                  +

                  Set the number of input channels. Default value is 0. Setting this +value is not mandatory if the corresponding channel layout +‘in_channel_layout’ is set. +

                  +
                  +
                  och, out_channel_count
                  +

                  Set the number of output channels. Default value is 0. Setting this +value is not mandatory if the corresponding channel layout +‘out_channel_layout’ is set. +

                  +
                  +
                  uch, used_channel_count
                  +

                  Set the number of used input channels. Default value is 0. This option is +only used for special remapping. +

                  +
                  +
                  isr, in_sample_rate
                  +

                  Set the input sample rate. Default value is 0. +

                  +
                  +
                  osr, out_sample_rate
                  +

                  Set the output sample rate. Default value is 0. +

                  +
                  +
                  isf, in_sample_fmt
                  +

                  Specify the input sample format. It is set by default to none. +

                  +
                  +
                  osf, out_sample_fmt
                  +

                  Specify the output sample format. It is set by default to none. +

                  +
                  +
                  tsf, internal_sample_fmt
                  +

                  Set the internal sample format. Default value is none. +This will automatically be chosen when it is not explicitly set. +

                  +
                  +
                  icl, in_channel_layout
                  +
                  ocl, out_channel_layout
                  +

                  Set the input/output channel layout. +

                  +

                  See (ffmpeg-utils)channel layout syntax +for the required syntax. +

                  +
                  +
                  clev, center_mix_level
                  +

                  Set the center mix level. It is a value expressed in deciBel, and must be +in the interval [-32,32]. +

                  +
                  +
                  slev, surround_mix_level
                  +

                  Set the surround mix level. It is a value expressed in deciBel, and must +be in the interval [-32,32]. +

                  +
                  +
                  lfe_mix_level
                  +

                  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]. +

                  +
                  +
                  rmvol, rematrix_volume
                  +

                  Set rematrix volume. Default value is 1.0. +

                  +
                  +
                  rematrix_maxval
                  +

                  Set maximum output value for rematrixing. +This can be used to prevent clipping vs. preventing volumn reduction +A value of 1.0 prevents cliping. +

                  +
                  +
                  flags, swr_flags
                  +

                  Set flags used by the converter. Default value is 0. +

                  +

                  It supports the following individual flags: +

                  +
                  res
                  +

                  force resampling, this flag forces resampling to be used even when the +input and output sample rates match. +

                  +
                  + +
                  +
                  dither_scale
                  +

                  Set the dither scale. Default value is 1. +

                  +
                  +
                  dither_method
                  +

                  Set dither method. Default value is 0. +

                  +

                  Supported values: +

                  +
                  rectangular
                  +

                  select rectangular dither +

                  +
                  triangular
                  +

                  select triangular dither +

                  +
                  triangular_hp
                  +

                  select triangular dither with high pass +

                  +
                  lipshitz
                  +

                  select lipshitz noise shaping dither +

                  +
                  shibata
                  +

                  select shibata noise shaping dither +

                  +
                  low_shibata
                  +

                  select low shibata noise shaping dither +

                  +
                  high_shibata
                  +

                  select high shibata noise shaping dither +

                  +
                  f_weighted
                  +

                  select f-weighted noise shaping dither +

                  +
                  modified_e_weighted
                  +

                  select modified-e-weighted noise shaping dither +

                  +
                  improved_e_weighted
                  +

                  select improved-e-weighted noise shaping dither +

                  +
                  +
                  + +
                  +
                  resampler
                  +

                  Set resampling engine. Default value is swr. +

                  +

                  Supported values: +

                  +
                  swr
                  +

                  select the native SW Resampler; filter options precision and cheby are not +applicable in this case. +

                  +
                  soxr
                  +

                  select the SoX Resampler (where available); compensation, and filter options +filter_size, phase_shift, filter_type & kaiser_beta, are not applicable in this +case. +

                  +
                  + +
                  +
                  filter_size
                  +

                  For swr only, set resampling filter size, default value is 32. +

                  +
                  +
                  phase_shift
                  +

                  For swr only, set resampling phase shift, default value is 10, and must be in +the interval [0,30]. +

                  +
                  +
                  linear_interp
                  +

                  Use Linear Interpolation if set to 1, default value is 0. +

                  +
                  +
                  cutoff
                  +

                  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). +

                  +
                  +
                  precision
                  +

                  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’. +

                  +
                  +
                  cheby
                  +

                  For soxr only, selects passband rolloff none (Chebyshev) & higher-precision +approximation for ’irrational’ ratios. Default value is 0. +

                  +
                  +
                  async
                  +

                  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. +

                  +
                  +
                  first_pts
                  +

                  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. +

                  +
                  +
                  min_comp
                  +

                  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 +(‘min_comp’ = FLT_MAX). +

                  +
                  +
                  min_hard_comp
                  +

                  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 ‘min_comp’. +The default is 0.1. +

                  +
                  +
                  comp_duration
                  +

                  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. +

                  +
                  +
                  max_soft_comp
                  +

                  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. +

                  +
                  +
                  matrix_encoding
                  +

                  Select matrixed stereo encoding. +

                  +

                  It accepts the following values: +

                  +
                  none
                  +

                  select none +

                  +
                  dolby
                  +

                  select Dolby +

                  +
                  dplii
                  +

                  select Dolby Pro Logic II +

                  +
                  + +

                  Default value is none. +

                  +
                  +
                  filter_type
                  +

                  For swr only, select resampling filter type. This only affects resampling +operations. +

                  +

                  It accepts the following values: +

                  +
                  cubic
                  +

                  select cubic +

                  +
                  blackman_nuttall
                  +

                  select Blackman Nuttall Windowed Sinc +

                  +
                  kaiser
                  +

                  select Kaiser Windowed Sinc +

                  +
                  + +
                  +
                  kaiser_beta
                  +

                  For swr only, set Kaiser Window Beta value. Must be an integer in the +interval [2,16], default value is 9. +

                  +
                  +
                  output_sample_bits
                  +

                  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. +

                  +
                  +
                  + +

                  +

                  +

                  25. Scaler Options

                  + +

                  The video scaler supports the following named options. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools. For programmatic use, they can be set explicitly in the +SwsContext options or through the ‘libavutil/opt.h’ API. +

                  +
                  +
                  +

                  +

                  +
                  sws_flags
                  +

                  Set the scaler flags. This is also used to set the scaling +algorithm. Only a single algorithm should be selected. +

                  +

                  It accepts the following values: +

                  +
                  fast_bilinear
                  +

                  Select fast bilinear scaling algorithm. +

                  +
                  +
                  bilinear
                  +

                  Select bilinear scaling algorithm. +

                  +
                  +
                  bicubic
                  +

                  Select bicubic scaling algorithm. +

                  +
                  +
                  experimental
                  +

                  Select experimental scaling algorithm. +

                  +
                  +
                  neighbor
                  +

                  Select nearest neighbor rescaling algorithm. +

                  +
                  +
                  area
                  +

                  Select averaging area rescaling algorithm. +

                  +
                  +
                  bicubiclin
                  +

                  Select bicubic scaling algorithm for the luma component, bilinear for +chroma components. +

                  +
                  +
                  gauss
                  +

                  Select Gaussian rescaling algorithm. +

                  +
                  +
                  sinc
                  +

                  Select sinc rescaling algorithm. +

                  +
                  +
                  lanczos
                  +

                  Select lanczos rescaling algorithm. +

                  +
                  +
                  spline
                  +

                  Select natural bicubic spline rescaling algorithm. +

                  +
                  +
                  print_info
                  +

                  Enable printing/debug logging. +

                  +
                  +
                  accurate_rnd
                  +

                  Enable accurate rounding. +

                  +
                  +
                  full_chroma_int
                  +

                  Enable full chroma interpolation. +

                  +
                  +
                  full_chroma_inp
                  +

                  Select full chroma input. +

                  +
                  +
                  bitexact
                  +

                  Enable bitexact output. +

                  +
                  + +
                  +
                  srcw
                  +

                  Set source width. +

                  +
                  +
                  srch
                  +

                  Set source height. +

                  +
                  +
                  dstw
                  +

                  Set destination width. +

                  +
                  +
                  dsth
                  +

                  Set destination height. +

                  +
                  +
                  src_format
                  +

                  Set source pixel format (must be expressed as an integer). +

                  +
                  +
                  dst_format
                  +

                  Set destination pixel format (must be expressed as an integer). +

                  +
                  +
                  src_range
                  +

                  Select source range. +

                  +
                  +
                  dst_range
                  +

                  Select destination range. +

                  +
                  +
                  param0, param1
                  +

                  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. +

                  +
                  +
                  sws_dither
                  +

                  Set the dithering algorithm. Accepts one of the following +values. Default value is ‘auto’. +

                  +
                  +
                  auto
                  +

                  automatic choice +

                  +
                  +
                  none
                  +

                  no dithering +

                  +
                  +
                  bayer
                  +

                  bayer dither +

                  +
                  +
                  ed
                  +

                  error diffusion dither +

                  +
                  + +
                  +
                  + + +

                  26. Filtering Introduction

                  + +

                  Filtering in FFmpeg is enabled through the libavfilter library. +

                  +

                  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. +

                  +
                   
                                  [main]
                  +input --> split ---------------------> overlay --> output
                  +            |                             ^
                  +            |[tmp]                  [flip]|
                  +            +-----> crop --> vflip -------+
                  +
                  + +

                  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: +

                  +
                   
                  ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
                  +
                  + +

                  The result will be that in output the top half of the video is mirrored +onto the bottom half. +

                  +

                  Filters in the same linear chain are separated by commas, and distinct +linear chains of filters are separated by semicolons. In our example, +crop,vflip are in one linear chain, split and +overlay 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 [main] and [tmp]. +

                  +

                  The stream sent to the second output of split, labelled as +[tmp], is processed through the crop filter, which crops +away the lower half part of the video, and then vertically flipped. The +overlay filter takes in input the first unchanged output of the +split filter (which was labelled as [main]), and overlay on its +lower half the output generated by the crop,vflip filterchain. +

                  +

                  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. +

                  +

                  There exist so-called source filters that do not have an +audio/video input, and sink filters that will not have audio/video +output. +

                  + + +

                  27. graph2dot

                  + +

                  The ‘graph2dot’ program included in the FFmpeg ‘tools’ +directory can be used to parse a filtergraph description and issue a +corresponding textual representation in the dot language. +

                  +

                  Invoke the command: +

                   
                  graph2dot -h
                  +
                  + +

                  to see how to use ‘graph2dot’. +

                  +

                  You can then pass the dot description to the ‘dot’ program (from +the graphviz suite of programs) and obtain a graphical representation +of the filtergraph. +

                  +

                  For example the sequence of commands: +

                   
                  echo GRAPH_DESCRIPTION | \
                  +tools/graph2dot -o graph.tmp && \
                  +dot -Tpng graph.tmp -o graph.png && \
                  +display graph.png
                  +
                  + +

                  can be used to create and display an image representing the graph +described by the GRAPH_DESCRIPTION string. 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: +

                   
                  ffmpeg -i infile -vf scale=640:360 outfile
                  +
                  +

                  your GRAPH_DESCRIPTION string will need to be of the form: +

                   
                  nullsrc,scale=640:360,nullsink
                  +
                  +

                  you may also need to set the nullsrc parameters and add a format +filter in order to simulate a specific input file. +

                  + + +

                  28. Filtergraph description

                  + +

                  A filtergraph is a directed graph of connected filters. It can contain +cycles, and there can be multiple links between a pair of +filters. Each link has one input pad on one side connecting it to one +filter from which it takes its input, and one output pad on the other +side connecting it to the one filter accepting its output. +

                  +

                  Each filter in a filtergraph is an instance of a filter class +registered in the application, which defines the features and the +number of input and output pads of the filter. +

                  +

                  A filter with no input pads is called a "source", a filter with no +output pads is called a "sink". +

                  +

                  +

                  +

                  28.1 Filtergraph syntax

                  + +

                  A filtergraph can be represented using a textual representation, which is +recognized by the ‘-filter’/‘-vf’ and ‘-filter_complex’ +options in ffmpeg and ‘-vf’ in ffplay, and by the +avfilter_graph_parse()/avfilter_graph_parse2() function defined in +‘libavfilter/avfilter.h’. +

                  +

                  A filterchain consists of a sequence of connected filters, each one +connected to the previous one in the sequence. A filterchain is +represented by a list of ","-separated filter descriptions. +

                  +

                  A filtergraph consists of a sequence of filterchains. A sequence of +filterchains is represented by a list of ";"-separated filterchain +descriptions. +

                  +

                  A filter is represented by a string of the form: +[in_link_1]...[in_link_N]filter_name=arguments[out_link_1]...[out_link_M] +

                  +

                  filter_name is the name of the filter class of which the +described filter is an instance of, and has to be the name of one of +the filter classes registered in the program. +The name of the filter class is optionally followed by a string +"=arguments". +

                  +

                  arguments is a string which contains the parameters used to +initialize the filter instance. It may have one of the following forms: +

                    +
                  • +A ’:’-separated list of key=value pairs. + +
                  • +A ’:’-separated list of value. In this case, the keys are assumed to be +the option names in the order they are declared. E.g. the fade filter +declares three options in this order – ‘type’, ‘start_frame’ and +‘nb_frames’. Then the parameter list in:0:30 means that the value +in is assigned to the option ‘type’, 0 to +‘start_frame’ and 30 to ‘nb_frames’. + +
                  • +A ’:’-separated list of mixed direct value and long key=value +pairs. The direct value must precede the key=value pairs, and +follow the same constraints order of the previous point. The following +key=value pairs can be set in any preferred order. + +
                  + +

                  If the option value itself is a list of items (e.g. the format filter +takes a list of pixel formats), the items in the list are usually separated by +’|’. +

                  +

                  The list of arguments can be quoted using the character "’" as initial +and ending mark, and the character ’\’ for escaping the characters +within the quoted text; otherwise the argument string is considered +terminated when the next special character (belonging to the set +"[]=;,") is encountered. +

                  +

                  The name and arguments of the filter are optionally preceded and +followed by a list of link labels. +A link label allows to name a link and associate it to a filter output +or input pad. The preceding labels in_link_1 +... in_link_N, are associated to the filter input pads, +the following labels out_link_1 ... out_link_M, are +associated to the output pads. +

                  +

                  When two link labels with the same name are found in the +filtergraph, a link between the corresponding input and output pad is +created. +

                  +

                  If an output pad is not labelled, it is linked by default to the first +unlabelled input pad of the next filter in the filterchain. +For example in the filterchain: +

                   
                  nullsrc, split[L1], [L2]overlay, nullsink
                  +
                  +

                  the split filter instance has two output pads, and the overlay filter +instance two input pads. The first output pad of split is labelled +"L1", the first input pad of overlay is labelled "L2", and the second +output pad of split is linked to the second input pad of overlay, +which are both unlabelled. +

                  +

                  In a complete filterchain all the unlabelled filter input and output +pads must be connected. A filtergraph is considered valid if all the +filter input and output pads of all the filterchains are connected. +

                  +

                  Libavfilter will automatically insert scale filters where format +conversion is required. It is possible to specify swscale flags +for those automatically inserted scalers by prepending +sws_flags=flags; +to the filtergraph description. +

                  +

                  Follows a BNF description for the filtergraph syntax: +

                   
                  NAME             ::= sequence of alphanumeric characters and '_'
                  +LINKLABEL        ::= "[" NAME "]"
                  +LINKLABELS       ::= LINKLABEL [LINKLABELS]
                  +FILTER_ARGUMENTS ::= sequence of chars (eventually quoted)
                  +FILTER           ::= [LINKLABELS] NAME ["=" FILTER_ARGUMENTS] [LINKLABELS]
                  +FILTERCHAIN      ::= FILTER [,FILTERCHAIN]
                  +FILTERGRAPH      ::= [sws_flags=flags;] FILTERCHAIN [;FILTERGRAPH]
                  +
                  + + +

                  28.2 Notes on filtergraph escaping

                  + +

                  Some filter arguments require the use of special characters, typically +: to separate key=value pairs in a named options list. In this +case the user should perform a first level escaping when specifying +the filter arguments. For example, consider the following literal +string to be embedded in the drawtext filter arguments: +

                   
                  this is a 'string': may contain one, or more, special characters
                  +
                  + +

                  Since : is special for the filter arguments syntax, it needs to +be escaped, so you get: +

                   
                  text=this is a \'string\'\: may contain one, or more, special characters
                  +
                  + +

                  A second level of escaping is required when embedding the filter +arguments in a filtergraph description, in order to escape all the +filtergraph special characters. Thus the example above becomes: +

                   
                  drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
                  +
                  + +

                  Finally an additional level of escaping may be needed when writing the +filtergraph description in a shell command, which depends on the +escaping rules of the adopted shell. For example, assuming that +\ is special and needs to be escaped with another \, the +previous string will finally result in: +

                   
                  -vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
                  +
                  + +

                  Sometimes, it might be more convenient to employ quoting in place of +escaping. For example the string: +

                   
                  Caesar: tu quoque, Brute, fili mi
                  +
                  + +

                  Can be quoted in the filter arguments as: +

                   
                  text='Caesar: tu quoque, Brute, fili mi'
                  +
                  + +

                  And finally inserted in a filtergraph like: +

                   
                  drawtext=text=\'Caesar: tu quoque\, Brute\, fili mi\'
                  +
                  + +

                  See the “Quoting and escaping” section in the ffmpeg-utils manual +for more information about the escaping and quoting rules adopted by +FFmpeg. +

                  + +

                  29. Timeline editing

                  + +

                  Some filters support a generic ‘enable’ 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. +

                  +

                  The expression accepts the following values: +

                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 0 +

                  +
                  +
                  pos
                  +

                  the position in the file of the input frame, NAN if unknown +

                  +
                  + +

                  Additionally, these filters support an ‘enable’ command that can be used +to re-define the expression. +

                  +

                  Like any other filtering option, the ‘enable’ option follows the same +rules. +

                  +

                  For example, to enable a blur filter (smartblur) from 10 seconds to 3 +minutes, and a curves filter starting at 3 seconds: +

                   
                  smartblur = enable='between(t,10,3*60)',
                  +curves    = enable='gte(t,3)' : preset=cross_process
                  +
                  + + + +

                  30. Audio Filters

                  + +

                  When you configure your FFmpeg build, you can disable any of the +existing filters using --disable-filters. +The configure output will show the audio filters included in your +build. +

                  +

                  Below is a description of the currently available audio filters. +

                  + +

                  30.1 aconvert

                  + +

                  Convert the input audio format to the specified formats. +

                  +

                  This filter is deprecated. Use aformat instead. +

                  +

                  The filter accepts a string of the form: +"sample_format:channel_layout". +

                  +

                  sample_format specifies the sample format, and can be a string or the +corresponding numeric value defined in ‘libavutil/samplefmt.h’. Use ’p’ +suffix for a planar sample format. +

                  +

                  channel_layout specifies the channel layout, and can be a string +or the corresponding number value defined in ‘libavutil/channel_layout.h’. +

                  +

                  The special parameter "auto", signifies that the filter will +automatically select the output format depending on the output filter. +

                  + +

                  30.1.1 Examples

                  + +
                    +
                  • +Convert input to float, planar, stereo: +
                     
                    aconvert=fltp:stereo
                    +
                    + +
                  • +Convert input to unsigned 8-bit, automatically select out channel layout: +
                     
                    aconvert=u8:auto
                    +
                    +
                  + + +

                  30.2 adelay

                  + +

                  Delay one or more audio channels. +

                  +

                  Samples in delayed channel are filled with silence. +

                  +

                  The filter accepts the following option: +

                  +
                  +
                  delays
                  +

                  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. +

                  +
                  + + +

                  30.2.1 Examples

                  + +
                    +
                  • +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. +
                     
                    adelay=1500:0:500
                    +
                    +
                  + + +

                  30.3 aecho

                  + +

                  Apply echoing to the input audio. +

                  +

                  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 delay, and the +loudness of the reflected signal is the decay. +Multiple echoes can have different delays and decays. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  in_gain
                  +

                  Set input gain of reflected signal. Default is 0.6. +

                  +
                  +
                  out_gain
                  +

                  Set output gain of reflected signal. Default is 0.3. +

                  +
                  +
                  delays
                  +

                  Set list of time intervals in milliseconds between original signal and reflections +separated by ’|’. Allowed range for each delay is (0 - 90000.0]. +Default is 1000. +

                  +
                  +
                  decays
                  +

                  Set list of loudnesses of reflected signals separated by ’|’. +Allowed range for each decay is (0 - 1.0]. +Default is 0.5. +

                  +
                  + + +

                  30.3.1 Examples

                  + +
                    +
                  • +Make it sound as if there are twice as many instruments as are actually playing: +
                     
                    aecho=0.8:0.88:60:0.4
                    +
                    + +
                  • +If delay is very short, then it sound like a (metallic) robot playing music: +
                     
                    aecho=0.8:0.88:6:0.4
                    +
                    + +
                  • +A longer delay will sound like an open air concert in the mountains: +
                     
                    aecho=0.8:0.9:1000:0.3
                    +
                    + +
                  • +Same as above but with one more mountain: +
                     
                    aecho=0.8:0.9:1000|1800:0.3|0.25
                    +
                    +
                  + + +

                  30.4 afade

                  + +

                  Apply fade-in/out effect to input audio. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  type, t
                  +

                  Specify the effect type, can be either in for fade-in, or +out for a fade-out effect. Default is in. +

                  +
                  +
                  start_sample, ss
                  +

                  Specify the number of the start sample for starting to apply the fade +effect. Default is 0. +

                  +
                  +
                  nb_samples, ns
                  +

                  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. +

                  +
                  +
                  start_time, st
                  +

                  Specify time for starting to apply the fade effect. Default is 0. +The accepted syntax is: +

                   
                  [-]HH[:MM[:SS[.m...]]]
                  +[-]S+[.m...]
                  +
                  +

                  See also the function av_parse_time(). +If set this option is used instead of start_sample one. +

                  +
                  +
                  duration, d
                  +

                  Specify the duration for which the fade effect has to last. Default is 0. +The accepted syntax is: +

                   
                  [-]HH[:MM[:SS[.m...]]]
                  +[-]S+[.m...]
                  +
                  +

                  See also the function av_parse_time(). +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 nb_samples one. +

                  +
                  +
                  curve
                  +

                  Set curve for fade transition. +

                  +

                  It accepts the following values: +

                  +
                  tri
                  +

                  select triangular, linear slope (default) +

                  +
                  qsin
                  +

                  select quarter of sine wave +

                  +
                  hsin
                  +

                  select half of sine wave +

                  +
                  esin
                  +

                  select exponential sine wave +

                  +
                  log
                  +

                  select logarithmic +

                  +
                  par
                  +

                  select inverted parabola +

                  +
                  qua
                  +

                  select quadratic +

                  +
                  cub
                  +

                  select cubic +

                  +
                  squ
                  +

                  select square root +

                  +
                  cbr
                  +

                  select cubic root +

                  +
                  +
                  +
                  + + +

                  30.4.1 Examples

                  + +
                    +
                  • +Fade in first 15 seconds of audio: +
                     
                    afade=t=in:ss=0:d=15
                    +
                    + +
                  • +Fade out last 25 seconds of a 900 seconds audio: +
                     
                    afade=t=out:st=875:d=25
                    +
                    +
                  + +

                  +

                  +

                  30.5 aformat

                  + +

                  Set output format constraints for the input audio. The framework will +negotiate the most appropriate format to minimize conversions. +

                  +

                  The filter accepts the following named parameters: +

                  +
                  sample_fmts
                  +

                  A ’|’-separated list of requested sample formats. +

                  +
                  +
                  sample_rates
                  +

                  A ’|’-separated list of requested sample rates. +

                  +
                  +
                  channel_layouts
                  +

                  A ’|’-separated list of requested channel layouts. +

                  +

                  See (ffmpeg-utils)channel layout syntax +for the required syntax. +

                  +
                  + +

                  If a parameter is omitted, all values are allowed. +

                  +

                  For example to force the output to either unsigned 8-bit or signed 16-bit stereo: +

                   
                  aformat=sample_fmts=u8|s16:channel_layouts=stereo
                  +
                  + + +

                  30.6 allpass

                  + +

                  Apply a two-pole all-pass filter with central frequency (in Hz) +frequency, and filter-width width. +An all-pass filter changes the audio’s frequency to phase relationship +without changing its frequency to amplitude relationship. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set frequency in Hz. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Specify the band-width of a filter in width_type units. +

                  +
                  + + +

                  30.7 amerge

                  + +

                  Merge two or more audio streams into a single multi-channel stream. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  inputs
                  +

                  Set the number of inputs. Default is 2. +

                  +
                  +
                  + +

                  If the channel layouts of the inputs are disjoint, and therefore compatible, +the channel layout of the output will be set accordingly and the channels +will be reordered as necessary. If the channel layouts of the inputs are not +disjoint, the output will have all the channels of the first input then all +the channels of the second input, in that order, and the channel layout of +the output will be the default value corresponding to the total number of +channels. +

                  +

                  For example, if the first input is in 2.1 (FL+FR+LF) and the second input +is FC+BL+BR, then the output will be in 5.1, with the channels in the +following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the +first input, b1 is the first channel of the second input). +

                  +

                  On the other hand, if both input are in stereo, the output channels will be +in the default order: a1, a2, b1, b2, and the channel layout will be +arbitrarily set to 4.0, which may or may not be the expected value. +

                  +

                  All inputs must have the same sample rate, and format. +

                  +

                  If inputs do not have the same duration, the output will stop with the +shortest. +

                  + +

                  30.7.1 Examples

                  + +
                    +
                  • +Merge two mono files into a stereo stream: +
                     
                    amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
                    +
                    + +
                  • +Multiple merges assuming 1 video stream and 6 audio streams in ‘input.mkv’: +
                     
                    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
                    +
                    +
                  + + +

                  30.8 amix

                  + +

                  Mixes multiple audio inputs into a single output. +

                  +

                  For example +

                   
                  ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
                  +
                  +

                  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. +

                  +

                  The filter accepts the following named parameters: +

                  +
                  inputs
                  +

                  Number of inputs. If unspecified, it defaults to 2. +

                  +
                  +
                  duration
                  +

                  How to determine the end-of-stream. +

                  +
                  longest
                  +

                  Duration of longest input. (default) +

                  +
                  +
                  shortest
                  +

                  Duration of shortest input. +

                  +
                  +
                  first
                  +

                  Duration of first input. +

                  +
                  +
                  + +
                  +
                  dropout_transition
                  +

                  Transition time, in seconds, for volume renormalization when an input +stream ends. The default value is 2 seconds. +

                  +
                  +
                  + + +

                  30.9 anull

                  + +

                  Pass the audio source unchanged to the output. +

                  + +

                  30.10 apad

                  + +

                  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. +

                  + +

                  30.11 aphaser

                  +

                  Add a phasing effect to the input audio. +

                  +

                  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. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  in_gain
                  +

                  Set input gain. Default is 0.4. +

                  +
                  +
                  out_gain
                  +

                  Set output gain. Default is 0.74 +

                  +
                  +
                  delay
                  +

                  Set delay in milliseconds. Default is 3.0. +

                  +
                  +
                  decay
                  +

                  Set decay. Default is 0.4. +

                  +
                  +
                  speed
                  +

                  Set modulation speed in Hz. Default is 0.5. +

                  +
                  +
                  type
                  +

                  Set modulation type. Default is triangular. +

                  +

                  It accepts the following values: +

                  +
                  triangular, t
                  +
                  sinusoidal, s
                  +
                  +
                  +
                  + +

                  +

                  +

                  30.12 aresample

                  + +

                  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. +

                  +

                  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. +

                  +

                  The filter accepts the syntax +[sample_rate:]resampler_options, where sample_rate +expresses a sample rate and resampler_options is a list of +key=value pairs, separated by ":". See the +ffmpeg-resampler manual for the complete list of supported options. +

                  + +

                  30.12.1 Examples

                  + +
                    +
                  • +Resample the input audio to 44100Hz: +
                     
                    aresample=44100
                    +
                    + +
                  • +Stretch/squeeze samples to the given timestamps, with a maximum of 1000 +samples per second compensation: +
                     
                    aresample=async=1000
                    +
                    +
                  + + +

                  30.13 asetnsamples

                  + +

                  Set the number of samples per each output audio frame. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  nb_out_samples, n
                  +

                  Set the number of frames per each output audio frame. The number is +intended as the number of samples per each channel. +Default value is 1024. +

                  +
                  +
                  pad, 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. +

                  +
                  + +

                  For example, to set the number of per-frame samples to 1234 and +disable padding for the last frame, use: +

                   
                  asetnsamples=n=1234:p=0
                  +
                  + + +

                  30.14 asetrate

                  + +

                  Set the sample rate without altering the PCM data. +This will result in a change of speed and pitch. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  sample_rate, r
                  +

                  Set the output sample rate. Default is 44100 Hz. +

                  +
                  + + +

                  30.15 ashowinfo

                  + +

                  Show a line containing various information for each input audio frame. +The input audio is not modified. +

                  +

                  The shown line contains a sequence of key/value pairs of the form +key:value. +

                  +

                  A description of each shown parameter follows: +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 0 +

                  +
                  +
                  pts
                  +

                  Presentation timestamp of the input frame, in time base units; the time base +depends on the filter input pad, and is usually 1/sample_rate. +

                  +
                  +
                  pts_time
                  +

                  presentation timestamp of the input frame in seconds +

                  +
                  +
                  pos
                  +

                  position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic audio) +

                  +
                  +
                  fmt
                  +

                  sample format +

                  +
                  +
                  chlayout
                  +

                  channel layout +

                  +
                  +
                  rate
                  +

                  sample rate for the audio frame +

                  +
                  +
                  nb_samples
                  +

                  number of samples (per channel) in the frame +

                  +
                  +
                  checksum
                  +

                  Adler-32 checksum (printed in hexadecimal) of the audio data. For planar audio +the data is treated as if all the planes were concatenated. +

                  +
                  +
                  plane_checksums
                  +

                  A list of Adler-32 checksums for each data plane. +

                  +
                  + + +

                  30.16 astats

                  + +

                  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. +

                  +

                  The filter accepts the following option: +

                  +
                  length
                  +

                  Short window length in seconds, used for peak and trough RMS measurement. +Default is 0.05 (50 miliseconds). Allowed range is [0.1 - 10]. +

                  +
                  + +

                  A description of each shown parameter follows: +

                  +
                  +
                  DC offset
                  +

                  Mean amplitude displacement from zero. +

                  +
                  +
                  Min level
                  +

                  Minimal sample level. +

                  +
                  +
                  Max level
                  +

                  Maximal sample level. +

                  +
                  +
                  Peak level dB
                  +
                  RMS level dB
                  +

                  Standard peak and RMS level measured in dBFS. +

                  +
                  +
                  RMS peak dB
                  +
                  RMS trough dB
                  +

                  Peak and trough values for RMS level measured over a short window. +

                  +
                  +
                  Crest factor
                  +

                  Standard ratio of peak to RMS level (note: not in dB). +

                  +
                  +
                  Flat factor
                  +

                  Flatness (i.e. consecutive samples with the same value) of the signal at its peak levels +(i.e. either Min level or Max level). +

                  +
                  +
                  Peak count
                  +

                  Number of occasions (not the number of samples) that the signal attained either +Min level or Max level. +

                  +
                  + + +

                  30.17 astreamsync

                  + +

                  Forward two audio streams and control the order the buffers are forwarded. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  expr, e
                  +

                  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: +

                  +
                  +
                  b1 b2
                  +

                  number of buffers forwarded so far on each stream +

                  +
                  s1 s2
                  +

                  number of samples forwarded so far on each stream +

                  +
                  t1 t2
                  +

                  current timestamp of each stream +

                  +
                  + +

                  The default value is t1-t2, which means to always forward the stream +that has a smaller timestamp. +

                  +
                  + + +

                  30.17.1 Examples

                  + +

                  Stress-test amerge by randomly sending buffers on the wrong +input, while avoiding too much of a desynchronization: +

                   
                  amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
                  +[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
                  +[a2] [b2] amerge
                  +
                  + + +

                  30.18 asyncts

                  + +

                  Synchronize audio data with timestamps by squeezing/stretching it and/or +dropping samples/adding silence when needed. +

                  +

                  This filter is not built by default, please use aresample to do squeezing/stretching. +

                  +

                  The filter accepts the following named parameters: +

                  +
                  compensate
                  +

                  Enable stretching/squeezing the data to make it match the timestamps. Disabled +by default. When disabled, time gaps are covered with silence. +

                  +
                  +
                  min_delta
                  +

                  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. +

                  +
                  +
                  max_comp
                  +

                  Maximum compensation in samples per second. Relevant only with compensate=1. +Default value 500. +

                  +
                  +
                  first_pts
                  +

                  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. +

                  +
                  +
                  + + +

                  30.19 atempo

                  + +

                  Adjust audio tempo. +

                  +

                  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. +

                  + +

                  30.19.1 Examples

                  + +
                    +
                  • +Slow down audio to 80% tempo: +
                     
                    atempo=0.8
                    +
                    + +
                  • +To speed up audio to 125% tempo: +
                     
                    atempo=1.25
                    +
                    +
                  + + +

                  30.20 atrim

                  + +

                  Trim the input so that the output contains one continuous subpart of the input. +

                  +

                  This filter accepts the following options: +

                  +
                  start
                  +

                  Specify time of the start of the kept section, i.e. the audio sample +with the timestamp start will be the first sample in the output. +

                  +
                  +
                  end
                  +

                  Specify time of the first audio sample that will be dropped, i.e. the +audio sample immediately preceding the one with the timestamp end will be +the last sample in the output. +

                  +
                  +
                  start_pts
                  +

                  Same as start, except this option sets the start timestamp in samples +instead of seconds. +

                  +
                  +
                  end_pts
                  +

                  Same as end, except this option sets the end timestamp in samples instead +of seconds. +

                  +
                  +
                  duration
                  +

                  Specify maximum duration of the output. +

                  +
                  +
                  start_sample
                  +

                  Number of the first sample that should be passed to output. +

                  +
                  +
                  end_sample
                  +

                  Number of the first sample that should be dropped. +

                  +
                  + +

                  start’, ‘end’, ‘duration’ are expressed as time +duration specifications, check the "Time duration" section in the +ffmpeg-utils manual. +

                  +

                  Note that the first two sets of the start/end options and the ‘duration’ +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. +

                  +

                  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. +

                  +

                  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. +

                  +

                  Examples: +

                    +
                  • +drop everything except the second minute of input +
                     
                    ffmpeg -i INPUT -af atrim=60:120
                    +
                    + +
                  • +keep only the first 1000 samples +
                     
                    ffmpeg -i INPUT -af atrim=end_sample=1000
                    +
                    + +
                  + + +

                  30.21 bandpass

                  + +

                  Apply a two-pole Butterworth band-pass filter with central +frequency frequency, and (3dB-point) band-width width. +The csg 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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set the filter’s central frequency. Default is 3000. +

                  +
                  +
                  csg
                  +

                  Constant skirt gain if set to 1. Defaults to 0. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Specify the band-width of a filter in width_type units. +

                  +
                  + + +

                  30.22 bandreject

                  + +

                  Apply a two-pole Butterworth band-reject filter with central +frequency frequency, and (3dB-point) band-width width. +The filter roll off at 6dB per octave (20dB per decade). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set the filter’s central frequency. Default is 3000. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Specify the band-width of a filter in width_type units. +

                  +
                  + + +

                  30.23 bass

                  + +

                  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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  gain, g
                  +

                  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. +

                  +
                  +
                  frequency, f
                  +

                  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 100 Hz. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Determine how steep is the filter’s shelf transition. +

                  +
                  + + +

                  30.24 biquad

                  + +

                  Apply a biquad IIR filter with the given coefficients. +Where b0, b1, b2 and a0, a1, a2 +are the numerator and denominator coefficients respectively. +

                  + +

                  30.25 channelmap

                  + +

                  Remap input channels to new locations. +

                  +

                  This filter accepts the following named parameters: +

                  +
                  channel_layout
                  +

                  Channel layout of the output stream. +

                  +
                  +
                  map
                  +

                  Map channels from input to output. The argument is a ’|’-separated list of +mappings, each in the in_channel-out_channel or +in_channel form. in_channel can be either the name of the input +channel (e.g. FL for front left) or its index in the input channel layout. +out_channel is the name of the output channel or its index in the output +channel layout. If out_channel is not given then it is implicitly an +index, starting with zero and increasing by one for each mapping. +

                  +
                  + +

                  If no mapping is present, the filter will implicitly map input channels to +output channels preserving index. +

                  +

                  For example, assuming a 5.1+downmix input MOV file +

                   
                  ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
                  +
                  +

                  will create an output WAV file tagged as stereo from the downmix channels of +the input. +

                  +

                  To fix a 5.1 WAV improperly encoded in AAC’s native channel order +

                   
                  ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav
                  +
                  + + +

                  30.26 channelsplit

                  + +

                  Split each channel in input audio stream into a separate output stream. +

                  +

                  This filter accepts the following named parameters: +

                  +
                  channel_layout
                  +

                  Channel layout of the input stream. Default is "stereo". +

                  +
                  + +

                  For example, assuming a stereo input MP3 file +

                   
                  ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
                  +
                  +

                  will create an output Matroska file with two audio streams, one containing only +the left channel and the other the right channel. +

                  +

                  To split a 5.1 WAV file into per-channel files +

                   
                  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
                  +
                  + + +

                  30.27 compand

                  + +

                  Compress or expand audio dynamic range. +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  attacks
                  +
                  decays
                  +

                  Set list of times in seconds for each channel over which the instantaneous +level of the input signal is averaged to determine its volume. +‘attacks’ refers to increase of volume and ‘decays’ 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. +Typical value for attack is 0.3 seconds and for decay 0.8 +seconds. +

                  +
                  +
                  points
                  +

                  Set list of points for transfer function, specified in dB relative to maximum +possible signal amplitude. +Each key points list need to be defined using the following syntax: +x0/y0 x1/y1 x2/y2 .... +

                  +

                  The input values must be in strictly increasing order but the transfer +function does not have to be monotonically rising. +The point 0/0 is assumed but may be overridden (by 0/out-dBn). +Typical values for the transfer function are -70/-70 -60/-20. +

                  +
                  +
                  soft-knee
                  +

                  Set amount for which the points at where adjacent line segments on the +transfer function meet will be rounded. Defaults is 0.01. +

                  +
                  +
                  gain
                  +

                  Set additional gain in dB to be applied at all points on the transfer function +and allows easy adjustment of the overall gain. +Default is 0. +

                  +
                  +
                  volume
                  +

                  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. Default is 0. +

                  +
                  +
                  delay
                  +

                  Set delay in seconds. Default is 0. The input audio +is analysed 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. +

                  +
                  + + +

                  30.27.1 Examples

                  +
                    +
                  • +Make music with both quiet and loud passages suitable for listening +in a noisy environment: +
                     
                    compand=.3 .3:1 1:-90/-60 -60/-40 -40/-30 -20/-20:6:0:-90:0.2
                    +
                    + +
                  • +Noise-gate for when the noise is at a lower level than the signal: +
                     
                    compand=.1 .1:.2 .2:-900/-900 -50.1/-900 -50/-50:.01:0:-90:.1
                    +
                    + +
                  • +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): +
                     
                    compand=.1 .1:.1 .1:-45.1/-45.1 -45/-900 0/-900:.01:45:-90:.1
                    +
                    +
                  + + +

                  30.28 earwax

                  + +

                  Make audio easier to listen to on headphones. +

                  +

                  This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio +so that when listened to on headphones the stereo image is moved from +inside your head (standard for headphones) to outside and in front of +the listener (standard for speakers). +

                  +

                  Ported from SoX. +

                  + +

                  30.29 equalizer

                  + +

                  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. +

                  +

                  In order to produce complex equalisation curves, this filter can +be given several times, each with a different central frequency. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set the filter’s central frequency in Hz. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Specify the band-width of a filter in width_type units. +

                  +
                  +
                  gain, g
                  +

                  Set the required gain or attenuation in dB. +Beware of clipping when using a positive gain. +

                  +
                  + + +

                  30.30 highpass

                  + +

                  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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set frequency in Hz. Default is 3000. +

                  +
                  +
                  poles, p
                  +

                  Set number of poles. Default is 2. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  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. +

                  +
                  + + +

                  30.31 join

                  + +

                  Join multiple input streams into one multi-channel stream. +

                  +

                  The filter accepts the following named parameters: +

                  +
                  inputs
                  +

                  Number of input streams. Defaults to 2. +

                  +
                  +
                  channel_layout
                  +

                  Desired output channel layout. Defaults to stereo. +

                  +
                  +
                  map
                  +

                  Map channels from inputs to output. The argument is a ’|’-separated list of +mappings, each in the input_idx.in_channel-out_channel +form. input_idx is the 0-based index of the input stream. in_channel +can be either the name of the input channel (e.g. FL for front left) or its +index in the specified input stream. out_channel is the name of the output +channel. +

                  +
                  + +

                  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. +

                  +

                  E.g. to join 3 inputs (with properly set channel layouts) +

                   
                  ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
                  +
                  + +

                  To build a 5.1 output from 6 single-channel streams: +

                   
                  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
                  +
                  + + +

                  30.32 ladspa

                  + +

                  Load a LADSPA (Linux Audio Developer’s Simple Plugin API) plugin. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-ladspa. +

                  +
                  +
                  file, f
                  +

                  Specifies the name of LADSPA plugin library to load. If the environment +variable LADSPA_PATH is defined, the LADSPA plugin is searched in +each one of the directories specified by the colon separated list in +LADSPA_PATH, otherwise in the standard LADSPA paths, which are in +this order: ‘HOME/.ladspa/lib/’, ‘/usr/local/lib/ladspa/’, +‘/usr/lib/ladspa/’. +

                  +
                  +
                  plugin, 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. +

                  +
                  +
                  controls, c
                  +

                  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=value0|c1=value1|c2=value2|..., where +valuei is the value set on the i-th control. +If ‘controls’ is set to help, all available controls and +their valid ranges are printed. +

                  +
                  +
                  sample_rate, s
                  +

                  Specify the sample rate, default to 44100. Only used if plugin have +zero inputs. +

                  +
                  +
                  nb_samples, n
                  +

                  Set the number of samples per channel per each output frame, default +is 1024. Only used if plugin have zero inputs. +

                  +
                  +
                  duration, d
                  +

                  Set the minimum duration of the sourced audio. See the function +av_parse_time() 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. +

                  +
                  +
                  + + +

                  30.32.1 Examples

                  + +
                    +
                  • +List all available plugins within amp (LADSPA example plugin) library: +
                     
                    ladspa=file=amp
                    +
                    + +
                  • +List all available controls and their valid ranges for vcf_notch +plugin from VCF library: +
                     
                    ladspa=f=vcf:p=vcf_notch:c=help
                    +
                    + +
                  • +Simulate low quality audio equipment using Computer Music Toolkit (CMT) +plugin library: +
                     
                    ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
                    +
                    + +
                  • +Add reverberation to the audio using TAP-plugins +(Tom’s Audio Processing plugins): +
                     
                    ladspa=file=tap_reverb:tap_reverb
                    +
                    + +
                  • +Generate white noise, with 0.2 amplitude: +
                     
                    ladspa=file=cmt:noise_source_white:c=c0=.2
                    +
                    + +
                  • +Generate 20 bpm clicks using plugin C* Click - Metronome from the +C* Audio Plugin Suite (CAPS) library: +
                     
                    ladspa=file=caps:Click:c=c1=20'
                    +
                    + +
                  • +Apply C* Eq10X2 - Stereo 10-band equaliser effect: +
                     
                    ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
                    +
                    +
                  + + +

                  30.32.2 Commands

                  + +

                  This filter supports the following commands: +

                  +
                  cN
                  +

                  Modify the N-th control value. +

                  +

                  If the specified value is not valid, it is ignored and prior one is kept. +

                  +
                  + + +

                  30.33 lowpass

                  + +

                  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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set frequency in Hz. Default is 500. +

                  +
                  +
                  poles, p
                  +

                  Set number of poles. Default is 2. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  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. +

                  +
                  + + +

                  30.34 pan

                  + +

                  Mix channels with specific gain levels. The filter accepts the output +channel layout followed by a set of channels definitions. +

                  +

                  This filter is also designed to remap efficiently the channels of an audio +stream. +

                  +

                  The filter accepts parameters of the form: +"l:outdef:outdef:..." +

                  +
                  +
                  l
                  +

                  output channel layout or number of channels +

                  +
                  +
                  outdef
                  +

                  output channel specification, of the form: +"out_name=[gain*]in_name[+[gain*]in_name...]" +

                  +
                  +
                  out_name
                  +

                  output channel to define, either a channel name (FL, FR, etc.) or a channel +number (c0, c1, etc.) +

                  +
                  +
                  gain
                  +

                  multiplicative coefficient for the channel, 1 leaving the volume unchanged +

                  +
                  +
                  in_name
                  +

                  input channel to use, see out_name for details; it is not possible to mix +named and numbered input channels +

                  +
                  + +

                  If the ‘=’ in a channel specification is replaced by ‘<’, then the gains for +that specification will be renormalized so that the total is 1, thus +avoiding clipping noise. +

                  + +

                  30.34.1 Mixing examples

                  + +

                  For example, if you want to down-mix from stereo to mono, but with a bigger +factor for the left channel: +

                   
                  pan=1:c0=0.9*c0+0.1*c1
                  +
                  + +

                  A customized down-mix to stereo that works automatically for 3-, 4-, 5- and +7-channels surround: +

                   
                  pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
                  +
                  + +

                  Note that ffmpeg integrates a default down-mix (and up-mix) system +that should be preferred (see "-ac" option) unless you have very specific +needs. +

                  + +

                  30.34.2 Remapping examples

                  + +

                  The channel remapping will be effective if, and only if: +

                  +
                    +
                  • gain coefficients are zeroes or ones, +
                  • only one input per channel output, +
                  + +

                  If all these conditions are satisfied, the filter will notify the user ("Pure +channel mapping detected"), and use an optimized and lossless method to do the +remapping. +

                  +

                  For example, if you have a 5.1 source and want a stereo audio stream by +dropping the extra channels: +

                   
                  pan="stereo: c0=FL : c1=FR"
                  +
                  + +

                  Given the same source, you can also switch front left and front right channels +and keep the input channel layout: +

                   
                  pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
                  +
                  + +

                  If the input is a stereo audio stream, you can mute the front left channel (and +still keep the stereo channel layout) with: +

                   
                  pan="stereo:c1=c1"
                  +
                  + +

                  Still with a stereo audio stream input, you can copy the right channel in both +front left and right: +

                   
                  pan="stereo: c0=FR : c1=FR"
                  +
                  + + +

                  30.35 replaygain

                  + +

                  ReplayGain scanner filter. This filter takes an audio stream as an input and +outputs it unchanged. +At end of filtering it displays track_gain and track_peak. +

                  + +

                  30.36 resample

                  + +

                  Convert the audio sample format, sample rate and channel layout. This filter is +not meant to be used directly. +

                  + +

                  30.37 silencedetect

                  + +

                  Detect silence in an audio stream. +

                  +

                  This filter logs a message when it detects that the input audio volume is less +or equal to a noise tolerance value for a duration greater or equal to the +minimum detected noise duration. +

                  +

                  The printed times and duration are expressed in seconds. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  duration, d
                  +

                  Set silence duration until notification (default is 2 seconds). +

                  +
                  +
                  noise, n
                  +

                  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. +

                  +
                  + + +

                  30.37.1 Examples

                  + +
                    +
                  • +Detect 5 seconds of silence with -50dB noise tolerance: +
                     
                    silencedetect=n=-50dB:d=5
                    +
                    + +
                  • +Complete example with ffmpeg to detect silence with 0.0001 noise +tolerance in ‘silence.mp3’: +
                     
                    ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
                    +
                    +
                  + + +

                  30.38 treble

                  + +

                  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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  gain, g
                  +

                  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. +

                  +
                  +
                  frequency, f
                  +

                  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 3000 Hz. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Determine how steep is the filter’s shelf transition. +

                  +
                  + + +

                  30.39 volume

                  + +

                  Adjust the input audio volume. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  volume
                  +

                  Expresses how the audio volume will be increased or decreased. +

                  +

                  Output values are clipped to the maximum value. +

                  +

                  The output audio volume is given by the relation: +

                   
                  output_volume = volume * input_volume
                  +
                  + +

                  Default value for volume is 1.0. +

                  +
                  +
                  precision
                  +

                  Set the mathematical precision. +

                  +

                  This determines which input sample formats will be allowed, which affects the +precision of the volume scaling. +

                  +
                  +
                  fixed
                  +

                  8-bit fixed-point; limits input sample format to U8, S16, and S32. +

                  +
                  float
                  +

                  32-bit floating-point; limits input sample format to FLT. (default) +

                  +
                  double
                  +

                  64-bit floating-point; limits input sample format to DBL. +

                  +
                  +
                  +
                  + + +

                  30.39.1 Examples

                  + +
                    +
                  • +Halve the input audio volume: +
                     
                    volume=volume=0.5
                    +volume=volume=1/2
                    +volume=volume=-6.0206dB
                    +
                    + +

                    In all the above example the named key for ‘volume’ can be +omitted, for example like in: +

                     
                    volume=0.5
                    +
                    + +
                  • +Increase input audio power by 6 decibels using fixed-point precision: +
                     
                    volume=volume=6dB:precision=fixed
                    +
                    +
                  + + +

                  30.40 volumedetect

                  + +

                  Detect the volume of the input video. +

                  +

                  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. +

                  +

                  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). +

                  +

                  All volumes are in decibels relative to the maximum PCM value. +

                  + +

                  30.40.1 Examples

                  + +

                  Here is an excerpt of the output: +

                   
                  [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
                  +
                  + +

                  It means that: +

                    +
                  • +The mean square energy is approximately -27 dB, or 10^-2.7. +
                  • +The largest sample is at -4 dB, or more precisely between -4 dB and -5 dB. +
                  • +There are 6 samples at -4 dB, 62 at -5 dB, 286 at -6 dB, etc. +
                  + +

                  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. +

                  + + +

                  31. Audio Sources

                  + +

                  Below is a description of the currently available audio sources. +

                  + +

                  31.1 abuffer

                  + +

                  Buffer audio frames, and make them available to the filter chain. +

                  +

                  This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/asrc_abuffer.h’. +

                  +

                  It accepts the following named parameters: +

                  +
                  +
                  time_base
                  +

                  Timebase which will be used for timestamps of submitted frames. It must be +either a floating-point number or in numerator/denominator form. +

                  +
                  +
                  sample_rate
                  +

                  The sample rate of the incoming audio buffers. +

                  +
                  +
                  sample_fmt
                  +

                  The sample format of the incoming audio buffers. +Either a sample format name or its corresponging integer representation from +the enum AVSampleFormat in ‘libavutil/samplefmt.h’ +

                  +
                  +
                  channel_layout
                  +

                  The channel layout of the incoming audio buffers. +Either a channel layout name from channel_layout_map in +‘libavutil/channel_layout.c’ or its corresponding integer representation +from the AV_CH_LAYOUT_* macros in ‘libavutil/channel_layout.h’ +

                  +
                  +
                  channels
                  +

                  The number of channels of the incoming audio buffers. +If both channels and channel_layout are specified, then they +must be consistent. +

                  +
                  +
                  + + +

                  31.1.1 Examples

                  + +
                   
                  abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
                  +
                  + +

                  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: +

                   
                  abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
                  +
                  + + +

                  31.2 aevalsrc

                  + +

                  Generate an audio signal specified by an expression. +

                  +

                  This source accepts in input one or more expressions (one for each +channel), which are evaluated and used to generate a corresponding +audio signal. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  exprs
                  +

                  Set the ’|’-separated expressions list for each separate channel. In case the +‘channel_layout’ option is not specified, the selected channel layout +depends on the number of provided expressions. +

                  +
                  +
                  channel_layout, c
                  +

                  Set the channel layout. The number of channels in the specified layout +must be equal to the number of specified expressions. +

                  +
                  +
                  duration, d
                  +

                  Set the minimum duration of the sourced audio. See the function +av_parse_time() for the accepted format. +Note that the resulting duration may be greater than the specified +duration, as the generated audio is always cut at the end of a +complete frame. +

                  +

                  If not specified, or the expressed duration is negative, the audio is +supposed to be generated forever. +

                  +
                  +
                  nb_samples, n
                  +

                  Set the number of samples per channel per each output frame, +default to 1024. +

                  +
                  +
                  sample_rate, s
                  +

                  Specify the sample rate, default to 44100. +

                  +
                  + +

                  Each expression in exprs can contain the following constants: +

                  +
                  +
                  n
                  +

                  number of the evaluated sample, starting from 0 +

                  +
                  +
                  t
                  +

                  time of the evaluated sample expressed in seconds, starting from 0 +

                  +
                  +
                  s
                  +

                  sample rate +

                  +
                  +
                  + + +

                  31.2.1 Examples

                  + +
                    +
                  • +Generate silence: +
                     
                    aevalsrc=0
                    +
                    + +
                  • +Generate a sin signal with frequency of 440 Hz, set sample rate to +8000 Hz: +
                     
                    aevalsrc="sin(440*2*PI*t):s=8000"
                    +
                    + +
                  • +Generate a two channels signal, specify the channel layout (Front +Center + Back Center) explicitly: +
                     
                    aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
                    +
                    + +
                  • +Generate white noise: +
                     
                    aevalsrc="-2+random(0)"
                    +
                    + +
                  • +Generate an amplitude modulated signal: +
                     
                    aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
                    +
                    + +
                  • +Generate 2.5 Hz binaural beats on a 360 Hz carrier: +
                     
                    aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
                    +
                    + +
                  + + +

                  31.3 anullsrc

                  + +

                  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). +

                  +

                  This source accepts the following options: +

                  +
                  +
                  channel_layout, cl
                  +
                  +

                  Specify the channel layout, and can be either an integer or a string +representing a channel layout. The default value of channel_layout +is "stereo". +

                  +

                  Check the channel_layout_map definition in +‘libavutil/channel_layout.c’ for the mapping between strings and +channel layout values. +

                  +
                  +
                  sample_rate, r
                  +

                  Specify the sample rate, and defaults to 44100. +

                  +
                  +
                  nb_samples, n
                  +

                  Set the number of samples per requested frames. +

                  +
                  +
                  + + +

                  31.3.1 Examples

                  + +
                    +
                  • +Set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO. +
                     
                    anullsrc=r=48000:cl=4
                    +
                    + +
                  • +Do the same operation with a more obvious syntax: +
                     
                    anullsrc=r=48000:cl=mono
                    +
                    +
                  + +

                  All the parameters need to be explicitly defined. +

                  + +

                  31.4 flite

                  + +

                  Synthesize a voice utterance using the libflite library. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libflite. +

                  +

                  Note that the flite library is not thread-safe. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  list_voices
                  +

                  If set to 1, list the names of the available voices and exit +immediately. Default value is 0. +

                  +
                  +
                  nb_samples, n
                  +

                  Set the maximum number of samples per frame. Default value is 512. +

                  +
                  +
                  textfile
                  +

                  Set the filename containing the text to speak. +

                  +
                  +
                  text
                  +

                  Set the text to speak. +

                  +
                  +
                  voice, v
                  +

                  Set the voice to use for the speech synthesis. Default value is +kal. See also the list_voices option. +

                  +
                  + + +

                  31.4.1 Examples

                  + +
                    +
                  • +Read from file ‘speech.txt’, and synthetize the text using the +standard flite voice: +
                     
                    flite=textfile=speech.txt
                    +
                    + +
                  • +Read the specified text selecting the slt voice: +
                     
                    flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
                    +
                    + +
                  • +Input text to ffmpeg: +
                     
                    ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
                    +
                    + +
                  • +Make ‘ffplay’ speak the specified text, using flite and +the lavfi device: +
                     
                    ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
                    +
                    +
                  + +

                  For more information about libflite, check: +http://www.speech.cs.cmu.edu/flite/ +

                  + +

                  31.5 sine

                  + +

                  Generate an audio signal made of a sine wave with amplitude 1/8. +

                  +

                  The audio signal is bit-exact. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set the carrier frequency. Default is 440 Hz. +

                  +
                  +
                  beep_factor, b
                  +

                  Enable a periodic beep every second with frequency beep_factor times +the carrier frequency. Default is 0, meaning the beep is disabled. +

                  +
                  +
                  sample_rate, r
                  +

                  Specify the sample rate, default is 44100. +

                  +
                  +
                  duration, d
                  +

                  Specify the duration of the generated audio stream. +

                  +
                  +
                  samples_per_frame
                  +

                  Set the number of samples per output frame, default is 1024. +

                  +
                  + + +

                  31.5.1 Examples

                  + +
                    +
                  • +Generate a simple 440 Hz sine wave: +
                     
                    sine
                    +
                    + +
                  • +Generate a 220 Hz sine wave with a 880 Hz beep each second, for 5 seconds: +
                     
                    sine=220:4:d=5
                    +sine=f=220:b=4:d=5
                    +sine=frequency=220:beep_factor=4:duration=5
                    +
                    + +
                  + + + +

                  32. Audio Sinks

                  + +

                  Below is a description of the currently available audio sinks. +

                  + +

                  32.1 abuffersink

                  + +

                  Buffer audio frames, and make them available to the end of filter chain. +

                  +

                  This sink is mainly intended for programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’ +or the options system. +

                  +

                  It accepts a pointer to an AVABufferSinkContext structure, which +defines the incoming buffers’ formats, to be passed as the opaque +parameter to avfilter_init_filter for initialization. +

                  + +

                  32.2 anullsink

                  + +

                  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. +

                  + + +

                  33. Video Filters

                  + +

                  When you configure your FFmpeg build, you can disable any of the +existing filters using --disable-filters. +The configure output will show the video filters included in your +build. +

                  +

                  Below is a description of the currently available video filters. +

                  + +

                  33.1 alphaextract

                  + +

                  Extract the alpha component from the input as a grayscale video. This +is especially useful with the alphamerge filter. +

                  + +

                  33.2 alphamerge

                  + +

                  Add or replace the alpha component of the primary input with the +grayscale value of a second input. This is intended for use with +alphaextract to allow the transmission or storage of frame +sequences that have alpha in a format that doesn’t support an alpha +channel. +

                  +

                  For example, to reconstruct full frames from a normal YUV-encoded video +and a separate video created with alphaextract, you might use: +

                   
                  movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
                  +
                  + +

                  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 overlay filter instead. +

                  + +

                  33.3 ass

                  + +

                  Same as the subtitles 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. +

                  + +

                  33.4 bbox

                  + +

                  Compute the bounding box for the non-black pixels in the input frame +luminance plane. +

                  +

                  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. +

                  +

                  The filter accepts the following option: +

                  +
                  +
                  min_val
                  +

                  Set the minimal luminance value. Default is 16. +

                  +
                  + + +

                  33.5 blackdetect

                  + +

                  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. +

                  +

                  In order to display the output lines, you need to set the loglevel at +least to the AV_LOG_INFO value. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  black_min_duration, d
                  +

                  Set the minimum detected black duration expressed in seconds. It must +be a non-negative floating point number. +

                  +

                  Default value is 2.0. +

                  +
                  +
                  picture_black_ratio_th, pic_th
                  +

                  Set the threshold for considering a picture "black". +Express the minimum value for the ratio: +

                   
                  nb_black_pixels / nb_pixels
                  +
                  + +

                  for which a picture is considered black. +Default value is 0.98. +

                  +
                  +
                  pixel_black_th, pix_th
                  +

                  Set the threshold for considering a pixel "black". +

                  +

                  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: +

                   
                  absolute_threshold = luminance_minimum_value + pixel_black_th * luminance_range_size
                  +
                  + +

                  luminance_range_size and luminance_minimum_value 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. +

                  +

                  Default value is 0.10. +

                  +
                  + +

                  The following example sets the maximum pixel threshold to the minimum +value, and detects only black intervals of 2 or more seconds: +

                   
                  blackdetect=d=2:pix_th=0.00
                  +
                  + + +

                  33.6 blackframe

                  + +

                  Detect frames that are (almost) completely black. Can be useful to +detect chapter transitions or commercials. Output lines consist of +the frame number of the detected frame, the percentage of blackness, +the position in the file if known or -1 and the timestamp in seconds. +

                  +

                  In order to display the output lines, you need to set the loglevel at +least to the AV_LOG_INFO value. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  amount
                  +

                  Set the percentage of the pixels that have to be below the threshold, defaults +to 98. +

                  +
                  +
                  threshold, thresh
                  +

                  Set the threshold below which a pixel value is considered black, defaults to +32. +

                  +
                  +
                  + + +

                  33.7 blend

                  + +

                  Blend two video frames into each other. +

                  +

                  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. +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  c0_mode
                  +
                  c1_mode
                  +
                  c2_mode
                  +
                  c3_mode
                  +
                  all_mode
                  +

                  Set blend mode for specific pixel component or all pixel components in case +of all_mode. Default value is normal. +

                  +

                  Available values for component modes are: +

                  +
                  addition
                  +
                  and
                  +
                  average
                  +
                  burn
                  +
                  darken
                  +
                  difference
                  +
                  divide
                  +
                  dodge
                  +
                  exclusion
                  +
                  hardlight
                  +
                  lighten
                  +
                  multiply
                  +
                  negation
                  +
                  normal
                  +
                  or
                  +
                  overlay
                  +
                  phoenix
                  +
                  pinlight
                  +
                  reflect
                  +
                  screen
                  +
                  softlight
                  +
                  subtract
                  +
                  vividlight
                  +
                  xor
                  +
                  + +
                  +
                  c0_opacity
                  +
                  c1_opacity
                  +
                  c2_opacity
                  +
                  c3_opacity
                  +
                  all_opacity
                  +

                  Set blend opacity for specific pixel component or all pixel components in case +of all_opacity. Only used in combination with pixel component blend modes. +

                  +
                  +
                  c0_expr
                  +
                  c1_expr
                  +
                  c2_expr
                  +
                  c3_expr
                  +
                  all_expr
                  +

                  Set blend expression for specific pixel component or all pixel components in case +of all_expr. Note that related mode options will be ignored if those are set. +

                  +

                  The expressions can use the following variables: +

                  +
                  +
                  N
                  +

                  The sequential number of the filtered frame, starting from 0. +

                  +
                  +
                  X
                  +
                  Y
                  +

                  the coordinates of the current sample +

                  +
                  +
                  W
                  +
                  H
                  +

                  the width and height of currently filtered plane +

                  +
                  +
                  SW
                  +
                  SH
                  +

                  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 1,1 for the luma plane, and +0.5,0.5 for chroma planes. +

                  +
                  +
                  T
                  +

                  Time of the current frame, expressed in seconds. +

                  +
                  +
                  TOP, A
                  +

                  Value of pixel component at current location for first video frame (top layer). +

                  +
                  +
                  BOTTOM, B
                  +

                  Value of pixel component at current location for second video frame (bottom layer). +

                  +
                  + +
                  +
                  shortest
                  +

                  Force termination when the shortest input terminates. Default is 0. +

                  +
                  repeatlast
                  +

                  Continue applying the last bottom frame after the end of the stream. A value of +0 disable the filter after the last frame of the bottom layer is reached. +Default is 1. +

                  +
                  + + +

                  33.7.1 Examples

                  + +
                    +
                  • +Apply transition from bottom layer to top layer in first 10 seconds: +
                     
                    blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
                    +
                    + +
                  • +Apply 1x1 checkerboard effect: +
                     
                    blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
                    +
                    +
                  + + +

                  33.8 boxblur

                  + +

                  Apply boxblur algorithm to the input video. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  luma_radius, lr
                  +
                  luma_power, lp
                  +
                  chroma_radius, cr
                  +
                  chroma_power, cp
                  +
                  alpha_radius, ar
                  +
                  alpha_power, ap
                  +
                  + +

                  A description of the accepted options follows. +

                  +
                  +
                  luma_radius, lr
                  +
                  chroma_radius, cr
                  +
                  alpha_radius, ar
                  +

                  Set an expression for the box radius in pixels used for blurring the +corresponding input plane. +

                  +

                  The radius value must be a non-negative number, and must not be +greater than the value of the expression min(w,h)/2 for the +luma and alpha planes, and of min(cw,ch)/2 for the chroma +planes. +

                  +

                  Default value for ‘luma_radius’ is "2". If not specified, +‘chroma_radius’ and ‘alpha_radius’ default to the +corresponding value set for ‘luma_radius’. +

                  +

                  The expressions can contain the following constants: +

                  +
                  w
                  +
                  h
                  +

                  the input width and height in pixels +

                  +
                  +
                  cw
                  +
                  ch
                  +

                  the input chroma image width and height in pixels +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  + +
                  +
                  luma_power, lp
                  +
                  chroma_power, cp
                  +
                  alpha_power, ap
                  +

                  Specify how many times the boxblur filter is applied to the +corresponding plane. +

                  +

                  Default value for ‘luma_power’ is 2. If not specified, +‘chroma_power’ and ‘alpha_power’ default to the +corresponding value set for ‘luma_power’. +

                  +

                  A value of 0 will disable the effect. +

                  +
                  + + +

                  33.8.1 Examples

                  + +
                    +
                  • +Apply a boxblur filter with luma, chroma, and alpha radius +set to 2: +
                     
                    boxblur=luma_radius=2:luma_power=1
                    +boxblur=2:1
                    +
                    + +
                  • +Set luma radius to 2, alpha and chroma radius to 0: +
                     
                    boxblur=2:1:cr=0:ar=0
                    +
                    + +
                  • +Set luma and chroma radius to a fraction of the video dimension: +
                     
                    boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
                    +
                    +
                  + + +

                  33.9 colorbalance

                  +

                  Modify intensity of primary colors (red, green and blue) of input frames. +

                  +

                  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. +

                  +

                  A positive adjustment value shifts the balance towards the primary color, a negative +value towards the complementary color. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  rs
                  +
                  gs
                  +
                  bs
                  +

                  Adjust red, green and blue shadows (darkest pixels). +

                  +
                  +
                  rm
                  +
                  gm
                  +
                  bm
                  +

                  Adjust red, green and blue midtones (medium pixels). +

                  +
                  +
                  rh
                  +
                  gh
                  +
                  bh
                  +

                  Adjust red, green and blue highlights (brightest pixels). +

                  +

                  Allowed ranges for options are [-1.0, 1.0]. Defaults are 0. +

                  +
                  + + +

                  33.9.1 Examples

                  + +
                    +
                  • +Add red color cast to shadows: +
                     
                    colorbalance=rs=.3
                    +
                    +
                  + + +

                  33.10 colorchannelmixer

                  + +

                  Adjust video input frames by re-mixing color channels. +

                  +

                  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: +

                   
                  red=red*rr + blue*rb + green*rg + alpha*ra
                  +
                  + +

                  The filter accepts the following options: +

                  +
                  +
                  rr
                  +
                  rg
                  +
                  rb
                  +
                  ra
                  +

                  Adjust contribution of input red, green, blue and alpha channels for output red channel. +Default is 1 for rr, and 0 for rg, rb and ra. +

                  +
                  +
                  gr
                  +
                  gg
                  +
                  gb
                  +
                  ga
                  +

                  Adjust contribution of input red, green, blue and alpha channels for output green channel. +Default is 1 for gg, and 0 for gr, gb and ga. +

                  +
                  +
                  br
                  +
                  bg
                  +
                  bb
                  +
                  ba
                  +

                  Adjust contribution of input red, green, blue and alpha channels for output blue channel. +Default is 1 for bb, and 0 for br, bg and ba. +

                  +
                  +
                  ar
                  +
                  ag
                  +
                  ab
                  +
                  aa
                  +

                  Adjust contribution of input red, green, blue and alpha channels for output alpha channel. +Default is 1 for aa, and 0 for ar, ag and ab. +

                  +

                  Allowed ranges for options are [-2.0, 2.0]. +

                  +
                  + + +

                  33.10.1 Examples

                  + +
                    +
                  • +Convert source to grayscale: +
                     
                    colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
                    +
                    +
                  • +Simulate sepia tones: +
                     
                    colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
                    +
                    +
                  + + +

                  33.11 colormatrix

                  + +

                  Convert color matrix. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  src
                  +
                  dst
                  +

                  Specify the source and destination color matrix. Both values must be +specified. +

                  +

                  The accepted values are: +

                  +
                  bt709
                  +

                  BT.709 +

                  +
                  +
                  bt601
                  +

                  BT.601 +

                  +
                  +
                  smpte240m
                  +

                  SMPTE-240M +

                  +
                  +
                  fcc
                  +

                  FCC +

                  +
                  +
                  +
                  + +

                  For example to convert from BT.601 to SMPTE-240M, use the command: +

                   
                  colormatrix=bt601:smpte240m
                  +
                  + + +

                  33.12 copy

                  + +

                  Copy the input source unchanged to the output. Mainly useful for +testing purposes. +

                  + +

                  33.13 crop

                  + +

                  Crop the input video to given dimensions. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  w, out_w
                  +

                  Width of the output video. It defaults to iw. +This expression is evaluated only once during the filter +configuration. +

                  +
                  +
                  h, out_h
                  +

                  Height of the output video. It defaults to ih. +This expression is evaluated only once during the filter +configuration. +

                  +
                  +
                  x
                  +

                  Horizontal position, in the input video, of the left edge of the output video. +It defaults to (in_w-out_w)/2. +This expression is evaluated per-frame. +

                  +
                  +
                  y
                  +

                  Vertical position, in the input video, of the top edge of the output video. +It defaults to (in_h-out_h)/2. +This expression is evaluated per-frame. +

                  +
                  +
                  keep_aspect
                  +

                  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. +

                  +
                  + +

                  The out_w, out_h, x, y parameters are +expressions containing the following constants: +

                  +
                  +
                  x
                  +
                  y
                  +

                  the computed values for x and y. They are evaluated for +each new frame. +

                  +
                  +
                  in_w
                  +
                  in_h
                  +

                  the input width and height +

                  +
                  +
                  iw
                  +
                  ih
                  +

                  same as in_w and in_h +

                  +
                  +
                  out_w
                  +
                  out_h
                  +

                  the output (cropped) width and height +

                  +
                  +
                  ow
                  +
                  oh
                  +

                  same as out_w and out_h +

                  +
                  +
                  a
                  +

                  same as iw / ih +

                  +
                  +
                  sar
                  +

                  input sample aspect ratio +

                  +
                  +
                  dar
                  +

                  input display aspect ratio, it is the same as (iw / ih) * sar +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  n
                  +

                  the number of input frame, starting from 0 +

                  +
                  +
                  pos
                  +

                  the position in the file of the input frame, NAN if unknown +

                  +
                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  +
                  + +

                  The expression for out_w may depend on the value of out_h, +and the expression for out_h may depend on out_w, but they +cannot depend on x and y, as x and y are +evaluated after out_w and out_h. +

                  +

                  The x and y parameters specify the expressions for the +position of the top-left corner of the output (non-cropped) area. They +are evaluated for each frame. If the evaluated value is not valid, it +is approximated to the nearest valid value. +

                  +

                  The expression for x may depend on y, and the expression +for y may depend on x. +

                  + +

                  33.13.1 Examples

                  + +
                    +
                  • +Crop area with size 100x100 at position (12,34). +
                     
                    crop=100:100:12:34
                    +
                    + +

                    Using named options, the example above becomes: +

                     
                    crop=w=100:h=100:x=12:y=34
                    +
                    + +
                  • +Crop the central input area with size 100x100: +
                     
                    crop=100:100
                    +
                    + +
                  • +Crop the central input area with size 2/3 of the input video: +
                     
                    crop=2/3*in_w:2/3*in_h
                    +
                    + +
                  • +Crop the input video central square: +
                     
                    crop=out_w=in_h
                    +crop=in_h
                    +
                    + +
                  • +Delimit the rectangle with the top-left corner placed at position +100:100 and the right-bottom corner corresponding to the right-bottom +corner of the input image: +
                     
                    crop=in_w-100:in_h-100:100:100
                    +
                    + +
                  • +Crop 10 pixels from the left and right borders, and 20 pixels from +the top and bottom borders +
                     
                    crop=in_w-2*10:in_h-2*20
                    +
                    + +
                  • +Keep only the bottom right quarter of the input image: +
                     
                    crop=in_w/2:in_h/2:in_w/2:in_h/2
                    +
                    + +
                  • +Crop height for getting Greek harmony: +
                     
                    crop=in_w:1/PHI*in_w
                    +
                    + +
                  • +Appply trembling effect: +
                     
                    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)
                    +
                    + +
                  • +Apply erratic camera effect depending on timestamp: +
                     
                    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"
                    +
                    + +
                  • +Set x depending on the value of y: +
                     
                    crop=in_w/2:in_h/2:y:10+10*sin(n/10)
                    +
                    +
                  + + +

                  33.14 cropdetect

                  + +

                  Auto-detect crop size. +

                  +

                  Calculate necessary cropping parameters and prints the recommended +parameters through the logging system. The detected dimensions +correspond to the non-black area of the input video. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  limit
                  +

                  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. +

                  +
                  +
                  round
                  +

                  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. +

                  +
                  +
                  reset_count, reset
                  +

                  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. +

                  +

                  This can be useful when channel logos distort the video area. 0 +indicates never reset and return the largest area encountered during +playback. +

                  +
                  + +

                  +

                  +

                  33.15 curves

                  + +

                  Apply color adjustments using curves. +

                  +

                  This filter is similar to the Adobe Photoshop and GIMP curves tools. Each +component (red, green and blue) has its values defined by N 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. +

                  +

                  By default, a component curve is defined by the two points (0;0) and +(1;1). This creates a straight line where each original pixel value is +"adjusted" to its own value, which means no change to the image. +

                  +

                  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 x and y values must +be in the [0;1] interval. If the computed curves happened to go outside +the vector spaces, the values will be clipped accordingly. +

                  +

                  If there is no key point defined in x=0, the filter will automatically +insert a (0;0) point. In the same way, if there is no key point defined +in x=1, the filter will automatically insert a (1;1) point. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  preset
                  +

                  Select one of the available color presets. This option can be used in addition +to the ‘r’, ‘g’, ‘b’ parameters; in this case, the later +options takes priority on the preset values. +Available presets are: +

                  +
                  none
                  +
                  color_negative
                  +
                  cross_process
                  +
                  darker
                  +
                  increase_contrast
                  +
                  lighter
                  +
                  linear_contrast
                  +
                  medium_contrast
                  +
                  negative
                  +
                  strong_contrast
                  +
                  vintage
                  +
                  +

                  Default is none. +

                  +
                  master, m
                  +

                  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 +‘r’, ‘g’, ‘b’ or ‘all’ since it acts like a +post-processing LUT. +

                  +
                  red, r
                  +

                  Set the key points for the red component. +

                  +
                  green, g
                  +

                  Set the key points for the green component. +

                  +
                  blue, b
                  +

                  Set the key points for the blue component. +

                  +
                  all
                  +

                  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 +‘all’ setting. +

                  +
                  psfile
                  +

                  Specify a Photoshop curves file (.asv) to import the settings from. +

                  +
                  + +

                  To avoid some filtergraph syntax conflicts, each key points list need to be +defined using the following syntax: x0/y0 x1/y1 x2/y2 .... +

                  + +

                  33.15.1 Examples

                  + +
                    +
                  • +Increase slightly the middle level of blue: +
                     
                    curves=blue='0.5/0.58'
                    +
                    + +
                  • +Vintage effect: +
                     
                    curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
                    +
                    +

                    Here we obtain the following coordinates for each components: +

                    +
                    red
                    +

                    (0;0.11) (0.42;0.51) (1;0.95) +

                    +
                    green
                    +

                    (0;0) (0.50;0.48) (1;1) +

                    +
                    blue
                    +

                    (0;0.22) (0.49;0.44) (1;0.80) +

                    +
                    + +
                  • +The previous example can also be achieved with the associated built-in preset: +
                     
                    curves=preset=vintage
                    +
                    + +
                  • +Or simply: +
                     
                    curves=vintage
                    +
                    + +
                  • +Use a Photoshop preset and redefine the points of the green component: +
                     
                    curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53'
                    +
                    +
                  + + +

                  33.16 dctdnoiz

                  + +

                  Denoise frames using 2D DCT (frequency domain filtering). +

                  +

                  This filter is not designed for real time and can be extremely slow. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  sigma, s
                  +

                  Set the noise sigma constant. +

                  +

                  This sigma defines a hard threshold of 3 * sigma; every DCT +coefficient (absolute value) below this threshold with be dropped. +

                  +

                  If you need a more advanced filtering, see ‘expr’. +

                  +

                  Default is 0. +

                  +
                  +
                  overlap
                  +

                  Set number overlapping pixels for each block. Each block is of size +16x16. 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. +

                  +

                  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. +

                  +

                  Default value is 15. +

                  +
                  +
                  expr, e
                  +

                  Set the coefficient factor expression. +

                  +

                  For each coefficient of a DCT block, this expression will be evaluated as a +multiplier value for the coefficient. +

                  +

                  If this is option is set, the ‘sigma’ option will be ignored. +

                  +

                  The absolute value of the coefficient can be accessed through the c +variable. +

                  +
                  + + +

                  33.16.1 Examples

                  + +

                  Apply a denoise with a ‘sigma’ of 4.5: +

                   
                  dctdnoiz=4.5
                  +
                  + +

                  The same operation can be achieved using the expression system: +

                   
                  dctdnoiz=e='gte(c, 4.5*3)'
                  +
                  + +

                  +

                  +

                  33.17 decimate

                  + +

                  Drop duplicated frames at regular intervals. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  cycle
                  +

                  Set the number of frames from which one will be dropped. Setting this to +N means one frame in every batch of N frames will be dropped. +Default is 5. +

                  +
                  +
                  dupthresh
                  +

                  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 1.1 +

                  +
                  +
                  scthresh
                  +

                  Set scene change threshold. Default is 15. +

                  +
                  +
                  blockx
                  +
                  blocky
                  +

                  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 32. +

                  +
                  +
                  ppsrc
                  +

                  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 +1, 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 +0. +

                  +
                  +
                  chroma
                  +

                  Set whether or not chroma is considered in the metric calculations. Default is +1. +

                  +
                  + + +

                  33.18 delogo

                  + +

                  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). +

                  +

                  This filter accepts the following options: +

                  +
                  x
                  +
                  y
                  +

                  Specify the top left corner coordinates of the logo. They must be +specified. +

                  +
                  +
                  w
                  +
                  h
                  +

                  Specify the width and height of the logo to clear. They must be +specified. +

                  +
                  +
                  band, t
                  +

                  Specify the thickness of the fuzzy edge of the rectangle (added to +w and h). The default value is 4. +

                  +
                  +
                  show
                  +

                  When set to 1, a green rectangle is drawn on the screen to simplify +finding the right x, y, w, and h parameters. +The default value is 0. +

                  +

                  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. +

                  +
                  +
                  + + +

                  33.18.1 Examples

                  + +
                    +
                  • +Set a rectangle covering the area with top left corner coordinates 0,0 +and size 100x77, setting a band of size 10: +
                     
                    delogo=x=0:y=0:w=100:h=77:band=10
                    +
                    + +
                  + + +

                  33.19 deshake

                  + +

                  Attempt to fix small changes in horizontal and/or vertical shift. This +filter helps remove camera shake from hand-holding a camera, bumping a +tripod, moving on a vehicle, etc. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  x
                  +
                  y
                  +
                  w
                  +
                  h
                  +

                  Specify a rectangular area where to limit the search for motion +vectors. +If desired the search for motion vectors can be limited to a +rectangular area of the frame defined by its top left corner, width +and height. These parameters have the same meaning as the drawbox +filter which can be used to visualise the position of the bounding +box. +

                  +

                  This is useful when simultaneous movement of subjects within the frame +might be confused for camera motion by the motion vector search. +

                  +

                  If any or all of x, y, w and h are set to -1 +then the full frame is used. This allows later options to be set +without specifying the bounding box for the motion vector search. +

                  +

                  Default - search the whole frame. +

                  +
                  +
                  rx
                  +
                  ry
                  +

                  Specify the maximum extent of movement in x and y directions in the +range 0-64 pixels. Default 16. +

                  +
                  +
                  edge
                  +

                  Specify how to generate pixels to fill blanks at the edge of the +frame. Available values are: +

                  +
                  blank, 0
                  +

                  Fill zeroes at blank locations +

                  +
                  original, 1
                  +

                  Original image at blank locations +

                  +
                  clamp, 2
                  +

                  Extruded edge value at blank locations +

                  +
                  mirror, 3
                  +

                  Mirrored edge at blank locations +

                  +
                  +

                  Default value is ‘mirror’. +

                  +
                  +
                  blocksize
                  +

                  Specify the blocksize to use for motion search. Range 4-128 pixels, +default 8. +

                  +
                  +
                  contrast
                  +

                  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. +

                  +
                  +
                  search
                  +

                  Specify the search strategy. Available values are: +

                  +
                  exhaustive, 0
                  +

                  Set exhaustive search +

                  +
                  less, 1
                  +

                  Set less exhaustive search. +

                  +
                  +

                  Default value is ‘exhaustive’. +

                  +
                  +
                  filename
                  +

                  If set then a detailed log of the motion search is written to the +specified file. +

                  +
                  +
                  opencl
                  +

                  If set to 1, specify using OpenCL capabilities, only available if +FFmpeg was configured with --enable-opencl. Default value is 0. +

                  +
                  +
                  + + +

                  33.20 drawbox

                  + +

                  Draw a colored box on the input image. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  x
                  +
                  y
                  +

                  The expressions which specify the top left corner coordinates of the box. Default to 0. +

                  +
                  +
                  width, w
                  +
                  height, h
                  +

                  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. +

                  +
                  +
                  color, c
                  +

                  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 invert is used, the box edge color is the same as the +video with inverted luma. +

                  +
                  +
                  thickness, t
                  +

                  The expression which sets the thickness of the box edge. Default value is 3. +

                  +

                  See below for the list of accepted constants. +

                  +
                  + +

                  The parameters for x, y, w and h and t are expressions containing the +following constants: +

                  +
                  +
                  dar
                  +

                  The input display aspect ratio, it is the same as (w / h) * sar. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  in_h, ih
                  +
                  in_w, iw
                  +

                  The input width and height. +

                  +
                  +
                  sar
                  +

                  The input sample aspect ratio. +

                  +
                  +
                  x
                  +
                  y
                  +

                  The x and y offset coordinates where the box is drawn. +

                  +
                  +
                  w
                  +
                  h
                  +

                  The width and height of the drawn box. +

                  +
                  +
                  t
                  +

                  The thickness of the drawn box. +

                  +

                  These constants allow the x, y, w, h and t expressions to refer to +each other, so you may for example specify y=x/dar or h=w/dar. +

                  +
                  +
                  + + +

                  33.20.1 Examples

                  + +
                    +
                  • +Draw a black box around the edge of the input image: +
                     
                    drawbox
                    +
                    + +
                  • +Draw a box with color red and an opacity of 50%: +
                     
                    drawbox=10:20:200:60:red@0.5
                    +
                    + +

                    The previous example can be specified as: +

                     
                    drawbox=x=10:y=20:w=200:h=60:color=red@0.5
                    +
                    + +
                  • +Fill the box with pink color: +
                     
                    drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max
                    +
                    + +
                  • +Draw a 2-pixel red 2.40:1 mask: +
                     
                    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
                    +
                    +
                  + + +

                  33.21 drawgrid

                  + +

                  Draw a grid on the input image. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  x
                  +
                  y
                  +

                  The expressions which specify the coordinates of some point of grid intersection (meant to configure offset). Both default to 0. +

                  +
                  +
                  width, w
                  +
                  height, h
                  +

                  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 thickness, so image gets +framed. Default to 0. +

                  +
                  +
                  color, c
                  +

                  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 invert is used, the grid color is the same as the +video with inverted luma. +

                  +
                  +
                  thickness, t
                  +

                  The expression which sets the thickness of the grid line. Default value is 1. +

                  +

                  See below for the list of accepted constants. +

                  +
                  + +

                  The parameters for x, y, w and h and t are expressions containing the +following constants: +

                  +
                  +
                  dar
                  +

                  The input display aspect ratio, it is the same as (w / h) * sar. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  in_h, ih
                  +
                  in_w, iw
                  +

                  The input grid cell width and height. +

                  +
                  +
                  sar
                  +

                  The input sample aspect ratio. +

                  +
                  +
                  x
                  +
                  y
                  +

                  The x and y coordinates of some point of grid intersection (meant to configure offset). +

                  +
                  +
                  w
                  +
                  h
                  +

                  The width and height of the drawn cell. +

                  +
                  +
                  t
                  +

                  The thickness of the drawn cell. +

                  +

                  These constants allow the x, y, w, h and t expressions to refer to +each other, so you may for example specify y=x/dar or h=w/dar. +

                  +
                  +
                  + + +

                  33.21.1 Examples

                  + +
                    +
                  • +Draw a grid with cell 100x100 pixels, thickness 2 pixels, with color red and an opacity of 50%: +
                     
                    drawgrid=width=100:height=100:thickness=2:color=red@0.5
                    +
                    + +
                  • +Draw a white 3x3 grid with an opacity of 50%: +
                     
                    drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
                    +
                    +
                  + +

                  +

                  +

                  33.22 drawtext

                  + +

                  Draw text string or text from specified file on top of video using the +libfreetype library. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libfreetype. +

                  + +

                  33.22.1 Syntax

                  + +

                  The description of the accepted parameters follows. +

                  +
                  +
                  box
                  +

                  Used to draw a box around text using background color. +Value should be either 1 (enable) or 0 (disable). +The default value of box is 0. +

                  +
                  +
                  boxcolor
                  +

                  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. +

                  +

                  The default value of boxcolor is "white". +

                  +
                  +
                  expansion
                  +

                  Select how the text is expanded. Can be either none, +strftime (deprecated) or +normal (default). See the Text expansion section +below for details. +

                  +
                  +
                  fix_bounds
                  +

                  If true, check and fix text coords to avoid clipping. +

                  +
                  +
                  fontcolor
                  +

                  The color to be used for drawing fonts. For the syntax of this option, check +the "Color" section in the ffmpeg-utils manual. +

                  +

                  The default value of fontcolor is "black". +

                  +
                  +
                  fontfile
                  +

                  The font file to be used for drawing text. Path must be included. +This parameter is mandatory. +

                  +
                  +
                  fontsize
                  +

                  The font size to be used for drawing text. +The default value of fontsize is 16. +

                  +
                  +
                  ft_load_flags
                  +

                  Flags to be used for loading the fonts. +

                  +

                  The flags map the corresponding flags supported by libfreetype, and are +a combination of the following values: +

                  +
                  default
                  +
                  no_scale
                  +
                  no_hinting
                  +
                  render
                  +
                  no_bitmap
                  +
                  vertical_layout
                  +
                  force_autohint
                  +
                  crop_bitmap
                  +
                  pedantic
                  +
                  ignore_global_advance_width
                  +
                  no_recurse
                  +
                  ignore_transform
                  +
                  monochrome
                  +
                  linear_design
                  +
                  no_autohint
                  +
                  + +

                  Default value is "render". +

                  +

                  For more information consult the documentation for the FT_LOAD_* +libfreetype flags. +

                  +
                  +
                  shadowcolor
                  +

                  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. +

                  +

                  The default value of shadowcolor is "black". +

                  +
                  +
                  shadowx
                  +
                  shadowy
                  +

                  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". +

                  +
                  +
                  start_number
                  +

                  The starting frame number for the n/frame_num variable. The default value +is "0". +

                  +
                  +
                  tabsize
                  +

                  The size in number of spaces to use for rendering the tab. +Default value is 4. +

                  +
                  +
                  timecode
                  +

                  Set the initial timecode representation in "hh:mm:ss[:;.]ff" +format. It can be used with or without text parameter. timecode_rate +option must be specified. +

                  +
                  +
                  timecode_rate, rate, r
                  +

                  Set the timecode frame rate (timecode only). +

                  +
                  +
                  text
                  +

                  The text string to be drawn. The text must be a sequence of UTF-8 +encoded characters. +This parameter is mandatory if no file is specified with the parameter +textfile. +

                  +
                  +
                  textfile
                  +

                  A text file containing text to be drawn. The text must be a sequence +of UTF-8 encoded characters. +

                  +

                  This parameter is mandatory if no text string is specified with the +parameter text. +

                  +

                  If both text and textfile are specified, an error is thrown. +

                  +
                  +
                  reload
                  +

                  If set to 1, the textfile will be reloaded before each frame. +Be sure to update it atomically, or it may be read partially, or even fail. +

                  +
                  +
                  x
                  +
                  y
                  +

                  The expressions which specify the offsets where text will be drawn +within the video frame. They are relative to the top/left border of the +output image. +

                  +

                  The default value of x and y is "0". +

                  +

                  See below for the list of accepted constants and functions. +

                  +
                  + +

                  The parameters for x and y are expressions containing the +following constants and functions: +

                  +
                  +
                  dar
                  +

                  input display aspect ratio, it is the same as (w / h) * sar +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  line_h, lh
                  +

                  the height of each text line +

                  +
                  +
                  main_h, h, H
                  +

                  the input height +

                  +
                  +
                  main_w, w, W
                  +

                  the input width +

                  +
                  +
                  max_glyph_a, ascent
                  +

                  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. +

                  +
                  +
                  max_glyph_d, descent
                  +

                  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. +

                  +
                  +
                  max_glyph_h
                  +

                  maximum glyph height, that is the maximum height for all the glyphs +contained in the rendered text, it is equivalent to ascent - +descent. +

                  +
                  +
                  max_glyph_w
                  +

                  maximum glyph width, that is the maximum width for all the glyphs +contained in the rendered text +

                  +
                  +
                  n
                  +

                  the number of input frame, starting from 0 +

                  +
                  +
                  rand(min, max)
                  +

                  return a random number included between min and max +

                  +
                  +
                  sar
                  +

                  input sample aspect ratio +

                  +
                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  +
                  text_h, th
                  +

                  the height of the rendered text +

                  +
                  +
                  text_w, tw
                  +

                  the width of the rendered text +

                  +
                  +
                  x
                  +
                  y
                  +

                  the x and y offset coordinates where the text is drawn. +

                  +

                  These parameters allow the x and y expressions to refer +each other, so you can for example specify y=x/dar. +

                  +
                  + +

                  If libavfilter was built with --enable-fontconfig, then +‘fontfile’ can be a fontconfig pattern or omitted. +

                  +

                  +

                  +

                  33.22.2 Text expansion

                  + +

                  If ‘expansion’ is set to strftime, +the filter recognizes strftime() sequences in the provided text and +expands them accordingly. Check the documentation of strftime(). This +feature is deprecated. +

                  +

                  If ‘expansion’ is set to none, the text is printed verbatim. +

                  +

                  If ‘expansion’ is set to normal (which is the default), +the following expansion mechanism is used. +

                  +

                  The backslash character ’\’, followed by any character, always expands to +the second character. +

                  +

                  Sequence of the form %{...} 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. +

                  +

                  Note that they probably must also be escaped as the value for the +‘text’ 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. +

                  +

                  The following functions are available: +

                  +
                  +
                  expr, e
                  +

                  The expression evaluation result. +

                  +

                  It must take one argument specifying the expression to be evaluated, +which accepts the same constants and functions as the x and +y values. Note that not all constants should be used, for +example the text size is not known when evaluating the expression, so +the constants text_w and text_h will have an undefined +value. +

                  +
                  +
                  gmtime
                  +

                  The time at which the filter is running, expressed in UTC. +It can accept an argument: a strftime() format string. +

                  +
                  +
                  localtime
                  +

                  The time at which the filter is running, expressed in the local time zone. +It can accept an argument: a strftime() format string. +

                  +
                  +
                  metadata
                  +

                  Frame metadata. It must take one argument specifying metadata key. +

                  +
                  +
                  n, frame_num
                  +

                  The frame number, starting from 0. +

                  +
                  +
                  pict_type
                  +

                  A 1 character description of the current picture type. +

                  +
                  +
                  pts
                  +

                  The timestamp of the current frame, in seconds, with microsecond accuracy. +

                  +
                  +
                  + + +

                  33.22.3 Examples

                  + +
                    +
                  • +Draw "Test Text" with font FreeSerif, using the default values for the +optional parameters. + +
                     
                    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
                    +
                    + +
                  • +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%. + +
                     
                    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
                    +          x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
                    +
                    + +

                    Note that the double quotes are not necessary if spaces are not used +within the parameter list. +

                    +
                  • +Show the text at the center of the video frame: +
                     
                    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
                    +
                    + +
                  • +Show a text line sliding from right to left in the last row of the video +frame. The file ‘LONG_LINE’ is assumed to contain a single line +with no newlines. +
                     
                    drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
                    +
                    + +
                  • +Show the content of file ‘CREDITS’ off the bottom of the frame and scroll up. +
                     
                    drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
                    +
                    + +
                  • +Draw a single green letter "g", at the center of the input video. +The glyph baseline is placed at half screen height. +
                     
                    drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
                    +
                    + +
                  • +Show text for 1 second every 3 seconds: +
                     
                    drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
                    +
                    + +
                  • +Use fontconfig to set the font. Note that the colons need to be escaped. +
                     
                    drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
                    +
                    + +
                  • +Print the date of a real-time encoding (see strftime(3)): +
                     
                    drawtext='fontfile=FreeSans.ttf:text=%{localtime:%a %b %d %Y}'
                    +
                    + +
                  + +

                  For more information about libfreetype, check: +http://www.freetype.org/. +

                  +

                  For more information about fontconfig, check: +http://freedesktop.org/software/fontconfig/fontconfig-user.html. +

                  + +

                  33.23 edgedetect

                  + +

                  Detect and draw edges. The filter uses the Canny Edge Detection algorithm. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  low
                  +
                  high
                  +

                  Set low and high threshold values used by the Canny thresholding +algorithm. +

                  +

                  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. +

                  +

                  low and high threshold values must be choosen in the range +[0,1], and low should be lesser or equal to high. +

                  +

                  Default value for low is 20/255, and default value for high +is 50/255. +

                  +
                  + +

                  Example: +

                   
                  edgedetect=low=0.1:high=0.4
                  +
                  + + +

                  33.24 extractplanes

                  + +

                  Extract color channel components from input video stream into +separate grayscale video streams. +

                  +

                  The filter accepts the following option: +

                  +
                  +
                  planes
                  +

                  Set plane(s) to extract. +

                  +

                  Available values for planes are: +

                  +
                  y
                  +
                  u
                  +
                  v
                  +
                  a
                  +
                  r
                  +
                  g
                  +
                  b
                  +
                  + +

                  Choosing planes not available in the input will result in an error. +That means you cannot select r, g, b planes +with y, u, v planes at same time. +

                  +
                  + + +

                  33.24.1 Examples

                  + +
                    +
                  • +Extract luma, u and v color channel component from input video frame +into 3 grayscale outputs: +
                     
                    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
                    +
                    +
                  + + +

                  33.25 fade

                  + +

                  Apply fade-in/out effect to input video. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  type, t
                  +

                  The effect type – can be either "in" for fade-in, or "out" for a fade-out +effect. +Default is in. +

                  +
                  +
                  start_frame, s
                  +

                  Specify the number of the start frame for starting to apply the fade +effect. Default is 0. +

                  +
                  +
                  nb_frames, n
                  +

                  The number of frames for which the fade effect has to last. At the end of the +fade-in effect the output video will have the same intensity as the input video, +at the end of the fade-out transition the output video will be completely black. +Default is 25. +

                  +
                  +
                  alpha
                  +

                  If set to 1, fade only alpha channel, if one exists on the input. +Default value is 0. +

                  +
                  +
                  start_time, st
                  +

                  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. +

                  +
                  +
                  duration, d
                  +

                  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 completely black. +If both duration and nb_frames are specified, duration is used. Default is 0. +

                  +
                  + + +

                  33.25.1 Examples

                  + +
                    +
                  • +Fade in first 30 frames of video: +
                     
                    fade=in:0:30
                    +
                    + +

                    The command above is equivalent to: +

                     
                    fade=t=in:s=0:n=30
                    +
                    + +
                  • +Fade out last 45 frames of a 200-frame video: +
                     
                    fade=out:155:45
                    +fade=type=out:start_frame=155:nb_frames=45
                    +
                    + +
                  • +Fade in first 25 frames and fade out last 25 frames of a 1000-frame video: +
                     
                    fade=in:0:25, fade=out:975:25
                    +
                    + +
                  • +Make first 5 frames black, then fade in from frame 5-24: +
                     
                    fade=in:5:20
                    +
                    + +
                  • +Fade in alpha over first 25 frames of video: +
                     
                    fade=in:0:25:alpha=1
                    +
                    + +
                  • +Make first 5.5 seconds black, then fade in for 0.5 seconds: +
                     
                    fade=t=in:st=5.5:d=0.5
                    +
                    + +
                  + + +

                  33.26 field

                  + +

                  Extract a single field from an interlaced image using stride +arithmetic to avoid wasting CPU time. The output frames are marked as +non-interlaced. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  type
                  +

                  Specify whether to extract the top (if the value is 0 or +top) or the bottom field (if the value is 1 or +bottom). +

                  +
                  + + +

                  33.27 fieldmatch

                  + +

                  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 fieldmatch needs to be +followed by a decimation filter such as decimate in the filtergraph. +

                  +

                  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, +fieldmatch 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 yadif before decimation. +

                  +

                  In addition to the various configuration options, fieldmatch can take an +optional second stream, activated through the ‘ppsrc’ 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. +

                  +

                  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 fieldmatch is based on. While the semantic and usage are very +close, some behaviour and options names can differ. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  order
                  +

                  Specify the assumed field order of the input stream. Available values are: +

                  +
                  +
                  auto
                  +

                  Auto detect parity (use FFmpeg’s internal parity value). +

                  +
                  bff
                  +

                  Assume bottom field first. +

                  +
                  tff
                  +

                  Assume top field first. +

                  +
                  + +

                  Note that it is sometimes recommended not to trust the parity announced by the +stream. +

                  +

                  Default value is auto. +

                  +
                  +
                  mode
                  +

                  Set the matching mode or strategy to use. ‘pc’ 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, ‘pcn_ub’ 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 ‘pc’ and ‘pcn_ub’ in terms of risking +jerkiness and creating duplicate frames versus finding good matches in sections +with bad edits, orphaned fields, blended fields, etc. +

                  +

                  More details about p/c/n/u/b are available in p/c/n/u/b meaning section. +

                  +

                  Available values are: +

                  +
                  +
                  pc
                  +

                  2-way matching (p/c) +

                  +
                  pc_n
                  +

                  2-way matching, and trying 3rd match if still combed (p/c + n) +

                  +
                  pc_u
                  +

                  2-way matching, and trying 3rd match (same order) if still combed (p/c + u) +

                  +
                  pc_n_ub
                  +

                  2-way matching, trying 3rd match if still combed, and trying 4th/5th matches if +still combed (p/c + n + u/b) +

                  +
                  pcn
                  +

                  3-way matching (p/c/n) +

                  +
                  pcn_ub
                  +

                  3-way matching, and trying 4th/5th matches if all 3 of the original matches are +detected as combed (p/c/n + u/b) +

                  +
                  + +

                  The parenthesis at the end indicate the matches that would be used for that +mode assuming ‘order’=tff (and ‘field’ on auto or +top). +

                  +

                  In terms of speed ‘pc’ mode is by far the fastest and ‘pcn_ub’ is +the slowest. +

                  +

                  Default value is pc_n. +

                  +
                  +
                  ppsrc
                  +

                  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 ‘clip2’ feature from +VFM/TFM. +

                  +

                  Default value is 0 (disabled). +

                  +
                  +
                  field
                  +

                  Set the field to match from. It is recommended to set this to the same value as +‘order’ 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: +

                  +
                  +
                  auto
                  +

                  Automatic (same value as ‘order’). +

                  +
                  bottom
                  +

                  Match from the bottom field. +

                  +
                  top
                  +

                  Match from the top field. +

                  +
                  + +

                  Default value is auto. +

                  +
                  +
                  mchroma
                  +

                  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 0 +only if your clip has bad chroma problems such as heavy rainbowing or other +artifacts. Setting this to 0 could also be used to speed things up at +the cost of some accuracy. +

                  +

                  Default value is 1. +

                  +
                  +
                  y0
                  +
                  y1
                  +

                  These define an exclusion band which excludes the lines between ‘y0’ and +‘y1’ 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. ‘y0’ sets the starting scan line and +‘y1’ sets the ending line; all lines in between ‘y0’ and +‘y1’ (including ‘y0’ and ‘y1’) will be ignored. Setting +‘y0’ and ‘y1’ to the same value will disable the feature. +‘y0’ and ‘y1’ defaults to 0. +

                  +
                  +
                  scthresh
                  +

                  Set the scene change detection threshold as a percentage of maximum change on +the luma plane. Good values are in the [8.0, 14.0] range. Scene change +detection is only relevant in case ‘combmatch’=sc. The range for +‘scthresh’ is [0.0, 100.0]. +

                  +

                  Default value is 12.0. +

                  +
                  +
                  combmatch
                  +

                  When ‘combatch’ is not none, fieldmatch will take into +account the combed scores of matches when deciding what match to use as the +final match. Available values are: +

                  +
                  +
                  none
                  +

                  No final matching based on combed scores. +

                  +
                  sc
                  +

                  Combed scores are only used when a scene change is detected. +

                  +
                  full
                  +

                  Use combed scores all the time. +

                  +
                  + +

                  Default is sc. +

                  +
                  +
                  combdbg
                  +

                  Force fieldmatch to calculate the combed metrics for certain matches and +print them. This setting is known as ‘micout’ in TFM/VFM vocabulary. +Available values are: +

                  +
                  +
                  none
                  +

                  No forced calculation. +

                  +
                  pcn
                  +

                  Force p/c/n calculations. +

                  +
                  pcnub
                  +

                  Force p/c/n/u/b calculations. +

                  +
                  + +

                  Default value is none. +

                  +
                  +
                  cthresh
                  +

                  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 +-1 (every pixel will be detected as combed) to 255 (no pixel will +be detected as combed). This is basically a pixel difference value. A good +range is [8, 12]. +

                  +

                  Default value is 9. +

                  +
                  +
                  chroma
                  +

                  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 ‘chroma’=0 is usually more reliable, except for the case +where there is chroma only combing in the source. +

                  +

                  Default value is 0. +

                  +
                  +
                  blockx
                  +
                  blocky
                  +

                  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 +‘combpel’ pixels are required to be detected as combed for a frame to be +declared combed. See the ‘combpel’ parameter description for more info. +Possible values are any number that is a power of 2 starting at 4 and going up +to 512. +

                  +

                  Default value is 16. +

                  +
                  +
                  combpel
                  +

                  The number of combed pixels inside any of the ‘blocky’ by +‘blockx’ size blocks on the frame for the frame to be detected as +combed. While ‘cthresh’ 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 ‘blockx’ and ‘blocky’ settings) on the +frame. Minimum value is 0 and maximum is blocky x blockx (at +which point no frames will ever be detected as combed). This setting is known +as ‘MI’ in TFM/VFM vocabulary. +

                  +

                  Default value is 80. +

                  +
                  + +

                  +

                  +

                  33.27.1 p/c/n/u/b meaning

                  + + +

                  33.27.1.1 p/c/n

                  + +

                  We assume the following telecined stream: +

                  +
                   
                  Top fields:     1 2 2 3 4
                  +Bottom fields:  1 2 3 4 4
                  +
                  + +

                  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. +

                  +

                  When fieldmatch is configured to run a matching from bottom +(‘field’=bottom) this is how this input stream get transformed: +

                  +
                   
                  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
                  +
                  + +

                  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 decimate filter. +

                  +

                  The same operation now matching from top fields (‘field’=top) +looks like this: +

                  +
                   
                  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
                  +
                  + +

                  In these examples, we can see what p, c and n mean; +basically, they refer to the frame and field of the opposite parity: +

                  +
                    +
                  • p matches the field of the opposite parity in the previous frame +
                  • c matches the field of the opposite parity in the current frame +
                  • n matches the field of the opposite parity in the next frame +
                  + + +

                  33.27.1.2 u/b

                  + +

                  The u and b 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. +

                  +

                  With bottom matching (‘field’=bottom): +

                   
                  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
                  +
                  + +

                  With top matching (‘field’=top): +

                   
                  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
                  +
                  + + +

                  33.27.2 Examples

                  + +

                  Simple IVTC of a top field first telecined stream: +

                   
                  fieldmatch=order=tff:combmatch=none, decimate
                  +
                  + +

                  Advanced IVTC, with fallback on yadif for still combed frames: +

                   
                  fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
                  +
                  + + +

                  33.28 fieldorder

                  + +

                  Transform the field order of the input video. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  order
                  +

                  Output field order. Valid values are tff for top field first or bff +for bottom field first. +

                  +
                  + +

                  Default value is ‘tff’. +

                  +

                  Transformation is achieved by shifting the picture content up or down +by one line, and filling the remaining line with appropriate picture content. +This method is consistent with most broadcast field order converters. +

                  +

                  If the input video is not flagged as being interlaced, or it is already +flagged as being of the required output field order then this filter does +not alter the incoming video. +

                  +

                  This filter is very useful when converting to or from PAL DV material, +which is bottom field first. +

                  +

                  For example: +

                   
                  ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
                  +
                  + + +

                  33.29 fifo

                  + +

                  Buffer input images and send them when they are requested. +

                  +

                  This filter is mainly useful when auto-inserted by the libavfilter +framework. +

                  +

                  The filter does not take parameters. +

                  +

                  +

                  +

                  33.30 format

                  + +

                  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. +

                  +

                  This filter accepts the following parameters: +

                  +
                  pix_fmts
                  +

                  A ’|’-separated list of pixel format names, for example +"pix_fmts=yuv420p|monow|rgb24". +

                  +
                  +
                  + + +

                  33.30.1 Examples

                  + +
                    +
                  • +Convert the input video to the format yuv420p +
                     
                    format=pix_fmts=yuv420p
                    +
                    + +

                    Convert the input video to any of the formats in the list +

                     
                    format=pix_fmts=yuv420p|yuv444p|yuv410p
                    +
                    +
                  + + +

                  33.31 fps

                  + +

                  Convert the video to specified constant frame rate by duplicating or dropping +frames as necessary. +

                  +

                  This filter accepts the following named parameters: +

                  +
                  fps
                  +

                  Desired output frame rate. The default is 25. +

                  +
                  +
                  round
                  +

                  Rounding method. +

                  +

                  Possible values are: +

                  +
                  zero
                  +

                  zero round towards 0 +

                  +
                  inf
                  +

                  round away from 0 +

                  +
                  down
                  +

                  round towards -infinity +

                  +
                  up
                  +

                  round towards +infinity +

                  +
                  near
                  +

                  round to nearest +

                  +
                  +

                  The default is near. +

                  +
                  +
                  start_time
                  +

                  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. +

                  +
                  +
                  + +

                  Alternatively, the options can be specified as a flat string: +fps[:round]. +

                  +

                  See also the setpts filter. +

                  + +

                  33.31.1 Examples

                  + +
                    +
                  • +A typical usage in order to set the fps to 25: +
                     
                    fps=fps=25
                    +
                    + +
                  • +Sets the fps to 24, using abbreviation and rounding method to round to nearest: +
                     
                    fps=fps=film:round=near
                    +
                    +
                  + + +

                  33.32 framestep

                  + +

                  Select one frame every N-th frame. +

                  +

                  This filter accepts the following option: +

                  +
                  step
                  +

                  Select frame after every step frames. +Allowed values are positive integers higher than 0. Default value is 1. +

                  +
                  + +

                  +

                  +

                  33.33 frei0r

                  + +

                  Apply a frei0r effect to the input video. +

                  +

                  To enable compilation of this filter you need to install the frei0r +header and configure FFmpeg with --enable-frei0r. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  filter_name
                  +

                  The name to the frei0r effect to load. If the environment variable +FREI0R_PATH is defined, the frei0r effect is searched in each one of the +directories specified by the colon separated list in FREIOR_PATH, +otherwise in the standard frei0r paths, which are in this order: +‘HOME/.frei0r-1/lib/’, ‘/usr/local/lib/frei0r-1/’, +‘/usr/lib/frei0r-1/’. +

                  +
                  +
                  filter_params
                  +

                  A ’|’-separated list of parameters to pass to the frei0r effect. +

                  +
                  +
                  + +

                  A frei0r effect parameter can be a boolean (whose values are specified +with "y" and "n"), a double, a color (specified by the syntax +R/G/B, (R, G, and B being float +numbers from 0.0 to 1.0) or by a color description specified in the "Color" +section in the ffmpeg-utils manual), a position (specified by the syntax X/Y, +X and Y being float numbers) and a string. +

                  +

                  The number and kind of parameters depend on the loaded effect. If an +effect parameter is not specified the default value is set. +

                  + +

                  33.33.1 Examples

                  + +
                    +
                  • +Apply the distort0r effect, set the first two double parameters: +
                     
                    frei0r=filter_name=distort0r:filter_params=0.5|0.01
                    +
                    + +
                  • +Apply the colordistance effect, take a color as first parameter: +
                     
                    frei0r=colordistance:0.2/0.3/0.4
                    +frei0r=colordistance:violet
                    +frei0r=colordistance:0x112233
                    +
                    + +
                  • +Apply the perspective effect, specify the top left and top right image +positions: +
                     
                    frei0r=perspective:0.2/0.2|0.8/0.2
                    +
                    +
                  + +

                  For more information see: +http://frei0r.dyne.org +

                  + +

                  33.34 geq

                  + +

                  The filter accepts the following options: +

                  +
                  +
                  lum_expr, lum
                  +

                  Set the luminance expression. +

                  +
                  cb_expr, cb
                  +

                  Set the chrominance blue expression. +

                  +
                  cr_expr, cr
                  +

                  Set the chrominance red expression. +

                  +
                  alpha_expr, a
                  +

                  Set the alpha expression. +

                  +
                  red_expr, r
                  +

                  Set the red expression. +

                  +
                  green_expr, g
                  +

                  Set the green expression. +

                  +
                  blue_expr, b
                  +

                  Set the blue expression. +

                  +
                  + +

                  The colorspace is selected according to the specified options. If one +of the ‘lum_expr’, ‘cb_expr’, or ‘cr_expr’ +options is specified, the filter will automatically select a YCbCr +colorspace. If one of the ‘red_expr’, ‘green_expr’, or +‘blue_expr’ options is specified, it will select an RGB +colorspace. +

                  +

                  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. +

                  +

                  The expressions can use the following variables and functions: +

                  +
                  +
                  N
                  +

                  The sequential number of the filtered frame, starting from 0. +

                  +
                  +
                  X
                  +
                  Y
                  +

                  The coordinates of the current sample. +

                  +
                  +
                  W
                  +
                  H
                  +

                  The width and height of the image. +

                  +
                  +
                  SW
                  +
                  SH
                  +

                  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 1,1 for the luma plane, and +0.5,0.5 for chroma planes. +

                  +
                  +
                  T
                  +

                  Time of the current frame, expressed in seconds. +

                  +
                  +
                  p(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the current +plane. +

                  +
                  +
                  lum(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the luminance +plane. +

                  +
                  +
                  cb(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the +blue-difference chroma plane. Return 0 if there is no such plane. +

                  +
                  +
                  cr(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the +red-difference chroma plane. Return 0 if there is no such plane. +

                  +
                  +
                  r(x, y)
                  +
                  g(x, y)
                  +
                  b(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the +red/green/blue component. Return 0 if there is no such component. +

                  +
                  +
                  alpha(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the alpha +plane. Return 0 if there is no such plane. +

                  +
                  + +

                  For functions, if x and y are outside the area, the value will be +automatically clipped to the closer edge. +

                  + +

                  33.34.1 Examples

                  + +
                    +
                  • +Flip the image horizontally: +
                     
                    geq=p(W-X\,Y)
                    +
                    + +
                  • +Generate a bidimensional sine wave, with angle PI/3 and a +wavelength of 100 pixels: +
                     
                    geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
                    +
                    + +
                  • +Generate a fancy enigmatic moving light: +
                     
                    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
                    +
                    + +
                  • +Generate a quick emboss effect: +
                     
                    format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
                    +
                    + +
                  • +Modify RGB components depending on pixel position: +
                     
                    geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
                    +
                    +
                  + + +

                  33.35 gradfun

                  + +

                  Fix the banding artifacts that are sometimes introduced into nearly flat +regions by truncation to 8bit color depth. +Interpolate the gradients that should go where the bands are, and +dither them. +

                  +

                  This filter is designed for playback only. Do not use it prior to +lossy compression, because compression tends to lose the dither and +bring back the bands. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  strength
                  +

                  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. +

                  +
                  +
                  radius
                  +

                  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. +

                  +
                  +
                  + +

                  Alternatively, the options can be specified as a flat string: +strength[:radius] +

                  + +

                  33.35.1 Examples

                  + +
                    +
                  • +Apply the filter with a 3.5 strength and radius of 8: +
                     
                    gradfun=3.5:8
                    +
                    + +
                  • +Specify radius, omitting the strength (which will fall-back to the default +value): +
                     
                    gradfun=radius=8
                    +
                    + +
                  + +

                  +

                  +

                  33.36 haldclut

                  + +

                  Apply a Hald CLUT to a video stream. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  shortest
                  +

                  Force termination when the shortest input terminates. Default is 0. +

                  +
                  repeatlast
                  +

                  Continue applying the last CLUT after the end of the stream. A value of +0 disable the filter after the last frame of the CLUT is reached. +Default is 1. +

                  +
                  + +

                  haldclut also has the same interpolation options as lut3d (both +filters share the same internals). +

                  +

                  More information about the Hald CLUT can be found on Eskil Steenberg’s website +(Hald CLUT author) at http://www.quelsolaar.com/technology/clut.html. +

                  + +

                  33.36.1 Workflow examples

                  + + +

                  33.36.1.1 Hald CLUT video stream

                  + +

                  Generate an identity Hald CLUT stream altered with various effects: +

                   
                  ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
                  +
                  + +

                  Note: make sure you use a lossless codec. +

                  +

                  Then use it with haldclut to apply it on some random stream: +

                   
                  ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
                  +
                  + +

                  The Hald CLUT will be applied to the 10 first seconds (duration of +‘clut.nut’), then the latest picture of that CLUT stream will be applied +to the remaining frames of the mandelbrot stream. +

                  + +

                  33.36.1.2 Hald CLUT with preview

                  + +

                  A Hald CLUT is supposed to be a squared image of Level*Level*Level by +Level*Level*Level 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. +

                  +

                  Typically, the following generated Hald CLUT will be supported by the +haldclut filter: +

                  +
                   
                  ffmpeg -f lavfi -i haldclutsrc=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
                  +
                  + +

                  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. +

                  +

                  Then, the effect of this Hald CLUT can be visualized with: +

                   
                  ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
                  +
                  + + +

                  33.37 hflip

                  + +

                  Flip the input video horizontally. +

                  +

                  For example to horizontally flip the input video with ffmpeg: +

                   
                  ffmpeg -i in.avi -vf "hflip" out.avi
                  +
                  + + +

                  33.38 histeq

                  +

                  This filter applies a global color histogram equalization on a +per-frame basis. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  strength
                  +

                  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. +

                  +
                  +
                  intensity
                  +

                  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. +

                  +
                  +
                  antibanding
                  +

                  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 none, weak or +strong. It defaults to none. +

                  +
                  + + +

                  33.39 histogram

                  + +

                  Compute and draw a color distribution histogram for the input video. +

                  +

                  The computed histogram is a representation of distribution of color components +in an image. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  mode
                  +

                  Set histogram mode. +

                  +

                  It accepts the following values: +

                  +
                  levels
                  +

                  standard histogram that display 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 current frame. Bellow each graph is color component scale meter. +

                  +
                  +
                  color
                  +

                  chroma values in vectorscope, if brighter more such chroma values are +distributed in an image. +Displays chroma values (U/V color placement) in two dimensional graph +(which is called a vectorscope). It can be used to read of the hue and +saturation of the current frame. At a same time it is a histogram. +The whiter a pixel in the vectorscope, the more pixels of the input frame +correspond to that pixel (that is the 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. +

                  +

                  The position of a white pixel in the graph corresponds to the chroma value +of a pixel of the input clip. So the graph can be used to read of 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 you increase the amount of a specific color, while leaving +the other colors unchanged, the saturation increases, and you move towards +the edge of the square. +

                  +
                  +
                  color2
                  +

                  chroma values in vectorscope, similar as color but actual chroma values +are displayed. +

                  +
                  +
                  waveform
                  +

                  per row/column color component graph. In row mode graph in the left side represents +color component value 0 and right side represents value = 255. In column mode top +side represents color component value = 0 and bottom side represents value = 255. +

                  +
                  +

                  Default value is levels. +

                  +
                  +
                  level_height
                  +

                  Set height of level in levels. Default value is 200. +Allowed range is [50, 2048]. +

                  +
                  +
                  scale_height
                  +

                  Set height of color scale in levels. Default value is 12. +Allowed range is [0, 40]. +

                  +
                  +
                  step
                  +

                  Set step for waveform mode. Smaller values are useful to find out how much +of same luminance values across input rows/columns are distributed. +Default value is 10. Allowed range is [1, 255]. +

                  +
                  +
                  waveform_mode
                  +

                  Set mode for waveform. Can be either row, or column. +Default is row. +

                  +
                  +
                  waveform_mirror
                  +

                  Set mirroring mode for waveform. 0 means unmirrored, 1 +means mirrored. In mirrored mode, higher values will be represented on the left +side for row mode and at the top for column mode. Default is +0 (unmirrored). +

                  +
                  +
                  display_mode
                  +

                  Set display mode for waveform and levels. +It accepts the following values: +

                  +
                  parade
                  +

                  Display separate graph for the color components side by side in +row waveform mode or one below other in column waveform mode +for waveform histogram mode. For levels histogram mode +per color component graphs are placed one bellow other. +

                  +

                  This display mode in waveform 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 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 make by making adjustments to level the +three waveforms. +

                  +
                  +
                  overlay
                  +

                  Presents information that’s identical to that in the parade, except +that the graphs representing color components are superimposed directly +over one another. +

                  +

                  This display mode in waveform histogram mode can make it easier to spot +the relative differences or similarities in overlapping areas of the color +components that are supposed to be identical, such as neutral whites, grays, +or blacks. +

                  +
                  +

                  Default is parade. +

                  +
                  +
                  levels_mode
                  +

                  Set mode for levels. Can be either linear, or logarithmic. +Default is linear. +

                  +
                  + + +

                  33.39.1 Examples

                  + +
                    +
                  • +Calculate and draw histogram: +
                     
                    ffplay -i input -vf histogram
                    +
                    + +
                  + +

                  +

                  +

                  33.40 hqdn3d

                  + +

                  High precision/quality 3d denoise filter. This filter aims to reduce +image noise producing smooth images and making still images really +still. It should enhance compressibility. +

                  +

                  It accepts the following optional parameters: +

                  +
                  +
                  luma_spatial
                  +

                  a non-negative float number which specifies spatial luma strength, +defaults to 4.0 +

                  +
                  +
                  chroma_spatial
                  +

                  a non-negative float number which specifies spatial chroma strength, +defaults to 3.0*luma_spatial/4.0 +

                  +
                  +
                  luma_tmp
                  +

                  a float number which specifies luma temporal strength, defaults to +6.0*luma_spatial/4.0 +

                  +
                  +
                  chroma_tmp
                  +

                  a float number which specifies chroma temporal strength, defaults to +luma_tmp*chroma_spatial/luma_spatial +

                  +
                  + + +

                  33.41 hue

                  + +

                  Modify the hue and/or the saturation of the input. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  h
                  +

                  Specify the hue angle as a number of degrees. It accepts an expression, +and defaults to "0". +

                  +
                  +
                  s
                  +

                  Specify the saturation in the [-10,10] range. It accepts an expression and +defaults to "1". +

                  +
                  +
                  H
                  +

                  Specify the hue angle as a number of radians. It accepts an +expression, and defaults to "0". +

                  +
                  +
                  b
                  +

                  Specify the brightness in the [-10,10] range. It accepts an expression and +defaults to "0". +

                  +
                  + +

                  h’ and ‘H’ are mutually exclusive, and can’t be +specified at the same time. +

                  +

                  The ‘b’, ‘h’, ‘H’ and ‘s’ option values are +expressions containing the following constants: +

                  +
                  +
                  n
                  +

                  frame count of the input frame starting from 0 +

                  +
                  +
                  pts
                  +

                  presentation timestamp of the input frame expressed in time base units +

                  +
                  +
                  r
                  +

                  frame rate of the input video, NAN if the input frame rate is unknown +

                  +
                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  +
                  tb
                  +

                  time base of the input video +

                  +
                  + + +

                  33.41.1 Examples

                  + +
                    +
                  • +Set the hue to 90 degrees and the saturation to 1.0: +
                     
                    hue=h=90:s=1
                    +
                    + +
                  • +Same command but expressing the hue in radians: +
                     
                    hue=H=PI/2:s=1
                    +
                    + +
                  • +Rotate hue and make the saturation swing between 0 +and 2 over a period of 1 second: +
                     
                    hue="H=2*PI*t: s=sin(2*PI*t)+1"
                    +
                    + +
                  • +Apply a 3 seconds saturation fade-in effect starting at 0: +
                     
                    hue="s=min(t/3\,1)"
                    +
                    + +

                    The general fade-in expression can be written as: +

                     
                    hue="s=min(0\, max((t-START)/DURATION\, 1))"
                    +
                    + +
                  • +Apply a 3 seconds saturation fade-out effect starting at 5 seconds: +
                     
                    hue="s=max(0\, min(1\, (8-t)/3))"
                    +
                    + +

                    The general fade-out expression can be written as: +

                     
                    hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
                    +
                    + +
                  + + +

                  33.41.2 Commands

                  + +

                  This filter supports the following commands: +

                  +
                  b
                  +
                  s
                  +
                  h
                  +
                  H
                  +

                  Modify the hue and/or the saturation and/or brightness of the input video. +The command accepts the same syntax of the corresponding option. +

                  +

                  If the specified expression is not valid, it is kept at its current +value. +

                  +
                  + + +

                  33.42 idet

                  + +

                  Detect video interlacing type. +

                  +

                  This filter tries to detect if the input is interlaced or progressive, +top or bottom field first. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  intl_thres
                  +

                  Set interlacing threshold. +

                  +
                  prog_thres
                  +

                  Set progressive threshold. +

                  +
                  + + +

                  33.43 il

                  + +

                  Deinterleave or interleave fields. +

                  +

                  This filter allows 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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  luma_mode, l
                  +
                  chroma_mode, c
                  +
                  alpha_mode, a
                  +

                  Available values for luma_mode, chroma_mode and +alpha_mode are: +

                  +
                  +
                  none
                  +

                  Do nothing. +

                  +
                  +
                  deinterleave, d
                  +

                  Deinterleave fields, placing one above the other. +

                  +
                  +
                  interleave, i
                  +

                  Interleave fields. Reverse the effect of deinterleaving. +

                  +
                  +

                  Default value is none. +

                  +
                  +
                  luma_swap, ls
                  +
                  chroma_swap, cs
                  +
                  alpha_swap, as
                  +

                  Swap luma/chroma/alpha fields. Exchange even & odd lines. Default value is 0. +

                  +
                  + + +

                  33.44 interlace

                  + +

                  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. +

                  +
                   
                     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
                  +
                  + +

                  It accepts the following optional parameters: +

                  +
                  +
                  scan
                  +

                  determines whether the interlaced frame is taken from the even (tff - default) +or odd (bff) lines of the progressive frame. +

                  +
                  +
                  lowpass
                  +

                  Enable (default) or disable the vertical lowpass filter to avoid twitter +interlacing and reduce moire patterns. +

                  +
                  + + +

                  33.45 kerndeint

                  + +

                  Deinterlace input video by applying Donald Graft’s adaptive kernel +deinterling. Work on interlaced parts of a video to produce +progressive frames. +

                  +

                  The description of the accepted parameters follows. +

                  +
                  +
                  thresh
                  +

                  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. +

                  +
                  +
                  map
                  +

                  Paint pixels exceeding the threshold value to white if set to 1. +Default is 0. +

                  +
                  +
                  order
                  +

                  Set the fields order. Swap fields if set to 1, leave fields alone if +0. Default is 0. +

                  +
                  +
                  sharp
                  +

                  Enable additional sharpening if set to 1. Default is 0. +

                  +
                  +
                  twoway
                  +

                  Enable twoway sharpening if set to 1. Default is 0. +

                  +
                  + + +

                  33.45.1 Examples

                  + +
                    +
                  • +Apply default values: +
                     
                    kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
                    +
                    + +
                  • +Enable additional sharpening: +
                     
                    kerndeint=sharp=1
                    +
                    + +
                  • +Paint processed pixels in white: +
                     
                    kerndeint=map=1
                    +
                    +
                  + +

                  +

                  +

                  33.46 lut3d

                  + +

                  Apply a 3D LUT to an input video. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  file
                  +

                  Set the 3D LUT file name. +

                  +

                  Currently supported formats: +

                  +
                  3dl
                  +

                  AfterEffects +

                  +
                  cube
                  +

                  Iridas +

                  +
                  dat
                  +

                  DaVinci +

                  +
                  m3d
                  +

                  Pandora +

                  +
                  +
                  +
                  interp
                  +

                  Select interpolation mode. +

                  +

                  Available values are: +

                  +
                  +
                  nearest
                  +

                  Use values from the nearest defined point. +

                  +
                  trilinear
                  +

                  Interpolate values using the 8 points defining a cube. +

                  +
                  tetrahedral
                  +

                  Interpolate values using a tetrahedron. +

                  +
                  +
                  +
                  + + +

                  33.47 lut, lutrgb, lutyuv

                  + +

                  Compute a look-up table for binding each pixel component input value +to an output value, and apply it to input video. +

                  +

                  lutyuv applies a lookup table to a YUV input video, lutrgb +to an RGB input video. +

                  +

                  These filters accept the following options: +

                  +
                  c0
                  +

                  set first pixel component expression +

                  +
                  c1
                  +

                  set second pixel component expression +

                  +
                  c2
                  +

                  set third pixel component expression +

                  +
                  c3
                  +

                  set fourth pixel component expression, corresponds to the alpha component +

                  +
                  +
                  r
                  +

                  set red component expression +

                  +
                  g
                  +

                  set green component expression +

                  +
                  b
                  +

                  set blue component expression +

                  +
                  a
                  +

                  alpha component expression +

                  +
                  +
                  y
                  +

                  set Y/luminance component expression +

                  +
                  u
                  +

                  set U/Cb component expression +

                  +
                  v
                  +

                  set V/Cr component expression +

                  +
                  + +

                  Each of them specifies the expression to use for computing the lookup table for +the corresponding pixel component values. +

                  +

                  The exact component associated to each of the c* options depends on the +format in input. +

                  +

                  The lut filter requires either YUV or RGB pixel formats in input, +lutrgb requires RGB pixel formats in input, and lutyuv requires YUV. +

                  +

                  The expressions can contain the following constants and functions: +

                  +
                  +
                  w
                  +
                  h
                  +

                  the input width and height +

                  +
                  +
                  val
                  +

                  input value for the pixel component +

                  +
                  +
                  clipval
                  +

                  the input value clipped in the minval-maxval range +

                  +
                  +
                  maxval
                  +

                  maximum value for the pixel component +

                  +
                  +
                  minval
                  +

                  minimum value for the pixel component +

                  +
                  +
                  negval
                  +

                  the negated value for the pixel component value clipped in the +minval-maxval range , it corresponds to the expression +"maxval-clipval+minval" +

                  +
                  +
                  clip(val)
                  +

                  the computed value in val clipped in the +minval-maxval range +

                  +
                  +
                  gammaval(gamma)
                  +

                  the computed gamma correction value of the pixel component value +clipped in the minval-maxval range, corresponds to the +expression +"pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval" +

                  +
                  +
                  + +

                  All expressions default to "val". +

                  + +

                  33.47.1 Examples

                  + +
                    +
                  • +Negate input video: +
                     
                    lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
                    +lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
                    +
                    + +

                    The above is the same as: +

                     
                    lutrgb="r=negval:g=negval:b=negval"
                    +lutyuv="y=negval:u=negval:v=negval"
                    +
                    + +
                  • +Negate luminance: +
                     
                    lutyuv=y=negval
                    +
                    + +
                  • +Remove chroma components, turns the video into a graytone image: +
                     
                    lutyuv="u=128:v=128"
                    +
                    + +
                  • +Apply a luma burning effect: +
                     
                    lutyuv="y=2*val"
                    +
                    + +
                  • +Remove green and blue components: +
                     
                    lutrgb="g=0:b=0"
                    +
                    + +
                  • +Set a constant alpha channel value on input: +
                     
                    format=rgba,lutrgb=a="maxval-minval/2"
                    +
                    + +
                  • +Correct luminance gamma by a 0.5 factor: +
                     
                    lutyuv=y=gammaval(0.5)
                    +
                    + +
                  • +Discard least significant bits of luma: +
                     
                    lutyuv=y='bitand(val, 128+64+32)'
                    +
                    +
                  + + +

                  33.48 mergeplanes

                  + +

                  Merge color channel components from several video streams. +

                  +

                  The filter accepts up to 4 input streams, and merge selected input +planes to the output video. +

                  +

                  This filter accepts the following options: +

                  +
                  mapping
                  +

                  Set input to output plane mapping. Default is 0. +

                  +

                  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. +

                  +
                  +
                  format
                  +

                  Set output pixel format. Default is yuva444p. +

                  +
                  + + +

                  33.48.1 Examples

                  + +
                    +
                  • +Merge three gray video streams of same width and height into single video stream: +
                     
                    [a0][a1][a2]mergeplanes=0x001020:yuv444p
                    +
                    + +
                  • +Merge 1st yuv444p stream and 2nd gray video stream into yuva444p video stream: +
                     
                    [a0][a1]mergeplanes=0x00010210:yuva444p
                    +
                    + +
                  • +Swap Y and A plane in yuva444p stream: +
                     
                    format=yuva444p,mergeplanes=0x03010200:yuva444p
                    +
                    + +
                  • +Swap U and V plane in yuv420p stream: +
                     
                    format=yuv420p,mergeplanes=0x000201:yuv420p
                    +
                    + +
                  • +Cast a rgb24 clip to yuv444p: +
                     
                    format=rgb24,mergeplanes=0x000102:yuv444p
                    +
                    +
                  + + +

                  33.49 mcdeint

                  + +

                  Apply motion-compensation deinterlacing. +

                  +

                  It needs one field per frame as input and must thus be used together +with yadif=1/3 or equivalent. +

                  +

                  This filter accepts the following options: +

                  +
                  mode
                  +

                  Set the deinterlacing mode. +

                  +

                  It accepts one of the following values: +

                  +
                  fast
                  +
                  medium
                  +
                  slow
                  +

                  use iterative motion estimation +

                  +
                  extra_slow
                  +

                  like ‘slow’, but use multiple reference frames. +

                  +
                  +

                  Default value is ‘fast’. +

                  +
                  +
                  parity
                  +

                  Set the picture field parity assumed for the input video. It must be +one of the following values: +

                  +
                  +
                  0, tff
                  +

                  assume top field first +

                  +
                  1, bff
                  +

                  assume bottom field first +

                  +
                  + +

                  Default value is ‘bff’. +

                  +
                  +
                  qp
                  +

                  Set per-block quantization parameter (QP) used by the internal +encoder. +

                  +

                  Higher values should result in a smoother motion vector field but less +optimal individual vectors. Default value is 1. +

                  +
                  + + +

                  33.50 mp

                  + +

                  Apply an MPlayer filter to the input video. +

                  +

                  This filter provides a wrapper around some of the filters of +MPlayer/MEncoder. +

                  +

                  This wrapper is considered experimental. Some of the wrapped filters +may not work properly and we may drop support for them, as they will +be implemented natively into FFmpeg. Thus you should avoid +depending on them when writing portable scripts. +

                  +

                  The filter accepts the parameters: +filter_name[:=]filter_params +

                  +

                  filter_name is the name of a supported MPlayer filter, +filter_params is a string containing the parameters accepted by +the named filter. +

                  +

                  The list of the currently supported filters follows: +

                  +
                  eq2
                  +
                  eq
                  +
                  fspp
                  +
                  ilpack
                  +
                  pp7
                  +
                  softpulldown
                  +
                  uspp
                  +
                  + +

                  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. +

                  + +

                  33.50.1 Examples

                  + +
                    +
                  • +Adjust gamma, brightness, contrast: +
                     
                    mp=eq2=1.0:2:0.5
                    +
                    +
                  + +

                  See also mplayer(1), http://www.mplayerhq.hu/. +

                  + +

                  33.51 mpdecimate

                  + +

                  Drop frames that do not differ greatly from the previous frame in +order to reduce frame rate. +

                  +

                  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. +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  max
                  +

                  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. +

                  +

                  Default value is 0. +

                  +
                  +
                  hi
                  +
                  lo
                  +
                  frac
                  +

                  Set the dropping threshold values. +

                  +

                  Values for ‘hi’ and ‘lo’ 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. +

                  +

                  A frame is a candidate for dropping if no 8x8 blocks differ by more +than a threshold of ‘hi’, and if no more than ‘frac’ blocks (1 +meaning the whole image) differ by more than a threshold of ‘lo’. +

                  +

                  Default value for ‘hi’ is 64*12, default value for ‘lo’ is +64*5, and default value for ‘frac’ is 0.33. +

                  +
                  + + + +

                  33.52 negate

                  + +

                  Negate input video. +

                  +

                  This filter accepts an integer in input, if non-zero it negates the +alpha component (if available). The default value in input is 0. +

                  + +

                  33.53 noformat

                  + +

                  Force libavfilter not to use any of the specified pixel formats for the +input to the next filter. +

                  +

                  This filter accepts the following parameters: +

                  +
                  pix_fmts
                  +

                  A ’|’-separated list of pixel format names, for example +"pix_fmts=yuv420p|monow|rgb24". +

                  +
                  +
                  + + +

                  33.53.1 Examples

                  + +
                    +
                  • +Force libavfilter to use a format different from yuv420p for the +input to the vflip filter: +
                     
                    noformat=pix_fmts=yuv420p,vflip
                    +
                    + +
                  • +Convert the input video to any of the formats not contained in the list: +
                     
                    noformat=yuv420p|yuv444p|yuv410p
                    +
                    +
                  + + +

                  33.54 noise

                  + +

                  Add noise on video input frame. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  all_seed
                  +
                  c0_seed
                  +
                  c1_seed
                  +
                  c2_seed
                  +
                  c3_seed
                  +

                  Set noise seed for specific pixel component or all pixel components in case +of all_seed. Default value is 123457. +

                  +
                  +
                  all_strength, alls
                  +
                  c0_strength, c0s
                  +
                  c1_strength, c1s
                  +
                  c2_strength, c2s
                  +
                  c3_strength, c3s
                  +

                  Set noise strength for specific pixel component or all pixel components in case +all_strength. Default value is 0. Allowed range is [0, 100]. +

                  +
                  +
                  all_flags, allf
                  +
                  c0_flags, c0f
                  +
                  c1_flags, c1f
                  +
                  c2_flags, c2f
                  +
                  c3_flags, c3f
                  +

                  Set pixel component flags or set flags for all components if all_flags. +Available values for component flags are: +

                  +
                  a
                  +

                  averaged temporal noise (smoother) +

                  +
                  p
                  +

                  mix random noise with a (semi)regular pattern +

                  +
                  t
                  +

                  temporal noise (noise pattern changes between frames) +

                  +
                  u
                  +

                  uniform noise (gaussian otherwise) +

                  +
                  +
                  +
                  + + +

                  33.54.1 Examples

                  + +

                  Add temporal and uniform noise to input video: +

                   
                  noise=alls=20:allf=t+u
                  +
                  + + +

                  33.55 null

                  + +

                  Pass the video source unchanged to the output. +

                  + +

                  33.56 ocv

                  + +

                  Apply video transform using libopencv. +

                  +

                  To enable this filter install libopencv library and headers and +configure FFmpeg with --enable-libopencv. +

                  +

                  This filter accepts the following parameters: +

                  +
                  +
                  filter_name
                  +

                  The name of the libopencv filter to apply. +

                  +
                  +
                  filter_params
                  +

                  The parameters to pass to the libopencv filter. If not specified the default +values are assumed. +

                  +
                  +
                  + +

                  Refer to the official libopencv documentation for more precise +information: +http://opencv.willowgarage.com/documentation/c/image_filtering.html +

                  +

                  Follows the list of supported libopencv filters. +

                  +

                  +

                  +

                  33.56.1 dilate

                  + +

                  Dilate an image by using a specific structuring element. +This filter corresponds to the libopencv function cvDilate. +

                  +

                  It accepts the parameters: struct_el|nb_iterations. +

                  +

                  struct_el represents a structuring element, and has the syntax: +colsxrows+anchor_xxanchor_y/shape +

                  +

                  cols and rows represent the number of columns and rows of +the structuring element, anchor_x and anchor_y the anchor +point, and shape the shape for the structuring element, and +can be one of the values "rect", "cross", "ellipse", "custom". +

                  +

                  If the value for shape is "custom", it must be followed by a +string of the form "=filename". The file with name +filename is assumed to represent a binary image, with each +printable character corresponding to a bright pixel. When a custom +shape is used, cols and rows are ignored, the number +or columns and rows of the read file are assumed instead. +

                  +

                  The default value for struct_el is "3x3+0x0/rect". +

                  +

                  nb_iterations specifies the number of times the transform is +applied to the image, and defaults to 1. +

                  +

                  Follow some example: +

                   
                  # use the default values
                  +ocv=dilate
                  +
                  +# dilate using a structuring element with a 5x5 cross, iterate two times
                  +ocv=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
                  +
                  + + +

                  33.56.2 erode

                  + +

                  Erode an image by using a specific structuring element. +This filter corresponds to the libopencv function cvErode. +

                  +

                  The filter accepts the parameters: struct_el:nb_iterations, +with the same syntax and semantics as the dilate filter. +

                  + +

                  33.56.3 smooth

                  + +

                  Smooth the input video. +

                  +

                  The filter takes the following parameters: +type|param1|param2|param3|param4. +

                  +

                  type is the type of smooth filter to apply, and can be one of +the following values: "blur", "blur_no_scale", "median", "gaussian", +"bilateral". The default value is "gaussian". +

                  +

                  param1, param2, param3, and param4 are +parameters whose meanings depend on smooth type. param1 and +param2 accept integer positive values or 0, param3 and +param4 accept float values. +

                  +

                  The default value for param1 is 3, the default value for the +other parameters is 0. +

                  +

                  These parameters correspond to the parameters assigned to the +libopencv function cvSmooth. +

                  +

                  +

                  +

                  33.57 overlay

                  + +

                  Overlay one video on top of another. +

                  +

                  It takes two inputs and one output, the first input is the "main" +video on which the second input is overlayed. +

                  +

                  This filter accepts the following parameters: +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  x
                  +
                  y
                  +

                  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). +

                  +
                  +
                  eval
                  +

                  Set when the expressions for ‘x’, and ‘y’ are evaluated. +

                  +

                  It accepts the following values: +

                  +
                  init
                  +

                  only evaluate expressions once during the filter initialization or +when a command is processed +

                  +
                  +
                  frame
                  +

                  evaluate expressions for each incoming frame +

                  +
                  + +

                  Default value is ‘frame’. +

                  +
                  +
                  shortest
                  +

                  If set to 1, force the output to terminate when the shortest input +terminates. Default value is 0. +

                  +
                  +
                  format
                  +

                  Set the format for the output video. +

                  +

                  It accepts the following values: +

                  +
                  yuv420
                  +

                  force YUV420 output +

                  +
                  +
                  yuv444
                  +

                  force YUV444 output +

                  +
                  +
                  rgb
                  +

                  force RGB output +

                  +
                  + +

                  Default value is ‘yuv420’. +

                  +
                  +
                  rgb (deprecated)
                  +

                  If set to 1, force the filter to accept inputs in the RGB +color space. Default value is 0. This option is deprecated, use +‘format’ instead. +

                  +
                  +
                  repeatlast
                  +

                  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. +

                  +
                  + +

                  The ‘x’, and ‘y’ expressions can contain the following +parameters. +

                  +
                  +
                  main_w, W
                  +
                  main_h, H
                  +

                  main input width and height +

                  +
                  +
                  overlay_w, w
                  +
                  overlay_h, h
                  +

                  overlay input width and height +

                  +
                  +
                  x
                  +
                  y
                  +

                  the computed values for x and y. They are evaluated for +each new frame. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values of the output +format. For example for the pixel format "yuv422p" hsub is 2 and +vsub is 1. +

                  +
                  +
                  n
                  +

                  the number of input frame, starting from 0 +

                  +
                  +
                  pos
                  +

                  the position in the file of the input frame, NAN if unknown +

                  +
                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  + +

                  Note that the n, pos, t variables are available only +when evaluation is done per frame, and will evaluate to NAN +when ‘eval’ is set to ‘init’. +

                  +

                  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 setpts=PTS-STARTPTS filter to +have them begin in the same zero timestamp, as it does the example for +the movie filter. +

                  +

                  You can chain together more overlays but you should test the +efficiency of such approach. +

                  + +

                  33.57.1 Commands

                  + +

                  This filter supports the following commands: +

                  +
                  x
                  +
                  y
                  +

                  Modify the x and y of the overlay input. +The command accepts the same syntax of the corresponding option. +

                  +

                  If the specified expression is not valid, it is kept at its current +value. +

                  +
                  + + +

                  33.57.2 Examples

                  + +
                    +
                  • +Draw the overlay at 10 pixels from the bottom right corner of the main +video: +
                     
                    overlay=main_w-overlay_w-10:main_h-overlay_h-10
                    +
                    + +

                    Using named options the example above becomes: +

                     
                    overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
                    +
                    + +
                  • +Insert a transparent PNG logo in the bottom left corner of the input, +using the ffmpeg tool with the -filter_complex option: +
                     
                    ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
                    +
                    + +
                  • +Insert 2 different transparent PNG logos (second logo on bottom +right corner) using the ffmpeg tool: +
                     
                    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
                    +
                    + +
                  • +Add a transparent color layer on top of the main video, WxH +must specify the size of the main input to the overlay filter: +
                     
                    color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
                    +
                    + +
                  • +Play an original video and a filtered version (here with the deshake +filter) side by side using the ffplay tool: +
                     
                    ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
                    +
                    + +

                    The above command is the same as: +

                     
                    ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
                    +
                    + +
                  • +Make a sliding overlay appearing from the left to the right top part of the +screen starting since time 2: +
                     
                    overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
                    +
                    + +
                  • +Compose output by putting two input videos side to side: +
                     
                    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]
                    +"
                    +
                    + +
                  • +Chain several overlays in cascade: +
                     
                    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]
                    +
                    + +
                  + + +

                  33.58 owdenoise

                  + +

                  Apply Overcomplete Wavelet denoiser. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  depth
                  +

                  Set depth. +

                  +

                  Larger depth values will denoise lower frequency components more, but +slow down filtering. +

                  +

                  Must be an int in the range 8-16, default is 8. +

                  +
                  +
                  luma_strength, ls
                  +

                  Set luma strength. +

                  +

                  Must be a double value in the range 0-1000, default is 1.0. +

                  +
                  +
                  chroma_strength, cs
                  +

                  Set chroma strength. +

                  +

                  Must be a double value in the range 0-1000, default is 1.0. +

                  +
                  + + +

                  33.59 pad

                  + +

                  Add paddings to the input image, and place the original input at the +given coordinates x, y. +

                  +

                  This filter accepts the following parameters: +

                  +
                  +
                  width, w
                  +
                  height, h
                  +

                  Specify an expression for the size of the output image with the +paddings added. If the value for width or height is 0, the +corresponding input size is used for the output. +

                  +

                  The width expression can reference the value set by the +height expression, and vice versa. +

                  +

                  The default value of width and height is 0. +

                  +
                  +
                  x
                  +
                  y
                  +

                  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. +

                  +

                  The x expression can reference the value set by the y +expression, and vice versa. +

                  +

                  The default value of x and y is 0. +

                  +
                  +
                  color
                  +

                  Specify the color of the padded area. For the syntax of this option, +check the "Color" section in the ffmpeg-utils manual. +

                  +

                  The default value of color is "black". +

                  +
                  + +

                  The value for the width, height, x, and y +options are expressions containing the following constants: +

                  +
                  +
                  in_w
                  +
                  in_h
                  +

                  the input video width and height +

                  +
                  +
                  iw
                  +
                  ih
                  +

                  same as in_w and in_h +

                  +
                  +
                  out_w
                  +
                  out_h
                  +

                  the output width and height, that is the size of the padded area as +specified by the width and height expressions +

                  +
                  +
                  ow
                  +
                  oh
                  +

                  same as out_w and out_h +

                  +
                  +
                  x
                  +
                  y
                  +

                  x and y offsets as specified by the x and y +expressions, or NAN if not yet specified +

                  +
                  +
                  a
                  +

                  same as iw / ih +

                  +
                  +
                  sar
                  +

                  input sample aspect ratio +

                  +
                  +
                  dar
                  +

                  input display aspect ratio, it is the same as (iw / ih) * sar +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  + + +

                  33.59.1 Examples

                  + +
                    +
                  • +Add paddings with color "violet" to the input video. Output video +size is 640x480, the top-left corner of the input video is placed at +column 0, row 40: +
                     
                    pad=640:480:0:40:violet
                    +
                    + +

                    The example above is equivalent to the following command: +

                     
                    pad=width=640:height=480:x=0:y=40:color=violet
                    +
                    + +
                  • +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: +
                     
                    pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
                    +
                    + +
                  • +Pad the input to get a squared output with size equal to the maximum +value between the input width and height, and put the input video at +the center of the padded area: +
                     
                    pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
                    +
                    + +
                  • +Pad the input to get a final w/h ratio of 16:9: +
                     
                    pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
                    +
                    + +
                  • +In case of anamorphic video, in order to set the output display aspect +correctly, it is necessary to use sar in the expression, +according to the relation: +
                     
                    (ih * X / ih) * sar = output_dar
                    +X = output_dar / sar
                    +
                    + +

                    Thus the previous example needs to be modified to: +

                     
                    pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
                    +
                    + +
                  • +Double output size and put the input video in the bottom-right +corner of the output padded area: +
                     
                    pad="2*iw:2*ih:ow-iw:oh-ih"
                    +
                    +
                  + + +

                  33.60 perspective

                  + +

                  Correct perspective of video not recorded perpendicular to the screen. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  x0
                  +
                  y0
                  +
                  x1
                  +
                  y1
                  +
                  x2
                  +
                  y2
                  +
                  x3
                  +
                  y3
                  +

                  Set coordinates expression for top left, top right, bottom left and bottom right corners. +Default values are 0:0:W:0:0:H:W:H with which perspective will remain unchanged. +

                  +

                  The expressions can use the following variables: +

                  +
                  +
                  W
                  +
                  H
                  +

                  the width and height of video frame. +

                  +
                  + +
                  +
                  interpolation
                  +

                  Set interpolation for perspective correction. +

                  +

                  It accepts the following values: +

                  +
                  linear
                  +
                  cubic
                  +
                  + +

                  Default value is ‘linear’. +

                  +
                  + + +

                  33.61 phase

                  + +

                  Delay interlaced video by one field time so that the field order changes. +

                  +

                  The intended use is to fix PAL movies that have been captured with the +opposite field order to the film-to-video transfer. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  mode
                  +

                  Set phase mode. +

                  +

                  It accepts the following values: +

                  +
                  t
                  +

                  Capture field order top-first, transfer bottom-first. +Filter will delay the bottom field. +

                  +
                  +
                  b
                  +

                  Capture field order bottom-first, transfer top-first. +Filter will delay the top field. +

                  +
                  +
                  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. +

                  +
                  +
                  a
                  +

                  Capture field order determined automatically by field flags, transfer +opposite. +Filter selects among ‘t’ and ‘b’ modes on a frame by frame +basis using field flags. If no field information is available, +then this works just like ‘u’. +

                  +
                  +
                  u
                  +

                  Capture unknown or varying, transfer opposite. +Filter selects among ‘t’ and ‘b’ on a frame by frame basis by +analyzing the images and selecting the alternative that produces best +match between the fields. +

                  +
                  +
                  T
                  +

                  Capture top-first, transfer unknown or varying. +Filter selects among ‘t’ and ‘p’ using image analysis. +

                  +
                  +
                  B
                  +

                  Capture bottom-first, transfer unknown or varying. +Filter selects among ‘b’ and ‘p’ using image analysis. +

                  +
                  +
                  A
                  +

                  Capture determined by field flags, transfer unknown or varying. +Filter selects among ‘t’, ‘b’ and ‘p’ using field flags and +image analysis. If no field information is available, then this works just +like ‘U’. This is the default mode. +

                  +
                  +
                  U
                  +

                  Both capture and transfer unknown or varying. +Filter selects among ‘t’, ‘b’ and ‘p’ using image analysis only. +

                  +
                  +
                  +
                  + + +

                  33.62 pixdesctest

                  + +

                  Pixel format descriptor test filter, mainly useful for internal +testing. The output video should be equal to the input video. +

                  +

                  For example: +

                   
                  format=monow, pixdesctest
                  +
                  + +

                  can be used to test the monowhite pixel format descriptor definition. +

                  + +

                  33.63 pp

                  + +

                  Enable the specified chain of postprocessing subfilters using libpostproc. This +library should be automatically selected with a GPL build (--enable-gpl). +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. +

                  +

                  The filters accept the following options: +

                  +
                  +
                  subfilters
                  +

                  Set postprocessing subfilters string. +

                  +
                  + +

                  All subfilters share common options to determine their scope: +

                  +
                  +
                  a/autoq
                  +

                  Honor the quality commands for this subfilter. +

                  +
                  +
                  c/chrom
                  +

                  Do chrominance filtering, too (default). +

                  +
                  +
                  y/nochrom
                  +

                  Do luminance filtering only (no chrominance). +

                  +
                  +
                  n/noluma
                  +

                  Do chrominance filtering only (no luminance). +

                  +
                  + +

                  These options can be appended after the subfilter name, separated by a ’|’. +

                  +

                  Available subfilters are: +

                  +
                  +
                  hb/hdeblock[|difference[|flatness]]
                  +

                  Horizontal deblocking filter +

                  +
                  difference
                  +

                  Difference factor where higher values mean more deblocking (default: 32). +

                  +
                  flatness
                  +

                  Flatness threshold where lower values mean more deblocking (default: 39). +

                  +
                  + +
                  +
                  vb/vdeblock[|difference[|flatness]]
                  +

                  Vertical deblocking filter +

                  +
                  difference
                  +

                  Difference factor where higher values mean more deblocking (default: 32). +

                  +
                  flatness
                  +

                  Flatness threshold where lower values mean more deblocking (default: 39). +

                  +
                  + +
                  +
                  ha/hadeblock[|difference[|flatness]]
                  +

                  Accurate horizontal deblocking filter +

                  +
                  difference
                  +

                  Difference factor where higher values mean more deblocking (default: 32). +

                  +
                  flatness
                  +

                  Flatness threshold where lower values mean more deblocking (default: 39). +

                  +
                  + +
                  +
                  va/vadeblock[|difference[|flatness]]
                  +

                  Accurate vertical deblocking filter +

                  +
                  difference
                  +

                  Difference factor where higher values mean more deblocking (default: 32). +

                  +
                  flatness
                  +

                  Flatness threshold where lower values mean more deblocking (default: 39). +

                  +
                  +
                  +
                  + +

                  The horizontal and vertical deblocking filters share the difference and +flatness values so you cannot set different horizontal and vertical +thresholds. +

                  +
                  +
                  h1/x1hdeblock
                  +

                  Experimental horizontal deblocking filter +

                  +
                  +
                  v1/x1vdeblock
                  +

                  Experimental vertical deblocking filter +

                  +
                  +
                  dr/dering
                  +

                  Deringing filter +

                  +
                  +
                  tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer
                  +
                  +
                  threshold1
                  +

                  larger -> stronger filtering +

                  +
                  threshold2
                  +

                  larger -> stronger filtering +

                  +
                  threshold3
                  +

                  larger -> stronger filtering +

                  +
                  + +
                  +
                  al/autolevels[:f/fullyrange], automatic brightness / contrast correction
                  +
                  +
                  f/fullyrange
                  +

                  Stretch luminance to 0-255. +

                  +
                  + +
                  +
                  lb/linblenddeint
                  +

                  Linear blend deinterlacing filter that deinterlaces the given block by +filtering all lines with a (1 2 1) filter. +

                  +
                  +
                  li/linipoldeint
                  +

                  Linear interpolating deinterlacing filter that deinterlaces the given block by +linearly interpolating every second line. +

                  +
                  +
                  ci/cubicipoldeint
                  +

                  Cubic interpolating deinterlacing filter deinterlaces the given block by +cubically interpolating every second line. +

                  +
                  +
                  md/mediandeint
                  +

                  Median deinterlacing filter that deinterlaces the given block by applying a +median filter to every second line. +

                  +
                  +
                  fd/ffmpegdeint
                  +

                  FFmpeg deinterlacing filter that deinterlaces the given block by filtering every +second line with a (-1 4 2 4 -1) filter. +

                  +
                  +
                  l5/lowpass5
                  +

                  Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given +block by filtering all lines with a (-1 2 6 2 -1) filter. +

                  +
                  +
                  fq/forceQuant[|quantizer]
                  +

                  Overrides the quantizer table from the input with the constant quantizer you +specify. +

                  +
                  quantizer
                  +

                  Quantizer to use +

                  +
                  + +
                  +
                  de/default
                  +

                  Default pp filter combination (hb|a,vb|a,dr|a) +

                  +
                  +
                  fa/fast
                  +

                  Fast pp filter combination (h1|a,v1|a,dr|a) +

                  +
                  +
                  ac
                  +

                  High quality pp filter combination (ha|a|128|7,va|a,dr|a) +

                  +
                  + + +

                  33.63.1 Examples

                  + +
                    +
                  • +Apply horizontal and vertical deblocking, deringing and automatic +brightness/contrast: +
                     
                    pp=hb/vb/dr/al
                    +
                    + +
                  • +Apply default filters without brightness/contrast correction: +
                     
                    pp=de/-al
                    +
                    + +
                  • +Apply default filters and temporal denoiser: +
                     
                    pp=default/tmpnoise|1|2|3
                    +
                    + +
                  • +Apply deblocking on luminance only, and switch vertical deblocking on or off +automatically depending on available CPU time: +
                     
                    pp=hb|y/vb|a
                    +
                    +
                  + + +

                  33.64 psnr

                  + +

                  Obtain the average, maximum and minimum PSNR (Peak Signal to Noise +Ratio) between two input videos. +

                  +

                  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. +

                  +

                  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. +

                  +

                  The obtained average PSNR is printed through the logging system. +

                  +

                  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: +

                  +
                   
                  PSNR = 10*log10(MAX^2/MSE)
                  +
                  + +

                  Where MAX is the average of the maximum values of each component of the +image. +

                  +

                  The description of the accepted parameters follows. +

                  +
                  +
                  stats_file, f
                  +

                  If specified the filter will use the named file to save the PSNR of +each individual frame. +

                  +
                  + +

                  The file printed if stats_file is selected, contains a sequence of +key/value pairs of the form key:value for each compared +couple of frames. +

                  +

                  A description of each shown parameter follows: +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 1 +

                  +
                  +
                  mse_avg
                  +

                  Mean Square Error pixel-by-pixel average difference of the compared +frames, averaged over all the image components. +

                  +
                  +
                  mse_y, mse_u, mse_v, mse_r, mse_g, mse_g, mse_a
                  +

                  Mean Square Error pixel-by-pixel average difference of the compared +frames for the component specified by the suffix. +

                  +
                  +
                  psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a
                  +

                  Peak Signal to Noise ratio of the compared frames for the component +specified by the suffix. +

                  +
                  + +

                  For example: +

                   
                  movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
                  +[main][ref] psnr="stats_file=stats.log" [out]
                  +
                  + +

                  On this example the input file being processed is compared with the +reference file ‘ref_movie.mpg’. The PSNR of each individual frame +is stored in ‘stats.log’. +

                  + +

                  33.65 pullup

                  + +

                  Pulldown reversal (inverse telecine) filter, capable of handling mixed +hard-telecine, 24000/1001 fps progressive, and 30000/1001 fps progressive +content. +

                  +

                  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. +

                  +

                  To produce content with an even framerate, insert the fps filter after +pullup, use fps=24000/1001 if the input frame rate is 29.97fps, +fps=24 for 30fps and the (rare) telecined 25fps input. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  jl
                  +
                  jr
                  +
                  jt
                  +
                  jb
                  +

                  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. +

                  +
                  +
                  sb
                  +

                  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 0. +

                  +
                  +
                  mp
                  +

                  Set the metric plane to use. It accepts the following values: +

                  +
                  l
                  +

                  Use luma plane. +

                  +
                  +
                  u
                  +

                  Use chroma blue plane. +

                  +
                  +
                  v
                  +

                  Use chroma red plane. +

                  +
                  + +

                  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 ‘mp’ to a chroma plane is to reduce CPU +load and make pullup usable in realtime on slow machines. +

                  +
                  + +

                  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: +

                   
                  ffmpeg -i input -vf pullup -r 24000/1001 ...
                  +
                  + + +

                  33.66 removelogo

                  + +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  filename, f
                  +

                  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. +

                  +
                  + +

                  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. +

                  +

                  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. +

                  + +

                  33.67 rotate

                  + +

                  Rotate video by an arbitrary angle expressed in radians. +

                  +

                  The filter accepts the following options: +

                  +

                  A description of the optional parameters follows. +

                  +
                  angle, a
                  +

                  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". +

                  +

                  This expression is evaluated for each frame. +

                  +
                  +
                  out_w, ow
                  +

                  Set the output width expression, default value is "iw". +This expression is evaluated just once during configuration. +

                  +
                  +
                  out_h, oh
                  +

                  Set the output height expression, default value is "ih". +This expression is evaluated just once during configuration. +

                  +
                  +
                  bilinear
                  +

                  Enable bilinear interpolation if set to 1, a value of 0 disables +it. Default value is 1. +

                  +
                  +
                  fillcolor, c
                  +

                  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). +

                  +

                  Default value is "black". +

                  +
                  + +

                  The expressions for the angle and the output size can contain the +following constants and functions: +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 0. It is always NAN +before the first frame is filtered. +

                  +
                  +
                  t
                  +

                  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. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  in_w, iw
                  +
                  in_h, ih
                  +

                  the input video width and heigth +

                  +
                  +
                  out_w, ow
                  +
                  out_h, oh
                  +

                  the output width and heigth, that is the size of the padded area as +specified by the width and height expressions +

                  +
                  +
                  rotw(a)
                  +
                  roth(a)
                  +

                  the minimal width/height required for completely containing the input +video rotated by a radians. +

                  +

                  These are only available when computing the ‘out_w’ and +‘out_h’ expressions. +

                  +
                  + + +

                  33.67.1 Examples

                  + +
                    +
                  • +Rotate the input by PI/6 radians clockwise: +
                     
                    rotate=PI/6
                    +
                    + +
                  • +Rotate the input by PI/6 radians counter-clockwise: +
                     
                    rotate=-PI/6
                    +
                    + +
                  • +Apply a constant rotation with period T, starting from an angle of PI/3: +
                     
                    rotate=PI/3+2*PI*t/T
                    +
                    + +
                  • +Make the input video rotation oscillating with a period of T +seconds and an amplitude of A radians: +
                     
                    rotate=A*sin(2*PI/T*t)
                    +
                    + +
                  • +Rotate the video, output size is choosen so that the whole rotating +input video is always completely contained in the output: +
                     
                    rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
                    +
                    + +
                  • +Rotate the video, reduce the output size so that no background is ever +shown: +
                     
                    rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
                    +
                    +
                  + + +

                  33.67.2 Commands

                  + +

                  The filter supports the following commands: +

                  +
                  +
                  a, angle
                  +

                  Set the angle expression. +The command accepts the same syntax of the corresponding option. +

                  +

                  If the specified expression is not valid, it is kept at its current +value. +

                  +
                  + + +

                  33.68 sab

                  + +

                  Apply Shape Adaptive Blur. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  luma_radius, lr
                  +

                  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. +

                  +
                  +
                  luma_pre_filter_radius, lpfr
                  +

                  Set luma pre-filter radius, must be a value in the 0.1-2.0 range, default +value is 1.0. +

                  +
                  +
                  luma_strength, ls
                  +

                  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. +

                  +
                  +
                  chroma_radius, cr
                  +

                  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. +

                  +
                  +
                  chroma_pre_filter_radius, cpfr
                  +

                  Set chroma pre-filter radius, must be a value in the 0.1-2.0 range. +

                  +
                  +
                  chroma_strength, cs
                  +

                  Set chroma maximum difference between pixels to still be considered, +must be a value in the 0.1-100.0 range. +

                  +
                  + +

                  Each chroma option value, if not explicitly specified, is set to the +corresponding luma option value. +

                  + +

                  33.69 scale

                  + +

                  Scale (resize) the input video, using the libswscale library. +

                  +

                  The scale filter forces the output display aspect ratio to be the same +of the input, by changing the output sample aspect ratio. +

                  +

                  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. +

                  + +

                  33.69.1 Options

                  +

                  The filter accepts the following options, or any of the options +supported by the libswscale scaler. +

                  +

                  See (ffmpeg-scaler)scaler_options for +the complete list of scaler options. +

                  +
                  +
                  width, w
                  +
                  height, h
                  +

                  Set the output video dimension expression. Default value is the input +dimension. +

                  +

                  If the value is 0, the input width is used for the output. +

                  +

                  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 +

                  +

                  See below for the list of accepted constants for use in the dimension +expression. +

                  +
                  +
                  interl
                  +

                  Set the interlacing mode. It accepts the following values: +

                  +
                  +
                  1
                  +

                  Force interlaced aware scaling. +

                  +
                  +
                  0
                  +

                  Do not apply interlaced scaling. +

                  +
                  +
                  -1
                  +

                  Select interlaced aware scaling depending on whether the source frames +are flagged as interlaced or not. +

                  +
                  + +

                  Default value is ‘0’. +

                  +
                  +
                  flags
                  +

                  Set libswscale scaling flags. See +(ffmpeg-scaler)sws_flags for the +complete list of values. If not explictly specified the filter applies +the default flags. +

                  +
                  +
                  size, s
                  +

                  Set the video size. For the syntax of this option, check the "Video size" +section in the ffmpeg-utils manual. +

                  +
                  +
                  in_color_matrix
                  +
                  out_color_matrix
                  +

                  Set in/output YCbCr color space type. +

                  +

                  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 color space type depends on the pixel format. +

                  +

                  Possible values: +

                  +
                  +
                  auto
                  +

                  Choose automatically. +

                  +
                  +
                  bt709
                  +

                  Format conforming to International Telecommunication Union (ITU) +Recommendation BT.709. +

                  +
                  +
                  fcc
                  +

                  Set color space conforming to the United States Federal Communications +Commission (FCC) Code of Federal Regulations (CFR) Title 47 (2003) 73.682 (a). +

                  +
                  +
                  bt601
                  +

                  Set color space conforming to: +

                  +
                    +
                  • +ITU Radiocommunication Sector (ITU-R) Recommendation BT.601 + +
                  • +ITU-R Rec. BT.470-6 (1998) Systems B, B1, and G + +
                  • +Society of Motion Picture and Television Engineers (SMPTE) ST 170:2004 + +
                  + +
                  +
                  smpte240m
                  +

                  Set color space conforming to SMPTE ST 240:1999. +

                  +
                  + +
                  +
                  in_range
                  +
                  out_range
                  +

                  Set in/output YCbCr sample range. +

                  +

                  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: +

                  +
                  +
                  auto
                  +

                  Choose automatically. +

                  +
                  +
                  jpeg/full/pc
                  +

                  Set full range (0-255 in case of 8-bit luma). +

                  +
                  +
                  mpeg/tv
                  +

                  Set "MPEG" range (16-235 in case of 8-bit luma). +

                  +
                  + +
                  +
                  force_original_aspect_ratio
                  +

                  Enable decreasing or increasing output video width or height if necessary to +keep the original aspect ratio. Possible values: +

                  +
                  +
                  disable
                  +

                  Scale the video as specified and disable this feature. +

                  +
                  +
                  decrease
                  +

                  The output video dimensions will automatically be decreased if needed. +

                  +
                  +
                  increase
                  +

                  The output video dimensions will automatically be increased if needed. +

                  +
                  +
                  + +

                  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. +

                  +

                  Please note that this is a different thing than specifying -1 for ‘w’ +or ‘h’, you still need to specify the output resolution for this option +to work. +

                  +
                  +
                  + +

                  The values of the ‘w’ and ‘h’ options are expressions +containing the following constants: +

                  +
                  +
                  in_w
                  +
                  in_h
                  +

                  the input width and height +

                  +
                  +
                  iw
                  +
                  ih
                  +

                  same as in_w and in_h +

                  +
                  +
                  out_w
                  +
                  out_h
                  +

                  the output (scaled) width and height +

                  +
                  +
                  ow
                  +
                  oh
                  +

                  same as out_w and out_h +

                  +
                  +
                  a
                  +

                  same as iw / ih +

                  +
                  +
                  sar
                  +

                  input sample aspect ratio +

                  +
                  +
                  dar
                  +

                  input display aspect ratio. Calculated from (iw / ih) * sar. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  + + +

                  33.69.2 Examples

                  + +
                    +
                  • +Scale the input video to a size of 200x100: +
                     
                    scale=w=200:h=100
                    +
                    + +

                    This is equivalent to: +

                     
                    scale=200:100
                    +
                    + +

                    or: +

                     
                    scale=200x100
                    +
                    + +
                  • +Specify a size abbreviation for the output size: +
                     
                    scale=qcif
                    +
                    + +

                    which can also be written as: +

                     
                    scale=size=qcif
                    +
                    + +
                  • +Scale the input to 2x: +
                     
                    scale=w=2*iw:h=2*ih
                    +
                    + +
                  • +The above is the same as: +
                     
                    scale=2*in_w:2*in_h
                    +
                    + +
                  • +Scale the input to 2x with forced interlaced scaling: +
                     
                    scale=2*iw:2*ih:interl=1
                    +
                    + +
                  • +Scale the input to half size: +
                     
                    scale=w=iw/2:h=ih/2
                    +
                    + +
                  • +Increase the width, and set the height to the same size: +
                     
                    scale=3/2*iw:ow
                    +
                    + +
                  • +Seek for Greek harmony: +
                     
                    scale=iw:1/PHI*iw
                    +scale=ih*PHI:ih
                    +
                    + +
                  • +Increase the height, and set the width to 3/2 of the height: +
                     
                    scale=w=3/2*oh:h=3/5*ih
                    +
                    + +
                  • +Increase the size, but make the size a multiple of the chroma +subsample values: +
                     
                    scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
                    +
                    + +
                  • +Increase the width to a maximum of 500 pixels, keep the same input +aspect ratio: +
                     
                    scale=w='min(500\, iw*3/2):h=-1'
                    +
                    +
                  + + +

                  33.70 separatefields

                  + +

                  The separatefields 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. +

                  +

                  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 setfield filter before separatefields filter. +

                  + +

                  33.71 setdar, setsar

                  + +

                  The setdar filter sets the Display Aspect Ratio for the filter +output video. +

                  +

                  This is done by changing the specified Sample (aka Pixel) Aspect +Ratio, according to the following equation: +

                   
                  DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR
                  +
                  + +

                  Keep in mind that the setdar filter does not modify the pixel +dimensions of the video frame. Also the display aspect ratio set by +this filter may be changed by later filters in the filterchain, +e.g. in case of scaling or if another "setdar" or a "setsar" filter is +applied. +

                  +

                  The setsar filter sets the Sample (aka Pixel) Aspect Ratio for +the filter output video. +

                  +

                  Note that as a consequence of the application of this filter, the +output display aspect ratio will change according to the equation +above. +

                  +

                  Keep in mind that the sample aspect ratio set by the setsar +filter may be changed by later filters in the filterchain, e.g. if +another "setsar" or a "setdar" filter is applied. +

                  +

                  The filters accept the following options: +

                  +
                  +
                  r, ratio, dar (setdar only), sar (setsar only)
                  +

                  Set the aspect ratio used by the filter. +

                  +

                  The parameter can be a floating point number string, an expression, or +a string of the form num:den, where num and +den are the numerator and denominator of the aspect ratio. If +the parameter is not specified, it is assumed the value "0". +In case the form "num:den" is used, the : character +should be escaped. +

                  +
                  +
                  max
                  +

                  Set the maximum integer value to use for expressing numerator and +denominator when reducing the expressed aspect ratio to a rational. +Default value is 100. +

                  +
                  +
                  + + +

                  33.71.1 Examples

                  + +
                    +
                  • +To change the display aspect ratio to 16:9, specify one of the following: +
                     
                    setdar=dar=1.77777
                    +setdar=dar=16/9
                    +setdar=dar=1.77777
                    +
                    + +
                  • +To change the sample aspect ratio to 10:11, specify: +
                     
                    setsar=sar=10/11
                    +
                    + +
                  • +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: +
                     
                    setdar=ratio=16/9:max=1000
                    +
                    + +
                  + +

                  +

                  +

                  33.72 setfield

                  + +

                  Force field for the output video frame. +

                  +

                  The setfield 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. fieldorder or yadif). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  mode
                  +

                  Available values are: +

                  +
                  +
                  auto
                  +

                  Keep the same field property. +

                  +
                  +
                  bff
                  +

                  Mark the frame as bottom-field-first. +

                  +
                  +
                  tff
                  +

                  Mark the frame as top-field-first. +

                  +
                  +
                  prog
                  +

                  Mark the frame as progressive. +

                  +
                  +
                  +
                  + + +

                  33.73 showinfo

                  + +

                  Show a line containing various information for each input video frame. +The input video is not modified. +

                  +

                  The shown line contains a sequence of key/value pairs of the form +key:value. +

                  +

                  A description of each shown parameter follows: +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 0 +

                  +
                  +
                  pts
                  +

                  Presentation TimeStamp of the input frame, expressed as a number of +time base units. The time base unit depends on the filter input pad. +

                  +
                  +
                  pts_time
                  +

                  Presentation TimeStamp of the input frame, expressed as a number of +seconds +

                  +
                  +
                  pos
                  +

                  position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic video) +

                  +
                  +
                  fmt
                  +

                  pixel format name +

                  +
                  +
                  sar
                  +

                  sample aspect ratio of the input frame, expressed in the form +num/den +

                  +
                  +
                  s
                  +

                  size of the input frame. For the syntax of this option, check the "Video size" +section in the ffmpeg-utils manual. +

                  +
                  +
                  i
                  +

                  interlaced mode ("P" for "progressive", "T" for top field first, "B" +for bottom field first) +

                  +
                  +
                  iskey
                  +

                  1 if the frame is a key frame, 0 otherwise +

                  +
                  +
                  type
                  +

                  picture type of the input frame ("I" for an I-frame, "P" for a +P-frame, "B" for a B-frame, "?" for unknown type). +Check also the documentation of the AVPictureType enum and of +the av_get_picture_type_char function defined in +‘libavutil/avutil.h’. +

                  +
                  +
                  checksum
                  +

                  Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame +

                  +
                  +
                  plane_checksum
                  +

                  Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, +expressed in the form "[c0 c1 c2 c3]" +

                  +
                  + +

                  +

                  +

                  33.74 smartblur

                  + +

                  Blur the input video without impacting the outlines. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  luma_radius, lr
                  +

                  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. +

                  +
                  +
                  luma_strength, ls
                  +

                  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. +

                  +
                  +
                  luma_threshold, lt
                  +

                  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. +

                  +
                  +
                  chroma_radius, cr
                  +

                  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. +

                  +
                  +
                  chroma_strength, cs
                  +

                  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. +

                  +
                  +
                  chroma_threshold, ct
                  +

                  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. +

                  +
                  + +

                  If a chroma option is not explicitly set, the corresponding luma value +is set. +

                  + +

                  33.75 stereo3d

                  + +

                  Convert between different stereoscopic image formats. +

                  +

                  The filters accept the following options: +

                  +
                  +
                  in
                  +

                  Set stereoscopic image format of input. +

                  +

                  Available values for input image formats are: +

                  +
                  sbsl
                  +

                  side by side parallel (left eye left, right eye right) +

                  +
                  +
                  sbsr
                  +

                  side by side crosseye (right eye left, left eye right) +

                  +
                  +
                  sbs2l
                  +

                  side by side parallel with half width resolution +(left eye left, right eye right) +

                  +
                  +
                  sbs2r
                  +

                  side by side crosseye with half width resolution +(right eye left, left eye right) +

                  +
                  +
                  abl
                  +

                  above-below (left eye above, right eye below) +

                  +
                  +
                  abr
                  +

                  above-below (right eye above, left eye below) +

                  +
                  +
                  ab2l
                  +

                  above-below with half height resolution +(left eye above, right eye below) +

                  +
                  +
                  ab2r
                  +

                  above-below with half height resolution +(right eye above, left eye below) +

                  +
                  +
                  al
                  +

                  alternating frames (left eye first, right eye second) +

                  +
                  +
                  ar
                  +

                  alternating frames (right eye first, left eye second) +

                  +

                  Default value is ‘sbsl’. +

                  +
                  + +
                  +
                  out
                  +

                  Set stereoscopic image format of output. +

                  +

                  Available values for output image formats are all the input formats as well as: +

                  +
                  arbg
                  +

                  anaglyph red/blue gray +(red filter on left eye, blue filter on right eye) +

                  +
                  +
                  argg
                  +

                  anaglyph red/green gray +(red filter on left eye, green filter on right eye) +

                  +
                  +
                  arcg
                  +

                  anaglyph red/cyan gray +(red filter on left eye, cyan filter on right eye) +

                  +
                  +
                  arch
                  +

                  anaglyph red/cyan half colored +(red filter on left eye, cyan filter on right eye) +

                  +
                  +
                  arcc
                  +

                  anaglyph red/cyan color +(red filter on left eye, cyan filter on right eye) +

                  +
                  +
                  arcd
                  +

                  anaglyph red/cyan color optimized with the least squares projection of dubois +(red filter on left eye, cyan filter on right eye) +

                  +
                  +
                  agmg
                  +

                  anaglyph green/magenta gray +(green filter on left eye, magenta filter on right eye) +

                  +
                  +
                  agmh
                  +

                  anaglyph green/magenta half colored +(green filter on left eye, magenta filter on right eye) +

                  +
                  +
                  agmc
                  +

                  anaglyph green/magenta colored +(green filter on left eye, magenta filter on right eye) +

                  +
                  +
                  agmd
                  +

                  anaglyph green/magenta color optimized with the least squares projection of dubois +(green filter on left eye, magenta filter on right eye) +

                  +
                  +
                  aybg
                  +

                  anaglyph yellow/blue gray +(yellow filter on left eye, blue filter on right eye) +

                  +
                  +
                  aybh
                  +

                  anaglyph yellow/blue half colored +(yellow filter on left eye, blue filter on right eye) +

                  +
                  +
                  aybc
                  +

                  anaglyph yellow/blue colored +(yellow filter on left eye, blue filter on right eye) +

                  +
                  +
                  aybd
                  +

                  anaglyph yellow/blue color optimized with the least squares projection of dubois +(yellow filter on left eye, blue filter on right eye) +

                  +
                  +
                  irl
                  +

                  interleaved rows (left eye has top row, right eye starts on next row) +

                  +
                  +
                  irr
                  +

                  interleaved rows (right eye has top row, left eye starts on next row) +

                  +
                  +
                  ml
                  +

                  mono output (left eye only) +

                  +
                  +
                  mr
                  +

                  mono output (right eye only) +

                  +
                  + +

                  Default value is ‘arcd’. +

                  +
                  + + +

                  33.75.1 Examples

                  + +
                    +
                  • +Convert input video from side by side parallel to anaglyph yellow/blue dubois: +
                     
                    stereo3d=sbsl:aybd
                    +
                    + +
                  • +Convert input video from above bellow (left eye above, right eye below) to side by side crosseye. +
                     
                    stereo3d=abl:sbsr
                    +
                    +
                  + + +

                  33.76 spp

                  + +

                  Apply a simple postprocessing filter that compresses and decompresses the image +at several (or - in the case of ‘quality’ level 6 - all) shifts +and average the results. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  quality
                  +

                  Set quality. This option defines the number of levels for averaging. It accepts +an integer in the range 0-6. If set to 0, the filter will have no +effect. A value of 6 means the higher quality. For each increment of +that value the speed drops by a factor of approximately 2. Default value is +3. +

                  +
                  +
                  qp
                  +

                  Force a constant quantization parameter. If not set, the filter will use the QP +from the video stream (if available). +

                  +
                  +
                  mode
                  +

                  Set thresholding mode. Available modes are: +

                  +
                  +
                  hard
                  +

                  Set hard thresholding (default). +

                  +
                  soft
                  +

                  Set soft thresholding (better de-ringing effect, but likely blurrier). +

                  +
                  + +
                  +
                  use_bframe_qp
                  +

                  Enable the use of the QP from the B-Frames if set to 1. Using this +option may cause flicker since the B-Frames have often larger QP. Default is +0 (not enabled). +

                  +
                  + +

                  +

                  +

                  33.77 subtitles

                  + +

                  Draw subtitles on top of input video using the libass library. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libass. This filter also requires a build with libavcodec and +libavformat to convert the passed subtitles file to ASS (Advanced Substation +Alpha) subtitles format. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  filename, f
                  +

                  Set the filename of the subtitle file to read. It must be specified. +

                  +
                  +
                  original_size
                  +

                  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. +

                  +
                  +
                  charenc
                  +

                  Set subtitles input character encoding. subtitles filter only. Only +useful if not UTF-8. +

                  +
                  + +

                  If the first key is not specified, it is assumed that the first value +specifies the ‘filename’. +

                  +

                  For example, to render the file ‘sub.srt’ on top of the input +video, use the command: +

                   
                  subtitles=sub.srt
                  +
                  + +

                  which is equivalent to: +

                   
                  subtitles=filename=sub.srt
                  +
                  + + +

                  33.78 super2xsai

                  + +

                  Scale the input by 2x and smooth using the Super2xSaI (Scale and +Interpolate) pixel art scaling algorithm. +

                  +

                  Useful for enlarging pixel art images without reducing sharpness. +

                  + +

                  33.79 swapuv

                  +

                  Swap U & V plane. +

                  + +

                  33.80 telecine

                  + +

                  Apply telecine process to the video. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  first_field
                  +
                  +
                  top, t
                  +

                  top field first +

                  +
                  bottom, b
                  +

                  bottom field first +The default value is top. +

                  +
                  + +
                  +
                  pattern
                  +

                  A string of numbers representing the pulldown pattern you wish to apply. +The default value is 23. +

                  +
                  + +
                   
                  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
                  +
                  + + +

                  33.81 thumbnail

                  +

                  Select the most representative frame in a given sequence of consecutive frames. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  n
                  +

                  Set the frames batch size to analyze; in a set of n frames, the filter +will pick one of them, and then handle the next batch of n frames until +the end. Default is 100. +

                  +
                  + +

                  Since the filter keeps track of the whole frames sequence, a bigger n +value will result in a higher memory usage, so a high value is not recommended. +

                  + +

                  33.81.1 Examples

                  + +
                    +
                  • +Extract one picture each 50 frames: +
                     
                    thumbnail=50
                    +
                    + +
                  • +Complete example of a thumbnail creation with ffmpeg: +
                     
                    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
                    +
                    +
                  + + +

                  33.82 tile

                  + +

                  Tile several successive frames together. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  layout
                  +

                  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. +

                  +
                  +
                  nb_frames
                  +

                  Set the maximum number of frames to render in the given area. It must be less +than or equal to wxh. The default value is 0, meaning all +the area will be used. +

                  +
                  +
                  margin
                  +

                  Set the outer border margin in pixels. +

                  +
                  +
                  padding
                  +

                  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. +

                  +
                  +
                  color
                  +

                  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 color +is "black". +

                  +
                  + + +

                  33.82.1 Examples

                  + +
                    +
                  • +Produce 8x8 PNG tiles of all keyframes (‘-skip_frame nokey’) in a movie: +
                     
                    ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
                    +
                    +

                    The ‘-vsync 0’ is necessary to prevent ffmpeg from +duplicating each output frame to accomodate the originally detected frame +rate. +

                    +
                  • +Display 5 pictures in an area of 3x2 frames, +with 7 pixels between them, and 2 pixels of initial margin, using +mixed flat and named options: +
                     
                    tile=3x2:nb_frames=5:padding=7:margin=2
                    +
                    +
                  + + +

                  33.83 tinterlace

                  + +

                  Perform various types of temporal field interlacing. +

                  +

                  Frames are counted starting from 1, so the first input frame is +considered odd. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  mode
                  +

                  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. +

                  +

                  Available values are: +

                  +
                  +
                  merge, 0
                  +

                  Move odd frames into the upper field, even into the lower field, +generating a double height frame at half frame rate. +

                  +
                  +
                  drop_odd, 1
                  +

                  Only output even frames, odd frames are dropped, generating a frame with +unchanged height at half frame rate. +

                  +
                  +
                  drop_even, 2
                  +

                  Only output odd frames, even frames are dropped, generating a frame with +unchanged height at half frame rate. +

                  +
                  +
                  pad, 3
                  +

                  Expand each frame to full height, but pad alternate lines with black, +generating a frame with double height at the same input frame rate. +

                  +
                  +
                  interleave_top, 4
                  +

                  Interleave the upper field from odd frames with the lower field from +even frames, generating a frame with unchanged height at half frame rate. +

                  +
                  +
                  interleave_bottom, 5
                  +

                  Interleave the lower field from odd frames with the upper field from +even frames, generating a frame with unchanged height at half frame rate. +

                  +
                  +
                  interlacex2, 6
                  +

                  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. +

                  +
                  + +

                  Numeric values are deprecated but are accepted for backward +compatibility reasons. +

                  +

                  Default mode is merge. +

                  +
                  +
                  flags
                  +

                  Specify flags influencing the filter process. +

                  +

                  Available value for flags is: +

                  +
                  +
                  low_pass_filter, vlfp
                  +

                  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. +

                  +

                  Vertical low-pass filtering can only be enabled for ‘mode’ +interleave_top and interleave_bottom. +

                  +
                  +
                  +
                  +
                  + + +

                  33.84 transpose

                  + +

                  Transpose rows with columns in the input video and optionally flip it. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  dir
                  +

                  Specify the transposition direction. +

                  +

                  Can assume the following values: +

                  +
                  0, 4, cclock_flip
                  +

                  Rotate by 90 degrees counterclockwise and vertically flip (default), that is: +

                   
                  L.R     L.l
                  +. . ->  . .
                  +l.r     R.r
                  +
                  + +
                  +
                  1, 5, clock
                  +

                  Rotate by 90 degrees clockwise, that is: +

                   
                  L.R     l.L
                  +. . ->  . .
                  +l.r     r.R
                  +
                  + +
                  +
                  2, 6, cclock
                  +

                  Rotate by 90 degrees counterclockwise, that is: +

                   
                  L.R     R.r
                  +. . ->  . .
                  +l.r     L.l
                  +
                  + +
                  +
                  3, 7, clock_flip
                  +

                  Rotate by 90 degrees clockwise and vertically flip, that is: +

                   
                  L.R     r.R
                  +. . ->  . .
                  +l.r     l.L
                  +
                  +
                  +
                  + +

                  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 passthrough option should be used instead. +

                  +

                  Numerical values are deprecated, and should be dropped in favor of +symbolic constants. +

                  +
                  +
                  passthrough
                  +

                  Do not apply the transposition if the input geometry matches the one +specified by the specified value. It accepts the following values: +

                  +
                  none
                  +

                  Always apply transposition. +

                  +
                  portrait
                  +

                  Preserve portrait geometry (when height >= width). +

                  +
                  landscape
                  +

                  Preserve landscape geometry (when width >= height). +

                  +
                  + +

                  Default value is none. +

                  +
                  + +

                  For example to rotate by 90 degrees clockwise and preserve portrait +layout: +

                   
                  transpose=dir=1:passthrough=portrait
                  +
                  + +

                  The command above can also be specified as: +

                   
                  transpose=1:portrait
                  +
                  + + +

                  33.85 trim

                  +

                  Trim the input so that the output contains one continuous subpart of the input. +

                  +

                  This filter accepts the following options: +

                  +
                  start
                  +

                  Specify time of the start of the kept section, i.e. the frame with the +timestamp start will be the first frame in the output. +

                  +
                  +
                  end
                  +

                  Specify time of the first frame that will be dropped, i.e. the frame +immediately preceding the one with the timestamp end will be the last +frame in the output. +

                  +
                  +
                  start_pts
                  +

                  Same as start, except this option sets the start timestamp in timebase +units instead of seconds. +

                  +
                  +
                  end_pts
                  +

                  Same as end, except this option sets the end timestamp in timebase units +instead of seconds. +

                  +
                  +
                  duration
                  +

                  Specify maximum duration of the output. +

                  +
                  +
                  start_frame
                  +

                  Number of the first frame that should be passed to output. +

                  +
                  +
                  end_frame
                  +

                  Number of the first frame that should be dropped. +

                  +
                  + +

                  start’, ‘end’, ‘duration’ are expressed as time +duration specifications, check the "Time duration" section in the +ffmpeg-utils manual. +

                  +

                  Note that the first two sets of the start/end options and the ‘duration’ +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. +

                  +

                  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. +

                  +

                  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. +

                  +

                  Examples: +

                    +
                  • +drop everything except the second minute of input +
                     
                    ffmpeg -i INPUT -vf trim=60:120
                    +
                    + +
                  • +keep only the first second +
                     
                    ffmpeg -i INPUT -vf trim=duration=1
                    +
                    + +
                  + + + +

                  33.86 unsharp

                  + +

                  Sharpen or blur the input video. +

                  +

                  It accepts the following parameters: +

                  +
                  +
                  luma_msize_x, lx
                  +

                  Set the luma matrix horizontal size. It must be an odd integer between +3 and 63, default value is 5. +

                  +
                  +
                  luma_msize_y, ly
                  +

                  Set the luma matrix vertical size. It must be an odd integer between 3 +and 63, default value is 5. +

                  +
                  +
                  luma_amount, la
                  +

                  Set the luma effect strength. It can be a float number, reasonable +values lay between -1.5 and 1.5. +

                  +

                  Negative values will blur the input video, while positive values will +sharpen it, a value of zero will disable the effect. +

                  +

                  Default value is 1.0. +

                  +
                  +
                  chroma_msize_x, cx
                  +

                  Set the chroma matrix horizontal size. It must be an odd integer +between 3 and 63, default value is 5. +

                  +
                  +
                  chroma_msize_y, cy
                  +

                  Set the chroma matrix vertical size. It must be an odd integer +between 3 and 63, default value is 5. +

                  +
                  +
                  chroma_amount, ca
                  +

                  Set the chroma effect strength. It can be a float number, reasonable +values lay between -1.5 and 1.5. +

                  +

                  Negative values will blur the input video, while positive values will +sharpen it, a value of zero will disable the effect. +

                  +

                  Default value is 0.0. +

                  +
                  +
                  opencl
                  +

                  If set to 1, specify using OpenCL capabilities, only available if +FFmpeg was configured with --enable-opencl. Default value is 0. +

                  +
                  +
                  + +

                  All parameters are optional and default to the equivalent of the +string ’5:5:1.0:5:5:0.0’. +

                  + +

                  33.86.1 Examples

                  + +
                    +
                  • +Apply strong luma sharpen effect: +
                     
                    unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
                    +
                    + +
                  • +Apply strong blur of both luma and chroma parameters: +
                     
                    unsharp=7:7:-2:7:7:-2
                    +
                    +
                  + +

                  +

                  +

                  33.87 vidstabdetect

                  + +

                  Analyze video stabilization/deshaking. Perform pass 1 of 2, see +vidstabtransform for pass 2. +

                  +

                  This filter generates a file with relative translation and rotation +transform information about subsequent frames, which is then used by +the vidstabtransform filter. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libvidstab. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  result
                  +

                  Set the path to the file used to write the transforms information. +Default value is ‘transforms.trf’. +

                  +
                  +
                  shakiness
                  +

                  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. +

                  +
                  +
                  accuracy
                  +

                  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 9. +

                  +
                  +
                  stepsize
                  +

                  Set stepsize of the search process. The region around minimum is +scanned with 1 pixel resolution. Default value is 6. +

                  +
                  +
                  mincontrast
                  +

                  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. +

                  +
                  +
                  tripod
                  +

                  Set reference frame number for tripod mode. +

                  +

                  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. +

                  +

                  If set to 0, it is disabled. The frames are counted starting from 1. +

                  +
                  +
                  show
                  +

                  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. +

                  +
                  + + +

                  33.87.1 Examples

                  + +
                    +
                  • +Use default values: +
                     
                    vidstabdetect
                    +
                    + +
                  • +Analyze strongly shaky movie and put the results in file +‘mytransforms.trf’: +
                     
                    vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
                    +
                    + +
                  • +Visualize the result of internal transformations in the resulting +video: +
                     
                    vidstabdetect=show=1
                    +
                    + +
                  • +Analyze a video with medium shakiness using ffmpeg: +
                     
                    ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
                    +
                    +
                  + +

                  +

                  +

                  33.88 vidstabtransform

                  + +

                  Video stabilization/deshaking: pass 2 of 2, +see vidstabdetect for pass 1. +

                  +

                  Read a file with transform information for each frame and +apply/compensate them. Together with the vidstabdetect +filter this can be used to deshake videos. See also +http://public.hronopik.de/vid.stab. It is important to also use +the unsharp filter, see below. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libvidstab. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  input
                  +

                  path to the file used to read the transforms (default: ‘transforms.trf’) +

                  +
                  +
                  smoothing
                  +

                  number of frames (value*2 + 1) used for lowpass filtering the camera movements +(default: 10). 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). +

                  +
                  +
                  maxshift
                  +

                  maximal number of pixels to translate frames (default: -1 no limit) +

                  +
                  +
                  maxangle
                  +

                  maximal angle in radians (degree*PI/180) to rotate frames (default: -1 +no limit) +

                  +
                  +
                  crop
                  +

                  How to deal with borders that may be visible due to movement +compensation. Available values are: +

                  +
                  +
                  keep
                  +

                  keep image information from previous frame (default) +

                  +
                  black
                  +

                  fill the border black +

                  +
                  + +
                  +
                  invert
                  +
                  +
                  0
                  +

                  keep transforms normal (default) +

                  +
                  1
                  +

                  invert transforms +

                  +
                  + +
                  +
                  relative
                  +

                  consider transforms as +

                  +
                  0
                  +

                  absolute +

                  +
                  1
                  +

                  relative to previous frame (default) +

                  +
                  + +
                  +
                  zoom
                  +

                  percentage to zoom (default: 0) +

                  +
                  >0
                  +

                  zoom in +

                  +
                  <0
                  +

                  zoom out +

                  +
                  + +
                  +
                  optzoom
                  +

                  set optimal zooming to avoid borders +

                  +
                  0
                  +

                  disabled +

                  +
                  1
                  +

                  optimal static zoom value is determined (only very strong movements will lead to visible borders) (default) +

                  +
                  2
                  +

                  optimal adaptive zoom value is determined (no borders will be visible) +

                  +
                  +

                  Note that the value given at zoom is added to the one calculated +here. +

                  +
                  +
                  interpol
                  +

                  type of interpolation +

                  +

                  Available values are: +

                  +
                  no
                  +

                  no interpolation +

                  +
                  linear
                  +

                  linear only horizontal +

                  +
                  bilinear
                  +

                  linear in both directions (default) +

                  +
                  bicubic
                  +

                  cubic in both directions (slow) +

                  +
                  + +
                  +
                  tripod
                  +

                  virtual tripod mode means that the video is stabilized such that the +camera stays stationary. Use also tripod option of +vidstabdetect. +

                  +
                  0
                  +

                  off (default) +

                  +
                  1
                  +

                  virtual tripod mode: equivalent to relative=0:smoothing=0 +

                  +
                  + +
                  +
                  + + +

                  33.88.1 Examples

                  + +
                    +
                  • +typical call with default default values: + (note the unsharp filter which is always recommended) +
                     
                    ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
                    +
                    + +
                  • +zoom in a bit more and load transform data from a given file +
                     
                    vidstabtransform=zoom=5:input="mytransforms.trf"
                    +
                    + +
                  • +smoothen the video even more +
                     
                    vidstabtransform=smoothing=30
                    +
                    + +
                  + + +

                  33.89 vflip

                  + +

                  Flip the input video vertically. +

                  +

                  For example, to vertically flip a video with ffmpeg: +

                   
                  ffmpeg -i in.avi -vf "vflip" out.avi
                  +
                  + + +

                  33.90 vignette

                  + +

                  Make or reverse a natural vignetting effect. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  angle, a
                  +

                  Set lens angle expression as a number of radians. +

                  +

                  The value is clipped in the [0,PI/2] range. +

                  +

                  Default value: "PI/5" +

                  +
                  +
                  x0
                  +
                  y0
                  +

                  Set center coordinates expressions. Respectively "w/2" and "h/2" +by default. +

                  +
                  +
                  mode
                  +

                  Set forward/backward mode. +

                  +

                  Available modes are: +

                  +
                  forward
                  +

                  The larger the distance from the central point, the darker the image becomes. +

                  +
                  +
                  backward
                  +

                  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 ‘angle’ and other settings (yet). It can +also be used to create a burning effect. +

                  +
                  + +

                  Default value is ‘forward’. +

                  +
                  +
                  eval
                  +

                  Set evaluation mode for the expressions (‘angle’, ‘x0’, ‘y0’). +

                  +

                  It accepts the following values: +

                  +
                  init
                  +

                  Evaluate expressions only once during the filter initialization. +

                  +
                  +
                  frame
                  +

                  Evaluate expressions for each incoming frame. This is way slower than the +‘init’ mode since it requires all the scalers to be re-computed, but it +allows advanced dynamic expressions. +

                  +
                  + +

                  Default value is ‘init’. +

                  +
                  +
                  dither
                  +

                  Set dithering to reduce the circular banding effects. Default is 1 +(enabled). +

                  +
                  +
                  aspect
                  +

                  Set vignette aspect. This setting allows 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. +

                  +

                  Default is 1/1. +

                  +
                  + + +

                  33.90.1 Expressions

                  + +

                  The ‘alpha’, ‘x0’ and ‘y0’ expressions can contain the +following parameters. +

                  +
                  +
                  w
                  +
                  h
                  +

                  input width and height +

                  +
                  +
                  n
                  +

                  the number of input frame, starting from 0 +

                  +
                  +
                  pts
                  +

                  the PTS (Presentation TimeStamp) time of the filtered video frame, expressed in +TB units, NAN if undefined +

                  +
                  +
                  r
                  +

                  frame rate of the input video, NAN if the input frame rate is unknown +

                  +
                  +
                  t
                  +

                  the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in seconds, NAN if undefined +

                  +
                  +
                  tb
                  +

                  time base of the input video +

                  +
                  + + + +

                  33.90.2 Examples

                  + +
                    +
                  • +Apply simple strong vignetting effect: +
                     
                    vignette=PI/4
                    +
                    + +
                  • +Make a flickering vignetting: +
                     
                    vignette='PI/4+random(1)*PI/50':eval=frame
                    +
                    + +
                  + + +

                  33.91 w3fdif

                  + +

                  Deinterlace the input video ("w3fdif" stands for "Weston 3 Field +Deinterlacing Filter"). +

                  +

                  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. +

                  +

                  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: +

                  +
                  +
                  filter
                  +

                  Set the interlacing filter coefficients. Accepts one of the following values: +

                  +
                  +
                  simple
                  +

                  Simple filter coefficient set. +

                  +
                  complex
                  +

                  More-complex filter coefficient set. +

                  +
                  +

                  Default value is ‘complex’. +

                  +
                  +
                  deint
                  +

                  Specify which frames to deinterlace. Accept one of the following values: +

                  +
                  +
                  all
                  +

                  Deinterlace all frames, +

                  +
                  interlaced
                  +

                  Only deinterlace frames marked as interlaced. +

                  +
                  + +

                  Default value is ‘all’. +

                  +
                  + +

                  +

                  +

                  33.92 yadif

                  + +

                  Deinterlace the input video ("yadif" means "yet another deinterlacing +filter"). +

                  +

                  This filter accepts the following options: +

                  + +
                  +
                  mode
                  +

                  The interlacing mode to adopt, accepts one of the following values: +

                  +
                  +
                  0, send_frame
                  +

                  output 1 frame for each frame +

                  +
                  1, send_field
                  +

                  output 1 frame for each field +

                  +
                  2, send_frame_nospatial
                  +

                  like send_frame but skip spatial interlacing check +

                  +
                  3, send_field_nospatial
                  +

                  like send_field but skip spatial interlacing check +

                  +
                  + +

                  Default value is send_frame. +

                  +
                  +
                  parity
                  +

                  The picture field parity assumed for the input interlaced video, accepts one of +the following values: +

                  +
                  +
                  0, tff
                  +

                  assume top field first +

                  +
                  1, bff
                  +

                  assume bottom field first +

                  +
                  -1, auto
                  +

                  enable automatic detection +

                  +
                  + +

                  Default value is auto. +If interlacing is unknown or decoder does not export this information, +top field first will be assumed. +

                  +
                  +
                  deint
                  +

                  Specify which frames to deinterlace. Accept one of the following +values: +

                  +
                  +
                  0, all
                  +

                  deinterlace all frames +

                  +
                  1, interlaced
                  +

                  only deinterlace frames marked as interlaced +

                  +
                  + +

                  Default value is all. +

                  +
                  + + + +

                  34. Video Sources

                  + +

                  Below is a description of the currently available video sources. +

                  + +

                  34.1 buffer

                  + +

                  Buffer video frames, and make them available to the filter chain. +

                  +

                  This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/vsrc_buffer.h’. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  video_size
                  +

                  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. +

                  +
                  +
                  width
                  +

                  Input video width. +

                  +
                  +
                  height
                  +

                  Input video height. +

                  +
                  +
                  pix_fmt
                  +

                  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. +

                  +
                  +
                  time_base
                  +

                  Specify the timebase assumed by the timestamps of the buffered frames. +

                  +
                  +
                  frame_rate
                  +

                  Specify the frame rate expected for the video stream. +

                  +
                  +
                  pixel_aspect, sar
                  +

                  Specify the sample aspect ratio assumed by the video frames. +

                  +
                  +
                  sws_param
                  +

                  Specify the optional parameters to be used for the scale filter which +is automatically inserted when an input change is detected in the +input size or format. +

                  +
                  + +

                  For example: +

                   
                  buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
                  +
                  + +

                  will instruct the source to accept video frames with size 320x240 and +with format "yuv410p", assuming 1/24 as the timestamps timebase and +square pixels (1:1 sample aspect ratio). +Since the pixel format with name "yuv410p" corresponds to the number 6 +(check the enum AVPixelFormat definition in ‘libavutil/pixfmt.h’), +this example corresponds to: +

                   
                  buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
                  +
                  + +

                  Alternatively, the options can be specified as a flat string, but this +syntax is deprecated: +

                  +

                  width:height:pix_fmt:time_base.num:time_base.den:pixel_aspect.num:pixel_aspect.den[:sws_param] +

                  + +

                  34.2 cellauto

                  + +

                  Create a pattern generated by an elementary cellular automaton. +

                  +

                  The initial state of the cellular automaton can be defined through the +‘filename’, and ‘pattern’ options. If such options are +not specified an initial state is created randomly. +

                  +

                  At each new frame a new row in the video is filled with the result of +the cellular automaton next generation. The behavior when the whole +frame is filled is defined by the ‘scroll’ option. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  filename, f
                  +

                  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. +

                  +
                  +
                  pattern, p
                  +

                  Read the initial cellular automaton state, i.e. the starting row, from +the specified string. +

                  +

                  Each non-whitespace character in the string is considered an alive +cell, a newline will terminate the row, and further characters in the +string will be ignored. +

                  +
                  +
                  rate, r
                  +

                  Set the video rate, that is the number of frames generated per second. +Default is 25. +

                  +
                  +
                  random_fill_ratio, ratio
                  +

                  Set the random fill ratio for the initial cellular automaton row. It +is a floating point number value ranging from 0 to 1, defaults to +1/PHI. +

                  +

                  This option is ignored when a file or a pattern is specified. +

                  +
                  +
                  random_seed, seed
                  +

                  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. +

                  +
                  +
                  rule
                  +

                  Set the cellular automaton rule, it is a number ranging from 0 to 255. +Default value is 110. +

                  +
                  +
                  size, s
                  +

                  Set the size of the output video. For the syntax of this option, check +the "Video size" section in the ffmpeg-utils manual. +

                  +

                  If ‘filename’ or ‘pattern’ is specified, the size is set +by default to the width of the specified initial state row, and the +height is set to width * PHI. +

                  +

                  If ‘size’ is set, it must contain the width of the specified +pattern string, and the specified pattern will be centered in the +larger row. +

                  +

                  If a filename or a pattern string is not specified, the size value +defaults to "320x518" (used for a randomly generated initial state). +

                  +
                  +
                  scroll
                  +

                  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. +

                  +
                  +
                  start_full, full
                  +

                  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. +

                  +
                  +
                  stitch
                  +

                  If set to 1, stitch the left and right row edges together. +This is the default behavior, for disabling set the value to 0. +

                  +
                  + + +

                  34.2.1 Examples

                  + +
                    +
                  • +Read the initial state from ‘pattern’, and specify an output of +size 200x400. +
                     
                    cellauto=f=pattern:s=200x400
                    +
                    + +
                  • +Generate a random initial row with a width of 200 cells, with a fill +ratio of 2/3: +
                     
                    cellauto=ratio=2/3:s=200x200
                    +
                    + +
                  • +Create a pattern generated by rule 18 starting by a single alive cell +centered on an initial row with width 100: +
                     
                    cellauto=p=@:s=100x400:full=0:rule=18
                    +
                    + +
                  • +Specify a more elaborated initial pattern: +
                     
                    cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
                    +
                    + +
                  + + +

                  34.3 mandelbrot

                  + +

                  Generate a Mandelbrot set fractal, and progressively zoom towards the +point specified with start_x and start_y. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  end_pts
                  +

                  Set the terminal pts value. Default value is 400. +

                  +
                  +
                  end_scale
                  +

                  Set the terminal scale value. +Must be a floating point value. Default value is 0.3. +

                  +
                  +
                  inner
                  +

                  Set the inner coloring mode, that is the algorithm used to draw the +Mandelbrot fractal internal region. +

                  +

                  It shall assume one of the following values: +

                  +
                  black
                  +

                  Set black mode. +

                  +
                  convergence
                  +

                  Show time until convergence. +

                  +
                  mincol
                  +

                  Set color based on point closest to the origin of the iterations. +

                  +
                  period
                  +

                  Set period mode. +

                  +
                  + +

                  Default value is mincol. +

                  +
                  +
                  bailout
                  +

                  Set the bailout value. Default value is 10.0. +

                  +
                  +
                  maxiter
                  +

                  Set the maximum of iterations performed by the rendering +algorithm. Default value is 7189. +

                  +
                  +
                  outer
                  +

                  Set outer coloring mode. +It shall assume one of following values: +

                  +
                  iteration_count
                  +

                  Set iteration cound mode. +

                  +
                  normalized_iteration_count
                  +

                  set normalized iteration count mode. +

                  +
                  +

                  Default value is normalized_iteration_count. +

                  +
                  +
                  rate, r
                  +

                  Set frame rate, expressed as number of frames per second. Default +value is "25". +

                  +
                  +
                  size, s
                  +

                  Set frame size. For the syntax of this option, check the "Video +size" section in the ffmpeg-utils manual. Default value is "640x480". +

                  +
                  +
                  start_scale
                  +

                  Set the initial scale value. Default value is 3.0. +

                  +
                  +
                  start_x
                  +

                  Set the initial x position. Must be a floating point value between +-100 and 100. Default value is -0.743643887037158704752191506114774. +

                  +
                  +
                  start_y
                  +

                  Set the initial y position. Must be a floating point value between +-100 and 100. Default value is -0.131825904205311970493132056385139. +

                  +
                  + + +

                  34.4 mptestsrc

                  + +

                  Generate various test patterns, as generated by the MPlayer test filter. +

                  +

                  The size of the generated video is fixed, and is 256x256. +This source is useful in particular for testing encoding features. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  rate, r
                  +

                  Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +

                  +
                  +
                  duration, d
                  +

                  Set the video duration of the sourced video. The accepted syntax is: +

                   
                  [-]HH:MM:SS[.m...]
                  +[-]S+[.m...]
                  +
                  +

                  See also the function av_parse_time(). +

                  +

                  If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +

                  +
                  +
                  test, t
                  +
                  +

                  Set the number or the name of the test to perform. Supported tests are: +

                  +
                  dc_luma
                  +
                  dc_chroma
                  +
                  freq_luma
                  +
                  freq_chroma
                  +
                  amp_luma
                  +
                  amp_chroma
                  +
                  cbp
                  +
                  mv
                  +
                  ring1
                  +
                  ring2
                  +
                  all
                  +
                  + +

                  Default value is "all", which will cycle through the list of all tests. +

                  +
                  + +

                  For example the following: +

                   
                  testsrc=t=dc_luma
                  +
                  + +

                  will generate a "dc_luma" test pattern. +

                  + +

                  34.5 frei0r_src

                  + +

                  Provide a frei0r source. +

                  +

                  To enable compilation of this filter you need to install the frei0r +header and configure FFmpeg with --enable-frei0r. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  size
                  +

                  The size of the video to generate. For the syntax of this option, check the +"Video size" section in the ffmpeg-utils manual. +

                  +
                  +
                  framerate
                  +

                  Framerate of the generated video, may be a string of the form +num/den or a frame rate abbreviation. +

                  +
                  +
                  filter_name
                  +

                  The name to the frei0r source to load. For more information regarding frei0r and +how to set the parameters read the section frei0r in the description of +the video filters. +

                  +
                  +
                  filter_params
                  +

                  A ’|’-separated list of parameters to pass to the frei0r source. +

                  +
                  +
                  + +

                  For example, to generate a frei0r partik0l source with size 200x200 +and frame rate 10 which is overlayed on the overlay filter main input: +

                   
                  frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
                  +
                  + + +

                  34.6 life

                  + +

                  Generate a life pattern. +

                  +

                  This source is based on a generalization of John Conway’s life game. +

                  +

                  The sourced input represents a life grid, each pixel represents a cell +which can be in one of two possible states, alive or dead. Every cell +interacts with its eight neighbours, which are the cells that are +horizontally, vertically, or diagonally adjacent. +

                  +

                  At each interaction the grid evolves according to the adopted rule, +which specifies the number of neighbor alive cells which will make a +cell stay alive or born. The ‘rule’ option allows to specify +the rule to adopt. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  filename, f
                  +

                  Set the file from which to read the initial grid state. In the file, +each non-whitespace character is considered an alive cell, and newline +is used to delimit the end of each row. +

                  +

                  If this option is not specified, the initial grid is generated +randomly. +

                  +
                  +
                  rate, r
                  +

                  Set the video rate, that is the number of frames generated per second. +Default is 25. +

                  +
                  +
                  random_fill_ratio, ratio
                  +

                  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. +

                  +
                  +
                  random_seed, seed
                  +

                  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. +

                  +
                  +
                  rule
                  +

                  Set the life rule. +

                  +

                  A rule can be specified with a code of the kind "SNS/BNB", +where NS and NB are sequences of numbers in the range 0-8, +NS specifies the number of alive neighbor cells which make a +live cell stay alive, and NB the number of alive neighbor cells +which make a dead cell to become alive (i.e. to "born"). +"s" and "b" can be used in place of "S" and "B", respectively. +

                  +

                  Alternatively a rule can be specified by an 18-bits integer. The 9 +high order bits are used to encode the next cell state if it is alive +for each number of neighbor alive cells, the low order bits specify +the rule for "borning" new cells. Higher order bits encode for an +higher number of neighbor cells. +For example the number 6153 = (12<<9)+9 specifies a stay alive +rule of 12 and a born rule of 9, which corresponds to "S23/B03". +

                  +

                  Default value is "S23/B3", which is the original Conway’s game of life +rule, and will keep a cell alive if it has 2 or 3 neighbor alive +cells, and will born a new cell if there are three alive cells around +a dead cell. +

                  +
                  +
                  size, s
                  +

                  Set the size of the output video. For the syntax of this option, check the +"Video size" section in the ffmpeg-utils manual. +

                  +

                  If ‘filename’ is specified, the size is set by default to the +same size of the input file. If ‘size’ is set, it must contain +the size specified in the input file, and the initial grid defined in +that file is centered in the larger resulting area. +

                  +

                  If a filename is not specified, the size value defaults to "320x240" +(used for a randomly generated initial grid). +

                  +
                  +
                  stitch
                  +

                  If set to 1, stitch the left and right grid edges together, and the +top and bottom edges also. Defaults to 1. +

                  +
                  +
                  mold
                  +

                  Set cell mold speed. If set, a dead cell will go from ‘death_color’ to +‘mold_color’ with a step of ‘mold’. ‘mold’ can have a +value from 0 to 255. +

                  +
                  +
                  life_color
                  +

                  Set the color of living (or new born) cells. +

                  +
                  +
                  death_color
                  +

                  Set the color of dead cells. If ‘mold’ is set, this is the first color +used to represent a dead cell. +

                  +
                  +
                  mold_color
                  +

                  Set mold color, for definitely dead and moldy cells. +

                  +

                  For the syntax of these 3 color options, check the "Color" section in the +ffmpeg-utils manual. +

                  +
                  + + +

                  34.6.1 Examples

                  + +
                    +
                  • +Read a grid from ‘pattern’, and center it on a grid of size +300x300 pixels: +
                     
                    life=f=pattern:s=300x300
                    +
                    + +
                  • +Generate a random grid of size 200x200, with a fill ratio of 2/3: +
                     
                    life=ratio=2/3:s=200x200
                    +
                    + +
                  • +Specify a custom rule for evolving a randomly generated grid: +
                     
                    life=rule=S14/B34
                    +
                    + +
                  • +Full example with slow death effect (mold) using ffplay: +
                     
                    ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
                    +
                    +
                  + +

                  + + + + + + +

                  +

                  34.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc

                  + +

                  The color source provides an uniformly colored input. +

                  +

                  The haldclutsrc source provides an identity Hald CLUT. See also +haldclut filter. +

                  +

                  The nullsrc source returns unprocessed video frames. It is +mainly useful to be employed in analysis / debugging tools, or as the +source for filters which ignore the input data. +

                  +

                  The rgbtestsrc source generates an RGB test pattern useful for +detecting RGB vs BGR issues. You should see a red, green and blue +stripe from top to bottom. +

                  +

                  The smptebars source generates a color bars pattern, based on +the SMPTE Engineering Guideline EG 1-1990. +

                  +

                  The smptehdbars source generates a color bars pattern, based on +the SMPTE RP 219-2002. +

                  +

                  The testsrc source generates a test video pattern, showing a +color pattern, a scrolling gradient and a timestamp. This is mainly +intended for testing purposes. +

                  +

                  The sources accept the following options: +

                  +
                  +
                  color, c
                  +

                  Specify the color of the source, only available in the color +source. For the syntax of this option, check the "Color" section in the +ffmpeg-utils manual. +

                  +
                  +
                  level
                  +

                  Specify the level of the Hald CLUT, only available in the haldclutsrc +source. A level of N generates a picture of N*N*N by N*N*N +pixels to be used as identity matrix for 3D lookup tables. Each component is +coded on a 1/(N*N) scale. +

                  +
                  +
                  size, s
                  +

                  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". +

                  +

                  This option is not available with the haldclutsrc filter. +

                  +
                  +
                  rate, r
                  +

                  Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +

                  +
                  +
                  sar
                  +

                  Set the sample aspect ratio of the sourced video. +

                  +
                  +
                  duration, d
                  +

                  Set the video duration of the sourced video. The accepted syntax is: +

                   
                  [-]HH[:MM[:SS[.m...]]]
                  +[-]S+[.m...]
                  +
                  +

                  See also the function av_parse_time(). +

                  +

                  If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +

                  +
                  +
                  decimals, n
                  +

                  Set the number of decimals to show in the timestamp, only available in the +testsrc source. +

                  +

                  The displayed timestamp value will correspond to the original +timestamp value multiplied by the power of 10 of the specified +value. Default value is 0. +

                  +
                  + +

                  For example the following: +

                   
                  testsrc=duration=5.3:size=qcif:rate=10
                  +
                  + +

                  will generate a video with a duration of 5.3 seconds, with size +176x144 and a frame rate of 10 frames per second. +

                  +

                  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. +

                   
                  color=c=red@0.2:s=qcif:r=10
                  +
                  + +

                  If the input content is to be ignored, nullsrc can be used. The +following command generates noise in the luminance plane by employing +the geq filter: +

                   
                  nullsrc=s=256x256, geq=random(1)*255:128:128
                  +
                  + + +

                  34.7.1 Commands

                  + +

                  The color source supports the following commands: +

                  +
                  +
                  c, color
                  +

                  Set the color of the created image. Accepts the same syntax of the +corresponding ‘color’ option. +

                  +
                  + + + +

                  35. Video Sinks

                  + +

                  Below is a description of the currently available video sinks. +

                  + +

                  35.1 buffersink

                  + +

                  Buffer video frames, and make them available to the end of the filter +graph. +

                  +

                  This sink is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’ +or the options system. +

                  +

                  It accepts a pointer to an AVBufferSinkContext structure, which +defines the incoming buffers’ formats, to be passed as the opaque +parameter to avfilter_init_filter for initialization. +

                  + +

                  35.2 nullsink

                  + +

                  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. +

                  + + +

                  36. Multimedia Filters

                  + +

                  Below is a description of the currently available multimedia filters. +

                  + +

                  36.1 avectorscope

                  + +

                  Convert input audio to a video output, representing the audio vector +scope. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  mode, m
                  +

                  Set the vectorscope mode. +

                  +

                  Available values are: +

                  +
                  lissajous
                  +

                  Lissajous rotated by 45 degrees. +

                  +
                  +
                  lissajous_xy
                  +

                  Same as above but not rotated. +

                  +
                  + +

                  Default value is ‘lissajous’. +

                  +
                  +
                  size, s
                  +

                  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 400x400. +

                  +
                  +
                  rate, r
                  +

                  Set the output frame rate. Default value is 25. +

                  +
                  +
                  rc
                  +
                  gc
                  +
                  bc
                  +

                  Specify the red, green and blue contrast. Default values are 40, 160 and 80. +Allowed range is [0, 255]. +

                  +
                  +
                  rf
                  +
                  gf
                  +
                  bf
                  +

                  Specify the red, green and blue fade. Default values are 15, 10 and 5. +Allowed range is [0, 255]. +

                  +
                  +
                  zoom
                  +

                  Set the zoom factor. Default value is 1. Allowed range is [1, 10]. +

                  +
                  + + +

                  36.1.1 Examples

                  + +
                    +
                  • +Complete example using ffplay: +
                     
                    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]'
                    +
                    +
                  + + +

                  36.2 concat

                  + +

                  Concatenate audio and video streams, joining them together one after the +other. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  n
                  +

                  Set the number of segments. Default is 2. +

                  +
                  +
                  v
                  +

                  Set the number of output video streams, that is also the number of video +streams in each segment. Default is 1. +

                  +
                  +
                  a
                  +

                  Set the number of output audio streams, that is also the number of video +streams in each segment. Default is 0. +

                  +
                  +
                  unsafe
                  +

                  Activate unsafe mode: do not fail if segments have a different format. +

                  +
                  +
                  + +

                  The filter has v+a outputs: first v video outputs, then +a audio outputs. +

                  +

                  There are nx(v+a) inputs: first the inputs for the first +segment, in the same order as the outputs, then the inputs for the second +segment, etc. +

                  +

                  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. +

                  +

                  For this filter to work correctly, all segments must start at timestamp 0. +

                  +

                  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. +

                  +

                  Different frame rates are acceptable but will result in variable frame rate +at output; be sure to configure the output file to handle it. +

                  + +

                  36.2.1 Examples

                  + +
                    +
                  • +Concatenate an opening, an episode and an ending, all in bilingual version +(video in stream 0, audio in streams 1 and 2): +
                     
                    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
                    +
                    + +
                  • +Concatenate two parts, handling audio and video separately, using the +(a)movie sources, and adjusting the resolution: +
                     
                    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]
                    +
                    +

                    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. +

                    +
                  + + +

                  36.3 ebur128

                  + +

                  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 M), Short-term loudness (S), +Integrated loudness (I) and Loudness Range (LRA). +

                  +

                  The filter also has a video output (see the video 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). +

                  +

                  More information about the Loudness Recommendation EBU R128 on +http://tech.ebu.ch/loudness. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  video
                  +

                  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 0. +

                  +
                  +
                  size
                  +

                  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 640x480. +

                  +
                  +
                  meter
                  +

                  Set the EBU scale meter. Default is 9. Common values are 9 and +18, respectively for EBU scale meter +9 and EBU scale meter +18. Any +other integer value between this range is allowed. +

                  +
                  +
                  metadata
                  +

                  Set metadata injection. If set to 1, 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 lavfi.r128.. +

                  +

                  Default is 0. +

                  +
                  +
                  framelog
                  +

                  Force the frame logging level. +

                  +

                  Available values are: +

                  +
                  info
                  +

                  information logging level +

                  +
                  verbose
                  +

                  verbose logging level +

                  +
                  + +

                  By default, the logging level is set to info. If the ‘video’ or +the ‘metadata’ options are set, it switches to verbose. +

                  +
                  + + +

                  36.3.1 Examples

                  + +
                    +
                  • +Real-time graph using ffplay, with a EBU scale meter +18: +
                     
                    ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
                    +
                    + +
                  • +Run an analysis with ffmpeg: +
                     
                    ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
                    +
                    +
                  + + +

                  36.4 interleave, ainterleave

                  + +

                  Temporally interleave frames from several inputs. +

                  +

                  interleave works with video inputs, ainterleave with audio. +

                  +

                  These filters read frames from several inputs and send the oldest +queued frame to the output. +

                  +

                  Input streams must have a well defined, monotonically increasing frame +timestamp values. +

                  +

                  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. +

                  +

                  For example consider the case when one input is a select filter +which always drop input frames. The interleave 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. +

                  +

                  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. +

                  +

                  These filters accept the following options: +

                  +
                  +
                  nb_inputs, n
                  +

                  Set the number of different inputs, it is 2 by default. +

                  +
                  + + +

                  36.4.1 Examples

                  + +
                    +
                  • +Interleave frames belonging to different streams using ffmpeg: +
                     
                    ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
                    +
                    + +
                  • +Add flickering blur effect: +
                     
                    select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
                    +
                    +
                  + + +

                  36.5 perms, aperms

                  + +

                  Set read/write permissions for the output frames. +

                  +

                  These filters are mainly aimed at developers to test direct path in the +following filter in the filtergraph. +

                  +

                  The filters accept the following options: +

                  +
                  +
                  mode
                  +

                  Select the permissions mode. +

                  +

                  It accepts the following values: +

                  +
                  none
                  +

                  Do nothing. This is the default. +

                  +
                  ro
                  +

                  Set all the output frames read-only. +

                  +
                  rw
                  +

                  Set all the output frames directly writable. +

                  +
                  toggle
                  +

                  Make the frame read-only if writable, and writable if read-only. +

                  +
                  random
                  +

                  Set each output frame read-only or writable randomly. +

                  +
                  + +
                  +
                  seed
                  +

                  Set the seed for the random mode, 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. +

                  +
                  + +

                  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 format or aformat filter before the +perms/aperms filter can avoid this problem. +

                  + +

                  36.6 select, aselect

                  + +

                  Select frames to pass in output. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  expr, e
                  +

                  Set expression, which is evaluated for each input frame. +

                  +

                  If the expression is evaluated to zero, the frame is discarded. +

                  +

                  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 +ceil(val)-1, assuming that the input index starts from 0. +

                  +

                  For example a value of 1.2 corresponds to the output with index +ceil(1.2)-1 = 2-1 = 1, that is the second output. +

                  +
                  +
                  outputs, n
                  +

                  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. +

                  +
                  + +

                  The expression can contain the following constants: +

                  +
                  +
                  n
                  +

                  the sequential number of the filtered frame, starting from 0 +

                  +
                  +
                  selected_n
                  +

                  the sequential number of the selected frame, starting from 0 +

                  +
                  +
                  prev_selected_n
                  +

                  the sequential number of the last selected frame, NAN if undefined +

                  +
                  +
                  TB
                  +

                  timebase of the input timestamps +

                  +
                  +
                  pts
                  +

                  the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in TB units, NAN if undefined +

                  +
                  +
                  t
                  +

                  the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in seconds, NAN if undefined +

                  +
                  +
                  prev_pts
                  +

                  the PTS of the previously filtered video frame, NAN if undefined +

                  +
                  +
                  prev_selected_pts
                  +

                  the PTS of the last previously filtered video frame, NAN if undefined +

                  +
                  +
                  prev_selected_t
                  +

                  the PTS of the last previously selected video frame, NAN if undefined +

                  +
                  +
                  start_pts
                  +

                  the PTS of the first video frame in the video, NAN if undefined +

                  +
                  +
                  start_t
                  +

                  the time of the first video frame in the video, NAN if undefined +

                  +
                  +
                  pict_type (video only)
                  +

                  the type of the filtered frame, can assume one of the following +values: +

                  +
                  I
                  +
                  P
                  +
                  B
                  +
                  S
                  +
                  SI
                  +
                  SP
                  +
                  BI
                  +
                  + +
                  +
                  interlace_type (video only)
                  +

                  the frame interlace type, can assume one of the following values: +

                  +
                  PROGRESSIVE
                  +

                  the frame is progressive (not interlaced) +

                  +
                  TOPFIRST
                  +

                  the frame is top-field-first +

                  +
                  BOTTOMFIRST
                  +

                  the frame is bottom-field-first +

                  +
                  + +
                  +
                  consumed_sample_n (audio only)
                  +

                  the number of selected samples before the current frame +

                  +
                  +
                  samples_n (audio only)
                  +

                  the number of samples in the current frame +

                  +
                  +
                  sample_rate (audio only)
                  +

                  the input sample rate +

                  +
                  +
                  key
                  +

                  1 if the filtered frame is a key-frame, 0 otherwise +

                  +
                  +
                  pos
                  +

                  the position in the file of the filtered frame, -1 if the information +is not available (e.g. for synthetic video) +

                  +
                  +
                  scene (video only)
                  +

                  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) +

                  +
                  +
                  + +

                  The default value of the select expression is "1". +

                  + +

                  36.6.1 Examples

                  + +
                    +
                  • +Select all frames in input: +
                     
                    select
                    +
                    + +

                    The example above is the same as: +

                     
                    select=1
                    +
                    + +
                  • +Skip all frames: +
                     
                    select=0
                    +
                    + +
                  • +Select only I-frames: +
                     
                    select='eq(pict_type\,I)'
                    +
                    + +
                  • +Select one frame every 100: +
                     
                    select='not(mod(n\,100))'
                    +
                    + +
                  • +Select only frames contained in the 10-20 time interval: +
                     
                    select=between(t\,10\,20)
                    +
                    + +
                  • +Select only I frames contained in the 10-20 time interval: +
                     
                    select=between(t\,10\,20)*eq(pict_type\,I)
                    +
                    + +
                  • +Select frames with a minimum distance of 10 seconds: +
                     
                    select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
                    +
                    + +
                  • +Use aselect to select only audio frames with samples number > 100: +
                     
                    aselect='gt(samples_n\,100)'
                    +
                    + +
                  • +Create a mosaic of the first scenes: +
                     
                    ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
                    +
                    + +

                    Comparing scene against a value between 0.3 and 0.5 is generally a sane +choice. +

                    +
                  • +Send even and odd frames to separate outputs, and compose them: +
                     
                    select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
                    +
                    +
                  + + +

                  36.7 sendcmd, asendcmd

                  + +

                  Send commands to filters in the filtergraph. +

                  +

                  These filters read commands to be sent to other filters in the +filtergraph. +

                  +

                  sendcmd must be inserted between two video filters, +asendcmd must be inserted between two audio filters, but apart +from that they act the same way. +

                  +

                  The specification of commands can be provided in the filter arguments +with the commands option, or in a file specified by the +filename option. +

                  +

                  These filters accept the following options: +

                  +
                  commands, c
                  +

                  Set the commands to be read and sent to the other filters. +

                  +
                  filename, f
                  +

                  Set the filename of the commands to be read and sent to the other +filters. +

                  +
                  + + +

                  36.7.1 Commands syntax

                  + +

                  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. +

                  +

                  An interval is specified by the following syntax: +

                   
                  START[-END] COMMANDS;
                  +
                  + +

                  The time interval is specified by the START and END times. +END is optional and defaults to the maximum time. +

                  +

                  The current frame time is considered within the specified interval if +it is included in the interval [START, END), that is when +the time is greater or equal to START and is lesser than +END. +

                  +

                  COMMANDS 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: +

                   
                  [FLAGS] TARGET COMMAND ARG
                  +
                  + +

                  FLAGS 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 "]". +

                  +

                  The following flags are recognized: +

                  +
                  enter
                  +

                  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. +

                  +
                  +
                  leave
                  +

                  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. +

                  +
                  + +

                  If FLAGS is not specified, a default value of [enter] is +assumed. +

                  +

                  TARGET specifies the target of the command, usually the name of +the filter class or a specific filter instance name. +

                  +

                  COMMAND specifies the name of the command for the target filter. +

                  +

                  ARG is optional and specifies the optional list of argument for +the given COMMAND. +

                  +

                  Between one interval specification and another, whitespaces, or +sequences of characters starting with # until the end of line, +are ignored and can be used to annotate comments. +

                  +

                  A simplified BNF description of the commands specification syntax +follows: +

                   
                  COMMAND_FLAG  ::= "enter" | "leave"
                  +COMMAND_FLAGS ::= COMMAND_FLAG [(+|"|")COMMAND_FLAG]
                  +COMMAND       ::= ["[" COMMAND_FLAGS "]"] TARGET COMMAND [ARG]
                  +COMMANDS      ::= COMMAND [,COMMANDS]
                  +INTERVAL      ::= START[-END] COMMANDS
                  +INTERVALS     ::= INTERVAL[;INTERVALS]
                  +
                  + + +

                  36.7.2 Examples

                  + +
                    +
                  • +Specify audio tempo change at second 4: +
                     
                    asendcmd=c='4.0 atempo tempo 1.5',atempo
                    +
                    + +
                  • +Specify a list of drawtext and hue commands in a file. +
                     
                    # 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)
                    +
                    + +

                    A filtergraph allowing to read and process the above command list +stored in a file ‘test.cmd’, can be specified with: +

                     
                    sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
                    +
                    +
                  + +

                  +

                  +

                  36.8 setpts, asetpts

                  + +

                  Change the PTS (presentation timestamp) of the input frames. +

                  +

                  setpts works on video frames, asetpts on audio frames. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  expr
                  +

                  The expression which is evaluated for each frame to construct its timestamp. +

                  +
                  +
                  + +

                  The expression is evaluated through the eval API and can contain the following +constants: +

                  +
                  +
                  FRAME_RATE
                  +

                  frame rate, only defined for constant frame-rate video +

                  +
                  +
                  PTS
                  +

                  the presentation timestamp in input +

                  +
                  +
                  N
                  +

                  the count of the input frame for video or the number of consumed samples, +not including the current frame for audio, starting from 0. +

                  +
                  +
                  NB_CONSUMED_SAMPLES
                  +

                  the number of consumed samples, not including the current frame (only +audio) +

                  +
                  +
                  NB_SAMPLES, S
                  +

                  the number of samples in the current frame (only audio) +

                  +
                  +
                  SAMPLE_RATE, SR
                  +

                  audio sample rate +

                  +
                  +
                  STARTPTS
                  +

                  the PTS of the first frame +

                  +
                  +
                  STARTT
                  +

                  the time in seconds of the first frame +

                  +
                  +
                  INTERLACED
                  +

                  tell if the current frame is interlaced +

                  +
                  +
                  T
                  +

                  the time in seconds of the current frame +

                  +
                  +
                  POS
                  +

                  original position in the file of the frame, or undefined if undefined +for the current frame +

                  +
                  +
                  PREV_INPTS
                  +

                  previous input PTS +

                  +
                  +
                  PREV_INT
                  +

                  previous input time in seconds +

                  +
                  +
                  PREV_OUTPTS
                  +

                  previous output PTS +

                  +
                  +
                  PREV_OUTT
                  +

                  previous output time in seconds +

                  +
                  +
                  RTCTIME
                  +

                  wallclock (RTC) time in microseconds. This is deprecated, use time(0) +instead. +

                  +
                  +
                  RTCSTART
                  +

                  wallclock (RTC) time at the start of the movie in microseconds +

                  +
                  +
                  TB
                  +

                  timebase of the input timestamps +

                  +
                  +
                  + + +

                  36.8.1 Examples

                  + +
                    +
                  • +Start counting PTS from zero +
                     
                    setpts=PTS-STARTPTS
                    +
                    + +
                  • +Apply fast motion effect: +
                     
                    setpts=0.5*PTS
                    +
                    + +
                  • +Apply slow motion effect: +
                     
                    setpts=2.0*PTS
                    +
                    + +
                  • +Set fixed rate of 25 frames per second: +
                     
                    setpts=N/(25*TB)
                    +
                    + +
                  • +Set fixed rate 25 fps with some jitter: +
                     
                    setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
                    +
                    + +
                  • +Apply an offset of 10 seconds to the input PTS: +
                     
                    setpts=PTS+10/TB
                    +
                    + +
                  • +Generate timestamps from a "live source" and rebase onto the current timebase: +
                     
                    setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
                    +
                    + +
                  • +Generate timestamps by counting samples: +
                     
                    asetpts=N/SR/TB
                    +
                    + +
                  + + +

                  36.9 settb, asettb

                  + +

                  Set the timebase to use for the output frames timestamps. +It is mainly useful for testing timebase configuration. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  expr, tb
                  +

                  The expression which is evaluated into the output timebase. +

                  +
                  +
                  + +

                  The value for ‘tb’ 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". +

                  + +

                  36.9.1 Examples

                  + +
                    +
                  • +Set the timebase to 1/25: +
                     
                    settb=expr=1/25
                    +
                    + +
                  • +Set the timebase to 1/10: +
                     
                    settb=expr=0.1
                    +
                    + +
                  • +Set the timebase to 1001/1000: +
                     
                    settb=1+0.001
                    +
                    + +
                  • +Set the timebase to 2*intb: +
                     
                    settb=2*intb
                    +
                    + +
                  • +Set the default timebase value: +
                     
                    settb=AVTB
                    +
                    +
                  + + +

                  36.10 showspectrum

                  + +

                  Convert input audio to a video output, representing the audio frequency +spectrum. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  size, s
                  +

                  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 +640x512. +

                  +
                  +
                  slide
                  +

                  Specify if the spectrum should slide along the window. Default value is +0. +

                  +
                  +
                  mode
                  +

                  Specify display mode. +

                  +

                  It accepts the following values: +

                  +
                  combined
                  +

                  all channels are displayed in the same row +

                  +
                  separate
                  +

                  all channels are displayed in separate rows +

                  +
                  + +

                  Default value is ‘combined’. +

                  +
                  +
                  color
                  +

                  Specify display color mode. +

                  +

                  It accepts the following values: +

                  +
                  channel
                  +

                  each channel is displayed in a separate color +

                  +
                  intensity
                  +

                  each channel is is displayed using the same color scheme +

                  +
                  + +

                  Default value is ‘channel’. +

                  +
                  +
                  scale
                  +

                  Specify scale used for calculating intensity color values. +

                  +

                  It accepts the following values: +

                  +
                  lin
                  +

                  linear +

                  +
                  sqrt
                  +

                  square root, default +

                  +
                  cbrt
                  +

                  cubic root +

                  +
                  log
                  +

                  logarithmic +

                  +
                  + +

                  Default value is ‘sqrt’. +

                  +
                  +
                  saturation
                  +

                  Set saturation modifier for displayed colors. Negative values provide +alternative color scheme. 0 is no saturation at all. +Saturation must be in [-10.0, 10.0] range. +Default value is 1. +

                  +
                  + +

                  The usage is very similar to the showwaves filter; see the examples in that +section. +

                  + +

                  36.10.1 Examples

                  + +
                    +
                  • +Large window with logarithmic color scaling: +
                     
                    showspectrum=s=1280x480:scale=log
                    +
                    + +
                  • +Complete example for a colored and sliding spectrum per channel using ffplay: +
                     
                    ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
                    +             [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
                    +
                    +
                  + + +

                  36.11 showwaves

                  + +

                  Convert input audio to a video output, representing the samples waves. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  size, s
                  +

                  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". +

                  +
                  +
                  mode
                  +

                  Set display mode. +

                  +

                  Available values are: +

                  +
                  point
                  +

                  Draw a point for each sample. +

                  +
                  +
                  line
                  +

                  Draw a vertical line for each sample. +

                  +
                  + +

                  Default value is point. +

                  +
                  +
                  n
                  +

                  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 rate +is not explicitly specified. +

                  +
                  +
                  rate, r
                  +

                  Set the (approximate) output frame rate. This is done by setting the +option n. Default value is "25". +

                  +
                  +
                  + + +

                  36.11.1 Examples

                  + +
                    +
                  • +Output the input file audio and the corresponding video representation +at the same time: +
                     
                    amovie=a.mp3,asplit[out0],showwaves[out1]
                    +
                    + +
                  • +Create a synthetic signal and show it with showwaves, forcing a +frame rate of 30 frames per second: +
                     
                    aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
                    +
                    +
                  + + +

                  36.12 split, asplit

                  + +

                  Split input into several identical outputs. +

                  +

                  asplit works with audio input, split with video. +

                  +

                  The filter accepts a single parameter which specifies the number of outputs. If +unspecified, it defaults to 2. +

                  + +

                  36.12.1 Examples

                  + +
                    +
                  • +Create two separate outputs from the same input: +
                     
                    [in] split [out0][out1]
                    +
                    + +
                  • +To create 3 or more outputs, you need to specify the number of +outputs, like in: +
                     
                    [in] asplit=3 [out0][out1][out2]
                    +
                    + +
                  • +Create two separate outputs from the same input, one cropped and +one padded: +
                     
                    [in] split [splitout1][splitout2];
                    +[splitout1] crop=100:100:0:0    [cropout];
                    +[splitout2] pad=200:200:100:100 [padout];
                    +
                    + +
                  • +Create 5 copies of the input audio with ffmpeg: +
                     
                    ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
                    +
                    +
                  + + +

                  36.13 zmq, azmq

                  + +

                  Receive commands sent through a libzmq client, and forward them to +filters in the filtergraph. +

                  +

                  zmq and azmq work as a pass-through filters. zmq +must be inserted between two video filters, azmq between two +audio filters. +

                  +

                  To enable these filters you need to install the libzmq library and +headers and configure FFmpeg with --enable-libzmq. +

                  +

                  For more information about libzmq see: +http://www.zeromq.org/ +

                  +

                  The zmq and azmq filters work as a libzmq server, which +receives messages sent through a network interface defined by the +‘bind_address’ option. +

                  +

                  The received message must be in the form: +

                   
                  TARGET COMMAND [ARG]
                  +
                  + +

                  TARGET specifies the target of the command, usually the name of +the filter class or a specific filter instance name. +

                  +

                  COMMAND specifies the name of the command for the target filter. +

                  +

                  ARG is optional and specifies the optional argument list for the +given COMMAND. +

                  +

                  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: +

                   
                  ERROR_CODE ERROR_REASON
                  +MESSAGE
                  +
                  + +

                  MESSAGE is optional. +

                  + +

                  36.13.1 Examples

                  + +

                  Look at ‘tools/zmqsend’ for an example of a zmq client which can +be used to send commands processed by these filters. +

                  +

                  Consider the following filtergraph generated by ffplay +

                   
                  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 "
                  +
                  + +

                  To change the color of the left side of the video, the following +command can be used: +

                   
                  echo Parsed_color_0 c yellow | tools/zmqsend
                  +
                  + +

                  To change the right side: +

                   
                  echo Parsed_color_1 c pink | tools/zmqsend
                  +
                  + + + +

                  37. Multimedia Sources

                  + +

                  Below is a description of the currently available multimedia sources. +

                  + +

                  37.1 amovie

                  + +

                  This is the same as movie source, except it selects an audio +stream by default. +

                  +

                  +

                  +

                  37.2 movie

                  + +

                  Read audio and/or video stream(s) from a movie container. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  filename
                  +

                  The name of the resource to read (not necessarily a file but also a device or a +stream accessed through some protocol). +

                  +
                  +
                  format_name, f
                  +

                  Specifies the format assumed for the movie to read, and can be either +the name of a container or an input device. If not specified the +format is guessed from movie_name or by probing. +

                  +
                  +
                  seek_point, sp
                  +

                  Specifies the seek point in seconds, the frames will be output +starting from this seek point, the parameter is evaluated with +av_strtod so the numerical value may be suffixed by an IS +postfix. Default value is "0". +

                  +
                  +
                  streams, s
                  +

                  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". +

                  +
                  +
                  stream_index, si
                  +

                  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. +

                  +
                  +
                  loop
                  +

                  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". +

                  +

                  Note that when the movie is looped the source timestamps are not +changed, so it will generate non monotonically increasing timestamps. +

                  +
                  + +

                  This filter allows to overlay a second video on top of main input of +a filtergraph as shown in this graph: +

                   
                  input -----------> deltapts0 --> overlay --> output
                  +                                    ^
                  +                                    |
                  +movie --> scale--> deltapts1 -------+
                  +
                  + + +

                  37.2.1 Examples

                  + +
                    +
                  • +Skip 3.2 seconds from the start of the avi file in.avi, and overlay it +on top of the input labelled as "in": +
                     
                    movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
                    +[in] setpts=PTS-STARTPTS [main];
                    +[main][over] overlay=16:16 [out]
                    +
                    + +
                  • +Read from a video4linux2 device, and overlay it on top of the input +labelled as "in": +
                     
                    movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
                    +[in] setpts=PTS-STARTPTS [main];
                    +[main][over] overlay=16:16 [out]
                    +
                    + +
                  • +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": +
                     
                    movie=dvd.vob:s=v:0+#0x81 [video] [audio]
                    +
                    +
                  + + + +

                  38. See Also

                  + +

                  ffplay, +ffmpeg, ffprobe, ffserver, +ffmpeg-utils, +ffmpeg-scaler, +ffmpeg-resampler, +ffmpeg-codecs, +ffmpeg-bitstream-filters, +ffmpeg-formats, +ffmpeg-devices, +ffmpeg-protocols, +ffmpeg-filters +

                  + + +

                  39. Authors

                  + +

                  The FFmpeg developers. +

                  +

                  For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org. +

                  +

                  Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree. +

                  + +
                  +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                  diff --git a/extern/ffmpeg/doc/ffplay.html b/extern/ffmpeg/doc/ffplay.html index 4903a1997b..634baec2aa 100644 --- a/extern/ffmpeg/doc/ffplay.html +++ b/extern/ffmpeg/doc/ffplay.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : ffplay - - - - + + - - - - + + - - +
                  -
                  +

                  ffplay Documentation

                  @@ -95,7 +36,7 @@ h3 {

                  1. Synopsis

                  -
                   
                  ffplay [options] [‘input_file’]
                  -
                  - +

                  ffplay [options] [‘input_file’] +

                  2. Description

                  @@ -344,38 +62,40 @@ h3 { libraries and the SDL library. It is mostly used as a testbed for the various FFmpeg APIs.

                  - -

                  3. Options

                  + +

                  3. Options

                  -

                  All the numerical options, if not specified otherwise, accept in input -a string representing a number, which may contain one of the -International System number postfixes, for example ’K’, ’M’, ’G’. -If ’i’ is appended after the postfix, powers of 2 are used instead of -powers of 10. The ’B’ postfix multiplies the value for 8, and can be -appended after another postfix or used alone. This allows using for -example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. +

                  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’. +

                  +

                  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.

                  Options which do not take arguments are boolean options, and set the corresponding value to true. They can be set to false by prefixing -with "no" the option name, for example using "-nofoo" in the -command line will set to false the boolean option with name "foo". +the option name with "no". For example using "-nofoo" +will set the boolean option with name "foo" to false.

                  3.1 Stream specifiers

                  Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers -are used to precisely specify which stream(s) does a given option belong to. +are used to precisely specify which stream(s) a given option belongs to.

                  A stream specifier is a string generally appended to the option name and -separated from it by a colon. E.g. -codec:a:1 ac3 option contains -a:1 stream specifer, which matches the second audio stream. Therefore it +separated from it by a colon. E.g. -codec:a:1 ac3 contains the +a:1 stream specifier, which matches the second audio stream. Therefore, it would select the ac3 codec for the second audio stream.

                  -

                  A stream specifier can match several stream, the option is then applied to all +

                  A stream specifier can match several streams, so that the option is applied to all of them. E.g. the stream specifier in -b:a 128k matches all audio streams.

                  -

                  An empty stream specifier matches all streams, for example -codec copy +

                  An empty stream specifier matches all streams. For example, -codec copy or -codec: copy would copy all the streams without reencoding.

                  Possible forms of stream specifiers are: @@ -385,29 +105,73 @@ or -codec: copy would copy all the streams without reencoding. thread count for the second stream to 4.

                  stream_type[:stream_index]
                  -

                  stream_type is one of: ’v’ for video, ’a’ for audio, ’s’ for subtitle, -’d’ for data and ’t’ for attachments. If stream_index is given, then -matches stream number stream_index of this type. Otherwise matches all +

                  stream_type is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle, +’d’ for data, and ’t’ for attachments. If stream_index is given, then it matches +stream number stream_index of this type. Otherwise, it matches all streams of this type.

                  p:program_id[:stream_index]
                  -

                  If stream_index is given, then matches stream number stream_index in -program with id program_id. Otherwise matches all streams in this program. +

                  If stream_index is given, then it matches the stream with number stream_index +in the program with the id program_id. Otherwise, it matches all streams in the +program. +

                  +
                  #stream_id
                  +

                  Matches the stream by a format-specific ID.

                  +

                  3.2 Generic options

                  -

                  These options are shared amongst the av* tools. +

                  These options are shared amongst the ff* tools.

                  -L

                  Show license.

                  -
                  -h, -?, -help, --help
                  -

                  Show help. +

                  -h, -?, -help, --help [arg]
                  +

                  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.

                  +

                  Possible values of arg are: +

                  +
                  long
                  +

                  Print advanced tool options in addition to the basic tool options. +

                  +
                  +
                  full
                  +

                  Print complete list of options, including shared and private options +for encoders, decoders, demuxers, muxers, filters, etc. +

                  +
                  +
                  decoder=decoder_name
                  +

                  Print detailed information about the decoder named decoder_name. Use the +‘-decoders’ option to get a list of all decoders. +

                  +
                  +
                  encoder=encoder_name
                  +

                  Print detailed information about the encoder named encoder_name. Use the +‘-encoders’ option to get a list of all encoders. +

                  +
                  +
                  demuxer=demuxer_name
                  +

                  Print detailed information about the demuxer named demuxer_name. Use the +‘-formats’ option to get a list of all demuxers and muxers. +

                  +
                  +
                  muxer=muxer_name
                  +

                  Print detailed information about the muxer named muxer_name. Use the +‘-formats’ option to get a list of all muxers and demuxers. +

                  +
                  +
                  filter=filter_name
                  +

                  Print detailed information about the filter name filter_name. Use the +‘-filters’ option to get a list of all filters. +

                  +
                  +
                  -version

                  Show version. @@ -416,42 +180,21 @@ program with id program_id. Otherwise matches all streams in this pro

                  -formats

                  Show available formats.

                  -

                  The fields preceding the format names have the following meanings: -

                  -
                  D
                  -

                  Decoding available -

                  -
                  E
                  -

                  Encoding available -

                  -
                  -
                  -codecs
                  -

                  Show available codecs. +

                  Show all codecs known to libavcodec. +

                  +

                  Note that the term ’codec’ is used throughout this documentation as a shortcut +for what is more correctly called a media bitstream format. +

                  +
                  +
                  -decoders
                  +

                  Show available decoders. +

                  +
                  +
                  -encoders
                  +

                  Show all available encoders.

                  -

                  The fields preceding the codec names have the following meanings: -

                  -
                  D
                  -

                  Decoding available -

                  -
                  E
                  -

                  Encoding available -

                  -
                  V/A/S
                  -

                  Video/audio/subtitle codec -

                  -
                  S
                  -

                  Codec supports slices -

                  -
                  D
                  -

                  Codec supports direct rendering -

                  -
                  T
                  -

                  Codec can handle input truncated at random locations instead of only at frame boundaries -

                  -
                  -
                  -bsfs

                  Show available bitstream filters. @@ -473,18 +216,52 @@ program with id program_id. Otherwise matches all streams in this pro

                  Show available sample formats.

                  -
                  -loglevel loglevel | -v loglevel
                  +
                  -layouts
                  +

                  Show channel names and standard channel layouts. +

                  +
                  +
                  -colors
                  +

                  Show recognized color names. +

                  +
                  +
                  -loglevel [repeat+]loglevel | -v [repeat+]loglevel

                  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. loglevel is a number or a string containing one of the following values:

                  quiet
                  +

                  Show nothing at all; be silent. +

                  panic
                  +

                  Only show fatal errors which could lead the process to crash, such as +and assert failure. This is not currently used for anything. +

                  fatal
                  +

                  Only show fatal errors. These are errors after which the process absolutely +cannot continue after. +

                  error
                  +

                  Show all errors, including ones which can be recovered from. +

                  warning
                  +

                  Show all warnings and errors. Any message related to possibly +incorrect or unexpected events will be shown. +

                  info
                  +

                  Show informative messages during processing. This is in addition to +warnings and errors. This is the default value. +

                  verbose
                  +

                  Same as info, except more verbose. +

                  debug
                  +

                  Show everything, including debugging information. +

                  By default the program logs to stderr, if coloring is supported by the @@ -503,10 +280,92 @@ directory. This file can be useful for bug reports. It also implies -loglevel verbose.

                  -

                  Note: setting the environment variable FFREPORT to any value has the -same effect. +

                  Setting the environment variable FFREPORT 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: +

                  +
                  file
                  +

                  set the file name to use for the report; %p is expanded to the name +of the program, %t is expanded to a timestamp, %% is expanded +to a plain % +

                  +
                  + +

                  Errors in parsing the environment variable are not fatal, and will not +appear in the report.

                  +
                  -cpuflags flags (global)
                  +

                  Allows setting and clearing cpu flags. This option is intended +for testing. Do not use it unless you know what you’re doing. +

                   
                  ffmpeg -cpuflags -sse+mmx ...
                  +ffmpeg -cpuflags mmx ...
                  +ffmpeg -cpuflags 0 ...
                  +
                  +

                  Possible flags for this option are: +

                  +
                  x86
                  +
                  +
                  mmx
                  +
                  mmxext
                  +
                  sse
                  +
                  sse2
                  +
                  sse2slow
                  +
                  sse3
                  +
                  sse3slow
                  +
                  ssse3
                  +
                  atom
                  +
                  sse4.1
                  +
                  sse4.2
                  +
                  avx
                  +
                  xop
                  +
                  fma4
                  +
                  3dnow
                  +
                  3dnowext
                  +
                  cmov
                  +
                  +
                  +
                  ARM
                  +
                  +
                  armv5te
                  +
                  armv6
                  +
                  armv6t2
                  +
                  vfp
                  +
                  vfpv3
                  +
                  neon
                  +
                  +
                  +
                  PowerPC
                  +
                  +
                  altivec
                  +
                  +
                  +
                  Specific Processors
                  +
                  +
                  pentium2
                  +
                  pentium3
                  +
                  pentium4
                  +
                  k6
                  +
                  k62
                  +
                  athlon
                  +
                  athlonxp
                  +
                  k8
                  +
                  +
                  +
                  + +
                  +
                  -opencl_options options (global)
                  +

                  Set OpenCL environment options. This option is only available when +FFmpeg has been compiled with --enable-opencl. +

                  +

                  options must be a list of key=value option pairs +separated by ’:’. See the “OpenCL Options” section in the +ffmpeg-utils manual for the list of supported options. +

                  @@ -533,14 +392,15 @@ muxer:

                   
                  ffmpeg -i input.flac -id3v2_version 3 out.mp3
                   
                  -

                  All codec AVOptions are obviously per-stream, so the chapter on stream -specifiers applies to them +

                  All codec AVOptions are per-stream, and thus a stream specifier +should be attached to them.

                  -

                  Note ‘-nooption’ syntax cannot be used for boolean AVOptions, -use ‘-option 0’/‘-option 1’. +

                  Note: the ‘-nooption’ syntax cannot be used for boolean +AVOptions, use ‘-option 0’/‘-option 1’.

                  -

                  Note2 old undocumented way of specifying per-stream AVOptions by prepending -v/a/s to the options name is now obsolete and will be removed soon. +

                  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.

                  3.4 Main options

                  @@ -606,11 +466,23 @@ Available values for mode are: pressing the key <w>.

                  -
                  -vf filter_graph
                  -

                  filter_graph is a description of the filter graph to apply to -the input video. +

                  -vf filtergraph
                  +

                  Create the filtergraph specified by filtergraph and use it to +filter the video stream. +

                  +

                  filtergraph 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 +in, and the output to the label out. See the +ffmpeg-filters manual for more information about the filtergraph +syntax. +

                  +
                  +
                  -af filtergraph
                  +

                  filtergraph is a description of the filtergraph to apply to +the input audio. Use the option "-filters" to show all the available filters (including -also sources and sinks). +sources and sinks).

                  -i input_file
                  @@ -624,11 +496,15 @@ also sources and sinks).
                  -pix_fmt format

                  Set pixel format. This option has been deprecated in favor of private options, try -pixel_format. -

                  +

                  +
                  -stats
                  -

                  Show the stream duration, the codec parameters, the current position in -the stream and the audio/video synchronisation drift. -

                  +

                  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 -nostats. +

                  +
                  -bug

                  Work around bugs.

                  @@ -679,9 +555,24 @@ selected, if it is negative the subtitle rendering is disabled.

                  -exitonmousedown

                  Exit if any mouse button is pressed. -

                  -
                  -codec:stream_type
                  -

                  Force a specific decoder implementation +

                  +
                  +
                  -codec:media_specifier codec_name
                  +

                  Force a specific decoder implementation for the stream identified by +media_specifier, which can assume the values a (audio), +v (video), and s subtitle. +

                  +
                  +
                  -acodec codec_name
                  +

                  Force a specific audio decoder. +

                  +
                  +
                  -vcodec codec_name
                  +

                  Force a specific video decoder. +

                  +
                  +
                  -scodec codec_name
                  +

                  Force a specific subtitle decoder.

                  @@ -702,7 +593,7 @@ selected, if it is negative the subtitle rendering is disabled.

                  <a>
                  -

                  Cycle audio channel. +

                  Cycle audio channel in the curret program.

                  <v>
                  @@ -710,7 +601,11 @@ selected, if it is negative the subtitle rendering is disabled.

                  <t>
                  -

                  Cycle subtitle channel. +

                  Cycle subtitle channel in the current program. +

                  +
                  +
                  <c>
                  +

                  Cycle program.

                  <w>
                  @@ -736,5516 +631,36 @@ selected, if it is negative the subtitle rendering is disabled. - -

                  4. Expression Evaluation

                  -

                  When evaluating an arithmetic expression, FFmpeg uses an internal -formula evaluator, implemented through the ‘libavutil/eval.h’ -interface. -

                  -

                  An expression may contain unary, binary operators, constants, and -functions. -

                  -

                  Two expressions expr1 and expr2 can be combined to form -another expression "expr1;expr2". -expr1 and expr2 are evaluated in turn, and the new -expression evaluates to the value of expr2. -

                  -

                  The following binary operators are available: +, -, -*, /, ^. -

                  -

                  The following unary operators are available: +, -. -

                  -

                  The following functions are available: -

                  -
                  sinh(x)
                  -
                  cosh(x)
                  -
                  tanh(x)
                  -
                  sin(x)
                  -
                  cos(x)
                  -
                  tan(x)
                  -
                  atan(x)
                  -
                  asin(x)
                  -
                  acos(x)
                  -
                  exp(x)
                  -
                  log(x)
                  -
                  abs(x)
                  -
                  squish(x)
                  -
                  gauss(x)
                  -
                  isnan(x)
                  -

                  Return 1.0 if x is NAN, 0.0 otherwise. -

                  -
                  -
                  mod(x, y)
                  -
                  max(x, y)
                  -
                  min(x, y)
                  -
                  eq(x, y)
                  -
                  gte(x, y)
                  -
                  gt(x, y)
                  -
                  lte(x, y)
                  -
                  lt(x, y)
                  -
                  st(var, expr)
                  -

                  Allow to store the value of the expression expr in an internal -variable. var specifies the number of the variable where to -store the value, and it is a value ranging from 0 to 9. The function -returns the value stored in the internal variable. -Note, Variables are currently not shared between expressions. -

                  -
                  -
                  ld(var)
                  -

                  Allow to load the value of the internal variable with number -var, which was previously stored with st(var, expr). -The function returns the loaded value. -

                  -
                  -
                  while(cond, expr)
                  -

                  Evaluate expression expr while the expression cond is -non-zero, and returns the value of the last expr evaluation, or -NAN if cond was always false. -

                  -
                  -
                  ceil(expr)
                  -

                  Round the value of expression expr upwards to the nearest -integer. For example, "ceil(1.5)" is "2.0". -

                  -
                  -
                  floor(expr)
                  -

                  Round the value of expression expr downwards to the nearest -integer. For example, "floor(-1.5)" is "-2.0". -

                  -
                  -
                  trunc(expr)
                  -

                  Round the value of expression expr towards zero to the nearest -integer. For example, "trunc(-1.5)" is "-1.0". -

                  -
                  -
                  sqrt(expr)
                  -

                  Compute the square root of expr. This is equivalent to -"(expr)^.5". -

                  -
                  -
                  not(expr)
                  -

                  Return 1.0 if expr is zero, 0.0 otherwise. -

                  -
                  -
                  pow(x, y)
                  -

                  Compute the power of x elevated y, it is equivalent to -"(x)^(y)". -

                  -
                  -
                  random(x)
                  -

                  Return a pseudo random value between 0.0 and 1.0. x is the index of the -internal variable which will be used to save the seed/state. -

                  -
                  -
                  hypot(x, y)
                  -

                  This function is similar to the C function with the same name; it returns -"sqrt(x*x + y*y)", the length of the hypotenuse of a -right triangle with sides of length x and y, or the distance of the -point (x, y) from the origin. -

                  -
                  -
                  gcd(x, y)
                  -

                  Return the greatest common divisor of x and y. If both x and -y are 0 or either or both are less than zero then behavior is undefined. -

                  -
                  -
                  if(x, y)
                  -

                  Evaluate x, and if the result is non-zero return the result of -the evaluation of y, return 0 otherwise. -

                  -
                  -
                  ifnot(x, y)
                  -

                  Evaluate x, and if the result is zero return the result of the -evaluation of y, return 0 otherwise. -

                  -
                  - -

                  The following constants are available: -

                  -
                  PI
                  -

                  area of the unit disc, approximately 3.14 -

                  -
                  E
                  -

                  exp(1) (Euler’s number), approximately 2.718 -

                  -
                  PHI
                  -

                  golden ratio (1+sqrt(5))/2, approximately 1.618 -

                  -
                  - -

                  Assuming that an expression is considered "true" if it has a non-zero -value, note that: -

                  -

                  * works like AND -

                  -

                  + works like OR -

                  -

                  and the construct: -

                   
                  if A then B else C
                  -
                  -

                  is equivalent to -

                   
                  if(A,B) + ifnot(A,C)
                  -
                  - -

                  In your C code, you can extend the list of unary and binary functions, -and define recognized constants, so that they are available for your -expressions. -

                  -

                  The evaluator also recognizes the International System number -postfixes. If ’i’ is appended after the postfix, powers of 2 are used -instead of powers of 10. The ’B’ postfix multiplies the value for 8, -and can be appended after another postfix or used alone. This allows -using for example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. -

                  -

                  Follows the list of available International System postfixes, with -indication of the corresponding powers of 10 and of 2. -

                  -
                  y
                  -

                  -24 / -80 -

                  -
                  z
                  -

                  -21 / -70 -

                  -
                  a
                  -

                  -18 / -60 -

                  -
                  f
                  -

                  -15 / -50 -

                  -
                  p
                  -

                  -12 / -40 -

                  -
                  n
                  -

                  -9 / -30 -

                  -
                  u
                  -

                  -6 / -20 -

                  -
                  m
                  -

                  -3 / -10 -

                  -
                  c
                  -

                  -2 -

                  -
                  d
                  -

                  -1 -

                  -
                  h
                  -

                  2 -

                  -
                  k
                  -

                  3 / 10 -

                  -
                  K
                  -

                  3 / 10 -

                  -
                  M
                  -

                  6 / 20 -

                  -
                  G
                  -

                  9 / 30 -

                  -
                  T
                  -

                  12 / 40 -

                  -
                  P
                  -

                  15 / 40 -

                  -
                  E
                  -

                  18 / 50 -

                  -
                  Z
                  -

                  21 / 60 -

                  -
                  Y
                  -

                  24 / 70 -

                  -
                  - - -

                  5. Decoders

                  - -

                  Decoders are configured elements in FFmpeg which allow the decoding of -multimedia streams. -

                  -

                  When you configure your FFmpeg build, all the supported native decoders -are enabled by default. Decoders requiring an external library must be enabled -manually via the corresponding --enable-lib option. You can list all -available decoders using the configure option --list-decoders. -

                  -

                  You can disable all the decoders with the configure option ---disable-decoders and selectively enable / disable single decoders -with the options --enable-decoder=DECODER / ---disable-decoder=DECODER. -

                  -

                  The option -codecs of the ff* tools will display the list of -enabled decoders. -

                  - - -

                  6. Video Decoders

                  - -

                  A description of some of the currently available video decoders -follows. -

                  - -

                  6.1 rawvideo

                  - -

                  Raw video decoder. -

                  -

                  This decoder decodes rawvideo streams. -

                  - -

                  6.1.1 Options

                  - -
                  -
                  top top_field_first
                  -

                  Specify the assumed field type of the input video. -

                  -
                  -1
                  -

                  the video is assumed to be progressive (default) -

                  -
                  0
                  -

                  bottom-field-first is assumed -

                  -
                  1
                  -

                  top-field-first is assumed -

                  -
                  - -
                  -
                  - - - -

                  7. Audio Decoders

                  - - -

                  7.1 ffwavesynth

                  - -

                  Internal wave synthetizer. -

                  -

                  This decoder generates wave patterns according to predefined sequences. Its -use is purely internal and the format of the data it accepts is not publicly -documented. -

                  - -

                  8. Demuxers

                  - -

                  Demuxers are configured elements in FFmpeg which allow to read the -multimedia streams from a particular type of file. -

                  -

                  When you configure your FFmpeg build, all the supported demuxers -are enabled by default. You can list all available ones using the -configure option "–list-demuxers". -

                  -

                  You can disable all the demuxers using the configure option -"–disable-demuxers", and selectively enable a single demuxer with -the option "–enable-demuxer=DEMUXER", or disable it -with the option "–disable-demuxer=DEMUXER". -

                  -

                  The option "-formats" of the ff* tools will display the list of -enabled demuxers. -

                  -

                  The description of some of the currently available demuxers follows. -

                  - -

                  8.1 image2

                  - -

                  Image file demuxer. -

                  -

                  This demuxer reads from a list of image files specified by a pattern. -

                  -

                  The pattern may contain the string "%d" or "%0Nd", which -specifies the position of the characters representing a sequential -number in each filename matched by the pattern. If the form -"%d0Nd" is used, the string representing the number in each -filename is 0-padded and N is the total number of 0-padded -digits representing the number. The literal character ’%’ can be -specified in the pattern with the string "%%". -

                  -

                  If the pattern contains "%d" or "%0Nd", the first filename of -the file list specified by the pattern must contain a number -inclusively contained between 0 and 4, all the following numbers must -be sequential. This limitation may be hopefully fixed. -

                  -

                  The pattern may contain a suffix which is used to automatically -determine the format of the images contained in the files. -

                  -

                  For example the pattern "img-%03d.bmp" will match a sequence of -filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., -‘img-010.bmp’, etc.; the pattern "i%%m%%g-%d.jpg" will match a -sequence of filenames of the form ‘i%m%g-1.jpg’, -‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, etc. -

                  -

                  The size, the pixel format, and the format of each image must be the -same for all the files in the sequence. -

                  -

                  The following example shows how to use ffmpeg for creating a -video from the images in the file sequence ‘img-001.jpeg’, -‘img-002.jpeg’, ..., assuming an input frame rate of 10 frames per -second: -

                   
                  ffmpeg -i 'img-%03d.jpeg' -r 10 out.mkv
                  -
                  - -

                  Note that the pattern must not necessarily contain "%d" or -"%0Nd", for example to convert a single image file -‘img.jpeg’ you can employ the command: -

                   
                  ffmpeg -i img.jpeg img.png
                  -
                  - - -

                  8.2 applehttp

                  - -

                  Apple HTTP Live Streaming demuxer. -

                  -

                  This demuxer presents all AVStreams from all variant streams. -The id field is set to the bitrate variant index number. By setting -the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), -the caller can decide which variant streams to actually receive. -The total bitrate of the variant that the stream belongs to is -available in a metadata key named "variant_bitrate". -

                  - -

                  8.3 sbg

                  - -

                  SBaGen script demuxer. -

                  -

                  This demuxer reads the script language used by SBaGen -http://uazu.net/sbagen/ to generate binaural beats sessions. A SBG -script looks like that: -

                   
                  -SE
                  -a: 300-2.5/3 440+4.5/0
                  -b: 300-2.5/0 440+4.5/3
                  -off: -
                  -NOW      == a
                  -+0:07:00 == b
                  -+0:14:00 == a
                  -+0:21:00 == b
                  -+0:30:00    off
                  -
                  - -

                  A SBG script can mix absolute and relative timestamps. If the script uses -either only absolute timestamps (including the script start time) or only -relative ones, then its layout is fixed, and the conversion is -straightforward. On the other hand, if the script mixes both kind of -timestamps, then the NOW reference for relative timestamps will be -taken from the current time of day at the time the script is read, and the -script layout will be frozen according to that reference. That means that if -the script is directly played, the actual times will match the absolute -timestamps up to the sound controller’s clock accuracy, but if the user -somehow pauses the playback or seeks, all times will be shifted accordingly. -

                  - -

                  9. Muxers

                  - -

                  Muxers are configured elements in FFmpeg which allow writing -multimedia streams to a particular type of file. -

                  -

                  When you configure your FFmpeg build, all the supported muxers -are enabled by default. You can list all available muxers using the -configure option --list-muxers. -

                  -

                  You can disable all the muxers with the configure option ---disable-muxers and selectively enable / disable single muxers -with the options --enable-muxer=MUXER / ---disable-muxer=MUXER. -

                  -

                  The option -formats of the ff* tools will display the list of -enabled muxers. -

                  -

                  A description of some of the currently available muxers follows. -

                  -

                  -

                  -

                  9.1 crc

                  - -

                  CRC (Cyclic Redundancy Check) testing format. -

                  -

                  This muxer computes and prints the Adler-32 CRC of all the input audio -and video frames. By default audio frames are converted to signed -16-bit raw audio and video frames to raw video before computing the -CRC. -

                  -

                  The output of the muxer consists of a single line of the form: -CRC=0xCRC, where CRC is a hexadecimal number 0-padded to -8 digits containing the CRC for all the decoded input frames. -

                  -

                  For example to compute the CRC of the input, and store it in the file -‘out.crc’: -

                   
                  ffmpeg -i INPUT -f crc out.crc
                  -
                  - -

                  You can print the CRC to stdout with the command: -

                   
                  ffmpeg -i INPUT -f crc -
                  -
                  - -

                  You can select the output format of each frame with ffmpeg by -specifying the audio and video codec and format. For example to -compute the CRC of the input audio converted to PCM unsigned 8-bit -and the input video converted to MPEG-2 video, use the command: -

                   
                  ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
                  -
                  - -

                  See also the framecrc muxer. -

                  -

                  -

                  -

                  9.2 framecrc

                  - -

                  Per-frame CRC (Cyclic Redundancy Check) testing format. -

                  -

                  This muxer computes and prints the Adler-32 CRC for each decoded audio -and video frame. By default audio frames are converted to signed -16-bit raw audio and video frames to raw video before computing the -CRC. -

                  -

                  The output of the muxer consists of a line for each audio and video -frame of the form: stream_index, frame_dts, -frame_size, 0xCRC, where CRC is a hexadecimal -number 0-padded to 8 digits containing the CRC of the decoded frame. -

                  -

                  For example to compute the CRC of each decoded frame in the input, and -store it in the file ‘out.crc’: -

                   
                  ffmpeg -i INPUT -f framecrc out.crc
                  -
                  - -

                  You can print the CRC of each decoded frame to stdout with the command: -

                   
                  ffmpeg -i INPUT -f framecrc -
                  -
                  - -

                  You can select the output format of each frame with ffmpeg by -specifying the audio and video codec and format. For example, to -compute the CRC of each decoded input audio frame converted to PCM -unsigned 8-bit and of each decoded input video frame converted to -MPEG-2 video, use the command: -

                   
                  ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
                  -
                  - -

                  See also the crc muxer. -

                  -

                  -

                  -

                  9.3 image2

                  - -

                  Image file muxer. -

                  -

                  The image file muxer writes video frames to image files. -

                  -

                  The output filenames are specified by a pattern, which can be used to -produce sequentially numbered series of files. -The pattern may contain the string "%d" or "%0Nd", this string -specifies the position of the characters representing a numbering in -the filenames. If the form "%0Nd" is used, the string -representing the number in each filename is 0-padded to N -digits. The literal character ’%’ can be specified in the pattern with -the string "%%". -

                  -

                  If the pattern contains "%d" or "%0Nd", the first filename of -the file list specified will contain the number 1, all the following -numbers will be sequential. -

                  -

                  The pattern may contain a suffix which is used to automatically -determine the format of the image files to write. -

                  -

                  For example the pattern "img-%03d.bmp" will specify a sequence of -filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., -‘img-010.bmp’, etc. -The pattern "img%%-%d.jpg" will specify a sequence of filenames of the -form ‘img%-1.jpg’, ‘img%-2.jpg’, ..., ‘img%-10.jpg’, -etc. -

                  -

                  The following example shows how to use ffmpeg for creating a -sequence of files ‘img-001.jpeg’, ‘img-002.jpeg’, ..., -taking one image every second from the input video: -

                   
                  ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg'
                  -
                  - -

                  Note that with ffmpeg, if the format is not specified with the --f option and the output filename specifies an image file -format, the image2 muxer is automatically selected, so the previous -command can be written as: -

                   
                  ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg'
                  -
                  - -

                  Note also that the pattern must not necessarily contain "%d" or -"%0Nd", for example to create a single image file -‘img.jpeg’ from the input video you can employ the command: -

                   
                  ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
                  -
                  - -

                  The image muxer supports the .Y.U.V image file format. This format is -special in that that each image frame consists of three files, for -each of the YUV420P components. To read or write this image file format, -specify the name of the ’.Y’ file. The muxer will automatically open the -’.U’ and ’.V’ files as required. -

                  - -

                  9.4 mov

                  - -

                  MOV / MP4 muxer -

                  -

                  The muxer options are: -

                  -
                  -
                  -moov_size bytes
                  -

                  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. -

                  -
                  - - -

                  9.5 mpegts

                  - -

                  MPEG transport stream muxer. -

                  -

                  This muxer implements ISO 13818-1 and part of ETSI EN 300 468. -

                  -

                  The muxer options are: -

                  -
                  -
                  -mpegts_original_network_id number
                  -

                  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. -

                  -
                  -mpegts_transport_stream_id number
                  -

                  Set the transport_stream_id (default 0x0001). This identifies a -transponder in DVB. -

                  -
                  -mpegts_service_id number
                  -

                  Set the service_id (default 0x0001) also known as program in DVB. -

                  -
                  -mpegts_pmt_start_pid number
                  -

                  Set the first PID for PMT (default 0x1000, max 0x1f00). -

                  -
                  -mpegts_start_pid number
                  -

                  Set the first PID for data packets (default 0x0100, max 0x0f00). -

                  -
                  - -

                  The recognized metadata settings in mpegts muxer are service_provider -and service_name. If they are not set the default for -service_provider is "FFmpeg" and the default for -service_name is "Service01". -

                  -
                   
                  ffmpeg -i file.mpg -c copy \
                  -     -mpegts_original_network_id 0x1122 \
                  -     -mpegts_transport_stream_id 0x3344 \
                  -     -mpegts_service_id 0x5566 \
                  -     -mpegts_pmt_start_pid 0x1500 \
                  -     -mpegts_start_pid 0x150 \
                  -     -metadata service_provider="Some provider" \
                  -     -metadata service_name="Some Channel" \
                  -     -y out.ts
                  -
                  - - -

                  9.6 null

                  - -

                  Null muxer. -

                  -

                  This muxer does not generate any output file, it is mainly useful for -testing or benchmarking purposes. -

                  -

                  For example to benchmark decoding with ffmpeg you can use the -command: -

                   
                  ffmpeg -benchmark -i INPUT -f null out.null
                  -
                  - -

                  Note that the above command does not read or write the ‘out.null’ -file, but specifying the output file is required by the ffmpeg -syntax. -

                  -

                  Alternatively you can write the command as: -

                   
                  ffmpeg -benchmark -i INPUT -f null -
                  -
                  - - -

                  9.7 matroska

                  - -

                  Matroska container muxer. -

                  -

                  This muxer implements the matroska and webm container specs. -

                  -

                  The recognized metadata settings in this muxer are: -

                  -
                  -
                  title=title name
                  -

                  Name provided to a single track -

                  -
                  - -
                  -
                  language=language name
                  -

                  Specifies the language of the track in the Matroska languages form -

                  -
                  - -
                  -
                  stereo_mode=mode
                  -

                  Stereo 3D video layout of two views in a single video track -

                  -
                  mono
                  -

                  video is not stereo -

                  -
                  left_right
                  -

                  Both views are arranged side by side, Left-eye view is on the left -

                  -
                  bottom_top
                  -

                  Both views are arranged in top-bottom orientation, Left-eye view is at bottom -

                  -
                  top_bottom
                  -

                  Both views are arranged in top-bottom orientation, Left-eye view is on top -

                  -
                  checkerboard_rl
                  -

                  Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first -

                  -
                  checkerboard_lr
                  -

                  Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first -

                  -
                  row_interleaved_rl
                  -

                  Each view is constituted by a row based interleaving, Right-eye view is first row -

                  -
                  row_interleaved_lr
                  -

                  Each view is constituted by a row based interleaving, Left-eye view is first row -

                  -
                  col_interleaved_rl
                  -

                  Both views are arranged in a column based interleaving manner, Right-eye view is first column -

                  -
                  col_interleaved_lr
                  -

                  Both views are arranged in a column based interleaving manner, Left-eye view is first column -

                  -
                  anaglyph_cyan_red
                  -

                  All frames are in anaglyph format viewable through red-cyan filters -

                  -
                  right_left
                  -

                  Both views are arranged side by side, Right-eye view is on the left -

                  -
                  anaglyph_green_magenta
                  -

                  All frames are in anaglyph format viewable through green-magenta filters -

                  -
                  block_lr
                  -

                  Both eyes laced in one Block, Left-eye view is first -

                  -
                  block_rl
                  -

                  Both eyes laced in one Block, Right-eye view is first -

                  -
                  -
                  -
                  - -

                  For example a 3D WebM clip can be created using the following command line: -

                   
                  ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
                  -
                  - - -

                  9.8 segment

                  - -

                  Basic stream segmenter. -

                  -

                  The segmenter muxer outputs streams to a number of separate files of nearly -fixed duration. Output filename pattern can be set in a fashion similar to -image2. -

                  -

                  Every segment starts with a video keyframe, if a video stream is present. -The segment muxer works best with a single constant frame rate video. -

                  -

                  Optionally it can generate a flat list of the created segments, one segment -per line. -

                  -
                  -
                  segment_format format
                  -

                  Override the inner container format, by default it is guessed by the filename -extension. -

                  -
                  segment_time t
                  -

                  Set segment duration to t seconds. -

                  -
                  segment_list name
                  -

                  Generate also a listfile named name. -

                  -
                  segment_list_size size
                  -

                  Overwrite the listfile once it reaches size entries. -

                  -
                  - -
                   
                  ffmpeg -i in.mkv -c copy -map 0 -f segment -list out.list out%03d.nut
                  -
                  - - - -

                  10. Input Devices

                  - -

                  Input devices are configured elements in FFmpeg which allow to access -the data coming from a multimedia device attached to your system. -

                  -

                  When you configure your FFmpeg build, all the supported input devices -are enabled by default. You can list all available ones using the -configure option "–list-indevs". -

                  -

                  You can disable all the input devices using the configure option -"–disable-indevs", and selectively enable an input device using the -option "–enable-indev=INDEV", or you can disable a particular -input device using the option "–disable-indev=INDEV". -

                  -

                  The option "-formats" of the ff* tools will display the list of -supported input devices (amongst the demuxers). -

                  -

                  A description of the currently available input devices follows. -

                  - -

                  10.1 alsa

                  - -

                  ALSA (Advanced Linux Sound Architecture) input device. -

                  -

                  To enable this input device during configuration you need libasound -installed on your system. -

                  -

                  This device allows capturing from an ALSA device. The name of the -device to capture has to be an ALSA card identifier. -

                  -

                  An ALSA identifier has the syntax: -

                   
                  hw:CARD[,DEV[,SUBDEV]]
                  -
                  - -

                  where the DEV and SUBDEV components are optional. -

                  -

                  The three arguments (in order: CARD,DEV,SUBDEV) -specify card number or identifier, device number and subdevice number -(-1 means any). -

                  -

                  To see the list of cards currently recognized by your system check the -files ‘/proc/asound/cards’ and ‘/proc/asound/devices’. -

                  -

                  For example to capture with ffmpeg from an ALSA device with -card id 0, you may run the command: -

                   
                  ffmpeg -f alsa -i hw:0 alsaout.wav
                  -
                  - -

                  For more information see: -http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html -

                  - -

                  10.2 bktr

                  - -

                  BSD video input device. -

                  - -

                  10.3 dshow

                  - -

                  Windows DirectShow input device. -

                  -

                  DirectShow support is enabled when FFmpeg is built with mingw-w64. -Currently only audio and video devices are supported. -

                  -

                  Multiple devices may be opened as separate inputs, but they may also be -opened on the same input, which should improve synchronism between them. -

                  -

                  The input name should be in the format: -

                  -
                   
                  TYPE=NAME[:TYPE=NAME]
                  -
                  - -

                  where TYPE can be either audio or video, -and NAME is the device’s name. -

                  - -

                  10.3.1 Options

                  - -

                  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. -

                  -
                  -
                  video_size
                  -

                  Set the video size in the captured video. -

                  -
                  -
                  framerate
                  -

                  Set the framerate in the captured video. -

                  -
                  -
                  sample_rate
                  -

                  Set the sample rate (in Hz) of the captured audio. -

                  -
                  -
                  sample_size
                  -

                  Set the sample size (in bits) of the captured audio. -

                  -
                  -
                  channels
                  -

                  Set the number of channels in the captured audio. -

                  -
                  -
                  list_devices
                  -

                  If set to ‘true’, print a list of devices and exit. -

                  -
                  -
                  list_options
                  -

                  If set to ‘true’, print a list of selected device’s options -and exit. -

                  -
                  -
                  video_device_number
                  -

                  Set video device number for devices with same name (starts at 0, -defaults to 0). -

                  -
                  -
                  audio_device_number
                  -

                  Set audio device number for devices with same name (starts at 0, -defaults to 0). -

                  -
                  -
                  - - -

                  10.3.2 Examples

                  - -
                    -
                  • -Print the list of DirectShow supported devices and exit: -
                     
                    $ ffmpeg -list_devices true -f dshow -i dummy
                    -
                    - -
                  • -Open video device Camera: -
                     
                    $ ffmpeg -f dshow -i video="Camera"
                    -
                    - -
                  • -Open second video device with name Camera: -
                     
                    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
                    -
                    - -
                  • -Open video device Camera and audio device Microphone: -
                     
                    $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
                    -
                    - -
                  • -Print the list of supported options in selected device and exit: -
                     
                    $ ffmpeg -list_options true -f dshow -i video="Camera"
                    -
                    - -
                  - - -

                  10.4 dv1394

                  - -

                  Linux DV 1394 input device. -

                  - -

                  10.5 fbdev

                  - -

                  Linux framebuffer input device. -

                  -

                  The Linux framebuffer is a graphic hardware-independent abstraction -layer to show graphics on a computer monitor, typically on the -console. It is accessed through a file device node, usually -‘/dev/fb0’. -

                  -

                  For more detailed information read the file -Documentation/fb/framebuffer.txt included in the Linux source tree. -

                  -

                  To record from the framebuffer device ‘/dev/fb0’ with -ffmpeg: -

                   
                  ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
                  -
                  - -

                  You can take a single screenshot image with the command: -

                   
                  ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
                  -
                  - -

                  See also http://linux-fbdev.sourceforge.net/, and fbset(1). -

                  - -

                  10.6 jack

                  - -

                  JACK input device. -

                  -

                  To enable this input device during configuration you need libjack -installed on your system. -

                  -

                  A JACK input device creates one or more JACK writable clients, one for -each audio channel, with name client_name:input_N, where -client_name is the name provided by the application, and N -is a number which identifies the channel. -Each writable client will send the acquired data to the FFmpeg input -device. -

                  -

                  Once you have created one or more JACK readable clients, you need to -connect them to one or more JACK writable clients. -

                  -

                  To connect or disconnect JACK clients you can use the jack_connect -and jack_disconnect programs, or do it through a graphical interface, -for example with qjackctl. -

                  -

                  To list the JACK clients and their properties you can invoke the command -jack_lsp. -

                  -

                  Follows an example which shows how to capture a JACK readable client -with ffmpeg. -

                   
                  # Create a JACK writable client with name "ffmpeg".
                  -$ ffmpeg -f jack -i ffmpeg -y out.wav
                  -
                  -# Start the sample jack_metro readable client.
                  -$ jack_metro -b 120 -d 0.2 -f 4000
                  -
                  -# List the current JACK clients.
                  -$ jack_lsp -c
                  -system:capture_1
                  -system:capture_2
                  -system:playback_1
                  -system:playback_2
                  -ffmpeg:input_1
                  -metro:120_bpm
                  -
                  -# Connect metro to the ffmpeg writable client.
                  -$ jack_connect metro:120_bpm ffmpeg:input_1
                  -
                  - -

                  For more information read: -http://jackaudio.org/ -

                  - -

                  10.7 lavfi

                  - -

                  Libavfilter input virtual device. -

                  -

                  This input device reads data from the open output pads of a libavfilter -filtergraph. -

                  -

                  For each filtergraph open output, the input device will create a -corresponding stream which is mapped to the generated output. Currently -only video data is supported. The filtergraph is specified through the -option ‘graph’. -

                  - -

                  10.7.1 Options

                  - -
                  -
                  graph
                  -

                  Specify the filtergraph to use as input. Each video open output must be -labelled by a unique string of the form "outN", where N is a -number starting from 0 corresponding to the mapped input stream -generated by the device. -The first unlabelled output is automatically assigned to the "out0" -label, but all the others need to be specified explicitly. -

                  -

                  If not specified defaults to the filename specified for the input -device. -

                  -
                  - - -

                  10.7.2 Examples

                  - -
                    -
                  • -Create a color video stream and play it back with ffplay: -
                     
                    ffplay -f lavfi -graph "color=pink [out0]" dummy
                    -
                    - -
                  • -As the previous example, but use filename for specifying the graph -description, and omit the "out0" label: -
                     
                    ffplay -f lavfi color=pink
                    -
                    - -
                  • -Create three different video test filtered sources and play them: -
                     
                    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
                    -
                    - -
                  • -Read an audio stream from a file using the amovie source and play it -back with ffplay: -
                     
                    ffplay -f lavfi "amovie=test.wav"
                    -
                    - -
                  • -Read an audio stream and a video stream and play it back with -ffplay: -
                     
                    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
                    -
                    - -
                  - - -

                  10.8 libdc1394

                  - -

                  IIDC1394 input device, based on libdc1394 and libraw1394. -

                  - -

                  10.9 openal

                  - -

                  The OpenAL input device provides audio capture on all systems with a -working OpenAL 1.1 implementation. -

                  -

                  To enable this input device during configuration, you need OpenAL -headers and libraries installed on your system, and need to configure -FFmpeg with --enable-openal. -

                  -

                  OpenAL headers and libraries should be provided as part of your OpenAL -implementation, or as an additional download (an SDK). Depending on your -installation you may need to specify additional flags via the ---extra-cflags and --extra-ldflags for allowing the build -system to locate the OpenAL headers and libraries. -

                  -

                  An incomplete list of OpenAL implementations follows: -

                  -
                  -
                  Creative
                  -

                  The official Windows implementation, providing hardware acceleration -with supported devices and software fallback. -See http://openal.org/. -

                  -
                  OpenAL Soft
                  -

                  Portable, open source (LGPL) software implementation. Includes -backends for the most common sound APIs on the Windows, Linux, -Solaris, and BSD operating systems. -See http://kcat.strangesoft.net/openal.html. -

                  -
                  Apple
                  -

                  OpenAL is part of Core Audio, the official Mac OS X Audio interface. -See http://developer.apple.com/technologies/mac/audio-and-video.html -

                  -
                  - -

                  This device allows to capture from an audio input device handled -through OpenAL. -

                  -

                  You need to specify the name of the device to capture in the provided -filename. If the empty string is provided, the device will -automatically select the default device. You can get the list of the -supported devices by using the option list_devices. -

                  - -

                  10.9.1 Options

                  - -
                  -
                  channels
                  -

                  Set the number of channels in the captured audio. Only the values -‘1’ (monaural) and ‘2’ (stereo) are currently supported. -Defaults to ‘2’. -

                  -
                  -
                  sample_size
                  -

                  Set the sample size (in bits) of the captured audio. Only the values -‘8’ and ‘16’ are currently supported. Defaults to -‘16’. -

                  -
                  -
                  sample_rate
                  -

                  Set the sample rate (in Hz) of the captured audio. -Defaults to ‘44.1k’. -

                  -
                  -
                  list_devices
                  -

                  If set to ‘true’, print a list of devices and exit. -Defaults to ‘false’. -

                  -
                  -
                  - - -

                  10.9.2 Examples

                  - -

                  Print the list of OpenAL supported devices and exit: -

                   
                  $ ffmpeg -list_devices true -f openal -i dummy out.ogg
                  -
                  - -

                  Capture from the OpenAL device ‘DR-BT101 via PulseAudio’: -

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
                  -
                  - -

                  Capture from the default device (note the empty string ” as filename): -

                   
                  $ ffmpeg -f openal -i '' out.ogg
                  -
                  - -

                  Capture from two devices simultaneously, writing to two different files, -within the same ffmpeg command: -

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
                  -
                  -

                  Note: not all OpenAL implementations support multiple simultaneous capture - -try the latest OpenAL Soft if the above does not work. -

                  - -

                  10.10 oss

                  - -

                  Open Sound System input device. -

                  -

                  The filename to provide to the input device is the device node -representing the OSS input device, and is usually set to -‘/dev/dsp’. -

                  -

                  For example to grab from ‘/dev/dsp’ using ffmpeg use the -command: -

                   
                  ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
                  -
                  - -

                  For more information about OSS see: -http://manuals.opensound.com/usersguide/dsp.html -

                  - -

                  10.11 pulse

                  - -

                  pulseaudio input device. -

                  -

                  To enable this input device during configuration you need libpulse-simple -installed in your system. -

                  -

                  The filename to provide to the input device is a source device or the -string "default" -

                  -

                  To list the pulse source devices and their properties you can invoke -the command pactl list sources. -

                  -
                   
                  ffmpeg -f pulse -i default /tmp/pulse.wav
                  -
                  - - -

                  10.11.1 server AVOption

                  - -

                  The syntax is: -

                   
                  -server server name
                  -
                  - -

                  Connects to a specific server. -

                  - -

                  10.11.2 name AVOption

                  - -

                  The syntax is: -

                   
                  -name application name
                  -
                  - -

                  Specify the application name pulse will use when showing active clients, -by default it is the LIBAVFORMAT_IDENT string -

                  - -

                  10.11.3 stream_name AVOption

                  - -

                  The syntax is: -

                   
                  -stream_name stream name
                  -
                  - -

                  Specify the stream name pulse will use when showing active streams, -by default it is "record" -

                  - -

                  10.11.4 sample_rate AVOption

                  - -

                  The syntax is: -

                   
                  -sample_rate samplerate
                  -
                  - -

                  Specify the samplerate in Hz, by default 48kHz is used. -

                  - -

                  10.11.5 channels AVOption

                  - -

                  The syntax is: -

                   
                  -channels N
                  -
                  - -

                  Specify the channels in use, by default 2 (stereo) is set. -

                  - -

                  10.11.6 frame_size AVOption

                  - -

                  The syntax is: -

                   
                  -frame_size bytes
                  -
                  - -

                  Specify the number of byte per frame, by default it is set to 1024. -

                  - -

                  10.11.7 fragment_size AVOption

                  - -

                  The syntax is: -

                   
                  -fragment_size bytes
                  -
                  - -

                  Specify the minimal buffering fragment in pulseaudio, it will affect the -audio latency. By default it is unset. -

                  - -

                  10.12 sndio

                  - -

                  sndio input device. -

                  -

                  To enable this input device during configuration you need libsndio -installed on your system. -

                  -

                  The filename to provide to the input device is the device node -representing the sndio input device, and is usually set to -‘/dev/audio0’. -

                  -

                  For example to grab from ‘/dev/audio0’ using ffmpeg use the -command: -

                   
                  ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
                  -
                  - - -

                  10.13 video4linux and video4linux2

                  - -

                  Video4Linux and Video4Linux2 input video devices. -

                  -

                  The name of the device to grab is a file device node, usually Linux -systems tend to automatically create such nodes when the device -(e.g. an USB webcam) is plugged into the system, and has a name of the -kind ‘/dev/videoN’, where N is a number associated to -the device. -

                  -

                  Video4Linux and Video4Linux2 devices only support a limited set of -widthxheight sizes and framerates. You can check which are -supported for example with the command dov4l for Video4Linux -devices and using -list_formats all for Video4Linux2 devices. -

                  -

                  If the size for the device is set to 0x0, the input device will -try to auto-detect the size to use. -Only for the video4linux2 device, if the frame rate is set to 0/0 the -input device will use the frame rate value already set in the driver. -

                  -

                  Video4Linux support is deprecated since Linux 2.6.30, and will be -dropped in later versions. -

                  -

                  Note that if FFmpeg is build with v4l-utils support ("–enable-libv4l2" -option), it will always be used. -

                  -

                  Follow some usage examples of the video4linux devices with the ff* -tools. -

                   
                  # Grab and show the input of a video4linux device, frame rate is set
                  -# to the default of 25/1.
                  -ffplay -s 320x240 -f video4linux /dev/video0
                  -
                  -# Grab and show the input of a video4linux2 device, auto-adjust size.
                  -ffplay -f video4linux2 /dev/video0
                  -
                  -# Grab and record the input of a video4linux2 device, auto-adjust size,
                  -# frame rate value defaults to 0/0 so it is read from the video4linux2
                  -# driver.
                  -ffmpeg -f video4linux2 -i /dev/video0 out.mpeg
                  -
                  - -

                  "v4l" and "v4l2" can be used as aliases for the respective "video4linux" and -"video4linux2". -

                  - -

                  10.14 vfwcap

                  - -

                  VfW (Video for Windows) capture input device. -

                  -

                  The filename passed as input is the capture driver number, ranging from -0 to 9. You may use "list" as filename to print a list of drivers. Any -other filename will be interpreted as device number 0. -

                  - -

                  10.15 x11grab

                  - -

                  X11 video input device. -

                  -

                  This device allows to capture a region of an X11 display. -

                  -

                  The filename passed as input has the syntax: -

                   
                  [hostname]:display_number.screen_number[+x_offset,y_offset]
                  -
                  - -

                  hostname:display_number.screen_number specifies the -X11 display name of the screen to grab from. hostname can be -omitted, and defaults to "localhost". The environment variable -DISPLAY contains the default display name. -

                  -

                  x_offset and y_offset specify the offsets of the grabbed -area with respect to the top-left border of the X11 screen. They -default to 0. -

                  -

                  Check the X11 documentation (e.g. man X) for more detailed information. -

                  -

                  Use the dpyinfo program for getting basic information about the -properties of your X11 display (e.g. grep for "name" or "dimensions"). -

                  -

                  For example to grab from ‘:0.0’ using ffmpeg: -

                   
                  ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpg
                  -
                  -# Grab at position 10,20.
                  -ffmpeg -f x11grab -r 25 -s cif -i :0.0+10,20 out.mpg
                  -
                  - - -

                  10.15.1 follow_mouse AVOption

                  - -

                  The syntax is: -

                   
                  -follow_mouse centered|PIXELS
                  -
                  - -

                  When it is specified with "centered", the grabbing region follows the mouse -pointer and keeps the pointer at the center of region; otherwise, the region -follows only when the mouse pointer reaches within PIXELS (greater than -zero) to the edge of region. -

                  -

                  For example: -

                   
                  ffmpeg -f x11grab -follow_mouse centered -r 25 -s cif -i :0.0 out.mpg
                  -
                  -# Follows only when the mouse pointer reaches within 100 pixels to edge
                  -ffmpeg -f x11grab -follow_mouse 100 -r 25 -s cif -i :0.0 out.mpg
                  -
                  - - -

                  10.15.2 show_region AVOption

                  - -

                  The syntax is: -

                   
                  -show_region 1
                  -
                  - -

                  If show_region AVOption is specified with 1, then the grabbing -region will be indicated on screen. With this option, it’s easy to know what is -being grabbed if only a portion of the screen is grabbed. -

                  -

                  For example: -

                   
                  ffmpeg -f x11grab -show_region 1 -r 25 -s cif -i :0.0+10,20 out.mpg
                  -
                  -# With follow_mouse
                  -ffmpeg -f x11grab -follow_mouse centered -show_region 1  -r 25 -s cif -i :0.0 out.mpg
                  -
                  - - -

                  11. Output Devices

                  - -

                  Output devices are configured elements in FFmpeg which allow to write -multimedia data to an output device attached to your system. -

                  -

                  When you configure your FFmpeg build, all the supported output devices -are enabled by default. You can list all available ones using the -configure option "–list-outdevs". -

                  -

                  You can disable all the output devices using the configure option -"–disable-outdevs", and selectively enable an output device using the -option "–enable-outdev=OUTDEV", or you can disable a particular -input device using the option "–disable-outdev=OUTDEV". -

                  -

                  The option "-formats" of the ff* tools will display the list of -enabled output devices (amongst the muxers). -

                  -

                  A description of the currently available output devices follows. -

                  - -

                  11.1 alsa

                  - -

                  ALSA (Advanced Linux Sound Architecture) output device. -

                  - -

                  11.2 oss

                  - -

                  OSS (Open Sound System) output device. -

                  - -

                  11.3 sdl

                  - -

                  SDL (Simple DirectMedia Layer) output device. -

                  -

                  This output devices allows to show a video stream in an SDL -window. Only one SDL window is allowed per application, so you can -have only one instance of this output device in an application. -

                  -

                  To enable this output device you need libsdl installed on your system -when configuring your build. -

                  -

                  For more information about SDL, check: -http://www.libsdl.org/ -

                  - -

                  11.3.1 Options

                  - -
                  -
                  window_title
                  -

                  Set the SDL window title, if not specified default to the filename -specified for the output device. -

                  -
                  -
                  icon_title
                  -

                  Set the name of the iconified SDL window, if not specified it is set -to the same value of window_title. -

                  -
                  -
                  window_size
                  -

                  Set the SDL window size, can be a string of the form -widthxheight or a video size abbreviation. -If not specified it defaults to the size of the input video. -

                  -
                  - - -

                  11.3.2 Examples

                  - -

                  The following command shows the ffmpeg output is an -SDL window, forcing its size to the qcif format: -

                   
                  ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
                  -
                  - - -

                  11.4 sndio

                  - -

                  sndio audio output device. -

                  - -

                  12. Protocols

                  - -

                  Protocols are configured elements in FFmpeg which allow to access -resources which require the use of a particular protocol. -

                  -

                  When you configure your FFmpeg build, all the supported protocols are -enabled by default. You can list all available ones using the -configure option "–list-protocols". -

                  -

                  You can disable all the protocols using the configure option -"–disable-protocols", and selectively enable a protocol using the -option "–enable-protocol=PROTOCOL", or you can disable a -particular protocol using the option -"–disable-protocol=PROTOCOL". -

                  -

                  The option "-protocols" of the ff* tools will display the list of -supported protocols. -

                  -

                  A description of the currently available protocols follows. -

                  - -

                  12.1 applehttp

                  - -

                  Read Apple HTTP Live Streaming compliant segmented stream as -a uniform one. The M3U8 playlists describing the segments can be -remote HTTP resources or local files, accessed using the standard -file protocol. -HTTP is default, specific protocol can be declared by specifying -"+proto" after the applehttp URI scheme name, where proto -is either "file" or "http". -

                  -
                   
                  applehttp://host/path/to/remote/resource.m3u8
                  -applehttp+http://host/path/to/remote/resource.m3u8
                  -applehttp+file://path/to/local/resource.m3u8
                  -
                  - - -

                  12.2 concat

                  - -

                  Physical concatenation protocol. -

                  -

                  Allow to read and seek from many resource in sequence as if they were -a unique resource. -

                  -

                  A URL accepted by this protocol has the syntax: -

                   
                  concat:URL1|URL2|...|URLN
                  -
                  - -

                  where URL1, URL2, ..., URLN are the urls of the -resource to be concatenated, each one possibly specifying a distinct -protocol. -

                  -

                  For example to read a sequence of files ‘split1.mpeg’, -‘split2.mpeg’, ‘split3.mpeg’ with ffplay use the -command: -

                   
                  ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
                  -
                  - -

                  Note that you may need to escape the character "|" which is special for -many shells. -

                  - -

                  12.3 file

                  - -

                  File access protocol. -

                  -

                  Allow to read from or read to a file. -

                  -

                  For example to read from a file ‘input.mpeg’ with ffmpeg -use the command: -

                   
                  ffmpeg -i file:input.mpeg output.mpeg
                  -
                  - -

                  The ff* tools default to the file protocol, that is a resource -specified with the name "FILE.mpeg" is interpreted as the URL -"file:FILE.mpeg". -

                  - -

                  12.4 gopher

                  - -

                  Gopher protocol. -

                  - -

                  12.5 http

                  - -

                  HTTP (Hyper Text Transfer Protocol). -

                  - -

                  12.6 mmst

                  - -

                  MMS (Microsoft Media Server) protocol over TCP. -

                  - -

                  12.7 mmsh

                  - -

                  MMS (Microsoft Media Server) protocol over HTTP. -

                  -

                  The required syntax is: -

                   
                  mmsh://server[:port][/app][/playpath]
                  -
                  - - -

                  12.8 md5

                  - -

                  MD5 output protocol. -

                  -

                  Computes the MD5 hash of the data to be written, and on close writes -this to the designated output or stdout if none is specified. It can -be used to test muxers without writing an actual file. -

                  -

                  Some examples follow. -

                   
                  # Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
                  -ffmpeg -i input.flv -f avi -y md5:output.avi.md5
                  -
                  -# Write the MD5 hash of the encoded AVI file to stdout.
                  -ffmpeg -i input.flv -f avi -y md5:
                  -
                  - -

                  Note that some formats (typically MOV) require the output protocol to -be seekable, so they will fail with the MD5 output protocol. -

                  - -

                  12.9 pipe

                  - -

                  UNIX pipe access protocol. -

                  -

                  Allow to read and write from UNIX pipes. -

                  -

                  The accepted syntax is: -

                   
                  pipe:[number]
                  -
                  - -

                  number is the number corresponding to the file descriptor of the -pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number -is not specified, by default the stdout file descriptor will be used -for writing, stdin for reading. -

                  -

                  For example to read from stdin with ffmpeg: -

                   
                  cat test.wav | ffmpeg -i pipe:0
                  -# ...this is the same as...
                  -cat test.wav | ffmpeg -i pipe:
                  -
                  - -

                  For writing to stdout with ffmpeg: -

                   
                  ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
                  -# ...this is the same as...
                  -ffmpeg -i test.wav -f avi pipe: | cat > test.avi
                  -
                  - -

                  Note that some formats (typically MOV), require the output protocol to -be seekable, so they will fail with the pipe output protocol. -

                  - -

                  12.10 rtmp

                  - -

                  Real-Time Messaging Protocol. -

                  -

                  The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia -content across a TCP/IP network. -

                  -

                  The required syntax is: -

                   
                  rtmp://server[:port][/app][/playpath]
                  -
                  - -

                  The accepted parameters are: -

                  -
                  server
                  -

                  The address of the RTMP server. -

                  -
                  -
                  port
                  -

                  The number of the TCP port to use (by default is 1935). -

                  -
                  -
                  app
                  -

                  It is the name of the application to access. It usually corresponds to -the path where the application is installed on the RTMP server -(e.g. ‘/ondemand/’, ‘/flash/live/’, etc.). -

                  -
                  -
                  playpath
                  -

                  It is the path or name of the resource to play with reference to the -application specified in app, may be prefixed by "mp4:". -

                  -
                  -
                  - -

                  For example to read with ffplay a multimedia resource named -"sample" from the application "vod" from an RTMP server "myserver": -

                   
                  ffplay rtmp://myserver/vod/sample
                  -
                  - - -

                  12.11 rtmp, rtmpe, rtmps, rtmpt, rtmpte

                  - -

                  Real-Time Messaging Protocol and its variants supported through -librtmp. -

                  -

                  Requires the presence of the librtmp headers and library during -configuration. You need to explicitly configure the build with -"–enable-librtmp". If enabled this will replace the native RTMP -protocol. -

                  -

                  This protocol provides most client functions and a few server -functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), -encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled -variants of these encrypted types (RTMPTE, RTMPTS). -

                  -

                  The required syntax is: -

                   
                  rtmp_proto://server[:port][/app][/playpath] options
                  -
                  - -

                  where rtmp_proto is one of the strings "rtmp", "rtmpt", "rtmpe", -"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and -server, port, app and playpath have the same -meaning as specified for the RTMP native protocol. -options contains a list of space-separated options of the form -key=val. -

                  -

                  See the librtmp manual page (man 3 librtmp) for more information. -

                  -

                  For example, to stream a file in real-time to an RTMP server using -ffmpeg: -

                   
                  ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
                  -
                  - -

                  To play the same stream using ffplay: -

                   
                  ffplay "rtmp://myserver/live/mystream live=1"
                  -
                  - - -

                  12.12 rtp

                  - -

                  Real-Time Protocol. -

                  - -

                  12.13 rtsp

                  - -

                  RTSP is not technically a protocol handler in libavformat, it is a demuxer -and muxer. The demuxer supports both normal RTSP (with data transferred -over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with -data transferred over RDT). -

                  -

                  The muxer can be used to send a stream using RTSP ANNOUNCE to a server -supporting it (currently Darwin Streaming Server and Mischa Spiegelmock’s -RTSP server). -

                  -

                  The required syntax for a RTSP url is: -

                   
                  rtsp://hostname[:port]/path
                  -
                  - -

                  The following options (set on the ffmpeg/ffplay command -line, or set in code via AVOptions or in avformat_open_input), -are supported: -

                  -

                  Flags for rtsp_transport: -

                  -
                  -
                  udp
                  -

                  Use UDP as lower transport protocol. -

                  -
                  -
                  tcp
                  -

                  Use TCP (interleaving within the RTSP control channel) as lower -transport protocol. -

                  -
                  -
                  udp_multicast
                  -

                  Use UDP multicast as lower transport protocol. -

                  -
                  -
                  http
                  -

                  Use HTTP tunneling as lower transport protocol, which is useful for -passing proxies. -

                  -
                  - -

                  Multiple lower transport protocols may be specified, in that case they are -tried one at a time (if the setup of one fails, the next one is tried). -For the muxer, only the tcp and udp options are supported. -

                  -

                  Flags for rtsp_flags: -

                  -
                  -
                  filter_src
                  -

                  Accept packets only from negotiated peer address and port. -

                  -
                  - -

                  When receiving data over UDP, the demuxer tries to reorder received packets -(since they may arrive out of order, or packets may get lost totally). In -order for this to be enabled, a maximum delay must be specified in the -max_delay field of AVFormatContext. -

                  -

                  When watching multi-bitrate Real-RTSP streams with ffplay, the -streams to display can be chosen with -vst n and --ast n for video and audio respectively, and can be switched -on the fly by pressing v and a. -

                  -

                  Example command lines: -

                  -

                  To watch a stream over UDP, with a max reordering delay of 0.5 seconds: -

                  -
                   
                  ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
                  -
                  - -

                  To watch a stream tunneled over HTTP: -

                  -
                   
                  ffplay -rtsp_transport http rtsp://server/video.mp4
                  -
                  - -

                  To send a stream in realtime to a RTSP server, for others to watch: -

                  -
                   
                  ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
                  -
                  - - -

                  12.14 sap

                  - -

                  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. -

                  - -

                  12.14.1 Muxer

                  - -

                  The syntax for a SAP url given to the muxer is: -

                   
                  sap://destination[:port][?options]
                  -
                  - -

                  The RTP packets are sent to destination on port port, -or to port 5004 if no port is specified. -options is a &-separated list. The following options -are supported: -

                  -
                  -
                  announce_addr=address
                  -

                  Specify the destination IP address for sending the announcements to. -If omitted, the announcements are sent to the commonly used SAP -announcement multicast address 224.2.127.254 (sap.mcast.net), or -ff0e::2:7ffe if destination is an IPv6 address. -

                  -
                  -
                  announce_port=port
                  -

                  Specify the port to send the announcements on, defaults to -9875 if not specified. -

                  -
                  -
                  ttl=ttl
                  -

                  Specify the time to live value for the announcements and RTP packets, -defaults to 255. -

                  -
                  -
                  same_port=0|1
                  -

                  If set to 1, send all RTP streams on the same port pair. If zero (the -default), all streams are sent on unique ports, with each stream on a -port 2 numbers higher than the previous. -VLC/Live555 requires this to be set to 1, to be able to receive the stream. -The RTP stack in libavformat for receiving requires all streams to be sent -on unique ports. -

                  -
                  - -

                  Example command lines follow. -

                  -

                  To broadcast a stream on the local subnet, for watching in VLC: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1
                  -
                  - -

                  Similarly, for watching in ffplay: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255
                  -
                  - -

                  And for watching in ffplay, over IPv6: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]
                  -
                  - - -

                  12.14.2 Demuxer

                  - -

                  The syntax for a SAP url given to the demuxer is: -

                   
                  sap://[address][:port]
                  -
                  - -

                  address is the multicast address to listen for announcements on, -if omitted, the default 224.2.127.254 (sap.mcast.net) is used. port -is the port that is listened on, 9875 if omitted. -

                  -

                  The demuxers listens for announcements on the given address and port. -Once an announcement is received, it tries to receive that particular stream. -

                  -

                  Example command lines follow. -

                  -

                  To play back the first stream announced on the normal SAP multicast address: -

                  -
                   
                  ffplay sap://
                  -
                  - -

                  To play back the first stream announced on one the default IPv6 SAP multicast address: -

                  -
                   
                  ffplay sap://[ff0e::2:7ffe]
                  -
                  - - -

                  12.15 tcp

                  - -

                  Trasmission Control Protocol. -

                  -

                  The required syntax for a TCP url is: -

                   
                  tcp://hostname:port[?options]
                  -
                  - -
                  -
                  listen
                  -

                  Listen for an incoming connection -

                  -
                   
                  ffmpeg -i input -f format tcp://hostname:port?listen
                  -ffplay tcp://hostname:port
                  -
                  - -
                  -
                  - - -

                  12.16 udp

                  - -

                  User Datagram Protocol. -

                  -

                  The required syntax for a UDP url is: -

                   
                  udp://hostname:port[?options]
                  -
                  - -

                  options contains a list of &-seperated options of the form key=val. -Follow the list of supported options. -

                  -
                  -
                  buffer_size=size
                  -

                  set the UDP buffer size in bytes -

                  -
                  -
                  localport=port
                  -

                  override the local UDP port to bind with -

                  -
                  -
                  localaddr=addr
                  -

                  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. -

                  -
                  -
                  pkt_size=size
                  -

                  set the size in bytes of UDP packets -

                  -
                  -
                  reuse=1|0
                  -

                  explicitly allow or disallow reusing UDP sockets -

                  -
                  -
                  ttl=ttl
                  -

                  set the time to live value (for multicast only) -

                  -
                  -
                  connect=1|0
                  -

                  Initialize the UDP socket with connect(). In this case, the -destination address can’t be changed with ff_udp_set_remote_url later. -If the destination address isn’t known at the start, this option can -be specified in ff_udp_set_remote_url, too. -This allows finding out the source address for the packets with getsockname, -and makes writes return with AVERROR(ECONNREFUSED) if "destination -unreachable" is received. -For receiving, this gives the benefit of only receiving packets from -the specified peer address/port. -

                  -
                  - -

                  Some usage examples of the udp protocol with ffmpeg follow. -

                  -

                  To stream over UDP to a remote endpoint: -

                   
                  ffmpeg -i input -f format udp://hostname:port
                  -
                  - -

                  To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer: -

                   
                  ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
                  -
                  - -

                  To receive over UDP from a remote endpoint: -

                   
                  ffmpeg -i udp://[multicast-address]:port
                  -
                  - - -

                  13. Filtergraph description

                  - -

                  A filtergraph is a directed graph of connected filters. It can contain -cycles, and there can be multiple links between a pair of -filters. Each link has one input pad on one side connecting it to one -filter from which it takes its input, and one output pad on the other -side connecting it to the one filter accepting its output. -

                  -

                  Each filter in a filtergraph is an instance of a filter class -registered in the application, which defines the features and the -number of input and output pads of the filter. -

                  -

                  A filter with no input pads is called a "source", a filter with no -output pads is called a "sink". -

                  - -

                  13.1 Filtergraph syntax

                  - -

                  A filtergraph can be represented using a textual representation, which -is recognized by the -vf option of the ff* -tools, and by the avfilter_graph_parse() function defined in -‘libavfilter/avfiltergraph.h’. -

                  -

                  A filterchain consists of a sequence of connected filters, each one -connected to the previous one in the sequence. A filterchain is -represented by a list of ","-separated filter descriptions. -

                  -

                  A filtergraph consists of a sequence of filterchains. A sequence of -filterchains is represented by a list of ";"-separated filterchain -descriptions. -

                  -

                  A filter is represented by a string of the form: -[in_link_1]...[in_link_N]filter_name=arguments[out_link_1]...[out_link_M] -

                  -

                  filter_name is the name of the filter class of which the -described filter is an instance of, and has to be the name of one of -the filter classes registered in the program. -The name of the filter class is optionally followed by a string -"=arguments". -

                  -

                  arguments is a string which contains the parameters used to -initialize the filter instance, and are described in the filter -descriptions below. -

                  -

                  The list of arguments can be quoted using the character "’" as initial -and ending mark, and the character ’\’ for escaping the characters -within the quoted text; otherwise the argument string is considered -terminated when the next special character (belonging to the set -"[]=;,") is encountered. -

                  -

                  The name and arguments of the filter are optionally preceded and -followed by a list of link labels. -A link label allows to name a link and associate it to a filter output -or input pad. The preceding labels in_link_1 -... in_link_N, are associated to the filter input pads, -the following labels out_link_1 ... out_link_M, are -associated to the output pads. -

                  -

                  When two link labels with the same name are found in the -filtergraph, a link between the corresponding input and output pad is -created. -

                  -

                  If an output pad is not labelled, it is linked by default to the first -unlabelled input pad of the next filter in the filterchain. -For example in the filterchain: -

                   
                  nullsrc, split[L1], [L2]overlay, nullsink
                  -
                  -

                  the split filter instance has two output pads, and the overlay filter -instance two input pads. The first output pad of split is labelled -"L1", the first input pad of overlay is labelled "L2", and the second -output pad of split is linked to the second input pad of overlay, -which are both unlabelled. -

                  -

                  In a complete filterchain all the unlabelled filter input and output -pads must be connected. A filtergraph is considered valid if all the -filter input and output pads of all the filterchains are connected. -

                  -

                  Follows a BNF description for the filtergraph syntax: -

                   
                  NAME             ::= sequence of alphanumeric characters and '_'
                  -LINKLABEL        ::= "[" NAME "]"
                  -LINKLABELS       ::= LINKLABEL [LINKLABELS]
                  -FILTER_ARGUMENTS ::= sequence of chars (eventually quoted)
                  -FILTER           ::= [LINKNAMES] NAME ["=" ARGUMENTS] [LINKNAMES]
                  -FILTERCHAIN      ::= FILTER [,FILTERCHAIN]
                  -FILTERGRAPH      ::= FILTERCHAIN [;FILTERGRAPH]
                  -
                  - - - -

                  14. Audio Filters

                  - -

                  When you configure your FFmpeg build, you can disable any of the -existing filters using --disable-filters. -The configure output will show the audio filters included in your -build. -

                  -

                  Below is a description of the currently available audio filters. -

                  - -

                  14.1 aconvert

                  - -

                  Convert the input audio format to the specified formats. -

                  -

                  The filter accepts a string of the form: -"sample_format:channel_layout:packing_format". -

                  -

                  sample_format specifies the sample format, and can be a string or -the corresponding numeric value defined in ‘libavutil/samplefmt.h’. -

                  -

                  channel_layout specifies the channel layout, and can be a string -or the corresponding number value defined in ‘libavutil/audioconvert.h’. -

                  -

                  packing_format specifies the type of packing in output, can be one -of "planar" or "packed", or the corresponding numeric values "0" or "1". -

                  -

                  The special parameter "auto", signifies that the filter will -automatically select the output format depending on the output filter. -

                  -

                  Some examples follow. -

                  -
                    -
                  • -Convert input to unsigned 8-bit, stereo, packed: -
                     
                    aconvert=u8:stereo:packed
                    -
                    - -
                  • -Convert input to unsigned 8-bit, automatically select out channel layout -and packing format: -
                     
                    aconvert=u8:auto:auto
                    -
                    -
                  - - -

                  14.2 aformat

                  - -

                  Convert the input audio to one of the specified formats. The framework will -negotiate the most appropriate format to minimize conversions. -

                  -

                  The filter accepts three lists of formats, separated by ":", in the form: -"sample_formats:channel_layouts:packing_formats". -

                  -

                  Elements in each list are separated by "," which has to be escaped in the -filtergraph specification. -

                  -

                  The special parameter "all", in place of a list of elements, signifies all -supported formats. -

                  -

                  Some examples follow: -

                   
                  aformat=u8\\,s16:mono:packed
                  -
                  -aformat=s16:mono\\,stereo:all
                  -
                  - - -

                  14.3 amerge

                  - -

                  Merge two audio streams into a single multi-channel stream. -

                  -

                  This filter does not need any argument. -

                  -

                  If the channel layouts of the inputs are disjoint, and therefore compatible, -the channel layout of the output will be set accordingly and the channels -will be reordered as necessary. If the channel layouts of the inputs are not -disjoint, the output will have all the channels of the first input then all -the channels of the second input, in that order, and the channel layout of -the output will be the default value corresponding to the total number of -channels. -

                  -

                  For example, if the first input is in 2.1 (FL+FR+LF) and the second input -is FC+BL+BR, then the output will be in 5.1, with the channels in the -following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the -first input, b1 is the first channel of the second input). -

                  -

                  On the other hand, if both input are in stereo, the output channels will be -in the default order: a1, a2, b1, b2, and the channel layout will be -arbitrarily set to 4.0, which may or may not be the expected value. -

                  -

                  Both inputs must have the same sample rate, format and packing. -

                  -

                  If inputs do not have the same duration, the output will stop with the -shortest. -

                  -

                  Example: merge two mono files into a stereo stream: -

                   
                  amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
                  -
                  - - -

                  14.4 anull

                  - -

                  Pass the audio source unchanged to the output. -

                  - -

                  14.5 aresample

                  - -

                  Resample the input audio to the specified sample rate. -

                  -

                  The filter accepts exactly one parameter, the output sample rate. If not -specified then the filter will automatically convert between its input -and output sample rates. -

                  -

                  For example, to resample the input audio to 44100Hz: -

                   
                  aresample=44100
                  -
                  - - -

                  14.6 ashowinfo

                  - -

                  Show a line containing various information for each input audio frame. -The input audio is not modified. -

                  -

                  The shown line contains a sequence of key/value pairs of the form -key:value. -

                  -

                  A description of each shown parameter follows: -

                  -
                  -
                  n
                  -

                  sequential number of the input frame, starting from 0 -

                  -
                  -
                  pts
                  -

                  presentation TimeStamp of the input frame, expressed as a number of -time base units. The time base unit depends on the filter input pad, and -is usually 1/sample_rate. -

                  -
                  -
                  pts_time
                  -

                  presentation TimeStamp of the input frame, expressed as a number of -seconds -

                  -
                  -
                  pos
                  -

                  position of the frame in the input stream, -1 if this information in -unavailable and/or meaningless (for example in case of synthetic audio) -

                  -
                  -
                  fmt
                  -

                  sample format name -

                  -
                  -
                  chlayout
                  -

                  channel layout description -

                  -
                  -
                  nb_samples
                  -

                  number of samples (per each channel) contained in the filtered frame -

                  -
                  -
                  rate
                  -

                  sample rate for the audio frame -

                  -
                  -
                  planar
                  -

                  if the packing format is planar, 0 if packed -

                  -
                  -
                  checksum
                  -

                  Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame -

                  -
                  -
                  plane_checksum
                  -

                  Adler-32 checksum (printed in hexadecimal) for each input frame plane, -expressed in the form "[c0 c1 c2 c3 c4 c5 -c6 c7]" -

                  -
                  - - -

                  14.7 asplit

                  - -

                  Pass on the input audio to two outputs. Both outputs are identical to -the input audio. -

                  -

                  For example: -

                   
                  [in] asplit[out0], showaudio[out1]
                  -
                  - -

                  will create two separate outputs from the same input, one cropped and -one padded. -

                  - -

                  14.8 astreamsync

                  - -

                  Forward two audio streams and control the order the buffers are forwarded. -

                  -

                  The argument to the filter is an expression deciding which stream should be -forwarded next: if the result is negative, the first stream is forwarded; if -the result is positive or zero, the second stream is forwarded. It can use -the following variables: -

                  -
                  -
                  b1 b2
                  -

                  number of buffers forwarded so far on each stream -

                  -
                  s1 s2
                  -

                  number of samples forwarded so far on each stream -

                  -
                  t1 t2
                  -

                  current timestamp of each stream -

                  -
                  - -

                  The default value is t1-t2, which means to always forward the stream -that has a smaller timestamp. -

                  -

                  Example: stress-test amerge by randomly sending buffers on the wrong -input, while avoiding too much of a desynchronization: -

                   
                  amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
                  -[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
                  -[a2] [b2] amerge
                  -
                  - - -

                  14.9 earwax

                  - -

                  Make audio easier to listen to on headphones. -

                  -

                  This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio -so that when listened to on headphones the stereo image is moved from -inside your head (standard for headphones) to outside and in front of -the listener (standard for speakers). -

                  -

                  Ported from SoX. -

                  - -

                  14.10 pan

                  - -

                  Mix channels with specific gain levels. The filter accepts the output -channel layout followed by a set of channels definitions. -

                  -

                  This filter is also designed to remap efficiently the channels of an audio -stream. -

                  -

                  The filter accepts parameters of the form: -"l:outdef:outdef:..." -

                  -
                  -
                  l
                  -

                  output channel layout or number of channels -

                  -
                  -
                  outdef
                  -

                  output channel specification, of the form: -"out_name=[gain*]in_name[+[gain*]in_name...]" -

                  -
                  -
                  out_name
                  -

                  output channel to define, either a channel name (FL, FR, etc.) or a channel -number (c0, c1, etc.) -

                  -
                  -
                  gain
                  -

                  multiplicative coefficient for the channel, 1 leaving the volume unchanged -

                  -
                  -
                  in_name
                  -

                  input channel to use, see out_name for details; it is not possible to mix -named and numbered input channels -

                  -
                  - -

                  If the ‘=’ in a channel specification is replaced by ‘<’, then the gains for -that specification will be renormalized so that the total is 1, thus -avoiding clipping noise. -

                  - -

                  14.10.1 Mixing examples

                  - -

                  For example, if you want to down-mix from stereo to mono, but with a bigger -factor for the left channel: -

                   
                  pan=1:c0=0.9*c0+0.1*c1
                  -
                  - -

                  A customized down-mix to stereo that works automatically for 3-, 4-, 5- and -7-channels surround: -

                   
                  pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
                  -
                  - -

                  Note that ffmpeg integrates a default down-mix (and up-mix) system -that should be preferred (see "-ac" option) unless you have very specific -needs. -

                  - -

                  14.10.2 Remapping examples

                  - -

                  The channel remapping will be effective if, and only if: -

                  -
                    -
                  • gain coefficients are zeroes or ones, -
                  • only one input per channel output, -
                  • the number of output channels is supported by libswresample (16 at the - moment) -
                  - -

                  If all these conditions are satisfied, the filter will notify the user ("Pure -channel mapping detected"), and use an optimized and lossless method to do the -remapping. -

                  -

                  For example, if you have a 5.1 source and want a stereo audio stream by -dropping the extra channels: -

                   
                  pan="stereo: c0=FL : c1=FR"
                  -
                  - -

                  Given the same source, you can also switch front left and front right channels -and keep the input channel layout: -

                   
                  pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
                  -
                  - -

                  If the input is a stereo audio stream, you can mute the front left channel (and -still keep the stereo channel layout) with: -

                   
                  pan="stereo:c1=c1"
                  -
                  - -

                  Still with a stereo audio stream input, you can copy the right channel in both -front left and right: -

                   
                  pan="stereo: c0=FR : c1=FR"
                  -
                  - - -

                  14.11 silencedetect

                  - -

                  Detect silence in an audio stream. -

                  -

                  This filter logs a message when it detects that the input audio volume is less -or equal to a noise tolerance value for a duration greater or equal to the -minimum detected noise duration. -

                  -

                  The printed times and duration are expressed in seconds. -

                  -
                  -
                  duration, d
                  -

                  Set silence duration until notification (default is 2 seconds). -

                  -
                  -
                  noise, n
                  -

                  Set noise tolerance. Can be specified in dB (in case "dB" is appended to the -specified value) or amplitude ratio. Default is -60dB, or 0.001. -

                  -
                  - -

                  Detect 5 seconds of silence with -50dB noise tolerance: -

                   
                  silencedetect=n=-50dB:d=5
                  -
                  - -

                  Complete example with ffmpeg to detect silence with 0.0001 noise -tolerance in ‘silence.mp3’: -

                   
                  ffmpeg -f lavfi -i amovie=silence.mp3,silencedetect=noise=0.0001 -f null -
                  -
                  - - -

                  14.12 volume

                  - -

                  Adjust the input audio volume. -

                  -

                  The filter accepts exactly one parameter vol, which expresses -how the audio volume will be increased or decreased. -

                  -

                  Output values are clipped to the maximum value. -

                  -

                  If vol is expressed as a decimal number, the output audio -volume is given by the relation: -

                   
                  output_volume = vol * input_volume
                  -
                  - -

                  If vol is expressed as a decimal number followed by the string -"dB", the value represents the requested change in decibels of the -input audio power, and the output audio volume is given by the -relation: -

                   
                  output_volume = 10^(vol/20) * input_volume
                  -
                  - -

                  Otherwise vol is considered an expression and its evaluated -value is used for computing the output audio volume according to the -first relation. -

                  -

                  Default value for vol is 1.0. -

                  - -

                  14.12.1 Examples

                  - -
                    -
                  • -Half the input audio volume: -
                     
                    volume=0.5
                    -
                    - -

                    The above example is equivalent to: -

                     
                    volume=1/2
                    -
                    - -
                  • -Decrease input audio power by 12 decibels: -
                     
                    volume=-12dB
                    -
                    -
                  - - - -

                  15. Audio Sources

                  - -

                  Below is a description of the currently available audio sources. -

                  - -

                  15.1 abuffer

                  - -

                  Buffer audio frames, and make them available to the filter chain. -

                  -

                  This source is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/asrc_abuffer.h’. -

                  -

                  It accepts the following mandatory parameters: -sample_rate:sample_fmt:channel_layout:packing -

                  -
                  -
                  sample_rate
                  -

                  The sample rate of the incoming audio buffers. -

                  -
                  -
                  sample_fmt
                  -

                  The sample format of the incoming audio buffers. -Either a sample format name or its corresponging integer representation from -the enum AVSampleFormat in ‘libavutil/samplefmt.h’ -

                  -
                  -
                  channel_layout
                  -

                  The channel layout of the incoming audio buffers. -Either a channel layout name from channel_layout_map in -‘libavutil/audioconvert.c’ or its corresponding integer representation -from the AV_CH_LAYOUT_* macros in ‘libavutil/audioconvert.h’ -

                  -
                  -
                  packing
                  -

                  Either "packed" or "planar", or their integer representation: 0 or 1 -respectively. -

                  -
                  -
                  - -

                  For example: -

                   
                  abuffer=44100:s16:stereo:planar
                  -
                  - -

                  will instruct the source to accept planar 16bit signed stereo at 44100Hz. -Since the sample format with name "s16" corresponds to the number -1 and the "stereo" channel layout corresponds to the value 3, this is -equivalent to: -

                   
                  abuffer=44100:1:3:1
                  -
                  - - -

                  15.2 aevalsrc

                  - -

                  Generate an audio signal specified by an expression. -

                  -

                  This source accepts in input one or more expressions (one for each -channel), which are evaluated and used to generate a corresponding -audio signal. -

                  -

                  It accepts the syntax: exprs[::options]. -exprs is a list of expressions separated by ":", one for each -separate channel. The output channel layout depends on the number of -provided expressions, up to 8 channels are supported. -

                  -

                  options is an optional sequence of key=value pairs, -separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  duration, d
                  -

                  Set the minimum duration of the sourced audio. See the function -av_parse_time() for the accepted format. -Note that the resulting duration may be greater than the specified -duration, as the generated audio is always cut at the end of a -complete frame. -

                  -

                  If not specified, or the expressed duration is negative, the audio is -supposed to be generated forever. -

                  -
                  -
                  nb_samples, n
                  -

                  Set the number of samples per channel per each output frame, -default to 1024. -

                  -
                  -
                  sample_rate, s
                  -

                  Specify the sample rate, default to 44100. -

                  -
                  - -

                  Each expression in exprs can contain the following constants: -

                  -
                  -
                  n
                  -

                  number of the evaluated sample, starting from 0 -

                  -
                  -
                  t
                  -

                  time of the evaluated sample expressed in seconds, starting from 0 -

                  -
                  -
                  s
                  -

                  sample rate -

                  -
                  -
                  - - -

                  15.2.1 Examples

                  - -
                    -
                  • -Generate silence: -
                     
                    aevalsrc=0
                    -
                    - -
                  • - -Generate a sin signal with frequency of 440 Hz, set sample rate to -8000 Hz: -
                     
                    aevalsrc="sin(440*2*PI*t)::s=8000"
                    -
                    - -
                  • -Generate white noise: -
                     
                    aevalsrc="-2+random(0)"
                    -
                    - -
                  • -Generate an amplitude modulated signal: -
                     
                    aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
                    -
                    - -
                  • -Generate 2.5 Hz binaural beats on a 360 Hz carrier: -
                     
                    aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) : 0.1*sin(2*PI*(360+2.5/2)*t)"
                    -
                    - -
                  - - -

                  15.3 amovie

                  - -

                  Read an audio stream from a movie container. -

                  -

                  It accepts the syntax: movie_name[:options] where -movie_name is the name of the resource to read (not necessarily -a file but also a device or a stream accessed through some protocol), -and options is an optional sequence of key=value -pairs, separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  format_name, f
                  -

                  Specify the format assumed for the movie to read, and can be either -the name of a container or an input device. If not specified the -format is guessed from movie_name or by probing. -

                  -
                  -
                  seek_point, sp
                  -

                  Specify the seek point in seconds, the frames will be output -starting from this seek point, the parameter is evaluated with -av_strtod so the numerical value may be suffixed by an IS -postfix. Default value is "0". -

                  -
                  -
                  stream_index, si
                  -

                  Specify the index of the audio stream to read. If the value is -1, -the best suited audio stream will be automatically selected. Default -value is "-1". -

                  -
                  -
                  - - -

                  15.4 anullsrc

                  - -

                  Null audio source, return unprocessed audio frames. It is mainly useful -as a template and to be employed in analysis / debugging tools, or as -the source for filters which ignore the input data (for example the sox -synth filter). -

                  -

                  It accepts an optional sequence of key=value pairs, -separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  sample_rate, s
                  -

                  Specify the sample rate, and defaults to 44100. -

                  -
                  -
                  channel_layout, cl
                  -
                  -

                  Specify the channel layout, and can be either an integer or a string -representing a channel layout. The default value of channel_layout -is "stereo". -

                  -

                  Check the channel_layout_map definition in -‘libavcodec/audioconvert.c’ for the mapping between strings and -channel layout values. -

                  -
                  -
                  nb_samples, n
                  -

                  Set the number of samples per requested frames. -

                  -
                  -
                  - -

                  Follow some examples: -

                   
                  #  set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
                  -anullsrc=r=48000:cl=4
                  -
                  -# same as
                  -anullsrc=r=48000:cl=mono
                  -
                  - - - -

                  16. Audio Sinks

                  - -

                  Below is a description of the currently available audio sinks. -

                  - -

                  16.1 abuffersink

                  - -

                  Buffer audio frames, and make them available to the end of filter chain. -

                  -

                  This sink is mainly intended for programmatic use, in particular -through the interface defined in ‘libavfilter/buffersink.h’. -

                  -

                  It requires a pointer to an AVABufferSinkContext structure, which -defines the incoming buffers’ formats, to be passed as the opaque -parameter to avfilter_init_filter for initialization. -

                  - -

                  16.2 anullsink

                  - -

                  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. -

                  - - -

                  17. Video Filters

                  - -

                  When you configure your FFmpeg build, you can disable any of the -existing filters using --disable-filters. -The configure output will show the video filters included in your -build. -

                  -

                  Below is a description of the currently available video filters. -

                  - -

                  17.1 ass

                  - -

                  Draw ASS (Advanced Substation Alpha) subtitles on top of input video -using the libass library. -

                  -

                  To enable compilation of this filter you need to configure FFmpeg with ---enable-libass. -

                  -

                  This filter accepts in input the name of the ass file to render. -

                  -

                  For example, to render the file ‘sub.ass’ on top of the input -video, use the command: -

                   
                  ass=sub.ass
                  -
                  - - -

                  17.2 blackframe

                  - -

                  Detect frames that are (almost) completely black. Can be useful to -detect chapter transitions or commercials. Output lines consist of -the frame number of the detected frame, the percentage of blackness, -the position in the file if known or -1 and the timestamp in seconds. -

                  -

                  In order to display the output lines, you need to set the loglevel at -least to the AV_LOG_INFO value. -

                  -

                  The filter accepts the syntax: -

                   
                  blackframe[=amount:[threshold]]
                  -
                  - -

                  amount is the percentage of the pixels that have to be below the -threshold, and defaults to 98. -

                  -

                  threshold is the threshold below which a pixel value is -considered black, and defaults to 32. -

                  - -

                  17.3 boxblur

                  - -

                  Apply boxblur algorithm to the input video. -

                  -

                  This filter accepts the parameters: -luma_radius:luma_power:chroma_radius:chroma_power:alpha_radius:alpha_power -

                  -

                  Chroma and alpha parameters are optional, if not specified they default -to the corresponding values set for luma_radius and -luma_power. -

                  -

                  luma_radius, chroma_radius, and alpha_radius represent -the radius in pixels of the box used for blurring the corresponding -input plane. They are expressions, and can contain the following -constants: -

                  -
                  w, h
                  -

                  the input width and height in pixels -

                  -
                  -
                  cw, ch
                  -

                  the input chroma image width and height in pixels -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  - -

                  The radius must be a non-negative number, and must not be greater than -the value of the expression min(w,h)/2 for the luma and alpha planes, -and of min(cw,ch)/2 for the chroma planes. -

                  -

                  luma_power, chroma_power, and alpha_power represent -how many times the boxblur filter is applied to the corresponding -plane. -

                  -

                  Some examples follow: -

                  -
                    -
                  • -Apply a boxblur filter with luma, chroma, and alpha radius -set to 2: -
                     
                    boxblur=2:1
                    -
                    - -
                  • -Set luma radius to 2, alpha and chroma radius to 0 -
                     
                    boxblur=2:1:0:0:0:0
                    -
                    - -
                  • -Set luma and chroma radius to a fraction of the video dimension -
                     
                    boxblur=min(h\,w)/10:1:min(cw\,ch)/10:1
                    -
                    - -
                  - - -

                  17.4 copy

                  - -

                  Copy the input source unchanged to the output. Mainly useful for -testing purposes. -

                  - -

                  17.5 crop

                  - -

                  Crop the input video to out_w:out_h:x:y. -

                  -

                  The parameters are expressions containing the following constants: -

                  -
                  -
                  x, y
                  -

                  the computed values for x and y. They are evaluated for -each new frame. -

                  -
                  -
                  in_w, in_h
                  -

                  the input width and height -

                  -
                  -
                  iw, ih
                  -

                  same as in_w and in_h -

                  -
                  -
                  out_w, out_h
                  -

                  the output (cropped) width and height -

                  -
                  -
                  ow, oh
                  -

                  same as out_w and out_h -

                  -
                  -
                  a
                  -

                  same as iw / ih -

                  -
                  -
                  sar
                  -

                  input sample aspect ratio -

                  -
                  -
                  dar
                  -

                  input display aspect ratio, it is the same as (iw / ih) * sar -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  -
                  n
                  -

                  the number of input frame, starting from 0 -

                  -
                  -
                  pos
                  -

                  the position in the file of the input frame, NAN if unknown -

                  -
                  -
                  t
                  -

                  timestamp expressed in seconds, NAN if the input timestamp is unknown -

                  -
                  -
                  - -

                  The out_w and out_h parameters specify the expressions for -the width and height of the output (cropped) video. They are -evaluated just at the configuration of the filter. -

                  -

                  The default value of out_w is "in_w", and the default value of -out_h is "in_h". -

                  -

                  The expression for out_w may depend on the value of out_h, -and the expression for out_h may depend on out_w, but they -cannot depend on x and y, as x and y are -evaluated after out_w and out_h. -

                  -

                  The x and y parameters specify the expressions for the -position of the top-left corner of the output (non-cropped) area. They -are evaluated for each frame. If the evaluated value is not valid, it -is approximated to the nearest valid value. -

                  -

                  The default value of x is "(in_w-out_w)/2", and the default -value for y is "(in_h-out_h)/2", which set the cropped area at -the center of the input image. -

                  -

                  The expression for x may depend on y, and the expression -for y may depend on x. -

                  -

                  Follow some examples: -

                   
                  # crop the central input area with size 100x100
                  -crop=100:100
                  -
                  -# crop the central input area with size 2/3 of the input video
                  -"crop=2/3*in_w:2/3*in_h"
                  -
                  -# crop the input video central square
                  -crop=in_h
                  -
                  -# delimit the rectangle with the top-left corner placed at position
                  -# 100:100 and the right-bottom corner corresponding to the right-bottom
                  -# corner of the input image.
                  -crop=in_w-100:in_h-100:100:100
                  -
                  -# crop 10 pixels from the left and right borders, and 20 pixels from
                  -# the top and bottom borders
                  -"crop=in_w-2*10:in_h-2*20"
                  -
                  -# keep only the bottom right quarter of the input image
                  -"crop=in_w/2:in_h/2:in_w/2:in_h/2"
                  -
                  -# crop height for getting Greek harmony
                  -"crop=in_w:1/PHI*in_w"
                  -
                  -# trembling effect
                  -"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)"
                  -
                  -# erratic camera effect depending on timestamp
                  -"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"
                  -
                  -# set x depending on the value of y
                  -"crop=in_w/2:in_h/2:y:10+10*sin(n/10)"
                  -
                  - - -

                  17.6 cropdetect

                  - -

                  Auto-detect crop size. -

                  -

                  Calculate necessary cropping parameters and prints the recommended -parameters through the logging system. The detected dimensions -correspond to the non-black area of the input video. -

                  -

                  It accepts the syntax: -

                   
                  cropdetect[=limit[:round[:reset]]]
                  -
                  - -
                  -
                  limit
                  -

                  Threshold, which can be optionally specified from nothing (0) to -everything (255), defaults to 24. -

                  -
                  -
                  round
                  -

                  Value which the width/height should be divisible by, defaults to -16. The offset is automatically adjusted to center the video. Use 2 to -get only even dimensions (needed for 4:2:2 video). 16 is best when -encoding to most video codecs. -

                  -
                  -
                  reset
                  -

                  Counter that determines after how many frames cropdetect will reset -the previously detected largest video area and start over to detect -the current optimal crop area. Defaults to 0. -

                  -

                  This can be useful when channel logos distort the video area. 0 -indicates never reset and return the largest area encountered during -playback. -

                  -
                  - - -

                  17.7 delogo

                  - -

                  Suppress a TV station logo by a simple interpolation of the surrounding -pixels. Just set a rectangle covering the logo and watch it disappear -(and sometimes something even uglier appear - your mileage may vary). -

                  -

                  The filter accepts parameters as a string of the form -"x:y:w:h:band", or as a list of -key=value pairs, separated by ":". -

                  -

                  The description of the accepted parameters follows. -

                  -
                  -
                  x, y
                  -

                  Specify the top left corner coordinates of the logo. They must be -specified. -

                  -
                  -
                  w, h
                  -

                  Specify the width and height of the logo to clear. They must be -specified. -

                  -
                  -
                  band, t
                  -

                  Specify the thickness of the fuzzy edge of the rectangle (added to -w and h). The default value is 4. -

                  -
                  -
                  show
                  -

                  When set to 1, a green rectangle is drawn on the screen to simplify -finding the right x, y, w, h parameters, and -band is set to 4. The default value is 0. -

                  -
                  -
                  - -

                  Some examples follow. -

                  -
                    -
                  • -Set a rectangle covering the area with top left corner coordinates 0,0 -and size 100x77, setting a band of size 10: -
                     
                    delogo=0:0:100:77:10
                    -
                    - -
                  • -As the previous example, but use named options: -
                     
                    delogo=x=0:y=0:w=100:h=77:band=10
                    -
                    - -
                  - - -

                  17.8 deshake

                  - -

                  Attempt to fix small changes in horizontal and/or vertical shift. This -filter helps remove camera shake from hand-holding a camera, bumping a -tripod, moving on a vehicle, etc. -

                  -

                  The filter accepts parameters as a string of the form -"x:y:w:h:rx:ry:edge:blocksize:contrast:search:filename" -

                  -

                  A description of the accepted parameters follows. -

                  -
                  -
                  x, y, w, h
                  -

                  Specify a rectangular area where to limit the search for motion -vectors. -If desired the search for motion vectors can be limited to a -rectangular area of the frame defined by its top left corner, width -and height. These parameters have the same meaning as the drawbox -filter which can be used to visualise the position of the bounding -box. -

                  -

                  This is useful when simultaneous movement of subjects within the frame -might be confused for camera motion by the motion vector search. -

                  -

                  If any or all of x, y, w and h are set to -1 -then the full frame is used. This allows later options to be set -without specifying the bounding box for the motion vector search. -

                  -

                  Default - search the whole frame. -

                  -
                  -
                  rx, ry
                  -

                  Specify the maximum extent of movement in x and y directions in the -range 0-64 pixels. Default 16. -

                  -
                  -
                  edge
                  -

                  Specify how to generate pixels to fill blanks at the edge of the -frame. An integer from 0 to 3 as follows: -

                  -
                  0
                  -

                  Fill zeroes at blank locations -

                  -
                  1
                  -

                  Original image at blank locations -

                  -
                  2
                  -

                  Extruded edge value at blank locations -

                  -
                  3
                  -

                  Mirrored edge at blank locations -

                  -
                  - -

                  The default setting is mirror edge at blank locations. -

                  -
                  -
                  blocksize
                  -

                  Specify the blocksize to use for motion search. Range 4-128 pixels, -default 8. -

                  -
                  -
                  contrast
                  -

                  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. -

                  -
                  -
                  search
                  -

                  Specify the search strategy 0 = exhaustive search, 1 = less exhaustive -search. Default - exhaustive search. -

                  -
                  -
                  filename
                  -

                  If set then a detailed log of the motion search is written to the -specified file. -

                  -
                  -
                  - - -

                  17.9 drawbox

                  - -

                  Draw a colored box on the input image. -

                  -

                  It accepts the syntax: -

                   
                  drawbox=x:y:width:height:color
                  -
                  - -
                  -
                  x, y
                  -

                  Specify the top left corner coordinates of the box. Default to 0. -

                  -
                  -
                  width, height
                  -

                  Specify the width and height of the box, if 0 they are interpreted as -the input width and height. Default to 0. -

                  -
                  -
                  color
                  -

                  Specify the color of the box to write, it can be the name of a color -(case insensitive match) or a 0xRRGGBB[AA] sequence. -

                  -
                  - -

                  Follow some examples: -

                   
                  # draw a black box around the edge of the input image
                  -drawbox
                  -
                  -# draw a box with color red and an opacity of 50%
                  -drawbox=10:20:200:60:red@0.5"
                  -
                  - - -

                  17.10 drawtext

                  - -

                  Draw text string or text from specified file on top of video using the -libfreetype library. -

                  -

                  To enable compilation of this filter you need to configure FFmpeg with ---enable-libfreetype. -

                  -

                  The filter also recognizes strftime() sequences in the provided text -and expands them accordingly. Check the documentation of strftime(). -

                  -

                  The filter accepts parameters as a list of key=value pairs, -separated by ":". -

                  -

                  The description of the accepted parameters follows. -

                  -
                  -
                  fontfile
                  -

                  The font file to be used for drawing text. Path must be included. -This parameter is mandatory. -

                  -
                  -
                  text
                  -

                  The text string to be drawn. The text must be a sequence of UTF-8 -encoded characters. -This parameter is mandatory if no file is specified with the parameter -textfile. -

                  -
                  -
                  textfile
                  -

                  A text file containing text to be drawn. The text must be a sequence -of UTF-8 encoded characters. -

                  -

                  This parameter is mandatory if no text string is specified with the -parameter text. -

                  -

                  If both text and textfile are specified, an error is thrown. -

                  -
                  -
                  x, y
                  -

                  The expressions which specify the offsets where text will be drawn -within the video frame. They are relative to the top/left border of the -output image. -

                  -

                  The default value of x and y is "0". -

                  -

                  See below for the list of accepted constants. -

                  -
                  -
                  fontsize
                  -

                  The font size to be used for drawing text. -The default value of fontsize is 16. -

                  -
                  -
                  fontcolor
                  -

                  The color to be used for drawing fonts. -Either a string (e.g. "red") or in 0xRRGGBB[AA] format -(e.g. "0xff000033"), possibly followed by an alpha specifier. -The default value of fontcolor is "black". -

                  -
                  -
                  boxcolor
                  -

                  The color to be used for drawing box around text. -Either a string (e.g. "yellow") or in 0xRRGGBB[AA] format -(e.g. "0xff00ff"), possibly followed by an alpha specifier. -The default value of boxcolor is "white". -

                  -
                  -
                  box
                  -

                  Used to draw a box around text using background color. -Value should be either 1 (enable) or 0 (disable). -The default value of box is 0. -

                  -
                  -
                  shadowx, shadowy
                  -

                  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". -

                  -
                  -
                  shadowcolor
                  -

                  The color to be used for drawing a shadow behind the drawn text. It -can be a color name (e.g. "yellow") or a string in the 0xRRGGBB[AA] -form (e.g. "0xff00ff"), possibly followed by an alpha specifier. -The default value of shadowcolor is "black". -

                  -
                  -
                  ft_load_flags
                  -

                  Flags to be used for loading the fonts. -

                  -

                  The flags map the corresponding flags supported by libfreetype, and are -a combination of the following values: -

                  -
                  default
                  -
                  no_scale
                  -
                  no_hinting
                  -
                  render
                  -
                  no_bitmap
                  -
                  vertical_layout
                  -
                  force_autohint
                  -
                  crop_bitmap
                  -
                  pedantic
                  -
                  ignore_global_advance_width
                  -
                  no_recurse
                  -
                  ignore_transform
                  -
                  monochrome
                  -
                  linear_design
                  -
                  no_autohint
                  -
                  end table
                  -
                  - -

                  Default value is "render". -

                  -

                  For more information consult the documentation for the FT_LOAD_* -libfreetype flags. -

                  -
                  -
                  tabsize
                  -

                  The size in number of spaces to use for rendering the tab. -Default value is 4. -

                  -
                  - -

                  The parameters for x and y are expressions containing the -following constants: -

                  -
                  -
                  W, H
                  -

                  the input width and height -

                  -
                  -
                  tw, text_w
                  -

                  the width of the rendered text -

                  -
                  -
                  th, text_h
                  -

                  the height of the rendered text -

                  -
                  -
                  lh, line_h
                  -

                  the height of each text line -

                  -
                  -
                  sar
                  -

                  input sample aspect ratio -

                  -
                  -
                  dar
                  -

                  input display aspect ratio, it is the same as (w / h) * sar -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  -
                  max_glyph_w
                  -

                  maximum glyph width, that is the maximum width for all the glyphs -contained in the rendered text -

                  -
                  -
                  max_glyph_h
                  -

                  maximum glyph height, that is the maximum height for all the glyphs -contained in the rendered text, it is equivalent to ascent - -descent. -

                  -
                  -
                  max_glyph_a, ascent
                  -
                  -

                  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. -

                  -
                  -
                  max_glyph_d, descent
                  -

                  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. -

                  -
                  -
                  n
                  -

                  the number of input frame, starting from 0 -

                  -
                  -
                  t
                  -

                  timestamp expressed in seconds, NAN if the input timestamp is unknown -

                  -
                  -
                  timecode
                  -

                  initial timecode representation in "hh:mm:ss[:;.]ff" format. It can be used -with or without text parameter. rate option must be specified. -Note that timecode options are not effective if FFmpeg is build with ---disable-avcodec. -

                  -
                  -
                  r, rate
                  -

                  frame rate (timecode only) -

                  -
                  - -

                  Some examples follow. -

                  -
                    -
                  • -Draw "Test Text" with font FreeSerif, using the default values for the -optional parameters. - -
                     
                    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
                    -
                    - -
                  • -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%. - -
                     
                    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
                    -          x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
                    -
                    - -

                    Note that the double quotes are not necessary if spaces are not used -within the parameter list. -

                    -
                  • -Show the text at the center of the video frame: -
                     
                    drawtext=fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
                    -
                    - -
                  • -Show a text line sliding from right to left in the last row of the video -frame. The file ‘LONG_LINE’ is assumed to contain a single line -with no newlines. -
                     
                    drawtext=fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t
                    -
                    - -
                  • -Show the content of file ‘CREDITS’ off the bottom of the frame and scroll up. -
                     
                    drawtext=fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
                    -
                    - -
                  • -Draw a single green letter "g", at the center of the input video. -The glyph baseline is placed at half screen height. -
                     
                    drawtext=fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent
                    -
                    - -
                  - -

                  For more information about libfreetype, check: -http://www.freetype.org/. -

                  - -

                  17.11 fade

                  - -

                  Apply fade-in/out effect to input video. -

                  -

                  It accepts the parameters: -type:start_frame:nb_frames[:options] -

                  -

                  type specifies if the effect type, can be either "in" for -fade-in, or "out" for a fade-out effect. -

                  -

                  start_frame specifies the number of the start frame for starting -to apply the fade effect. -

                  -

                  nb_frames specifies the number of frames for which the fade -effect has to last. At the end of the fade-in effect the output video -will have the same intensity as the input video, at the end of the -fade-out transition the output video will be completely black. -

                  -

                  options is an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                  -
                  -
                  type, t
                  -

                  See type. -

                  -
                  -
                  start_frame, s
                  -

                  See start_frame. -

                  -
                  -
                  nb_frames, n
                  -

                  See nb_frames. -

                  -
                  -
                  alpha
                  -

                  If set to 1, fade only alpha channel, if one exists on the input. -Default value is 0. -

                  -
                  - -

                  A few usage examples follow, usable too as test scenarios. -

                   
                  # fade in first 30 frames of video
                  -fade=in:0:30
                  -
                  -# fade out last 45 frames of a 200-frame video
                  -fade=out:155:45
                  -
                  -# fade in first 25 frames and fade out last 25 frames of a 1000-frame video
                  -fade=in:0:25, fade=out:975:25
                  -
                  -# make first 5 frames black, then fade in from frame 5-24
                  -fade=in:5:20
                  -
                  -# fade in alpha over first 25 frames of video
                  -fade=in:0:25:alpha=1
                  -
                  - - -

                  17.12 fieldorder

                  - -

                  Transform the field order of the input video. -

                  -

                  It accepts one parameter which specifies the required field order that -the input interlaced video will be transformed to. The parameter can -assume one of the following values: -

                  -
                  -
                  0 or bff
                  -

                  output bottom field first -

                  -
                  1 or tff
                  -

                  output top field first -

                  -
                  - -

                  Default value is "tff". -

                  -

                  Transformation is achieved by shifting the picture content up or down -by one line, and filling the remaining line with appropriate picture content. -This method is consistent with most broadcast field order converters. -

                  -

                  If the input video is not flagged as being interlaced, or it is already -flagged as being of the required output field order then this filter does -not alter the incoming video. -

                  -

                  This filter is very useful when converting to or from PAL DV material, -which is bottom field first. -

                  -

                  For example: -

                   
                  ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
                  -
                  - - -

                  17.13 fifo

                  - -

                  Buffer input images and send them when they are requested. -

                  -

                  This filter is mainly useful when auto-inserted by the libavfilter -framework. -

                  -

                  The filter does not take parameters. -

                  - -

                  17.14 format

                  - -

                  Convert the input video to one of the specified pixel formats. -Libavfilter will try to pick one that is supported for the input to -the next filter. -

                  -

                  The filter accepts a list of pixel format names, separated by ":", -for example "yuv420p:monow:rgb24". -

                  -

                  Some examples follow: -

                   
                  # convert the input video to the format "yuv420p"
                  -format=yuv420p
                  -
                  -# convert the input video to any of the formats in the list
                  -format=yuv420p:yuv444p:yuv410p
                  -
                  - -

                  -

                  -

                  17.15 frei0r

                  - -

                  Apply a frei0r effect to the input video. -

                  -

                  To enable compilation of this filter you need to install the frei0r -header and configure FFmpeg with --enable-frei0r. -

                  -

                  The filter supports the syntax: -

                   
                  filter_name[{:|=}param1:param2:...:paramN]
                  -
                  - -

                  filter_name is the name to the frei0r effect to load. If the -environment variable FREI0R_PATH is defined, the frei0r effect -is searched in each one of the directories specified by the colon -separated list in FREIOR_PATH, otherwise in the standard frei0r -paths, which are in this order: ‘HOME/.frei0r-1/lib/’, -‘/usr/local/lib/frei0r-1/’, ‘/usr/lib/frei0r-1/’. -

                  -

                  param1, param2, ... , paramN specify the parameters -for the frei0r effect. -

                  -

                  A frei0r effect parameter can be a boolean (whose values are specified -with "y" and "n"), a double, a color (specified by the syntax -R/G/B, R, G, and B being float -numbers from 0.0 to 1.0) or by an av_parse_color() color -description), a position (specified by the syntax X/Y, -X and Y being float numbers) and a string. -

                  -

                  The number and kind of parameters depend on the loaded effect. If an -effect parameter is not specified the default value is set. -

                  -

                  Some examples follow: -

                   
                  # apply the distort0r effect, set the first two double parameters
                  -frei0r=distort0r:0.5:0.01
                  -
                  -# apply the colordistance effect, takes a color as first parameter
                  -frei0r=colordistance:0.2/0.3/0.4
                  -frei0r=colordistance:violet
                  -frei0r=colordistance:0x112233
                  -
                  -# apply the perspective effect, specify the top left and top right
                  -# image positions
                  -frei0r=perspective:0.2/0.2:0.8/0.2
                  -
                  - -

                  For more information see: -http://piksel.org/frei0r -

                  - -

                  17.16 gradfun

                  - -

                  Fix the banding artifacts that are sometimes introduced into nearly flat -regions by truncation to 8bit color depth. -Interpolate the gradients that should go where the bands are, and -dither them. -

                  -

                  This filter is designed for playback only. Do not use it prior to -lossy compression, because compression tends to lose the dither and -bring back the bands. -

                  -

                  The filter takes two optional parameters, separated by ’:’: -strength:radius -

                  -

                  strength is the maximum amount by which the filter will change -any one pixel. Also the threshold for detecting nearly flat -regions. Acceptable values range from .51 to 255, default value is -1.2, out-of-range values will be clipped to the valid range. -

                  -

                  radius is the neighborhood to fit the gradient to. A larger -radius makes for smoother gradients, but also prevents the filter from -modifying the pixels near detailed regions. Acceptable values are -8-32, default value is 16, out-of-range values will be clipped to the -valid range. -

                  -
                   
                  # default parameters
                  -gradfun=1.2:16
                  -
                  -# omitting radius
                  -gradfun=1.2
                  -
                  - - -

                  17.17 hflip

                  - -

                  Flip the input video horizontally. -

                  -

                  For example to horizontally flip the input video with ffmpeg: -

                   
                  ffmpeg -i in.avi -vf "hflip" out.avi
                  -
                  - - -

                  17.18 hqdn3d

                  - -

                  High precision/quality 3d denoise filter. This filter aims to reduce -image noise producing smooth images and making still images really -still. It should enhance compressibility. -

                  -

                  It accepts the following optional parameters: -luma_spatial:chroma_spatial:luma_tmp:chroma_tmp -

                  -
                  -
                  luma_spatial
                  -

                  a non-negative float number which specifies spatial luma strength, -defaults to 4.0 -

                  -
                  -
                  chroma_spatial
                  -

                  a non-negative float number which specifies spatial chroma strength, -defaults to 3.0*luma_spatial/4.0 -

                  -
                  -
                  luma_tmp
                  -

                  a float number which specifies luma temporal strength, defaults to -6.0*luma_spatial/4.0 -

                  -
                  -
                  chroma_tmp
                  -

                  a float number which specifies chroma temporal strength, defaults to -luma_tmp*chroma_spatial/luma_spatial -

                  -
                  - - -

                  17.19 lut, lutrgb, lutyuv

                  - -

                  Compute a look-up table for binding each pixel component input value -to an output value, and apply it to input video. -

                  -

                  lutyuv applies a lookup table to a YUV input video, lutrgb -to an RGB input video. -

                  -

                  These filters accept in input a ":"-separated list of options, which -specify the expressions used for computing the lookup table for the -corresponding pixel component values. -

                  -

                  The lut filter requires either YUV or RGB pixel formats in -input, and accepts the options: -

                  -
                  c0
                  -

                  first pixel component -

                  -
                  c1
                  -

                  second pixel component -

                  -
                  c2
                  -

                  third pixel component -

                  -
                  c3
                  -

                  fourth pixel component, corresponds to the alpha component -

                  -
                  - -

                  The exact component associated to each option depends on the format in -input. -

                  -

                  The lutrgb filter requires RGB pixel formats in input, and -accepts the options: -

                  -
                  r
                  -

                  red component -

                  -
                  g
                  -

                  green component -

                  -
                  b
                  -

                  blue component -

                  -
                  a
                  -

                  alpha component -

                  -
                  - -

                  The lutyuv filter requires YUV pixel formats in input, and -accepts the options: -

                  -
                  y
                  -

                  Y/luminance component -

                  -
                  u
                  -

                  U/Cb component -

                  -
                  v
                  -

                  V/Cr component -

                  -
                  a
                  -

                  alpha component -

                  -
                  - -

                  The expressions can contain the following constants and functions: -

                  -
                  -
                  w, h
                  -

                  the input width and height -

                  -
                  -
                  val
                  -

                  input value for the pixel component -

                  -
                  -
                  clipval
                  -

                  the input value clipped in the minval-maxval range -

                  -
                  -
                  maxval
                  -

                  maximum value for the pixel component -

                  -
                  -
                  minval
                  -

                  minimum value for the pixel component -

                  -
                  -
                  negval
                  -

                  the negated value for the pixel component value clipped in the -minval-maxval range , it corresponds to the expression -"maxval-clipval+minval" -

                  -
                  -
                  clip(val)
                  -

                  the computed value in val clipped in the -minval-maxval range -

                  -
                  -
                  gammaval(gamma)
                  -

                  the computed gamma correction value of the pixel component value -clipped in the minval-maxval range, corresponds to the -expression -"pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval" -

                  -
                  -
                  - -

                  All expressions default to "val". -

                  -

                  Some examples follow: -

                   
                  # negate input video
                  -lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
                  -lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
                  -
                  -# the above is the same as
                  -lutrgb="r=negval:g=negval:b=negval"
                  -lutyuv="y=negval:u=negval:v=negval"
                  -
                  -# negate luminance
                  -lutyuv=y=negval
                  -
                  -# remove chroma components, turns the video into a graytone image
                  -lutyuv="u=128:v=128"
                  -
                  -# apply a luma burning effect
                  -lutyuv="y=2*val"
                  -
                  -# remove green and blue components
                  -lutrgb="g=0:b=0"
                  -
                  -# set a constant alpha channel value on input
                  -format=rgba,lutrgb=a="maxval-minval/2"
                  -
                  -# correct luminance gamma by a 0.5 factor
                  -lutyuv=y=gammaval(0.5)
                  -
                  - - -

                  17.20 mp

                  - -

                  Apply an MPlayer filter to the input video. -

                  -

                  This filter provides a wrapper around most of the filters of -MPlayer/MEncoder. -

                  -

                  This wrapper is considered experimental. Some of the wrapped filters -may not work properly and we may drop support for them, as they will -be implemented natively into FFmpeg. Thus you should avoid -depending on them when writing portable scripts. -

                  -

                  The filters accepts the parameters: -filter_name[:=]filter_params -

                  -

                  filter_name is the name of a supported MPlayer filter, -filter_params is a string containing the parameters accepted by -the named filter. -

                  -

                  The list of the currently supported filters follows: -

                  -
                  2xsai
                  -
                  decimate
                  -
                  denoise3d
                  -
                  detc
                  -
                  dint
                  -
                  divtc
                  -
                  down3dright
                  -
                  dsize
                  -
                  eq2
                  -
                  eq
                  -
                  field
                  -
                  fil
                  -
                  fixpts
                  -
                  framestep
                  -
                  fspp
                  -
                  geq
                  -
                  harddup
                  -
                  hqdn3d
                  -
                  hue
                  -
                  il
                  -
                  ilpack
                  -
                  ivtc
                  -
                  kerndeint
                  -
                  mcdeint
                  -
                  mirror
                  -
                  noise
                  -
                  ow
                  -
                  palette
                  -
                  perspective
                  -
                  phase
                  -
                  pp7
                  -
                  pullup
                  -
                  qp
                  -
                  rectangle
                  -
                  remove-logo
                  -
                  rotate
                  -
                  sab
                  -
                  screenshot
                  -
                  smartblur
                  -
                  softpulldown
                  -
                  softskip
                  -
                  spp
                  -
                  swapuv
                  -
                  telecine
                  -
                  tile
                  -
                  tinterlace
                  -
                  unsharp
                  -
                  uspp
                  -
                  yuvcsp
                  -
                  yvu9
                  -
                  - -

                  The parameter syntax and behavior for the listed filters are the same -of the corresponding MPlayer filters. For detailed instructions check -the "VIDEO FILTERS" section in the MPlayer manual. -

                  -

                  Some examples follow: -

                   
                  # remove a logo by interpolating the surrounding pixels
                  -mp=delogo=200:200:80:20:1
                  -
                  -# adjust gamma, brightness, contrast
                  -mp=eq2=1.0:2:0.5
                  -
                  -# tweak hue and saturation
                  -mp=hue=100:-10
                  -
                  - -

                  See also mplayer(1), http://www.mplayerhq.hu/. -

                  - -

                  17.21 negate

                  - -

                  Negate input video. -

                  -

                  This filter accepts an integer in input, if non-zero it negates the -alpha component (if available). The default value in input is 0. -

                  - -

                  17.22 noformat

                  - -

                  Force libavfilter not to use any of the specified pixel formats for the -input to the next filter. -

                  -

                  The filter accepts a list of pixel format names, separated by ":", -for example "yuv420p:monow:rgb24". -

                  -

                  Some examples follow: -

                   
                  # force libavfilter to use a format different from "yuv420p" for the
                  -# input to the vflip filter
                  -noformat=yuv420p,vflip
                  -
                  -# convert the input video to any of the formats not contained in the list
                  -noformat=yuv420p:yuv444p:yuv410p
                  -
                  - - -

                  17.23 null

                  - -

                  Pass the video source unchanged to the output. -

                  - -

                  17.24 ocv

                  - -

                  Apply video transform using libopencv. -

                  -

                  To enable this filter install libopencv library and headers and -configure FFmpeg with --enable-libopencv. -

                  -

                  The filter takes the parameters: filter_name{:=}filter_params. -

                  -

                  filter_name is the name of the libopencv filter to apply. -

                  -

                  filter_params specifies the parameters to pass to the libopencv -filter. If not specified the default values are assumed. -

                  -

                  Refer to the official libopencv documentation for more precise -information: -http://opencv.willowgarage.com/documentation/c/image_filtering.html -

                  -

                  Follows the list of supported libopencv filters. -

                  -

                  -

                  -

                  17.24.1 dilate

                  - -

                  Dilate an image by using a specific structuring element. -This filter corresponds to the libopencv function cvDilate. -

                  -

                  It accepts the parameters: struct_el:nb_iterations. -

                  -

                  struct_el represents a structuring element, and has the syntax: -colsxrows+anchor_xxanchor_y/shape -

                  -

                  cols and rows represent the number of columns and rows of -the structuring element, anchor_x and anchor_y the anchor -point, and shape the shape for the structuring element, and -can be one of the values "rect", "cross", "ellipse", "custom". -

                  -

                  If the value for shape is "custom", it must be followed by a -string of the form "=filename". The file with name -filename is assumed to represent a binary image, with each -printable character corresponding to a bright pixel. When a custom -shape is used, cols and rows are ignored, the number -or columns and rows of the read file are assumed instead. -

                  -

                  The default value for struct_el is "3x3+0x0/rect". -

                  -

                  nb_iterations specifies the number of times the transform is -applied to the image, and defaults to 1. -

                  -

                  Follow some example: -

                   
                  # use the default values
                  -ocv=dilate
                  -
                  -# dilate using a structuring element with a 5x5 cross, iterate two times
                  -ocv=dilate=5x5+2x2/cross:2
                  -
                  -# read the shape from the file diamond.shape, iterate two times
                  -# the file diamond.shape may contain a pattern of characters like this:
                  -#   *
                  -#  ***
                  -# *****
                  -#  ***
                  -#   *
                  -# the specified cols and rows are ignored (but not the anchor point coordinates)
                  -ocv=0x0+2x2/custom=diamond.shape:2
                  -
                  - - -

                  17.24.2 erode

                  - -

                  Erode an image by using a specific structuring element. -This filter corresponds to the libopencv function cvErode. -

                  -

                  The filter accepts the parameters: struct_el:nb_iterations, -with the same syntax and semantics as the dilate filter. -

                  - -

                  17.24.3 smooth

                  - -

                  Smooth the input video. -

                  -

                  The filter takes the following parameters: -type:param1:param2:param3:param4. -

                  -

                  type is the type of smooth filter to apply, and can be one of -the following values: "blur", "blur_no_scale", "median", "gaussian", -"bilateral". The default value is "gaussian". -

                  -

                  param1, param2, param3, and param4 are -parameters whose meanings depend on smooth type. param1 and -param2 accept integer positive values or 0, param3 and -param4 accept float values. -

                  -

                  The default value for param1 is 3, the default value for the -other parameters is 0. -

                  -

                  These parameters correspond to the parameters assigned to the -libopencv function cvSmooth. -

                  -

                  -

                  -

                  17.25 overlay

                  - -

                  Overlay one video on top of another. -

                  -

                  It takes two inputs and one output, the first input is the "main" -video on which the second input is overlayed. -

                  -

                  It accepts the parameters: x:y[:options]. -

                  -

                  x is the x coordinate of the overlayed video on the main video, -y is the y coordinate. x and y are expressions containing -the following parameters: -

                  -
                  -
                  main_w, main_h
                  -

                  main input width and height -

                  -
                  -
                  W, H
                  -

                  same as main_w and main_h -

                  -
                  -
                  overlay_w, overlay_h
                  -

                  overlay input width and height -

                  -
                  -
                  w, h
                  -

                  same as overlay_w and overlay_h -

                  -
                  - -

                  options is an optional list of key=value pairs, -separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  rgb
                  -

                  If set to 1, force the filter to accept inputs in the RGB -color space. Default value is 0. -

                  -
                  - -

                  Be aware that frames are taken from each input video in timestamp -order, hence, if their initial timestamps differ, it is a a good idea -to pass the two inputs through a setpts=PTS-STARTPTS filter to -have them begin in the same zero timestamp, as it does the example for -the movie filter. -

                  -

                  Follow some examples: -

                   
                  # draw the overlay at 10 pixels from the bottom right
                  -# corner of the main video.
                  -overlay=main_w-overlay_w-10:main_h-overlay_h-10
                  -
                  -# insert a transparent PNG logo in the bottom left corner of the input
                  -movie=logo.png [logo];
                  -[in][logo] overlay=10:main_h-overlay_h-10 [out]
                  -
                  -# insert 2 different transparent PNG logos (second logo on bottom
                  -# right corner):
                  -movie=logo1.png [logo1];
                  -movie=logo2.png [logo2];
                  -[in][logo1]       overlay=10:H-h-10 [in+logo1];
                  -[in+logo1][logo2] overlay=W-w-10:H-h-10 [out]
                  -
                  -# add a transparent color layer on top of the main video,
                  -# WxH specifies the size of the main input to the overlay filter
                  -color=red.3:WxH [over]; [in][over] overlay [out]
                  -
                  - -

                  You can chain together more overlays but the efficiency of such -approach is yet to be tested. -

                  - -

                  17.26 pad

                  - -

                  Add paddings to the input image, and places the original input at the -given coordinates x, y. -

                  -

                  It accepts the following parameters: -width:height:x:y:color. -

                  -

                  The parameters width, height, x, and y are -expressions containing the following constants: -

                  -
                  -
                  in_w, in_h
                  -

                  the input video width and height -

                  -
                  -
                  iw, ih
                  -

                  same as in_w and in_h -

                  -
                  -
                  out_w, out_h
                  -

                  the output width and height, that is the size of the padded area as -specified by the width and height expressions -

                  -
                  -
                  ow, oh
                  -

                  same as out_w and out_h -

                  -
                  -
                  x, y
                  -

                  x and y offsets as specified by the x and y -expressions, or NAN if not yet specified -

                  -
                  -
                  a
                  -

                  same as iw / ih -

                  -
                  -
                  sar
                  -

                  input sample aspect ratio -

                  -
                  -
                  dar
                  -

                  input display aspect ratio, it is the same as (iw / ih) * sar -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  - -

                  Follows the description of the accepted parameters. -

                  -
                  -
                  width, height
                  -
                  -

                  Specify the size of the output image with the paddings added. If the -value for width or height is 0, the corresponding input size -is used for the output. -

                  -

                  The width expression can reference the value set by the -height expression, and vice versa. -

                  -

                  The default value of width and height is 0. -

                  -
                  -
                  x, y
                  -
                  -

                  Specify the offsets where to place the input image in the padded area -with respect to the top/left border of the output image. -

                  -

                  The x expression can reference the value set by the y -expression, and vice versa. -

                  -

                  The default value of x and y is 0. -

                  -
                  -
                  color
                  -
                  -

                  Specify the color of the padded area, it can be the name of a color -(case insensitive match) or a 0xRRGGBB[AA] sequence. -

                  -

                  The default value of color is "black". -

                  -
                  -
                  - -

                  Some examples follow: -

                  -
                   
                  # Add paddings with color "violet" to the input video. Output video
                  -# size is 640x480, the top-left corner of the input video is placed at
                  -# column 0, row 40.
                  -pad=640:480:0:40:violet
                  -
                  -# pad the input to get an output with dimensions increased bt 3/2,
                  -# and put the input video at the center of the padded area
                  -pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
                  -
                  -# pad the input to get a squared output with size equal to the maximum
                  -# value between the input width and height, and put the input video at
                  -# the center of the padded area
                  -pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
                  -
                  -# pad the input to get a final w/h ratio of 16:9
                  -pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
                  -
                  -# for anamorphic video, in order to set the output display aspect ratio,
                  -# it is necessary to use sar in the expression, according to the relation:
                  -# (ih * X / ih) * sar = output_dar
                  -# X = output_dar / sar
                  -pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
                  -
                  -# double output size and put the input video in the bottom-right
                  -# corner of the output padded area
                  -pad="2*iw:2*ih:ow-iw:oh-ih"
                  -
                  - - -

                  17.27 pixdesctest

                  - -

                  Pixel format descriptor test filter, mainly useful for internal -testing. The output video should be equal to the input video. -

                  -

                  For example: -

                   
                  format=monow, pixdesctest
                  -
                  - -

                  can be used to test the monowhite pixel format descriptor definition. -

                  - -

                  17.28 scale

                  - -

                  Scale the input video to width:height[:interl={1|-1}] and/or convert the image format. -

                  -

                  The parameters width and height are expressions containing -the following constants: -

                  -
                  -
                  in_w, in_h
                  -

                  the input width and height -

                  -
                  -
                  iw, ih
                  -

                  same as in_w and in_h -

                  -
                  -
                  out_w, out_h
                  -

                  the output (cropped) width and height -

                  -
                  -
                  ow, oh
                  -

                  same as out_w and out_h -

                  -
                  -
                  a
                  -

                  same as iw / ih -

                  -
                  -
                  sar
                  -

                  input sample aspect ratio -

                  -
                  -
                  dar
                  -

                  input display aspect ratio, it is the same as (iw / ih) * sar -

                  -
                  -
                  hsub, vsub
                  -

                  horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                  -
                  - -

                  If the input image format is different from the format requested by -the next filter, the scale filter will convert the input to the -requested format. -

                  -

                  If the value for width or height is 0, the respective input -size is used for the output. -

                  -

                  If the value for width or height is -1, the scale filter will -use, for the respective output size, a value that maintains the aspect -ratio of the input image. -

                  -

                  The default value of width and height is 0. -

                  -

                  Valid values for the optional parameter interl are: -

                  -
                  -
                  1
                  -

                  force interlaced aware scaling -

                  -
                  -
                  -1
                  -

                  select interlaced aware scaling depending on whether the source frames -are flagged as interlaced or not -

                  -
                  - -

                  Some examples follow: -

                   
                  # scale the input video to a size of 200x100.
                  -scale=200:100
                  -
                  -# scale the input to 2x
                  -scale=2*iw:2*ih
                  -# the above is the same as
                  -scale=2*in_w:2*in_h
                  -
                  -# scale the input to half size
                  -scale=iw/2:ih/2
                  -
                  -# increase the width, and set the height to the same size
                  -scale=3/2*iw:ow
                  -
                  -# seek for Greek harmony
                  -scale=iw:1/PHI*iw
                  -scale=ih*PHI:ih
                  -
                  -# increase the height, and set the width to 3/2 of the height
                  -scale=3/2*oh:3/5*ih
                  -
                  -# increase the size, but make the size a multiple of the chroma
                  -scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
                  -
                  -# increase the width to a maximum of 500 pixels, keep the same input aspect ratio
                  -scale='min(500\, iw*3/2):-1'
                  -
                  - - -

                  17.29 select

                  -

                  Select frames to pass in output. -

                  -

                  It accepts in input an expression, which is evaluated for each input -frame. If the expression is evaluated to a non-zero value, the frame -is selected and passed to the output, otherwise it is discarded. -

                  -

                  The expression can contain the following constants: -

                  -
                  -
                  n
                  -

                  the sequential number of the filtered frame, starting from 0 -

                  -
                  -
                  selected_n
                  -

                  the sequential number of the selected frame, starting from 0 -

                  -
                  -
                  prev_selected_n
                  -

                  the sequential number of the last selected frame, NAN if undefined -

                  -
                  -
                  TB
                  -

                  timebase of the input timestamps -

                  -
                  -
                  pts
                  -

                  the PTS (Presentation TimeStamp) of the filtered video frame, -expressed in TB units, NAN if undefined -

                  -
                  -
                  t
                  -

                  the PTS (Presentation TimeStamp) of the filtered video frame, -expressed in seconds, NAN if undefined -

                  -
                  -
                  prev_pts
                  -

                  the PTS of the previously filtered video frame, NAN if undefined -

                  -
                  -
                  prev_selected_pts
                  -

                  the PTS of the last previously filtered video frame, NAN if undefined -

                  -
                  -
                  prev_selected_t
                  -

                  the PTS of the last previously selected video frame, NAN if undefined -

                  -
                  -
                  start_pts
                  -

                  the PTS of the first video frame in the video, NAN if undefined -

                  -
                  -
                  start_t
                  -

                  the time of the first video frame in the video, NAN if undefined -

                  -
                  -
                  pict_type
                  -

                  the type of the filtered frame, can assume one of the following -values: -

                  -
                  I
                  -
                  P
                  -
                  B
                  -
                  S
                  -
                  SI
                  -
                  SP
                  -
                  BI
                  -
                  - -
                  -
                  interlace_type
                  -

                  the frame interlace type, can assume one of the following values: -

                  -
                  PROGRESSIVE
                  -

                  the frame is progressive (not interlaced) -

                  -
                  TOPFIRST
                  -

                  the frame is top-field-first -

                  -
                  BOTTOMFIRST
                  -

                  the frame is bottom-field-first -

                  -
                  - -
                  -
                  key
                  -

                  1 if the filtered frame is a key-frame, 0 otherwise -

                  -
                  -
                  pos
                  -

                  the position in the file of the filtered frame, -1 if the information -is not available (e.g. for synthetic video) -

                  -
                  - -

                  The default value of the select expression is "1". -

                  -

                  Some examples follow: -

                  -
                   
                  # select all frames in input
                  -select
                  -
                  -# the above is the same as:
                  -select=1
                  -
                  -# skip all frames:
                  -select=0
                  -
                  -# select only I-frames
                  -select='eq(pict_type\,I)'
                  -
                  -# select one frame every 100
                  -select='not(mod(n\,100))'
                  -
                  -# select only frames contained in the 10-20 time interval
                  -select='gte(t\,10)*lte(t\,20)'
                  -
                  -# select only I frames contained in the 10-20 time interval
                  -select='gte(t\,10)*lte(t\,20)*eq(pict_type\,I)'
                  -
                  -# select frames with a minimum distance of 10 seconds
                  -select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
                  -
                  - -

                  -

                  -

                  17.30 setdar

                  - -

                  Set the Display Aspect Ratio for the filter output video. -

                  -

                  This is done by changing the specified Sample (aka Pixel) Aspect -Ratio, according to the following equation: -DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR -

                  -

                  Keep in mind that this filter does not modify the pixel dimensions of -the video frame. Also the display aspect ratio set by this filter may -be changed by later filters in the filterchain, e.g. in case of -scaling or if another "setdar" or a "setsar" filter is applied. -

                  -

                  The filter accepts a parameter string which represents the wanted -display aspect ratio. -The parameter can be a floating point number string, or an expression -of the form num:den, where num and den are the -numerator and denominator of the aspect ratio. -If the parameter is not specified, it is assumed the value "0:1". -

                  -

                  For example to change the display aspect ratio to 16:9, specify: -

                   
                  setdar=16:9
                  -# the above is equivalent to
                  -setdar=1.77777
                  -
                  - -

                  See also the setsar filter documentation. -

                  - -

                  17.31 setpts

                  - -

                  Change the PTS (presentation timestamp) of the input video frames. -

                  -

                  Accept in input an expression evaluated through the eval API, which -can contain the following constants: -

                  -
                  -
                  PTS
                  -

                  the presentation timestamp in input -

                  -
                  -
                  N
                  -

                  the count of the input frame, starting from 0. -

                  -
                  -
                  STARTPTS
                  -

                  the PTS of the first video frame -

                  -
                  -
                  INTERLACED
                  -

                  tell if the current frame is interlaced -

                  -
                  -
                  POS
                  -

                  original position in the file of the frame, or undefined if undefined -for the current frame -

                  -
                  -
                  PREV_INPTS
                  -

                  previous input PTS -

                  -
                  -
                  PREV_OUTPTS
                  -

                  previous output PTS -

                  -
                  -
                  - -

                  Some examples follow: -

                  -
                   
                  # start counting PTS from zero
                  -setpts=PTS-STARTPTS
                  -
                  -# fast motion
                  -setpts=0.5*PTS
                  -
                  -# slow motion
                  -setpts=2.0*PTS
                  -
                  -# fixed rate 25 fps
                  -setpts=N/(25*TB)
                  -
                  -# fixed rate 25 fps with some jitter
                  -setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
                  -
                  - -

                  -

                  -

                  17.32 setsar

                  - -

                  Set the Sample (aka Pixel) Aspect Ratio for the filter output video. -

                  -

                  Note that as a consequence of the application of this filter, the -output display aspect ratio will change according to the following -equation: -DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR -

                  -

                  Keep in mind that the sample aspect ratio set by this filter may be -changed by later filters in the filterchain, e.g. if another "setsar" -or a "setdar" filter is applied. -

                  -

                  The filter accepts a parameter string which represents the wanted -sample aspect ratio. -The parameter can be a floating point number string, or an expression -of the form num:den, where num and den are the -numerator and denominator of the aspect ratio. -If the parameter is not specified, it is assumed the value "0:1". -

                  -

                  For example to change the sample aspect ratio to 10:11, specify: -

                   
                  setsar=10:11
                  -
                  - - -

                  17.33 settb

                  - -

                  Set the timebase to use for the output frames timestamps. -It is mainly useful for testing timebase configuration. -

                  -

                  It accepts in input an arithmetic expression representing a rational. -The expression can contain the constants "AVTB" (the -default timebase), and "intb" (the input timebase). -

                  -

                  The default value for the input is "intb". -

                  -

                  Follow some examples. -

                  -
                   
                  # set the timebase to 1/25
                  -settb=1/25
                  -
                  -# set the timebase to 1/10
                  -settb=0.1
                  -
                  -#set the timebase to 1001/1000
                  -settb=1+0.001
                  -
                  -#set the timebase to 2*intb
                  -settb=2*intb
                  -
                  -#set the default timebase value
                  -settb=AVTB
                  -
                  - - -

                  17.34 showinfo

                  - -

                  Show a line containing various information for each input video frame. -The input video is not modified. -

                  -

                  The shown line contains a sequence of key/value pairs of the form -key:value. -

                  -

                  A description of each shown parameter follows: -

                  -
                  -
                  n
                  -

                  sequential number of the input frame, starting from 0 -

                  -
                  -
                  pts
                  -

                  Presentation TimeStamp of the input frame, expressed as a number of -time base units. The time base unit depends on the filter input pad. -

                  -
                  -
                  pts_time
                  -

                  Presentation TimeStamp of the input frame, expressed as a number of -seconds -

                  -
                  -
                  pos
                  -

                  position of the frame in the input stream, -1 if this information in -unavailable and/or meaningless (for example in case of synthetic video) -

                  -
                  -
                  fmt
                  -

                  pixel format name -

                  -
                  -
                  sar
                  -

                  sample aspect ratio of the input frame, expressed in the form -num/den -

                  -
                  -
                  s
                  -

                  size of the input frame, expressed in the form -widthxheight -

                  -
                  -
                  i
                  -

                  interlaced mode ("P" for "progressive", "T" for top field first, "B" -for bottom field first) -

                  -
                  -
                  iskey
                  -

                  1 if the frame is a key frame, 0 otherwise -

                  -
                  -
                  type
                  -

                  picture type of the input frame ("I" for an I-frame, "P" for a -P-frame, "B" for a B-frame, "?" for unknown type). -Check also the documentation of the AVPictureType enum and of -the av_get_picture_type_char function defined in -‘libavutil/avutil.h’. -

                  -
                  -
                  checksum
                  -

                  Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame -

                  -
                  -
                  plane_checksum
                  -

                  Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, -expressed in the form "[c0 c1 c2 c3]" -

                  -
                  - - -

                  17.35 slicify

                  - -

                  Pass the images of input video on to next video filter as multiple -slices. -

                  -
                   
                  ffmpeg -i in.avi -vf "slicify=32" out.avi
                  -
                  - -

                  The filter accepts the slice height as parameter. If the parameter is -not specified it will use the default value of 16. -

                  -

                  Adding this in the beginning of filter chains should make filtering -faster due to better use of the memory cache. -

                  - -

                  17.36 split

                  - -

                  Pass on the input video to two outputs. Both outputs are identical to -the input video. -

                  -

                  For example: -

                   
                  [in] split [splitout1][splitout2];
                  -[splitout1] crop=100:100:0:0    [cropout];
                  -[splitout2] pad=200:200:100:100 [padout];
                  -
                  - -

                  will create two separate outputs from the same input, one cropped and -one padded. -

                  - -

                  17.37 thumbnail

                  -

                  Select the most representative frame in a given sequence of consecutive frames. -

                  -

                  It accepts as argument the frames batch size to analyze (default N=100); -in a set of N frames, the filter will pick one of them, and then handle -the next batch of N frames until the end. -

                  -

                  Since the filter keeps track of the whole frames sequence, a bigger N -value will result in a higher memory usage, so a high value is not recommended. -

                  -

                  The following example extract one picture each 50 frames: -

                   
                  thumbnail=50
                  -
                  - -

                  Complete example of a thumbnail creation with ffmpeg: -

                   
                  ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
                  -
                  - - -

                  17.38 tinterlace

                  - -

                  Perform various types of temporal field interlacing. -

                  -

                  Frames are counted starting from 1, so the first input frame is -considered odd. -

                  -

                  This filter accepts a single parameter specifying the mode. Available -modes are: -

                  -
                  -
                  0
                  -

                  Move odd frames into the upper field, even into the lower field, -generating a double height frame at half framerate. -

                  -
                  -
                  1
                  -

                  Only output even frames, odd frames are dropped, generating a frame with -unchanged height at half framerate. -

                  -
                  -
                  2
                  -

                  Only output odd frames, even frames are dropped, generating a frame with -unchanged height at half framerate. -

                  -
                  -
                  3
                  -

                  Expand each frame to full height, but pad alternate lines with black, -generating a frame with double height at the same input framerate. -

                  -
                  -
                  4
                  -

                  Interleave the upper field from odd frames with the lower field from -even frames, generating a frame with unchanged height at half framerate. -

                  -
                  -
                  5
                  -

                  Interleave the lower field from odd frames with the upper field from -even frames, generating a frame with unchanged height at half framerate. -

                  -
                  - -

                  Default mode is 0. -

                  - -

                  17.39 transpose

                  - -

                  Transpose rows with columns in the input video and optionally flip it. -

                  -

                  It accepts a parameter representing an integer, which can assume the -values: -

                  -
                  -
                  0
                  -

                  Rotate by 90 degrees counterclockwise and vertically flip (default), that is: -

                   
                  L.R     L.l
                  -. . ->  . .
                  -l.r     R.r
                  -
                  - -
                  -
                  1
                  -

                  Rotate by 90 degrees clockwise, that is: -

                   
                  L.R     l.L
                  -. . ->  . .
                  -l.r     r.R
                  -
                  - -
                  -
                  2
                  -

                  Rotate by 90 degrees counterclockwise, that is: -

                   
                  L.R     R.r
                  -. . ->  . .
                  -l.r     L.l
                  -
                  - -
                  -
                  3
                  -

                  Rotate by 90 degrees clockwise and vertically flip, that is: -

                   
                  L.R     r.R
                  -. . ->  . .
                  -l.r     l.L
                  -
                  -
                  -
                  - - -

                  17.40 unsharp

                  - -

                  Sharpen or blur the input video. -

                  -

                  It accepts the following parameters: -luma_msize_x:luma_msize_y:luma_amount:chroma_msize_x:chroma_msize_y:chroma_amount -

                  -

                  Negative values for the amount will blur the input video, while positive -values will sharpen. All parameters are optional and default to the -equivalent of the string ’5:5:1.0:5:5:0.0’. -

                  -
                  -
                  luma_msize_x
                  -

                  Set the luma matrix horizontal size. It can be an integer between 3 -and 13, default value is 5. -

                  -
                  -
                  luma_msize_y
                  -

                  Set the luma matrix vertical size. It can be an integer between 3 -and 13, default value is 5. -

                  -
                  -
                  luma_amount
                  -

                  Set the luma effect strength. It can be a float number between -2.0 -and 5.0, default value is 1.0. -

                  -
                  -
                  chroma_msize_x
                  -

                  Set the chroma matrix horizontal size. It can be an integer between 3 -and 13, default value is 5. -

                  -
                  -
                  chroma_msize_y
                  -

                  Set the chroma matrix vertical size. It can be an integer between 3 -and 13, default value is 5. -

                  -
                  -
                  chroma_amount
                  -

                  Set the chroma effect strength. It can be a float number between -2.0 -and 5.0, default value is 0.0. -

                  -
                  -
                  - -
                   
                  # Strong luma sharpen effect parameters
                  -unsharp=7:7:2.5
                  -
                  -# Strong blur of both luma and chroma parameters
                  -unsharp=7:7:-2:7:7:-2
                  -
                  -# Use the default values with ffmpeg
                  -ffmpeg -i in.avi -vf "unsharp" out.mp4
                  -
                  - - -

                  17.41 vflip

                  - -

                  Flip the input video vertically. -

                  -
                   
                  ffmpeg -i in.avi -vf "vflip" out.avi
                  -
                  - - -

                  17.42 yadif

                  - -

                  Deinterlace the input video ("yadif" means "yet another deinterlacing -filter"). -

                  -

                  It accepts the optional parameters: mode:parity:auto. -

                  -

                  mode specifies the interlacing mode to adopt, accepts one of the -following values: -

                  -
                  -
                  0
                  -

                  output 1 frame for each frame -

                  -
                  1
                  -

                  output 1 frame for each field -

                  -
                  2
                  -

                  like 0 but skips spatial interlacing check -

                  -
                  3
                  -

                  like 1 but skips spatial interlacing check -

                  -
                  - -

                  Default value is 0. -

                  -

                  parity specifies the picture field parity assumed for the input -interlaced video, accepts one of the following values: -

                  -
                  -
                  0
                  -

                  assume top field first -

                  -
                  1
                  -

                  assume bottom field first -

                  -
                  -1
                  -

                  enable automatic detection -

                  -
                  - -

                  Default value is -1. -If interlacing is unknown or decoder does not export this information, -top field first will be assumed. -

                  -

                  auto specifies if deinterlacer should trust the interlaced flag -and only deinterlace frames marked as interlaced -

                  -
                  -
                  0
                  -

                  deinterlace all frames -

                  -
                  1
                  -

                  only deinterlace frames marked as interlaced -

                  -
                  - -

                  Default value is 0. -

                  - - -

                  18. Video Sources

                  + +

                  4. See Also

                  -

                  Below is a description of the currently available video sources. +

                  ffmpeg-all, +ffmpeg, ffprobe, ffserver, +ffmpeg-utils, +ffmpeg-scaler, +ffmpeg-resampler, +ffmpeg-codecs, +ffmpeg-bitstream-filters, +ffmpeg-formats, +ffmpeg-devices, +ffmpeg-protocols, +ffmpeg-filters

                  - -

                  18.1 buffer

                  - -

                  Buffer video frames, and make them available to the filter chain. -

                  -

                  This source is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/vsrc_buffer.h’. -

                  -

                  It accepts the following parameters: -width:height:pix_fmt_string:timebase_num:timebase_den:sample_aspect_ratio_num:sample_aspect_ratio.den:scale_params -

                  -

                  All the parameters but scale_params need to be explicitly -defined. -

                  -

                  Follows the list of the accepted parameters. -

                  -
                  -
                  width, height
                  -

                  Specify the width and height of the buffered video frames. -

                  -
                  -
                  pix_fmt_string
                  -

                  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. -

                  -
                  -
                  timebase_num, timebase_den
                  -

                  Specify numerator and denomitor of the timebase assumed by the -timestamps of the buffered frames. -

                  -
                  -
                  sample_aspect_ratio.num, sample_aspect_ratio.den
                  -

                  Specify numerator and denominator of the sample aspect ratio assumed -by the video frames. -

                  -
                  -
                  scale_params
                  -

                  Specify the optional parameters to be used for the scale filter which -is automatically inserted when an input change is detected in the -input size or format. -

                  -
                  - -

                  For example: -

                   
                  buffer=320:240:yuv410p:1:24:1:1
                  -
                  - -

                  will instruct the source to accept video frames with size 320x240 and -with format "yuv410p", assuming 1/24 as the timestamps timebase and -square pixels (1:1 sample aspect ratio). -Since the pixel format with name "yuv410p" corresponds to the number 6 -(check the enum PixelFormat definition in ‘libavutil/pixfmt.h’), -this example corresponds to: -

                   
                  buffer=320:240:6:1:24:1:1
                  -
                  - - -

                  18.2 cellauto

                  - -

                  Create a pattern generated by an elementary cellular automaton. -

                  -

                  The initial state of the cellular automaton can be defined through the -‘filename’, and ‘pattern’ options. If such options are -not specified an initial state is created randomly. -

                  -

                  At each new frame a new row in the video is filled with the result of -the cellular automaton next generation. The behavior when the whole -frame is filled is defined by the ‘scroll’ option. -

                  -

                  This source accepts a list of options in the form of -key=value pairs separated by ":". A description of the -accepted options follows. -

                  -
                  -
                  filename, f
                  -

                  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. -

                  -
                  -
                  pattern, p
                  -

                  Read the initial cellular automaton state, i.e. the starting row, from -the specified string. -

                  -

                  Each non-whitespace character in the string is considered an alive -cell, a newline will terminate the row, and further characters in the -string will be ignored. -

                  -
                  -
                  rate, r
                  -

                  Set the video rate, that is the number of frames generated per second. -Default is 25. -

                  -
                  -
                  random_fill_ratio, ratio
                  -

                  Set the random fill ratio for the initial cellular automaton row. It -is a floating point number value ranging from 0 to 1, defaults to -1/PHI. -

                  -

                  This option is ignored when a file or a pattern is specified. -

                  -
                  -
                  random_seed, seed
                  -

                  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. -

                  -
                  -
                  rule
                  -

                  Set the cellular automaton rule, it is a number ranging from 0 to 255. -Default value is 110. -

                  -
                  -
                  size, s
                  -

                  Set the size of the output video. -

                  -

                  If ‘filename’ or ‘pattern’ is specified, the size is set -by default to the width of the specified initial state row, and the -height is set to width * PHI. -

                  -

                  If ‘size’ is set, it must contain the width of the specified -pattern string, and the specified pattern will be centered in the -larger row. -

                  -

                  If a filename or a pattern string is not specified, the size value -defaults to "320x518" (used for a randomly generated initial state). -

                  -
                  -
                  scroll
                  -

                  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. -

                  -
                  -
                  start_full, full
                  -

                  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. -

                  -
                  -
                  stitch
                  -

                  If set to 1, stitch the left and right row edges together. -This is the default behavior, for disabling set the value to 0. -

                  -
                  - - -

                  18.2.1 Examples

                  - -
                    -
                  • -Read the initial state from ‘pattern’, and specify an output of -size 200x400. -
                     
                    cellauto=f=pattern:s=200x400
                    -
                    - -
                  • -Generate a random initial row with a width of 200 cells, with a fill -ratio of 2/3: -
                     
                    cellauto=ratio=2/3:s=200x200
                    -
                    - -
                  • -Create a pattern generated by rule 18 starting by a single alive cell -centered on an initial row with width 100: -
                     
                    cellauto=p=@:s=100x400:full=0:rule=18
                    -
                    - -
                  • -Specify a more elaborated initial pattern: -
                     
                    cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
                    -
                    - -
                  - - -

                  18.3 color

                  - -

                  Provide an uniformly colored input. -

                  -

                  It accepts the following parameters: -color:frame_size:frame_rate -

                  -

                  Follows the description of the accepted parameters. -

                  -
                  -
                  color
                  -

                  Specify the color of the source. It can be the name of a color (case -insensitive match) or a 0xRRGGBB[AA] sequence, possibly followed by an -alpha specifier. The default value is "black". -

                  -
                  -
                  frame_size
                  -

                  Specify the size of the sourced video, it may be a string of the form -widthxheight, or the name of a size abbreviation. The -default value is "320x240". -

                  -
                  -
                  frame_rate
                  -

                  Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                  -
                  -
                  - -

                  For example the following graph description will generate a red source -with an opacity of 0.2, with size "qcif" and a frame rate of 10 -frames per second, which will be overlayed over the source connected -to the pad with identifier "in". -

                  -
                   
                  "color=red@0.2:qcif:10 [color]; [in][color] overlay [out]"
                  -
                  - - -

                  18.4 movie

                  - -

                  Read a video stream from a movie container. -

                  -

                  It accepts the syntax: movie_name[:options] where -movie_name is the name of the resource to read (not necessarily -a file but also a device or a stream accessed through some protocol), -and options is an optional sequence of key=value -pairs, separated by ":". -

                  -

                  The description of the accepted options follows. -

                  -
                  -
                  format_name, f
                  -

                  Specifies the format assumed for the movie to read, and can be either -the name of a container or an input device. If not specified the -format is guessed from movie_name or by probing. -

                  -
                  -
                  seek_point, sp
                  -

                  Specifies the seek point in seconds, the frames will be output -starting from this seek point, the parameter is evaluated with -av_strtod so the numerical value may be suffixed by an IS -postfix. Default value is "0". -

                  -
                  -
                  stream_index, si
                  -

                  Specifies the index of the video stream to read. If the value is -1, -the best suited video stream will be automatically selected. Default -value is "-1". -

                  -
                  -
                  - -

                  This filter allows to overlay a second video on top of main input of -a filtergraph as shown in this graph: -

                   
                  input -----------> deltapts0 --> overlay --> output
                  -                                    ^
                  -                                    |
                  -movie --> scale--> deltapts1 -------+
                  -
                  - -

                  Some examples follow: -

                   
                  # skip 3.2 seconds from the start of the avi file in.avi, and overlay it
                  -# on top of the input labelled as "in".
                  -movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [movie];
                  -[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out]
                  -
                  -# read from a video4linux2 device, and overlay it on top of the input
                  -# labelled as "in"
                  -movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [movie];
                  -[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out]
                  -
                  -
                  - - -

                  18.5 mptestsrc

                  - -

                  Generate various test patterns, as generated by the MPlayer test filter. -

                  -

                  The size of the generated video is fixed, and is 256x256. -This source is useful in particular for testing encoding features. -

                  -

                  This source accepts an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                  -
                  -
                  rate, r
                  -

                  Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                  -
                  -
                  duration, d
                  -

                  Set the video duration of the sourced video. The accepted syntax is: -

                   
                  [-]HH[:MM[:SS[.m...]]]
                  -[-]S+[.m...]
                  -
                  -

                  See also the function av_parse_time(). -

                  -

                  If not specified, or the expressed duration is negative, the video is -supposed to be generated forever. -

                  -
                  -
                  test, t
                  -
                  -

                  Set the number or the name of the test to perform. Supported tests are: -

                  -
                  dc_luma
                  -
                  dc_chroma
                  -
                  freq_luma
                  -
                  freq_chroma
                  -
                  amp_luma
                  -
                  amp_chroma
                  -
                  cbp
                  -
                  mv
                  -
                  ring1
                  -
                  ring2
                  -
                  all
                  -
                  - -

                  Default value is "all", which will cycle through the list of all tests. -

                  -
                  - -

                  For example the following: -

                   
                  testsrc=t=dc_luma
                  -
                  - -

                  will generate a "dc_luma" test pattern. -

                  - -

                  18.6 frei0r_src

                  - -

                  Provide a frei0r source. -

                  -

                  To enable compilation of this filter you need to install the frei0r -header and configure FFmpeg with --enable-frei0r. -

                  -

                  The source supports the syntax: -

                   
                  size:rate:src_name[{=|:}param1:param2:...:paramN]
                  -
                  - -

                  size is the size of the video to generate, may be a string of the -form widthxheight or a frame size abbreviation. -rate is the rate of the video to generate, may be a string of -the form num/den or a frame rate abbreviation. -src_name is the name to the frei0r source to load. For more -information regarding frei0r and how to set the parameters read the -section frei0r in the description of the video filters. -

                  -

                  Some examples follow: -

                   
                  # generate a frei0r partik0l source with size 200x200 and frame rate 10
                  -# which is overlayed on the overlay filter main input
                  -frei0r_src=200x200:10:partik0l=1234 [overlay]; [in][overlay] overlay
                  -
                  - - -

                  18.7 life

                  - -

                  Generate a life pattern. -

                  -

                  This source is based on a generalization of John Conway’s life game. -

                  -

                  The sourced input represents a life grid, each pixel represents a cell -which can be in one of two possible states, alive or dead. Every cell -interacts with its eight neighbours, which are the cells that are -horizontally, vertically, or diagonally adjacent. -

                  -

                  At each interaction the grid evolves according to the adopted rule, -which specifies the number of neighbor alive cells which will make a -cell stay alive or born. The ‘rule’ option allows to specify -the rule to adopt. -

                  -

                  This source accepts a list of options in the form of -key=value pairs separated by ":". A description of the -accepted options follows. -

                  -
                  -
                  filename, f
                  -

                  Set the file from which to read the initial grid state. In the file, -each non-whitespace character is considered an alive cell, and newline -is used to delimit the end of each row. -

                  -

                  If this option is not specified, the initial grid is generated -randomly. -

                  -
                  -
                  rate, r
                  -

                  Set the video rate, that is the number of frames generated per second. -Default is 25. -

                  -
                  -
                  random_fill_ratio, ratio
                  -

                  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. -

                  -
                  -
                  random_seed, seed
                  -

                  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. -

                  -
                  -
                  rule
                  -

                  Set the life rule. -

                  -

                  A rule can be specified with a code of the kind "SNS/BNB", -where NS and NB are sequences of numbers in the range 0-8, -NS specifies the number of alive neighbor cells which make a -live cell stay alive, and NB the number of alive neighbor cells -which make a dead cell to become alive (i.e. to "born"). -"s" and "b" can be used in place of "S" and "B", respectively. -

                  -

                  Alternatively a rule can be specified by an 18-bits integer. The 9 -high order bits are used to encode the next cell state if it is alive -for each number of neighbor alive cells, the low order bits specify -the rule for "borning" new cells. Higher order bits encode for an -higher number of neighbor cells. -For example the number 6153 = (12<<9)+9 specifies a stay alive -rule of 12 and a born rule of 9, which corresponds to "S23/B03". -

                  -

                  Default value is "S23/B3", which is the original Conway’s game of life -rule, and will keep a cell alive if it has 2 or 3 neighbor alive -cells, and will born a new cell if there are three alive cells around -a dead cell. -

                  -
                  -
                  size, s
                  -

                  Set the size of the output video. -

                  -

                  If ‘filename’ is specified, the size is set by default to the -same size of the input file. If ‘size’ is set, it must contain -the size specified in the input file, and the initial grid defined in -that file is centered in the larger resulting area. -

                  -

                  If a filename is not specified, the size value defaults to "320x240" -(used for a randomly generated initial grid). -

                  -
                  -
                  stitch
                  -

                  If set to 1, stitch the left and right grid edges together, and the -top and bottom edges also. Defaults to 1. -

                  -
                  -
                  mold
                  -

                  Set cell mold speed. If set, a dead cell will go from ‘death_color’ to -‘mold_color’ with a step of ‘mold’. ‘mold’ can have a -value from 0 to 255. -

                  -
                  -
                  life_color
                  -

                  Set the color of living (or new born) cells. -

                  -
                  -
                  death_color
                  -

                  Set the color of dead cells. If ‘mold’ is set, this is the first color -used to represent a dead cell. -

                  -
                  -
                  mold_color
                  -

                  Set mold color, for definitely dead and moldy cells. -

                  -
                  - - -

                  18.7.1 Examples

                  - -
                    -
                  • -Read a grid from ‘pattern’, and center it on a grid of size -300x300 pixels: -
                     
                    life=f=pattern:s=300x300
                    -
                    - -
                  • -Generate a random grid of size 200x200, with a fill ratio of 2/3: -
                     
                    life=ratio=2/3:s=200x200
                    -
                    - -
                  • -Specify a custom rule for evolving a randomly generated grid: -
                     
                    life=rule=S14/B34
                    -
                    - -
                  • -Full example with slow death effect (mold) using ffplay: -
                     
                    ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
                    -
                    -
                  - - -

                  18.8 nullsrc, rgbtestsrc, testsrc

                  - -

                  The nullsrc source returns unprocessed video frames. It is -mainly useful to be employed in analysis / debugging tools, or as the -source for filters which ignore the input data. -

                  -

                  The rgbtestsrc source generates an RGB test pattern useful for -detecting RGB vs BGR issues. You should see a red, green and blue -stripe from top to bottom. -

                  -

                  The testsrc source generates a test video pattern, showing a -color pattern, a scrolling gradient and a timestamp. This is mainly -intended for testing purposes. -

                  -

                  These sources accept an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                  -
                  -
                  size, s
                  -

                  Specify the size of the sourced video, it may be a string of the form -widthxheight, or the name of a size abbreviation. The -default value is "320x240". -

                  -
                  -
                  rate, r
                  -

                  Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                  -
                  -
                  sar
                  -

                  Set the sample aspect ratio of the sourced video. -

                  -
                  -
                  duration, d
                  -

                  Set the video duration of the sourced video. The accepted syntax is: -

                   
                  [-]HH[:MM[:SS[.m...]]]
                  -[-]S+[.m...]
                  -
                  -

                  See also the function av_parse_time(). -

                  -

                  If not specified, or the expressed duration is negative, the video is -supposed to be generated forever. -

                  -
                  -
                  decimals, n
                  -

                  Set the number of decimals to show in the timestamp, only used in the -testsrc source. -

                  -

                  The displayed timestamp value will correspond to the original -timestamp value multiplied by the power of 10 of the specified -value. Default value is 0. -

                  -
                  - -

                  For example the following: -

                   
                  testsrc=duration=5.3:size=qcif:rate=10
                  -
                  - -

                  will generate a video with a duration of 5.3 seconds, with size -176x144 and a frame rate of 10 frames per second. -

                  -

                  If the input content is to be ignored, nullsrc can be used. The -following command generates noise in the luminance plane by employing -the mp=geq filter: -

                   
                  nullsrc=s=256x256, mp=geq=random(1)*255:128:128
                  -
                  + +

                  5. Authors

                  - -

                  19. Video Sinks

                  - -

                  Below is a description of the currently available video sinks. -

                  - -

                  19.1 buffersink

                  - -

                  Buffer video frames, and make them available to the end of the filter -graph. -

                  -

                  This sink is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/buffersink.h’. +

                  The FFmpeg developers.

                  -

                  It does not require a string parameter in input, but you need to -specify a pointer to a list of supported pixel formats terminated by --1 in the opaque parameter provided to avfilter_init_filter -when initializing this sink. +

                  For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org.

                  - -

                  19.2 nullsink

                  - -

                  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. +

                  Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree.

                  - - -
                  -

                  - - - +
                  +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                  diff --git a/extern/ffmpeg/doc/ffprobe-all.html b/extern/ffmpeg/doc/ffprobe-all.html new file mode 100644 index 0000000000..80a9e15c72 --- /dev/null +++ b/extern/ffmpeg/doc/ffprobe-all.html @@ -0,0 +1,21984 @@ + + + + + +FFmpeg documentation : ffprobe + + + + + + + + + + +
                  +
                  + + +

                  ffprobe Documentation

                  + + +

                  Table of Contents

                  +
                  + + +
                  + + +

                  1. Synopsis

                  + +

                  ffprobe [options] [‘input_file’] +

                  + +

                  2. Description

                  + +

                  ffprobe gathers information from multimedia streams and prints it in +human- and machine-readable fashion. +

                  +

                  For example it can be used to check the format of the container used +by a multimedia stream and the format and type of each media stream +contained in it. +

                  +

                  If a filename is specified in input, ffprobe will try to open and +probe the file content. If the file cannot be opened or recognized as +a multimedia file, a positive exit code is returned. +

                  +

                  ffprobe may be employed both as a standalone application or in +combination with a textual filter, which may perform more +sophisticated processing, e.g. statistical processing or plotting. +

                  +

                  Options are used to list some of the formats supported by ffprobe or +for specifying which information to display, and for setting how +ffprobe will show it. +

                  +

                  ffprobe output is designed to be easily parsable by a textual filter, +and consists of one or more sections of a form defined by the selected +writer, which is specified by the ‘print_format’ option. +

                  +

                  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 ‘sections’. +

                  +

                  Metadata tags stored in the container or in the streams are recognized +and printed in the corresponding "FORMAT", "STREAM" or "PROGRAM_STREAM" +section. +

                  + + +

                  3. Options

                  + +

                  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’. +

                  +

                  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. +

                  +

                  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. +

                  +

                  +

                  +

                  3.1 Stream specifiers

                  +

                  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. +

                  +

                  A stream specifier is a string generally appended to the option name and +separated from it by a colon. E.g. -codec:a:1 ac3 contains the +a:1 stream specifier, which matches the second audio stream. Therefore, it +would select the ac3 codec for the second audio stream. +

                  +

                  A stream specifier can match several streams, so that the option is applied to all +of them. E.g. the stream specifier in -b:a 128k matches all audio +streams. +

                  +

                  An empty stream specifier matches all streams. For example, -codec copy +or -codec: copy would copy all the streams without reencoding. +

                  +

                  Possible forms of stream specifiers are: +

                  +
                  stream_index
                  +

                  Matches the stream with this index. E.g. -threads:1 4 would set the +thread count for the second stream to 4. +

                  +
                  stream_type[:stream_index]
                  +

                  stream_type is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle, +’d’ for data, and ’t’ for attachments. If stream_index is given, then it matches +stream number stream_index of this type. Otherwise, it matches all +streams of this type. +

                  +
                  p:program_id[:stream_index]
                  +

                  If stream_index is given, then it matches the stream with number stream_index +in the program with the id program_id. Otherwise, it matches all streams in the +program. +

                  +
                  #stream_id
                  +

                  Matches the stream by a format-specific ID. +

                  +
                  + + +

                  3.2 Generic options

                  + +

                  These options are shared amongst the ff* tools. +

                  +
                  +
                  -L
                  +

                  Show license. +

                  +
                  +
                  -h, -?, -help, --help [arg]
                  +

                  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. +

                  +

                  Possible values of arg are: +

                  +
                  long
                  +

                  Print advanced tool options in addition to the basic tool options. +

                  +
                  +
                  full
                  +

                  Print complete list of options, including shared and private options +for encoders, decoders, demuxers, muxers, filters, etc. +

                  +
                  +
                  decoder=decoder_name
                  +

                  Print detailed information about the decoder named decoder_name. Use the +‘-decoders’ option to get a list of all decoders. +

                  +
                  +
                  encoder=encoder_name
                  +

                  Print detailed information about the encoder named encoder_name. Use the +‘-encoders’ option to get a list of all encoders. +

                  +
                  +
                  demuxer=demuxer_name
                  +

                  Print detailed information about the demuxer named demuxer_name. Use the +‘-formats’ option to get a list of all demuxers and muxers. +

                  +
                  +
                  muxer=muxer_name
                  +

                  Print detailed information about the muxer named muxer_name. Use the +‘-formats’ option to get a list of all muxers and demuxers. +

                  +
                  +
                  filter=filter_name
                  +

                  Print detailed information about the filter name filter_name. Use the +‘-filters’ option to get a list of all filters. +

                  +
                  + +
                  +
                  -version
                  +

                  Show version. +

                  +
                  +
                  -formats
                  +

                  Show available formats. +

                  +
                  +
                  -codecs
                  +

                  Show all codecs known to libavcodec. +

                  +

                  Note that the term ’codec’ is used throughout this documentation as a shortcut +for what is more correctly called a media bitstream format. +

                  +
                  +
                  -decoders
                  +

                  Show available decoders. +

                  +
                  +
                  -encoders
                  +

                  Show all available encoders. +

                  +
                  +
                  -bsfs
                  +

                  Show available bitstream filters. +

                  +
                  +
                  -protocols
                  +

                  Show available protocols. +

                  +
                  +
                  -filters
                  +

                  Show available libavfilter filters. +

                  +
                  +
                  -pix_fmts
                  +

                  Show available pixel formats. +

                  +
                  +
                  -sample_fmts
                  +

                  Show available sample formats. +

                  +
                  +
                  -layouts
                  +

                  Show channel names and standard channel layouts. +

                  +
                  +
                  -colors
                  +

                  Show recognized color names. +

                  +
                  +
                  -loglevel [repeat+]loglevel | -v [repeat+]loglevel
                  +

                  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. +loglevel is a number or a string containing one of the following values: +

                  +
                  quiet
                  +

                  Show nothing at all; be silent. +

                  +
                  panic
                  +

                  Only show fatal errors which could lead the process to crash, such as +and assert failure. This is not currently used for anything. +

                  +
                  fatal
                  +

                  Only show fatal errors. These are errors after which the process absolutely +cannot continue after. +

                  +
                  error
                  +

                  Show all errors, including ones which can be recovered from. +

                  +
                  warning
                  +

                  Show all warnings and errors. Any message related to possibly +incorrect or unexpected events will be shown. +

                  +
                  info
                  +

                  Show informative messages during processing. This is in addition to +warnings and errors. This is the default value. +

                  +
                  verbose
                  +

                  Same as info, except more verbose. +

                  +
                  debug
                  +

                  Show everything, including debugging information. +

                  +
                  + +

                  By default the program logs to stderr, if coloring is supported by the +terminal, colors are used to mark errors and warnings. Log coloring +can be disabled setting the environment variable +AV_LOG_FORCE_NOCOLOR or NO_COLOR, or can be forced setting +the environment variable AV_LOG_FORCE_COLOR. +The use of the environment variable NO_COLOR is deprecated and +will be dropped in a following FFmpeg version. +

                  +
                  +
                  -report
                  +

                  Dump full command line and console output to a file named +program-YYYYMMDD-HHMMSS.log in the current +directory. +This file can be useful for bug reports. +It also implies -loglevel verbose. +

                  +

                  Setting the environment variable FFREPORT 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: +

                  +
                  file
                  +

                  set the file name to use for the report; %p is expanded to the name +of the program, %t is expanded to a timestamp, %% is expanded +to a plain % +

                  +
                  + +

                  Errors in parsing the environment variable are not fatal, and will not +appear in the report. +

                  +
                  +
                  -cpuflags flags (global)
                  +

                  Allows setting and clearing cpu flags. This option is intended +for testing. Do not use it unless you know what you’re doing. +

                   
                  ffmpeg -cpuflags -sse+mmx ...
                  +ffmpeg -cpuflags mmx ...
                  +ffmpeg -cpuflags 0 ...
                  +
                  +

                  Possible flags for this option are: +

                  +
                  x86
                  +
                  +
                  mmx
                  +
                  mmxext
                  +
                  sse
                  +
                  sse2
                  +
                  sse2slow
                  +
                  sse3
                  +
                  sse3slow
                  +
                  ssse3
                  +
                  atom
                  +
                  sse4.1
                  +
                  sse4.2
                  +
                  avx
                  +
                  xop
                  +
                  fma4
                  +
                  3dnow
                  +
                  3dnowext
                  +
                  cmov
                  +
                  +
                  +
                  ARM
                  +
                  +
                  armv5te
                  +
                  armv6
                  +
                  armv6t2
                  +
                  vfp
                  +
                  vfpv3
                  +
                  neon
                  +
                  +
                  +
                  PowerPC
                  +
                  +
                  altivec
                  +
                  +
                  +
                  Specific Processors
                  +
                  +
                  pentium2
                  +
                  pentium3
                  +
                  pentium4
                  +
                  k6
                  +
                  k62
                  +
                  athlon
                  +
                  athlonxp
                  +
                  k8
                  +
                  +
                  +
                  + +
                  +
                  -opencl_options options (global)
                  +

                  Set OpenCL environment options. This option is only available when +FFmpeg has been compiled with --enable-opencl. +

                  +

                  options must be a list of key=value option pairs +separated by ’:’. See the “OpenCL Options” section in the +ffmpeg-utils manual for the list of supported options. +

                  +
                  + + +

                  3.3 AVOptions

                  + +

                  These options are provided directly by the libavformat, libavdevice and +libavcodec libraries. To see the list of available AVOptions, use the +‘-help’ option. They are separated into two categories: +

                  +
                  generic
                  +

                  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. +

                  +
                  private
                  +

                  These options are specific to the given container, device or codec. Private +options are listed under their corresponding containers/devices/codecs. +

                  +
                  + +

                  For example to write an ID3v2.3 header instead of a default ID3v2.4 to +an MP3 file, use the ‘id3v2_version’ private option of the MP3 +muxer: +

                   
                  ffmpeg -i input.flac -id3v2_version 3 out.mp3
                  +
                  + +

                  All codec AVOptions are per-stream, and thus a stream specifier +should be attached to them. +

                  +

                  Note: the ‘-nooption’ syntax cannot be used for boolean +AVOptions, use ‘-option 0’/‘-option 1’. +

                  +

                  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. +

                  + +

                  3.4 Main options

                  + +
                  +
                  -f format
                  +

                  Force format to use. +

                  +
                  +
                  -unit
                  +

                  Show the unit of the displayed values. +

                  +
                  +
                  -prefix
                  +

                  Use SI prefixes for the displayed values. +Unless the "-byte_binary_prefix" option is used all the prefixes +are decimal. +

                  +
                  +
                  -byte_binary_prefix
                  +

                  Force the use of binary prefixes for byte values. +

                  +
                  +
                  -sexagesimal
                  +

                  Use sexagesimal format HH:MM:SS.MICROSECONDS for time values. +

                  +
                  +
                  -pretty
                  +

                  Prettify the format of the displayed values, it corresponds to the +options "-unit -prefix -byte_binary_prefix -sexagesimal". +

                  +
                  +
                  -of, -print_format writer_name[=writer_options]
                  +

                  Set the output printing format. +

                  +

                  writer_name specifies the name of the writer, and +writer_options specifies the options to be passed to the writer. +

                  +

                  For example for printing the output in JSON format, specify: +

                   
                  -print_format json
                  +
                  + +

                  For more details on the available output printing formats, see the +Writers section below. +

                  +
                  +
                  -sections
                  +

                  Print sections structure and section information, and exit. The output +is not meant to be parsed by a machine. +

                  +
                  +
                  -select_streams stream_specifier
                  +

                  Select only the streams specified by stream_specifier. This +option affects only the options related to streams +(e.g. show_streams, show_packets, etc.). +

                  +

                  For example to show only audio streams, you can use the command: +

                   
                  ffprobe -show_streams -select_streams a INPUT
                  +
                  + +

                  To show only video packets belonging to the video stream with index 1: +

                   
                  ffprobe -show_packets -select_streams v:1 INPUT
                  +
                  + +
                  +
                  -show_data
                  +

                  Show payload data, as a hexadecimal and ASCII dump. Coupled with +‘-show_packets’, it will dump the packets’ data. Coupled with +‘-show_streams’, it will dump the codec extradata. +

                  +

                  The dump is printed as the "data" field. It may contain newlines. +

                  +
                  +
                  -show_error
                  +

                  Show information about the error found when trying to probe the input. +

                  +

                  The error information is printed within a section with name "ERROR". +

                  +
                  +
                  -show_format
                  +

                  Show information about the container format of the input multimedia +stream. +

                  +

                  All the container format information is printed within a section with +name "FORMAT". +

                  +
                  +
                  -show_format_entry name
                  +

                  Like ‘-show_format’, 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. +

                  +

                  This option is deprecated, use show_entries instead. +

                  +
                  +
                  -show_entries section_entries
                  +

                  Set list of entries to show. +

                  +

                  Entries are specified according to the following +syntax. section_entries contains a list of section entries +separated by :. 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 ,. +

                  +

                  If section name is specified but is followed by no =, 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 = is specified but +the list of local entries is empty, then no entries will be shown for +that section. +

                  +

                  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. +

                  +

                  The formal syntax is given by: +

                   
                  LOCAL_SECTION_ENTRIES ::= SECTION_ENTRY_NAME[,LOCAL_SECTION_ENTRIES]
                  +SECTION_ENTRY         ::= SECTION_NAME[=[LOCAL_SECTION_ENTRIES]]
                  +SECTION_ENTRIES       ::= SECTION_ENTRY[:SECTION_ENTRIES]
                  +
                  + +

                  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: +

                   
                  packet=pts_time,duration_time,stream_index : stream=index,codec_type
                  +
                  + +

                  To show all the entries in the section "format", but only the codec +type in the section "stream", specify the argument: +

                   
                  format : stream=codec_type
                  +
                  + +

                  To show all the tags in the stream and format sections: +

                   
                  format_tags : format_tags
                  +
                  + +

                  To show only the title tag (if available) in the stream +sections: +

                   
                  stream_tags=title
                  +
                  + +
                  +
                  -show_packets
                  +

                  Show information about each packet contained in the input multimedia +stream. +

                  +

                  The information for each single packet is printed within a dedicated +section with name "PACKET". +

                  +
                  +
                  -show_frames
                  +

                  Show information about each frame contained in the input multimedia +stream. +

                  +

                  The information for each single frame is printed within a dedicated +section with name "FRAME". +

                  +
                  +
                  -show_streams
                  +

                  Show information about each media stream contained in the input +multimedia stream. +

                  +

                  Each media stream information is printed within a dedicated section +with name "STREAM". +

                  +
                  +
                  -show_programs
                  +

                  Show information about programs and their streams contained in the input +multimedia stream. +

                  +

                  Each media stream information is printed within a dedicated section +with name "PROGRAM_STREAM". +

                  +
                  +
                  -show_chapters
                  +

                  Show information about chapters stored in the format. +

                  +

                  Each chapter is printed within a dedicated section with name "CHAPTER". +

                  +
                  +
                  -count_frames
                  +

                  Count the number of frames per stream and report it in the +corresponding stream section. +

                  +
                  +
                  -count_packets
                  +

                  Count the number of packets per stream and report it in the +corresponding stream section. +

                  +
                  +
                  -read_intervals read_intervals
                  +
                  +

                  Read only the specified intervals. read_intervals must be a +sequence of interval specifications separated by ",". +ffprobe will seek to the interval starting point, and will +continue reading from that. +

                  +

                  Each interval is specified by two optional parts, separated by "%". +

                  +

                  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. +

                  +

                  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. +

                  +

                  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. +

                  +

                  The formal syntax is given by: +

                   
                  INTERVAL  ::= [START|+START_OFFSET][%[END|+END_OFFSET]]
                  +INTERVALS ::= INTERVAL[,INTERVALS]
                  +
                  + +

                  A few examples follow. +

                    +
                  • +Seek to time 10, read packets until 20 seconds after the found seek +point, then seek to position 01:30 (1 minute and thirty +seconds) and read packets until position 01:45. +
                     
                    10%+20,01:30%01:45
                    +
                    + +
                  • +Read only 42 packets after seeking to position 01:23: +
                     
                    01:23%+#42
                    +
                    + +
                  • +Read only the first 20 seconds from the start: +
                     
                    %+20
                    +
                    + +
                  • +Read from the start until position 02:30: +
                     
                    %02:30
                    +
                    +
                  + +
                  +
                  -show_private_data, -private
                  +

                  Show private data, that is data depending on the format of the +particular shown element. +This option is enabled by default, but you may need to disable it +for specific uses, for example when creating XSD-compliant XML output. +

                  +
                  +
                  -show_program_version
                  +

                  Show information related to program version. +

                  +

                  Version information is printed within a section with name +"PROGRAM_VERSION". +

                  +
                  +
                  -show_library_versions
                  +

                  Show information related to library versions. +

                  +

                  Version information for each library is printed within a section with +name "LIBRARY_VERSION". +

                  +
                  +
                  -show_versions
                  +

                  Show information related to program and library versions. This is the +equivalent of setting both ‘-show_program_version’ and +‘-show_library_versions’ options. +

                  +
                  +
                  -bitexact
                  +

                  Force bitexact output, useful to produce output which is not dependent +on the specific build. +

                  +
                  +
                  -i input_file
                  +

                  Read input_file. +

                  +
                  +
                  + + +

                  4. Writers

                  + +

                  A writer defines the output format adopted by ffprobe, and will be +used for printing all the parts of the output. +

                  +

                  A writer may accept one or more arguments, which specify the options +to adopt. The options are specified as a list of key=value +pairs, separated by ":". +

                  +

                  A description of the currently available writers follows. +

                  + +

                  4.1 default

                  +

                  Default format. +

                  +

                  Print each section in the form: +

                   
                  [SECTION]
                  +key1=val1
                  +...
                  +keyN=valN
                  +[/SECTION]
                  +
                  + +

                  Metadata tags are printed as a line in the corresponding FORMAT, STREAM or +PROGRAM_STREAM section, and are prefixed by the string "TAG:". +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  nokey, nk
                  +

                  If set to 1 specify not to print the key of each field. Default value +is 0. +

                  +
                  +
                  noprint_wrappers, nw
                  +

                  If set to 1 specify not to print the section header and footer. +Default value is 0. +

                  +
                  + + +

                  4.2 compact, csv

                  +

                  Compact and CSV format. +

                  +

                  The csv writer is equivalent to compact, but supports +different defaults. +

                  +

                  Each section is printed on a single line. +If no option is specifid, the output has the form: +

                   
                  section|key1=val1| ... |keyN=valN
                  +
                  + +

                  Metadata tags are printed in the corresponding "format" or "stream" +section. A metadata tag key, if printed, is prefixed by the string +"tag:". +

                  +

                  The description of the accepted options follows. +

                  +
                  +
                  item_sep, s
                  +

                  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 csv writer). +

                  +
                  +
                  nokey, nk
                  +

                  If set to 1 specify not to print the key of each field. Its default +value is 0 (1 for the csv writer). +

                  +
                  +
                  escape, e
                  +

                  Set the escape mode to use, default to "c" ("csv" for the csv +writer). +

                  +

                  It can assume one of the following values: +

                  +
                  c
                  +

                  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 SEP are escaped using C-like fashioned +escaping, so that a newline is converted to the sequence "\n", a +carriage return to "\r", ’\’ to "\\" and the separator SEP is +converted to "\SEP". +

                  +
                  +
                  csv
                  +

                  Perform CSV-like escaping, as described in RFC4180. Strings +containing a newline (’\n’), a carriage return (’\r’), a double quote +(’"’), or SEP are enclosed in double-quotes. +

                  +
                  +
                  none
                  +

                  Perform no escaping. +

                  +
                  + +
                  +
                  print_section, p
                  +

                  Print the section name at the begin of each line if the value is +1, disable it with value set to 0. Default value is +1. +

                  +
                  +
                  + + +

                  4.3 flat

                  +

                  Flat format. +

                  +

                  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 sep_char option). +

                  +

                  The description of the accepted options follows. +

                  +
                  +
                  sep_char, s
                  +

                  Separator character used to separate the chapter, the section name, IDs and +potential tags in the printed field key. +

                  +

                  Default value is ’.’. +

                  +
                  +
                  hierarchical, h
                  +

                  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. +

                  +

                  Default value is 1. +

                  +
                  + + +

                  4.4 ini

                  +

                  INI format output. +

                  +

                  Print output in an INI based format. +

                  +

                  The following conventions are adopted: +

                  +
                    +
                  • +all key and values are UTF-8 +
                  • +’.’ is the subgroup separator +
                  • +newline, ’\t’, ’\f’, ’\b’ and the following characters are escaped +
                  • +’\’ is the escape character +
                  • +’#’ is the comment indicator +
                  • +’=’ is the key/value separator +
                  • +’:’ is not used but usually parsed as key/value separator +
                  + +

                  This writer accepts options as a list of key=value pairs, +separated by ":". +

                  +

                  The description of the accepted options follows. +

                  +
                  +
                  hierarchical, h
                  +

                  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. +

                  +

                  Default value is 1. +

                  +
                  + + +

                  4.5 json

                  +

                  JSON based format. +

                  +

                  Each section is printed using JSON notation. +

                  +

                  The description of the accepted options follows. +

                  +
                  +
                  compact, c
                  +

                  If set to 1 enable compact output, that is each section will be +printed on a single line. Default value is 0. +

                  +
                  + +

                  For more information about JSON, see http://www.json.org/. +

                  + +

                  4.6 xml

                  +

                  XML based format. +

                  +

                  The XML output is described in the XML schema description file +‘ffprobe.xsd’ installed in the FFmpeg datadir. +

                  +

                  An updated version of the schema can be retrieved at the url +http://www.ffmpeg.org/schema/ffprobe.xsd, which redirects to the +latest schema committed into the FFmpeg development source code tree. +

                  +

                  Note that the output issued will be compliant to the +‘ffprobe.xsd’ schema only when no special global output options +(‘unit’, ‘prefix’, ‘byte_binary_prefix’, +‘sexagesimal’ etc.) are specified. +

                  +

                  The description of the accepted options follows. +

                  +
                  +
                  fully_qualified, q
                  +

                  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. +

                  +
                  +
                  xsd_compliant, x
                  +

                  If set to 1 perform more checks for ensuring that the output is XSD +compliant. Default value is 0. +This option automatically sets ‘fully_qualified’ to 1. +

                  +
                  + +

                  For more information about the XML format, see +http://www.w3.org/XML/. +

                  + +

                  5. Timecode

                  + +

                  ffprobe supports Timecode extraction: +

                  +
                    +
                  • +MPEG1/2 timecode is extracted from the GOP, and is available in the video +stream details (‘-show_streams’, see timecode). + +
                  • +MOV timecode is extracted from tmcd track, so is available in the tmcd +stream metadata (‘-show_streams’, see TAG:timecode). + +
                  • +DV, GXF and AVI timecodes are available in format metadata +(‘-show_format’, see TAG:timecode). + +
                  + + +

                  6. Syntax

                  + +

                  This section documents the syntax and formats employed by the FFmpeg +libraries and tools. +

                  +

                  +

                  +

                  6.1 Quoting and escaping

                  + +

                  FFmpeg adopts the following quoting and escaping mechanism, unless +explicitly specified. The following rules are applied: +

                  +
                    +
                  • +' and \ 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. + +
                  • +A special character is escaped by prefixing it with a ’\’. + +
                  • +All characters enclosed between ” are included literally in the +parsed string. The quote character ' itself cannot be quoted, +so you may need to close the quote and escape it. + +
                  • +Leading and trailing whitespaces, unless escaped or quoted, are +removed from the parsed string. +
                  + +

                  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. +

                  +

                  The function av_get_token defined in +‘libavutil/avstring.h’ can be used to parse a token quoted or +escaped according to the rules defined above. +

                  +

                  The tool ‘tools/ffescape’ in the FFmpeg source tree can be used +to automatically quote or escape a string in a script. +

                  + +

                  6.1.1 Examples

                  + +
                    +
                  • +Escape the string Crime d'Amour containing the ' special +character: +
                     
                    Crime d\'Amour
                    +
                    + +
                  • +The string above contains a quote, so the ' needs to be escaped +when quoting it: +
                     
                    'Crime d'\''Amour'
                    +
                    + +
                  • +Include leading or trailing whitespaces using quoting: +
                     
                    '  this string starts and ends with whitespaces  '
                    +
                    + +
                  • +Escaping and quoting can be mixed together: +
                     
                    ' The string '\'string\'' is a string '
                    +
                    + +
                  • +To include a literal \ you can use either escaping or quoting: +
                     
                    'c:\foo' can be written as c:\\foo
                    +
                    +
                  + +

                  +

                  +

                  6.2 Date

                  + +

                  The accepted syntax is: +

                   
                  [(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
                  +now
                  +
                  + +

                  If the value is "now" it takes the current time. +

                  +

                  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. +

                  +

                  +

                  +

                  6.3 Time duration

                  + +

                  There are two accepted syntaxes for expressing time duration. +

                  +
                   
                  [-][HH:]MM:SS[.m...]
                  +
                  + +

                  HH expresses the number of hours, MM the number of minutes +for a maximum of 2 digits, and SS the number of seconds for a +maximum of 2 digits. The m at the end expresses decimal value for +SS. +

                  +

                  or +

                  +
                   
                  [-]S+[.m...]
                  +
                  + +

                  S expresses the number of seconds, with the optional decimal part +m. +

                  +

                  In both expressions, the optional ‘-’ indicates negative duration. +

                  + +

                  6.3.1 Examples

                  + +

                  The following examples are all valid time duration: +

                  +
                  +
                  55
                  +

                  55 seconds +

                  +
                  +
                  12:03:45
                  +

                  12 hours, 03 minutes and 45 seconds +

                  +
                  +
                  23.189
                  +

                  23.189 seconds +

                  +
                  + +

                  +

                  +

                  6.4 Video size

                  +

                  Specify the size of the sourced video, it may be a string of the form +widthxheight, or the name of a size abbreviation. +

                  +

                  The following abbreviations are recognized: +

                  +
                  ntsc
                  +

                  720x480 +

                  +
                  pal
                  +

                  720x576 +

                  +
                  qntsc
                  +

                  352x240 +

                  +
                  qpal
                  +

                  352x288 +

                  +
                  sntsc
                  +

                  640x480 +

                  +
                  spal
                  +

                  768x576 +

                  +
                  film
                  +

                  352x240 +

                  +
                  ntsc-film
                  +

                  352x240 +

                  +
                  sqcif
                  +

                  128x96 +

                  +
                  qcif
                  +

                  176x144 +

                  +
                  cif
                  +

                  352x288 +

                  +
                  4cif
                  +

                  704x576 +

                  +
                  16cif
                  +

                  1408x1152 +

                  +
                  qqvga
                  +

                  160x120 +

                  +
                  qvga
                  +

                  320x240 +

                  +
                  vga
                  +

                  640x480 +

                  +
                  svga
                  +

                  800x600 +

                  +
                  xga
                  +

                  1024x768 +

                  +
                  uxga
                  +

                  1600x1200 +

                  +
                  qxga
                  +

                  2048x1536 +

                  +
                  sxga
                  +

                  1280x1024 +

                  +
                  qsxga
                  +

                  2560x2048 +

                  +
                  hsxga
                  +

                  5120x4096 +

                  +
                  wvga
                  +

                  852x480 +

                  +
                  wxga
                  +

                  1366x768 +

                  +
                  wsxga
                  +

                  1600x1024 +

                  +
                  wuxga
                  +

                  1920x1200 +

                  +
                  woxga
                  +

                  2560x1600 +

                  +
                  wqsxga
                  +

                  3200x2048 +

                  +
                  wquxga
                  +

                  3840x2400 +

                  +
                  whsxga
                  +

                  6400x4096 +

                  +
                  whuxga
                  +

                  7680x4800 +

                  +
                  cga
                  +

                  320x200 +

                  +
                  ega
                  +

                  640x350 +

                  +
                  hd480
                  +

                  852x480 +

                  +
                  hd720
                  +

                  1280x720 +

                  +
                  hd1080
                  +

                  1920x1080 +

                  +
                  2k
                  +

                  2048x1080 +

                  +
                  2kflat
                  +

                  1998x1080 +

                  +
                  2kscope
                  +

                  2048x858 +

                  +
                  4k
                  +

                  4096x2160 +

                  +
                  4kflat
                  +

                  3996x2160 +

                  +
                  4kscope
                  +

                  4096x1716 +

                  +
                  nhd
                  +

                  640x360 +

                  +
                  hqvga
                  +

                  240x160 +

                  +
                  wqvga
                  +

                  400x240 +

                  +
                  fwqvga
                  +

                  432x240 +

                  +
                  hvga
                  +

                  480x320 +

                  +
                  qhd
                  +

                  960x540 +

                  +
                  + +

                  +

                  +

                  6.5 Video rate

                  + +

                  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 +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. +

                  +

                  The following abbreviations are recognized: +

                  +
                  ntsc
                  +

                  30000/1001 +

                  +
                  pal
                  +

                  25/1 +

                  +
                  qntsc
                  +

                  30000/1001 +

                  +
                  qpal
                  +

                  25/1 +

                  +
                  sntsc
                  +

                  30000/1001 +

                  +
                  spal
                  +

                  25/1 +

                  +
                  film
                  +

                  24/1 +

                  +
                  ntsc-film
                  +

                  24000/1001 +

                  +
                  + +

                  +

                  +

                  6.6 Ratio

                  + +

                  A ratio can be expressed as an expression, or in the form +numerator:denominator. +

                  +

                  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. +

                  +

                  The undefined value can be expressed using the "0:0" string. +

                  +

                  +

                  +

                  6.7 Color

                  + +

                  It can be the name of a color as defined below (case insensitive match) or a +[0x|#]RRGGBB[AA] sequence, possibly followed by @ and a string +representing the alpha component. +

                  +

                  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 (‘0x00’ or ‘0.0’ means completely +transparent, ‘0xff’ or ‘1.0’ completely opaque). If the alpha +component is not specified then ‘0xff’ is assumed. +

                  +

                  The string ‘random’ will result in a random color. +

                  +

                  The following names of colors are recognized: +

                  +
                  AliceBlue
                  +

                  0xF0F8FF +

                  +
                  AntiqueWhite
                  +

                  0xFAEBD7 +

                  +
                  Aqua
                  +

                  0x00FFFF +

                  +
                  Aquamarine
                  +

                  0x7FFFD4 +

                  +
                  Azure
                  +

                  0xF0FFFF +

                  +
                  Beige
                  +

                  0xF5F5DC +

                  +
                  Bisque
                  +

                  0xFFE4C4 +

                  +
                  Black
                  +

                  0x000000 +

                  +
                  BlanchedAlmond
                  +

                  0xFFEBCD +

                  +
                  Blue
                  +

                  0x0000FF +

                  +
                  BlueViolet
                  +

                  0x8A2BE2 +

                  +
                  Brown
                  +

                  0xA52A2A +

                  +
                  BurlyWood
                  +

                  0xDEB887 +

                  +
                  CadetBlue
                  +

                  0x5F9EA0 +

                  +
                  Chartreuse
                  +

                  0x7FFF00 +

                  +
                  Chocolate
                  +

                  0xD2691E +

                  +
                  Coral
                  +

                  0xFF7F50 +

                  +
                  CornflowerBlue
                  +

                  0x6495ED +

                  +
                  Cornsilk
                  +

                  0xFFF8DC +

                  +
                  Crimson
                  +

                  0xDC143C +

                  +
                  Cyan
                  +

                  0x00FFFF +

                  +
                  DarkBlue
                  +

                  0x00008B +

                  +
                  DarkCyan
                  +

                  0x008B8B +

                  +
                  DarkGoldenRod
                  +

                  0xB8860B +

                  +
                  DarkGray
                  +

                  0xA9A9A9 +

                  +
                  DarkGreen
                  +

                  0x006400 +

                  +
                  DarkKhaki
                  +

                  0xBDB76B +

                  +
                  DarkMagenta
                  +

                  0x8B008B +

                  +
                  DarkOliveGreen
                  +

                  0x556B2F +

                  +
                  Darkorange
                  +

                  0xFF8C00 +

                  +
                  DarkOrchid
                  +

                  0x9932CC +

                  +
                  DarkRed
                  +

                  0x8B0000 +

                  +
                  DarkSalmon
                  +

                  0xE9967A +

                  +
                  DarkSeaGreen
                  +

                  0x8FBC8F +

                  +
                  DarkSlateBlue
                  +

                  0x483D8B +

                  +
                  DarkSlateGray
                  +

                  0x2F4F4F +

                  +
                  DarkTurquoise
                  +

                  0x00CED1 +

                  +
                  DarkViolet
                  +

                  0x9400D3 +

                  +
                  DeepPink
                  +

                  0xFF1493 +

                  +
                  DeepSkyBlue
                  +

                  0x00BFFF +

                  +
                  DimGray
                  +

                  0x696969 +

                  +
                  DodgerBlue
                  +

                  0x1E90FF +

                  +
                  FireBrick
                  +

                  0xB22222 +

                  +
                  FloralWhite
                  +

                  0xFFFAF0 +

                  +
                  ForestGreen
                  +

                  0x228B22 +

                  +
                  Fuchsia
                  +

                  0xFF00FF +

                  +
                  Gainsboro
                  +

                  0xDCDCDC +

                  +
                  GhostWhite
                  +

                  0xF8F8FF +

                  +
                  Gold
                  +

                  0xFFD700 +

                  +
                  GoldenRod
                  +

                  0xDAA520 +

                  +
                  Gray
                  +

                  0x808080 +

                  +
                  Green
                  +

                  0x008000 +

                  +
                  GreenYellow
                  +

                  0xADFF2F +

                  +
                  HoneyDew
                  +

                  0xF0FFF0 +

                  +
                  HotPink
                  +

                  0xFF69B4 +

                  +
                  IndianRed
                  +

                  0xCD5C5C +

                  +
                  Indigo
                  +

                  0x4B0082 +

                  +
                  Ivory
                  +

                  0xFFFFF0 +

                  +
                  Khaki
                  +

                  0xF0E68C +

                  +
                  Lavender
                  +

                  0xE6E6FA +

                  +
                  LavenderBlush
                  +

                  0xFFF0F5 +

                  +
                  LawnGreen
                  +

                  0x7CFC00 +

                  +
                  LemonChiffon
                  +

                  0xFFFACD +

                  +
                  LightBlue
                  +

                  0xADD8E6 +

                  +
                  LightCoral
                  +

                  0xF08080 +

                  +
                  LightCyan
                  +

                  0xE0FFFF +

                  +
                  LightGoldenRodYellow
                  +

                  0xFAFAD2 +

                  +
                  LightGreen
                  +

                  0x90EE90 +

                  +
                  LightGrey
                  +

                  0xD3D3D3 +

                  +
                  LightPink
                  +

                  0xFFB6C1 +

                  +
                  LightSalmon
                  +

                  0xFFA07A +

                  +
                  LightSeaGreen
                  +

                  0x20B2AA +

                  +
                  LightSkyBlue
                  +

                  0x87CEFA +

                  +
                  LightSlateGray
                  +

                  0x778899 +

                  +
                  LightSteelBlue
                  +

                  0xB0C4DE +

                  +
                  LightYellow
                  +

                  0xFFFFE0 +

                  +
                  Lime
                  +

                  0x00FF00 +

                  +
                  LimeGreen
                  +

                  0x32CD32 +

                  +
                  Linen
                  +

                  0xFAF0E6 +

                  +
                  Magenta
                  +

                  0xFF00FF +

                  +
                  Maroon
                  +

                  0x800000 +

                  +
                  MediumAquaMarine
                  +

                  0x66CDAA +

                  +
                  MediumBlue
                  +

                  0x0000CD +

                  +
                  MediumOrchid
                  +

                  0xBA55D3 +

                  +
                  MediumPurple
                  +

                  0x9370D8 +

                  +
                  MediumSeaGreen
                  +

                  0x3CB371 +

                  +
                  MediumSlateBlue
                  +

                  0x7B68EE +

                  +
                  MediumSpringGreen
                  +

                  0x00FA9A +

                  +
                  MediumTurquoise
                  +

                  0x48D1CC +

                  +
                  MediumVioletRed
                  +

                  0xC71585 +

                  +
                  MidnightBlue
                  +

                  0x191970 +

                  +
                  MintCream
                  +

                  0xF5FFFA +

                  +
                  MistyRose
                  +

                  0xFFE4E1 +

                  +
                  Moccasin
                  +

                  0xFFE4B5 +

                  +
                  NavajoWhite
                  +

                  0xFFDEAD +

                  +
                  Navy
                  +

                  0x000080 +

                  +
                  OldLace
                  +

                  0xFDF5E6 +

                  +
                  Olive
                  +

                  0x808000 +

                  +
                  OliveDrab
                  +

                  0x6B8E23 +

                  +
                  Orange
                  +

                  0xFFA500 +

                  +
                  OrangeRed
                  +

                  0xFF4500 +

                  +
                  Orchid
                  +

                  0xDA70D6 +

                  +
                  PaleGoldenRod
                  +

                  0xEEE8AA +

                  +
                  PaleGreen
                  +

                  0x98FB98 +

                  +
                  PaleTurquoise
                  +

                  0xAFEEEE +

                  +
                  PaleVioletRed
                  +

                  0xD87093 +

                  +
                  PapayaWhip
                  +

                  0xFFEFD5 +

                  +
                  PeachPuff
                  +

                  0xFFDAB9 +

                  +
                  Peru
                  +

                  0xCD853F +

                  +
                  Pink
                  +

                  0xFFC0CB +

                  +
                  Plum
                  +

                  0xDDA0DD +

                  +
                  PowderBlue
                  +

                  0xB0E0E6 +

                  +
                  Purple
                  +

                  0x800080 +

                  +
                  Red
                  +

                  0xFF0000 +

                  +
                  RosyBrown
                  +

                  0xBC8F8F +

                  +
                  RoyalBlue
                  +

                  0x4169E1 +

                  +
                  SaddleBrown
                  +

                  0x8B4513 +

                  +
                  Salmon
                  +

                  0xFA8072 +

                  +
                  SandyBrown
                  +

                  0xF4A460 +

                  +
                  SeaGreen
                  +

                  0x2E8B57 +

                  +
                  SeaShell
                  +

                  0xFFF5EE +

                  +
                  Sienna
                  +

                  0xA0522D +

                  +
                  Silver
                  +

                  0xC0C0C0 +

                  +
                  SkyBlue
                  +

                  0x87CEEB +

                  +
                  SlateBlue
                  +

                  0x6A5ACD +

                  +
                  SlateGray
                  +

                  0x708090 +

                  +
                  Snow
                  +

                  0xFFFAFA +

                  +
                  SpringGreen
                  +

                  0x00FF7F +

                  +
                  SteelBlue
                  +

                  0x4682B4 +

                  +
                  Tan
                  +

                  0xD2B48C +

                  +
                  Teal
                  +

                  0x008080 +

                  +
                  Thistle
                  +

                  0xD8BFD8 +

                  +
                  Tomato
                  +

                  0xFF6347 +

                  +
                  Turquoise
                  +

                  0x40E0D0 +

                  +
                  Violet
                  +

                  0xEE82EE +

                  +
                  Wheat
                  +

                  0xF5DEB3 +

                  +
                  White
                  +

                  0xFFFFFF +

                  +
                  WhiteSmoke
                  +

                  0xF5F5F5 +

                  +
                  Yellow
                  +

                  0xFFFF00 +

                  +
                  YellowGreen
                  +

                  0x9ACD32 +

                  +
                  + +

                  +

                  +

                  6.8 Channel Layout

                  + +

                  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. +

                  +

                  Individual channels are identified by an id, as given by the table +below: +

                  +
                  FL
                  +

                  front left +

                  +
                  FR
                  +

                  front right +

                  +
                  FC
                  +

                  front center +

                  +
                  LFE
                  +

                  low frequency +

                  +
                  BL
                  +

                  back left +

                  +
                  BR
                  +

                  back right +

                  +
                  FLC
                  +

                  front left-of-center +

                  +
                  FRC
                  +

                  front right-of-center +

                  +
                  BC
                  +

                  back center +

                  +
                  SL
                  +

                  side left +

                  +
                  SR
                  +

                  side right +

                  +
                  TC
                  +

                  top center +

                  +
                  TFL
                  +

                  top front left +

                  +
                  TFC
                  +

                  top front center +

                  +
                  TFR
                  +

                  top front right +

                  +
                  TBL
                  +

                  top back left +

                  +
                  TBC
                  +

                  top back center +

                  +
                  TBR
                  +

                  top back right +

                  +
                  DL
                  +

                  downmix left +

                  +
                  DR
                  +

                  downmix right +

                  +
                  WL
                  +

                  wide left +

                  +
                  WR
                  +

                  wide right +

                  +
                  SDL
                  +

                  surround direct left +

                  +
                  SDR
                  +

                  surround direct right +

                  +
                  LFE2
                  +

                  low frequency 2 +

                  +
                  + +

                  Standard channel layout compositions can be specified by using the +following identifiers: +

                  +
                  mono
                  +

                  FC +

                  +
                  stereo
                  +

                  FL+FR +

                  +
                  2.1
                  +

                  FL+FR+LFE +

                  +
                  3.0
                  +

                  FL+FR+FC +

                  +
                  3.0(back)
                  +

                  FL+FR+BC +

                  +
                  4.0
                  +

                  FL+FR+FC+BC +

                  +
                  quad
                  +

                  FL+FR+BL+BR +

                  +
                  quad(side)
                  +

                  FL+FR+SL+SR +

                  +
                  3.1
                  +

                  FL+FR+FC+LFE +

                  +
                  5.0
                  +

                  FL+FR+FC+BL+BR +

                  +
                  5.0(side)
                  +

                  FL+FR+FC+SL+SR +

                  +
                  4.1
                  +

                  FL+FR+FC+LFE+BC +

                  +
                  5.1
                  +

                  FL+FR+FC+LFE+BL+BR +

                  +
                  5.1(side)
                  +

                  FL+FR+FC+LFE+SL+SR +

                  +
                  6.0
                  +

                  FL+FR+FC+BC+SL+SR +

                  +
                  6.0(front)
                  +

                  FL+FR+FLC+FRC+SL+SR +

                  +
                  hexagonal
                  +

                  FL+FR+FC+BL+BR+BC +

                  +
                  6.1
                  +

                  FL+FR+FC+LFE+BC+SL+SR +

                  +
                  6.1
                  +

                  FL+FR+FC+LFE+BL+BR+BC +

                  +
                  6.1(front)
                  +

                  FL+FR+LFE+FLC+FRC+SL+SR +

                  +
                  7.0
                  +

                  FL+FR+FC+BL+BR+SL+SR +

                  +
                  7.0(front)
                  +

                  FL+FR+FC+FLC+FRC+SL+SR +

                  +
                  7.1
                  +

                  FL+FR+FC+LFE+BL+BR+SL+SR +

                  +
                  7.1(wide)
                  +

                  FL+FR+FC+LFE+BL+BR+FLC+FRC +

                  +
                  7.1(wide-side)
                  +

                  FL+FR+FC+LFE+FLC+FRC+SL+SR +

                  +
                  octagonal
                  +

                  FL+FR+FC+BL+BR+BC+SL+SR +

                  +
                  downmix
                  +

                  DL+DR +

                  +
                  + +

                  A custom channel layout can be specified as a sequence of terms, separated by +’+’ or ’|’. Each term can be: +

                    +
                  • +the name of a standard channel layout (e.g. ‘mono’, +‘stereo’, ‘4.0’, ‘quad’, ‘5.0’, etc.) + +
                  • +the name of a single channel (e.g. ‘FL’, ‘FR’, ‘FC’, ‘LFE’, etc.) + +
                  • +a number of channels, in decimal, optionally followed by ’c’, yielding +the default channel layout for that number of channels (see the +function av_get_default_channel_layout) + +
                  • +a channel layout mask, in hexadecimal starting with "0x" (see the +AV_CH_* macros in ‘libavutil/channel_layout.h’. +
                  + +

                  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"). +

                  +

                  See also the function av_get_channel_layout defined in +‘libavutil/channel_layout.h’. +

                  + +

                  7. Expression Evaluation

                  + +

                  When evaluating an arithmetic expression, FFmpeg uses an internal +formula evaluator, implemented through the ‘libavutil/eval.h’ +interface. +

                  +

                  An expression may contain unary, binary operators, constants, and +functions. +

                  +

                  Two expressions expr1 and expr2 can be combined to form +another expression "expr1;expr2". +expr1 and expr2 are evaluated in turn, and the new +expression evaluates to the value of expr2. +

                  +

                  The following binary operators are available: +, -, +*, /, ^. +

                  +

                  The following unary operators are available: +, -. +

                  +

                  The following functions are available: +

                  +
                  abs(x)
                  +

                  Compute absolute value of x. +

                  +
                  +
                  acos(x)
                  +

                  Compute arccosine of x. +

                  +
                  +
                  asin(x)
                  +

                  Compute arcsine of x. +

                  +
                  +
                  atan(x)
                  +

                  Compute arctangent of x. +

                  +
                  +
                  between(x, min, max)
                  +

                  Return 1 if x is greater than or equal to min and lesser than or +equal to max, 0 otherwise. +

                  +
                  +
                  bitand(x, y)
                  +
                  bitor(x, y)
                  +

                  Compute bitwise and/or operation on x and y. +

                  +

                  The results of the evaluation of x and y are converted to +integers before executing the bitwise operation. +

                  +

                  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). +

                  +
                  +
                  ceil(expr)
                  +

                  Round the value of expression expr upwards to the nearest +integer. For example, "ceil(1.5)" is "2.0". +

                  +
                  +
                  cos(x)
                  +

                  Compute cosine of x. +

                  +
                  +
                  cosh(x)
                  +

                  Compute hyperbolic cosine of x. +

                  +
                  +
                  eq(x, y)
                  +

                  Return 1 if x and y are equivalent, 0 otherwise. +

                  +
                  +
                  exp(x)
                  +

                  Compute exponential of x (with base e, the Euler’s number). +

                  +
                  +
                  floor(expr)
                  +

                  Round the value of expression expr downwards to the nearest +integer. For example, "floor(-1.5)" is "-2.0". +

                  +
                  +
                  gauss(x)
                  +

                  Compute Gauss function of x, corresponding to +exp(-x*x/2) / sqrt(2*PI). +

                  +
                  +
                  gcd(x, y)
                  +

                  Return the greatest common divisor of x and y. If both x and +y are 0 or either or both are less than zero then behavior is undefined. +

                  +
                  +
                  gt(x, y)
                  +

                  Return 1 if x is greater than y, 0 otherwise. +

                  +
                  +
                  gte(x, y)
                  +

                  Return 1 if x is greater than or equal to y, 0 otherwise. +

                  +
                  +
                  hypot(x, y)
                  +

                  This function is similar to the C function with the same name; it returns +"sqrt(x*x + y*y)", the length of the hypotenuse of a +right triangle with sides of length x and y, or the distance of the +point (x, y) from the origin. +

                  +
                  +
                  if(x, y)
                  +

                  Evaluate x, and if the result is non-zero return the result of +the evaluation of y, return 0 otherwise. +

                  +
                  +
                  if(x, y, z)
                  +

                  Evaluate x, and if the result is non-zero return the evaluation +result of y, otherwise the evaluation result of z. +

                  +
                  +
                  ifnot(x, y)
                  +

                  Evaluate x, and if the result is zero return the result of the +evaluation of y, return 0 otherwise. +

                  +
                  +
                  ifnot(x, y, z)
                  +

                  Evaluate x, and if the result is zero return the evaluation +result of y, otherwise the evaluation result of z. +

                  +
                  +
                  isinf(x)
                  +

                  Return 1.0 if x is +/-INFINITY, 0.0 otherwise. +

                  +
                  +
                  isnan(x)
                  +

                  Return 1.0 if x is NAN, 0.0 otherwise. +

                  +
                  +
                  ld(var)
                  +

                  Allow to load the value of the internal variable with number +var, which was previously stored with st(var, expr). +The function returns the loaded value. +

                  +
                  +
                  log(x)
                  +

                  Compute natural logarithm of x. +

                  +
                  +
                  lt(x, y)
                  +

                  Return 1 if x is lesser than y, 0 otherwise. +

                  +
                  +
                  lte(x, y)
                  +

                  Return 1 if x is lesser than or equal to y, 0 otherwise. +

                  +
                  +
                  max(x, y)
                  +

                  Return the maximum between x and y. +

                  +
                  +
                  min(x, y)
                  +

                  Return the maximum between x and y. +

                  +
                  +
                  mod(x, y)
                  +

                  Compute the remainder of division of x by y. +

                  +
                  +
                  not(expr)
                  +

                  Return 1.0 if expr is zero, 0.0 otherwise. +

                  +
                  +
                  pow(x, y)
                  +

                  Compute the power of x elevated y, it is equivalent to +"(x)^(y)". +

                  +
                  +
                  print(t)
                  +
                  print(t, l)
                  +

                  Print the value of expression t with loglevel l. If +l is not specified then a default log level is used. +Returns the value of the expression printed. +

                  +

                  Prints t with loglevel l +

                  +
                  +
                  random(x)
                  +

                  Return a pseudo random value between 0.0 and 1.0. x is the index of the +internal variable which will be used to save the seed/state. +

                  +
                  +
                  root(expr, max)
                  +

                  Find an input value for which the function represented by expr +with argument ld(0) is 0 in the interval 0..max. +

                  +

                  The expression in expr must denote a continuous function or the +result is undefined. +

                  +

                  ld(0) 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 +ld(0). When the expression evaluates to 0 then the +corresponding input value will be returned. +

                  +
                  +
                  sin(x)
                  +

                  Compute sine of x. +

                  +
                  +
                  sinh(x)
                  +

                  Compute hyperbolic sine of x. +

                  +
                  +
                  sqrt(expr)
                  +

                  Compute the square root of expr. This is equivalent to +"(expr)^.5". +

                  +
                  +
                  squish(x)
                  +

                  Compute expression 1/(1 + exp(4*x)). +

                  +
                  +
                  st(var, expr)
                  +

                  Allow to store the value of the expression expr in an internal +variable. var specifies the number of the variable where to +store the value, and it is a value ranging from 0 to 9. The function +returns the value stored in the internal variable. +Note, Variables are currently not shared between expressions. +

                  +
                  +
                  tan(x)
                  +

                  Compute tangent of x. +

                  +
                  +
                  tanh(x)
                  +

                  Compute hyperbolic tangent of x. +

                  +
                  +
                  taylor(expr, x)
                  +
                  taylor(expr, x, id)
                  +

                  Evaluate a Taylor series at x, given an expression representing +the ld(id)-th derivative of a function at 0. +

                  +

                  When the series does not converge the result is undefined. +

                  +

                  ld(id) is used to represent the derivative order in expr, +which means that the given expression will be evaluated multiple times +with various input values that the expression can access through +ld(id). If id is not specified then 0 is assumed. +

                  +

                  Note, when you have the derivatives at y instead of 0, +taylor(expr, x-y) can be used. +

                  +
                  +
                  time(0)
                  +

                  Return the current (wallclock) time in seconds. +

                  +
                  +
                  trunc(expr)
                  +

                  Round the value of expression expr towards zero to the nearest +integer. For example, "trunc(-1.5)" is "-1.0". +

                  +
                  +
                  while(cond, expr)
                  +

                  Evaluate expression expr while the expression cond is +non-zero, and returns the value of the last expr evaluation, or +NAN if cond was always false. +

                  +
                  + +

                  The following constants are available: +

                  +
                  PI
                  +

                  area of the unit disc, approximately 3.14 +

                  +
                  E
                  +

                  exp(1) (Euler’s number), approximately 2.718 +

                  +
                  PHI
                  +

                  golden ratio (1+sqrt(5))/2, approximately 1.618 +

                  +
                  + +

                  Assuming that an expression is considered "true" if it has a non-zero +value, note that: +

                  +

                  * works like AND +

                  +

                  + works like OR +

                  +

                  For example the construct: +

                   
                  if (A AND B) then C
                  +
                  +

                  is equivalent to: +

                   
                  if(A*B, C)
                  +
                  + +

                  In your C code, you can extend the list of unary and binary functions, +and define recognized constants, so that they are available for your +expressions. +

                  +

                  The evaluator also recognizes the International System 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. +

                  +

                  The list of available International System prefixes follows, with +indication of the corresponding powers of 10 and of 2. +

                  +
                  y
                  +

                  10^-24 / 2^-80 +

                  +
                  z
                  +

                  10^-21 / 2^-70 +

                  +
                  a
                  +

                  10^-18 / 2^-60 +

                  +
                  f
                  +

                  10^-15 / 2^-50 +

                  +
                  p
                  +

                  10^-12 / 2^-40 +

                  +
                  n
                  +

                  10^-9 / 2^-30 +

                  +
                  u
                  +

                  10^-6 / 2^-20 +

                  +
                  m
                  +

                  10^-3 / 2^-10 +

                  +
                  c
                  +

                  10^-2 +

                  +
                  d
                  +

                  10^-1 +

                  +
                  h
                  +

                  10^2 +

                  +
                  k
                  +

                  10^3 / 2^10 +

                  +
                  K
                  +

                  10^3 / 2^10 +

                  +
                  M
                  +

                  10^6 / 2^20 +

                  +
                  G
                  +

                  10^9 / 2^30 +

                  +
                  T
                  +

                  10^12 / 2^40 +

                  +
                  P
                  +

                  10^15 / 2^40 +

                  +
                  E
                  +

                  10^18 / 2^50 +

                  +
                  Z
                  +

                  10^21 / 2^60 +

                  +
                  Y
                  +

                  10^24 / 2^70 +

                  +
                  + + + +

                  8. OpenCL Options

                  + +

                  When FFmpeg is configured with --enable-opencl, it is possible +to set the options for the global OpenCL context. +

                  +

                  The list of supported options follows: +

                  +
                  +
                  build_options
                  +

                  Set build options used to compile the registered kernels. +

                  +

                  See reference "OpenCL Specification Version: 1.2 chapter 5.6.4". +

                  +
                  +
                  platform_idx
                  +

                  Select the index of the platform to run OpenCL code. +

                  +

                  The specified index must be one of the indexes in the device list +which can be obtained with av_opencl_get_device_list(). +

                  +
                  +
                  device_idx
                  +

                  Select the index of the device used to run OpenCL code. +

                  +

                  The specifed index must be one of the indexes in the device list which +can be obtained with av_opencl_get_device_list(). +

                  +
                  +
                  + +

                  +

                  +

                  9. Codec Options

                  + +

                  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. +

                  +

                  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. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools, or by setting the value explicitly in the +AVCodecContext options or using the ‘libavutil/opt.h’ API +for programmatic use. +

                  +

                  The list of supported options follow: +

                  +
                  +
                  b integer (encoding,audio,video)
                  +

                  Set bitrate in bits/s. Default value is 200K. +

                  +
                  +
                  ab integer (encoding,audio)
                  +

                  Set audio bitrate (in bits/s). Default value is 128K. +

                  +
                  +
                  bt integer (encoding,video)
                  +

                  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. +

                  +
                  +
                  flags flags (decoding/encoding,audio,video,subtitles)
                  +

                  Set generic flags. +

                  +

                  Possible values: +

                  +
                  mv4
                  +

                  Use four motion vector by macroblock (mpeg4). +

                  +
                  qpel
                  +

                  Use 1/4 pel motion compensation. +

                  +
                  loop
                  +

                  Use loop filter. +

                  +
                  qscale
                  +

                  Use fixed qscale. +

                  +
                  gmc
                  +

                  Use gmc. +

                  +
                  mv0
                  +

                  Always try a mb with mv=<0,0>. +

                  +
                  input_preserved
                  +
                  pass1
                  +

                  Use internal 2pass ratecontrol in first pass mode. +

                  +
                  pass2
                  +

                  Use internal 2pass ratecontrol in second pass mode. +

                  +
                  gray
                  +

                  Only decode/encode grayscale. +

                  +
                  emu_edge
                  +

                  Do not draw edges. +

                  +
                  psnr
                  +

                  Set error[?] variables during encoding. +

                  +
                  truncated
                  +
                  naq
                  +

                  Normalize adaptive quantization. +

                  +
                  ildct
                  +

                  Use interlaced DCT. +

                  +
                  low_delay
                  +

                  Force low delay. +

                  +
                  global_header
                  +

                  Place global headers in extradata instead of every keyframe. +

                  +
                  bitexact
                  +

                  Use only bitexact stuff (except (I)DCT). +

                  +
                  aic
                  +

                  Apply H263 advanced intra coding / mpeg4 ac prediction. +

                  +
                  cbp
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  qprd
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  ilme
                  +

                  Apply interlaced motion estimation. +

                  +
                  cgop
                  +

                  Use closed gop. +

                  +
                  + +
                  +
                  me_method integer (encoding,video)
                  +

                  Set motion estimation method. +

                  +

                  Possible values: +

                  +
                  zero
                  +

                  zero motion estimation (fastest) +

                  +
                  full
                  +

                  full motion estimation (slowest) +

                  +
                  epzs
                  +

                  EPZS motion estimation (default) +

                  +
                  esa
                  +

                  esa motion estimation (alias for full) +

                  +
                  tesa
                  +

                  tesa motion estimation +

                  +
                  dia
                  +

                  dia motion estimation (alias for epzs) +

                  +
                  log
                  +

                  log motion estimation +

                  +
                  phods
                  +

                  phods motion estimation +

                  +
                  x1
                  +

                  X1 motion estimation +

                  +
                  hex
                  +

                  hex motion estimation +

                  +
                  umh
                  +

                  umh motion estimation +

                  +
                  iter
                  +

                  iter motion estimation +

                  +
                  + +
                  +
                  extradata_size integer
                  +

                  Set extradata size. +

                  +
                  +
                  time_base rational number
                  +

                  Set codec time base. +

                  +

                  It is the fundamental unit of time (in seconds) in terms of which +frame timestamps are represented. For fixed-fps content, timebase +should be 1 / frame_rate and timestamp increments should be +identically 1. +

                  +
                  +
                  g integer (encoding,video)
                  +

                  Set the group of picture size. Default value is 12. +

                  +
                  +
                  ar integer (decoding/encoding,audio)
                  +

                  Set audio sampling rate (in Hz). +

                  +
                  +
                  ac integer (decoding/encoding,audio)
                  +

                  Set number of audio channels. +

                  +
                  +
                  cutoff integer (encoding,audio)
                  +

                  Set cutoff bandwidth. +

                  +
                  +
                  frame_size integer (encoding,audio)
                  +

                  Set audio frame size. +

                  +

                  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. +

                  +
                  +
                  frame_number integer
                  +

                  Set the frame number. +

                  +
                  +
                  delay integer
                  +
                  qcomp float (encoding,video)
                  +

                  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. +

                  +
                  +
                  qblur float (encoding,video)
                  +

                  Set video quantizer scale blur (VBR). +

                  +
                  +
                  qmin integer (encoding,video)
                  +

                  Set min video quantizer scale (VBR). Must be included between -1 and +69, default value is 2. +

                  +
                  +
                  qmax integer (encoding,video)
                  +

                  Set max video quantizer scale (VBR). Must be included between -1 and +1024, default value is 31. +

                  +
                  +
                  qdiff integer (encoding,video)
                  +

                  Set max difference between the quantizer scale (VBR). +

                  +
                  +
                  bf integer (encoding,video)
                  +

                  Set max number of B frames. +

                  +
                  +
                  b_qfactor float (encoding,video)
                  +

                  Set qp factor between P and B frames. +

                  +
                  +
                  rc_strategy integer (encoding,video)
                  +

                  Set ratecontrol method. +

                  +
                  +
                  b_strategy integer (encoding,video)
                  +

                  Set strategy to choose between I/P/B-frames. +

                  +
                  +
                  ps integer (encoding,video)
                  +

                  Set RTP payload size in bytes. +

                  +
                  +
                  mv_bits integer
                  +
                  header_bits integer
                  +
                  i_tex_bits integer
                  +
                  p_tex_bits integer
                  +
                  i_count integer
                  +
                  p_count integer
                  +
                  skip_count integer
                  +
                  misc_bits integer
                  +
                  frame_bits integer
                  +
                  codec_tag integer
                  +
                  bug flags (decoding,video)
                  +

                  Workaround not auto detected encoder bugs. +

                  +

                  Possible values: +

                  +
                  autodetect
                  +
                  old_msmpeg4
                  +

                  some old lavc generated msmpeg4v3 files (no autodetection) +

                  +
                  xvid_ilace
                  +

                  Xvid interlacing bug (autodetected if fourcc==XVIX) +

                  +
                  ump4
                  +

                  (autodetected if fourcc==UMP4) +

                  +
                  no_padding
                  +

                  padding bug (autodetected) +

                  +
                  amv
                  +
                  ac_vlc
                  +

                  illegal vlc bug (autodetected per fourcc) +

                  +
                  qpel_chroma
                  +
                  std_qpel
                  +

                  old standard qpel (autodetected per fourcc/version) +

                  +
                  qpel_chroma2
                  +
                  direct_blocksize
                  +

                  direct-qpel-blocksize bug (autodetected per fourcc/version) +

                  +
                  edge
                  +

                  edge padding bug (autodetected per fourcc/version) +

                  +
                  hpel_chroma
                  +
                  dc_clip
                  +
                  ms
                  +

                  Workaround various bugs in microsoft broken decoders. +

                  +
                  trunc
                  +

                  trancated frames +

                  +
                  + +
                  +
                  lelim integer (encoding,video)
                  +

                  Set single coefficient elimination threshold for luminance (negative +values also consider DC coefficient). +

                  +
                  +
                  celim integer (encoding,video)
                  +

                  Set single coefficient elimination threshold for chrominance (negative +values also consider dc coefficient) +

                  +
                  +
                  strict integer (decoding/encoding,audio,video)
                  +

                  Specify how strictly to follow the standards. +

                  +

                  Possible values: +

                  +
                  very
                  +

                  strictly conform to a older more strict version of the spec or reference software +

                  +
                  strict
                  +

                  strictly conform to all the things in the spec no matter what consequences +

                  +
                  normal
                  +
                  unofficial
                  +

                  allow unofficial extensions +

                  +
                  experimental
                  +

                  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. +

                  +
                  + +
                  +
                  b_qoffset float (encoding,video)
                  +

                  Set QP offset between P and B frames. +

                  +
                  +
                  err_detect flags (decoding,audio,video)
                  +

                  Set error detection flags. +

                  +

                  Possible values: +

                  +
                  crccheck
                  +

                  verify embedded CRCs +

                  +
                  bitstream
                  +

                  detect bitstream specification deviations +

                  +
                  buffer
                  +

                  detect improper bitstream length +

                  +
                  explode
                  +

                  abort decoding on minor error detection +

                  +
                  careful
                  +

                  consider things that violate the spec and have not been seen in the wild as errors +

                  +
                  compliant
                  +

                  consider all spec non compliancies as errors +

                  +
                  aggressive
                  +

                  consider things that a sane encoder should not do as an error +

                  +
                  + +
                  +
                  has_b_frames integer
                  +
                  block_align integer
                  +
                  mpeg_quant integer (encoding,video)
                  +

                  Use MPEG quantizers instead of H.263. +

                  +
                  +
                  qsquish float (encoding,video)
                  +

                  How to keep quantizer between qmin and qmax (0 = clip, 1 = use +differentiable function). +

                  +
                  +
                  rc_qmod_amp float (encoding,video)
                  +

                  Set experimental quantizer modulation. +

                  +
                  +
                  rc_qmod_freq integer (encoding,video)
                  +

                  Set experimental quantizer modulation. +

                  +
                  +
                  rc_override_count integer
                  +
                  rc_eq string (encoding,video)
                  +

                  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. +

                  +
                  +
                  maxrate integer (encoding,audio,video)
                  +

                  Set max bitrate tolerance (in bits/s). Requires bufsize to be set. +

                  +
                  +
                  minrate integer (encoding,audio,video)
                  +

                  Set min bitrate tolerance (in bits/s). Most useful in setting up a CBR +encode. It is of little use elsewise. +

                  +
                  +
                  bufsize integer (encoding,audio,video)
                  +

                  Set ratecontrol buffer size (in bits). +

                  +
                  +
                  rc_buf_aggressivity float (encoding,video)
                  +

                  Currently useless. +

                  +
                  +
                  i_qfactor float (encoding,video)
                  +

                  Set QP factor between P and I frames. +

                  +
                  +
                  i_qoffset float (encoding,video)
                  +

                  Set QP offset between P and I frames. +

                  +
                  +
                  rc_init_cplx float (encoding,video)
                  +

                  Set initial complexity for 1-pass encoding. +

                  +
                  +
                  dct integer (encoding,video)
                  +

                  Set DCT algorithm. +

                  +

                  Possible values: +

                  +
                  auto
                  +

                  autoselect a good one (default) +

                  +
                  fastint
                  +

                  fast integer +

                  +
                  int
                  +

                  accurate integer +

                  +
                  mmx
                  +
                  altivec
                  +
                  faan
                  +

                  floating point AAN DCT +

                  +
                  + +
                  +
                  lumi_mask float (encoding,video)
                  +

                  Compress bright areas stronger than medium ones. +

                  +
                  +
                  tcplx_mask float (encoding,video)
                  +

                  Set temporal complexity masking. +

                  +
                  +
                  scplx_mask float (encoding,video)
                  +

                  Set spatial complexity masking. +

                  +
                  +
                  p_mask float (encoding,video)
                  +

                  Set inter masking. +

                  +
                  +
                  dark_mask float (encoding,video)
                  +

                  Compress dark areas stronger than medium ones. +

                  +
                  +
                  idct integer (decoding/encoding,video)
                  +

                  Select IDCT implementation. +

                  +

                  Possible values: +

                  +
                  auto
                  +
                  int
                  +
                  simple
                  +
                  simplemmx
                  +
                  arm
                  +
                  altivec
                  +
                  sh4
                  +
                  simplearm
                  +
                  simplearmv5te
                  +
                  simplearmv6
                  +
                  simpleneon
                  +
                  simplealpha
                  +
                  ipp
                  +
                  xvidmmx
                  +
                  faani
                  +

                  floating point AAN IDCT +

                  +
                  + +
                  +
                  slice_count integer
                  +
                  ec flags (decoding,video)
                  +

                  Set error concealment strategy. +

                  +

                  Possible values: +

                  +
                  guess_mvs
                  +

                  iterative motion vector (MV) search (slow) +

                  +
                  deblock
                  +

                  use strong deblock filter for damaged MBs +

                  +
                  + +
                  +
                  bits_per_coded_sample integer
                  +
                  pred integer (encoding,video)
                  +

                  Set prediction method. +

                  +

                  Possible values: +

                  +
                  left
                  +
                  plane
                  +
                  median
                  +
                  + +
                  +
                  aspect rational number (encoding,video)
                  +

                  Set sample aspect ratio. +

                  +
                  +
                  debug flags (decoding/encoding,audio,video,subtitles)
                  +

                  Print specific debug info. +

                  +

                  Possible values: +

                  +
                  pict
                  +

                  picture info +

                  +
                  rc
                  +

                  rate control +

                  +
                  bitstream
                  +
                  mb_type
                  +

                  macroblock (MB) type +

                  +
                  qp
                  +

                  per-block quantization parameter (QP) +

                  +
                  mv
                  +

                  motion vector +

                  +
                  dct_coeff
                  +
                  skip
                  +
                  startcode
                  +
                  pts
                  +
                  er
                  +

                  error recognition +

                  +
                  mmco
                  +

                  memory management control operations (H.264) +

                  +
                  bugs
                  +
                  vis_qp
                  +

                  visualize quantization parameter (QP), lower QP are tinted greener +

                  +
                  vis_mb_type
                  +

                  visualize block types +

                  +
                  buffers
                  +

                  picture buffer allocations +

                  +
                  thread_ops
                  +

                  threading operations +

                  +
                  + +
                  +
                  vismv integer (decoding,video)
                  +

                  Visualize motion vectors (MVs). +

                  +

                  Possible values: +

                  +
                  pf
                  +

                  forward predicted MVs of P-frames +

                  +
                  bf
                  +

                  forward predicted MVs of B-frames +

                  +
                  bb
                  +

                  backward predicted MVs of B-frames +

                  +
                  + +
                  +
                  cmp integer (encoding,video)
                  +

                  Set full pel me compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  subcmp integer (encoding,video)
                  +

                  Set sub pel me compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  mbcmp integer (encoding,video)
                  +

                  Set macroblock compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  ildctcmp integer (encoding,video)
                  +

                  Set interlaced dct compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  dia_size integer (encoding,video)
                  +

                  Set diamond type & size for motion estimation. +

                  +
                  +
                  last_pred integer (encoding,video)
                  +

                  Set amount of motion predictors from the previous frame. +

                  +
                  +
                  preme integer (encoding,video)
                  +

                  Set pre motion estimation. +

                  +
                  +
                  precmp integer (encoding,video)
                  +

                  Set pre motion estimation compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  pre_dia_size integer (encoding,video)
                  +

                  Set diamond type & size for motion estimation pre-pass. +

                  +
                  +
                  subq integer (encoding,video)
                  +

                  Set sub pel motion estimation quality. +

                  +
                  +
                  dtg_active_format integer
                  +
                  me_range integer (encoding,video)
                  +

                  Set limit motion vectors range (1023 for DivX player). +

                  +
                  +
                  ibias integer (encoding,video)
                  +

                  Set intra quant bias. +

                  +
                  +
                  pbias integer (encoding,video)
                  +

                  Set inter quant bias. +

                  +
                  +
                  color_table_id integer
                  +
                  global_quality integer (encoding,audio,video)
                  +
                  coder integer (encoding,video)
                  +
                  +

                  Possible values: +

                  +
                  vlc
                  +

                  variable length coder / huffman coder +

                  +
                  ac
                  +

                  arithmetic coder +

                  +
                  raw
                  +

                  raw (no encoding) +

                  +
                  rle
                  +

                  run-length coder +

                  +
                  deflate
                  +

                  deflate-based coder +

                  +
                  + +
                  +
                  context integer (encoding,video)
                  +

                  Set context model. +

                  +
                  +
                  slice_flags integer
                  +
                  xvmc_acceleration integer
                  +
                  mbd integer (encoding,video)
                  +

                  Set macroblock decision algorithm (high quality mode). +

                  +

                  Possible values: +

                  +
                  simple
                  +

                  use mbcmp (default) +

                  +
                  bits
                  +

                  use fewest bits +

                  +
                  rd
                  +

                  use best rate distortion +

                  +
                  + +
                  +
                  stream_codec_tag integer
                  +
                  sc_threshold integer (encoding,video)
                  +

                  Set scene change threshold. +

                  +
                  +
                  lmin integer (encoding,video)
                  +

                  Set min lagrange factor (VBR). +

                  +
                  +
                  lmax integer (encoding,video)
                  +

                  Set max lagrange factor (VBR). +

                  +
                  +
                  nr integer (encoding,video)
                  +

                  Set noise reduction. +

                  +
                  +
                  rc_init_occupancy integer (encoding,video)
                  +

                  Set number of bits which should be loaded into the rc buffer before +decoding starts. +

                  +
                  +
                  flags2 flags (decoding/encoding,audio,video)
                  +
                  +

                  Possible values: +

                  +
                  fast
                  +

                  Allow non spec compliant speedup tricks. +

                  +
                  sgop
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  noout
                  +

                  Skip bitstream encoding. +

                  +
                  ignorecrop
                  +

                  Ignore cropping information from sps. +

                  +
                  local_header
                  +

                  Place global headers at every keyframe instead of in extradata. +

                  +
                  chunks
                  +

                  Frame data might be split into multiple chunks. +

                  +
                  showall
                  +

                  Show all frames before the first keyframe. +

                  +
                  skiprd
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  + +
                  +
                  error integer (encoding,video)
                  +
                  qns integer (encoding,video)
                  +

                  Deprecated, use mpegvideo private options instead. +

                  +
                  +
                  threads integer (decoding/encoding,video)
                  +
                  +

                  Possible values: +

                  +
                  auto
                  +

                  detect a good number of threads +

                  +
                  + +
                  +
                  me_threshold integer (encoding,video)
                  +

                  Set motion estimation threshold. +

                  +
                  +
                  mb_threshold integer (encoding,video)
                  +

                  Set macroblock threshold. +

                  +
                  +
                  dc integer (encoding,video)
                  +

                  Set intra_dc_precision. +

                  +
                  +
                  nssew integer (encoding,video)
                  +

                  Set nsse weight. +

                  +
                  +
                  skip_top integer (decoding,video)
                  +

                  Set number of macroblock rows at the top which are skipped. +

                  +
                  +
                  skip_bottom integer (decoding,video)
                  +

                  Set number of macroblock rows at the bottom which are skipped. +

                  +
                  +
                  profile integer (encoding,audio,video)
                  +
                  +

                  Possible values: +

                  +
                  unknown
                  +
                  aac_main
                  +
                  aac_low
                  +
                  aac_ssr
                  +
                  aac_ltp
                  +
                  aac_he
                  +
                  aac_he_v2
                  +
                  aac_ld
                  +
                  aac_eld
                  +
                  mpeg2_aac_low
                  +
                  mpeg2_aac_he
                  +
                  dts
                  +
                  dts_es
                  +
                  dts_96_24
                  +
                  dts_hd_hra
                  +
                  dts_hd_ma
                  +
                  + +
                  +
                  level integer (encoding,audio,video)
                  +
                  +

                  Possible values: +

                  +
                  unknown
                  +
                  + +
                  +
                  lowres integer (decoding,audio,video)
                  +

                  Decode at 1= 1/2, 2=1/4, 3=1/8 resolutions. +

                  +
                  +
                  skip_threshold integer (encoding,video)
                  +

                  Set frame skip threshold. +

                  +
                  +
                  skip_factor integer (encoding,video)
                  +

                  Set frame skip factor. +

                  +
                  +
                  skip_exp integer (encoding,video)
                  +

                  Set frame skip exponent. +

                  +
                  +
                  skipcmp integer (encoding,video)
                  +

                  Set frame skip compare function. +

                  +

                  Possible values: +

                  +
                  sad
                  +

                  sum of absolute differences, fast (default) +

                  +
                  sse
                  +

                  sum of squared errors +

                  +
                  satd
                  +

                  sum of absolute Hadamard transformed differences +

                  +
                  dct
                  +

                  sum of absolute DCT transformed differences +

                  +
                  psnr
                  +

                  sum of squared quantization errors (avoid, low quality) +

                  +
                  bit
                  +

                  number of bits needed for the block +

                  +
                  rd
                  +

                  rate distortion optimal, slow +

                  +
                  zero
                  +

                  0 +

                  +
                  vsad
                  +

                  sum of absolute vertical differences +

                  +
                  vsse
                  +

                  sum of squared vertical differences +

                  +
                  nsse
                  +

                  noise preserving sum of squared differences +

                  +
                  w53
                  +

                  5/3 wavelet, only used in snow +

                  +
                  w97
                  +

                  9/7 wavelet, only used in snow +

                  +
                  dctmax
                  +
                  chroma
                  +
                  + +
                  +
                  border_mask float (encoding,video)
                  +

                  Increase the quantizer for macroblocks close to borders. +

                  +
                  +
                  mblmin integer (encoding,video)
                  +

                  Set min macroblock lagrange factor (VBR). +

                  +
                  +
                  mblmax integer (encoding,video)
                  +

                  Set max macroblock lagrange factor (VBR). +

                  +
                  +
                  mepc integer (encoding,video)
                  +

                  Set motion estimation bitrate penalty compensation (1.0 = 256). +

                  +
                  +
                  skip_loop_filter integer (decoding,video)
                  +
                  skip_idct integer (decoding,video)
                  +
                  skip_frame integer (decoding,video)
                  +
                  +

                  Make decoder discard processing depending on the frame type selected +by the option value. +

                  +

                  skip_loop_filter’ skips frame loop filtering, ‘skip_idct’ +skips frame IDCT/dequantization, ‘skip_frame’ skips decoding. +

                  +

                  Possible values: +

                  +
                  none
                  +

                  Discard no frame. +

                  +
                  +
                  default
                  +

                  Discard useless frames like 0-sized frames. +

                  +
                  +
                  noref
                  +

                  Discard all non-reference frames. +

                  +
                  +
                  bidir
                  +

                  Discard all bidirectional frames. +

                  +
                  +
                  nokey
                  +

                  Discard all frames excepts keyframes. +

                  +
                  +
                  all
                  +

                  Discard all frames. +

                  +
                  + +

                  Default value is ‘default’. +

                  +
                  +
                  bidir_refine integer (encoding,video)
                  +

                  Refine the two motion vectors used in bidirectional macroblocks. +

                  +
                  +
                  brd_scale integer (encoding,video)
                  +

                  Downscale frames for dynamic B-frame decision. +

                  +
                  +
                  keyint_min integer (encoding,video)
                  +

                  Set minimum interval between IDR-frames. +

                  +
                  +
                  refs integer (encoding,video)
                  +

                  Set reference frames to consider for motion compensation. +

                  +
                  +
                  chromaoffset integer (encoding,video)
                  +

                  Set chroma qp offset from luma. +

                  +
                  +
                  trellis integer (encoding,audio,video)
                  +

                  Set rate-distortion optimal quantization. +

                  +
                  +
                  sc_factor integer (encoding,video)
                  +

                  Set value multiplied by qscale for each frame and added to +scene_change_score. +

                  +
                  +
                  mv0_threshold integer (encoding,video)
                  +
                  b_sensitivity integer (encoding,video)
                  +

                  Adjust sensitivity of b_frame_strategy 1. +

                  +
                  +
                  compression_level integer (encoding,audio,video)
                  +
                  min_prediction_order integer (encoding,audio)
                  +
                  max_prediction_order integer (encoding,audio)
                  +
                  timecode_frame_start integer (encoding,video)
                  +

                  Set GOP timecode frame start number, in non drop frame format. +

                  +
                  +
                  request_channels integer (decoding,audio)
                  +

                  Set desired number of audio channels. +

                  +
                  +
                  bits_per_raw_sample integer
                  +
                  channel_layout integer (decoding/encoding,audio)
                  +
                  +

                  Possible values: +

                  +
                  request_channel_layout integer (decoding,audio)
                  +
                  +

                  Possible values: +

                  +
                  rc_max_vbv_use float (encoding,video)
                  +
                  rc_min_vbv_use float (encoding,video)
                  +
                  ticks_per_frame integer (decoding/encoding,audio,video)
                  +
                  color_primaries integer (decoding/encoding,video)
                  +
                  color_trc integer (decoding/encoding,video)
                  +
                  colorspace integer (decoding/encoding,video)
                  +
                  color_range integer (decoding/encoding,video)
                  +
                  chroma_sample_location integer (decoding/encoding,video)
                  +
                  log_level_offset integer
                  +

                  Set the log level offset. +

                  +
                  +
                  slices integer (encoding,video)
                  +

                  Number of slices, used in parallelized encoding. +

                  +
                  +
                  thread_type flags (decoding/encoding,video)
                  +

                  Select multithreading type. +

                  +

                  Possible values: +

                  +
                  slice
                  +
                  frame
                  +
                  +
                  +
                  audio_service_type integer (encoding,audio)
                  +

                  Set audio service type. +

                  +

                  Possible values: +

                  +
                  ma
                  +

                  Main Audio Service +

                  +
                  ef
                  +

                  Effects +

                  +
                  vi
                  +

                  Visually Impaired +

                  +
                  hi
                  +

                  Hearing Impaired +

                  +
                  di
                  +

                  Dialogue +

                  +
                  co
                  +

                  Commentary +

                  +
                  em
                  +

                  Emergency +

                  +
                  vo
                  +

                  Voice Over +

                  +
                  ka
                  +

                  Karaoke +

                  +
                  + +
                  +
                  request_sample_fmt sample_fmt (decoding,audio)
                  +

                  Set sample format audio decoders should prefer. Default value is +none. +

                  +
                  +
                  pkt_timebase rational number
                  +
                  sub_charenc encoding (decoding,subtitles)
                  +

                  Set the input subtitles character encoding. +

                  +
                  +
                  field_order field_order (video)
                  +

                  Set/override the field order of the video. +Possible values: +

                  +
                  progressive
                  +

                  Progressive video +

                  +
                  tt
                  +

                  Interlaced video, top field coded and displayed first +

                  +
                  bb
                  +

                  Interlaced video, bottom field coded and displayed first +

                  +
                  tb
                  +

                  Interlaced video, top coded first, bottom displayed first +

                  +
                  bt
                  +

                  Interlaced video, bottom coded first, top displayed first +

                  +
                  + +
                  +
                  skip_alpha integer (decoding,video)
                  +

                  Set to 1 to disable processing alpha (transparency). This works like the +‘gray’ flag in the ‘flags’ option which skips chroma information +instead of alpha. Default is 0. +

                  +
                  + + + +

                  10. Decoders

                  + +

                  Decoders are configured elements in FFmpeg which allow the decoding of +multimedia streams. +

                  +

                  When you configure your FFmpeg build, all the supported native decoders +are enabled by default. Decoders requiring an external library must be enabled +manually via the corresponding --enable-lib option. You can list all +available decoders using the configure option --list-decoders. +

                  +

                  You can disable all the decoders with the configure option +--disable-decoders and selectively enable / disable single decoders +with the options --enable-decoder=DECODER / +--disable-decoder=DECODER. +

                  +

                  The option -codecs of the ff* tools will display the list of +enabled decoders. +

                  + + +

                  11. Video Decoders

                  + +

                  A description of some of the currently available video decoders +follows. +

                  + +

                  11.1 rawvideo

                  + +

                  Raw video decoder. +

                  +

                  This decoder decodes rawvideo streams. +

                  + +

                  11.1.1 Options

                  + +
                  +
                  top top_field_first
                  +

                  Specify the assumed field type of the input video. +

                  +
                  -1
                  +

                  the video is assumed to be progressive (default) +

                  +
                  0
                  +

                  bottom-field-first is assumed +

                  +
                  1
                  +

                  top-field-first is assumed +

                  +
                  + +
                  +
                  + + + +

                  12. Audio Decoders

                  + + +

                  12.1 ffwavesynth

                  + +

                  Internal wave synthetizer. +

                  +

                  This decoder generates wave patterns according to predefined sequences. Its +use is purely internal and the format of the data it accepts is not publicly +documented. +

                  + +

                  12.2 libcelt

                  + +

                  libcelt decoder wrapper. +

                  +

                  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 --enable-libcelt. +

                  + +

                  12.3 libgsm

                  + +

                  libgsm decoder wrapper. +

                  +

                  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 --enable-libgsm. +

                  +

                  This decoder supports both the ordinary GSM and the Microsoft variant. +

                  + +

                  12.4 libilbc

                  + +

                  libilbc decoder wrapper. +

                  +

                  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 +--enable-libilbc. +

                  + +

                  12.4.1 Options

                  + +

                  The following option is supported by the libilbc wrapper. +

                  +
                  +
                  enhance
                  +
                  +

                  Enable the enhancement of the decoded audio when set to 1. The default +value is 0 (disabled). +

                  +
                  +
                  + + +

                  12.5 libopencore-amrnb

                  + +

                  libopencore-amrnb decoder wrapper. +

                  +

                  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 --enable-libopencore-amrnb. +

                  +

                  An FFmpeg native decoder for AMR-NB exists, so users can decode AMR-NB +without this library. +

                  + +

                  12.6 libopencore-amrwb

                  + +

                  libopencore-amrwb decoder wrapper. +

                  +

                  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 --enable-libopencore-amrwb. +

                  +

                  An FFmpeg native decoder for AMR-WB exists, so users can decode AMR-WB +without this library. +

                  + +

                  12.7 libopus

                  + +

                  libopus decoder wrapper. +

                  +

                  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 +--enable-libopus. +

                  + + +

                  13. Subtitles Decoders

                  + + +

                  13.1 dvdsub

                  + +

                  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. +

                  + +

                  13.1.1 Options

                  + +
                  +
                  palette
                  +

                  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. +

                  +

                  The format for this option is a string containing 16 24-bits hexadecimal +numbers (without 0x prefix) separated by comas, for example 0d00ee, +ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, +7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b. +

                  +
                  + + +

                  13.2 libzvbi-teletext

                  + +

                  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 +--enable-libzvbi. +

                  + +

                  13.2.1 Options

                  + +
                  +
                  txt_page
                  +

                  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 *. +

                  +
                  txt_chop_top
                  +

                  Discards the top teletext line. Default value is 1. +

                  +
                  txt_format
                  +

                  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. +

                  +
                  txt_left
                  +

                  X offset of generated bitmaps, default is 0. +

                  +
                  txt_top
                  +

                  Y offset of generated bitmaps, default is 0. +

                  +
                  txt_chop_spaces
                  +

                  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. +

                  +
                  txt_duration
                  +

                  Sets the display duration of the decoded teletext pages or subtitles in +miliseconds. Default value is 30000 which is 30 seconds. +

                  +
                  txt_transparent
                  +

                  Force transparent background of the generated teletext bitmaps. Default value +is 0 which means an opaque (black) background. +

                  +
                  + + +

                  14. Encoders

                  + +

                  Encoders are configured elements in FFmpeg which allow the encoding of +multimedia streams. +

                  +

                  When you configure your FFmpeg build, all the supported native encoders +are enabled by default. Encoders requiring an external library must be enabled +manually via the corresponding --enable-lib option. You can list all +available encoders using the configure option --list-encoders. +

                  +

                  You can disable all the encoders with the configure option +--disable-encoders and selectively enable / disable single encoders +with the options --enable-encoder=ENCODER / +--disable-encoder=ENCODER. +

                  +

                  The option -codecs of the ff* tools will display the list of +enabled encoders. +

                  + + +

                  15. Audio Encoders

                  + +

                  A description of some of the currently available audio encoders +follows. +

                  +

                  +

                  +

                  15.1 aac

                  + +

                  Advanced Audio Coding (AAC) encoder. +

                  +

                  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 +‘strict’ option to ‘experimental’ or lower. +

                  +

                  As this encoder is experimental, unexpected behavior may exist from time to +time. For a more stable AAC encoder, see libvo-aacenc. However, be warned +that it has a worse quality reported by some users. +

                  + + +

                  15.1.1 Options

                  + +
                  +
                  b
                  +

                  Set bit rate in bits/s. Setting this automatically activates constant bit rate +(CBR) mode. +

                  +
                  +
                  q
                  +

                  Set quality for variable bit rate (VBR) mode. This option is valid only using +the ffmpeg command-line tool. For library interface users, use +‘global_quality’. +

                  +
                  +
                  stereo_mode
                  +

                  Set stereo encoding mode. Possible values: +

                  +
                  +
                  auto
                  +

                  Automatically selected by the encoder. +

                  +
                  +
                  ms_off
                  +

                  Disable middle/side encoding. This is the default. +

                  +
                  +
                  ms_force
                  +

                  Force middle/side encoding. +

                  +
                  + +
                  +
                  aac_coder
                  +

                  Set AAC encoder coding method. Possible values: +

                  +
                  +
                  faac
                  +

                  FAAC-inspired method. +

                  +

                  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. +

                  +

                  The quality of this method is comparable to the two loop searching method +descibed below, but somewhat a little better and slower. +

                  +
                  +
                  anmr
                  +

                  Average noise to mask ratio (ANMR) trellis-based solution. +

                  +

                  This has a theoretic best quality out of all the coding methods, but at the +cost of the slowest speed. +

                  +
                  +
                  twoloop
                  +

                  Two loop searching (TLS) method. +

                  +

                  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. +

                  +

                  This method produces similar quality with the FAAC method and is the default. +

                  +
                  +
                  fast
                  +

                  Constant quantizer method. +

                  +

                  This method sets a constant quantizer for all bands. This is the fastest of all +the methods, yet produces the worst quality. +

                  +
                  +
                  + +
                  +
                  + + +

                  15.2 ac3 and ac3_fixed

                  + +

                  AC-3 audio encoders. +

                  +

                  These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as +the undocumented RealAudio 3 (a.k.a. dnet). +

                  +

                  The ac3 encoder uses floating-point math, while the ac3_fixed +encoder only uses fixed-point integer math. This does not mean that one is +always faster, just that one or the other may be better suited to a +particular system. The floating-point encoder will generally produce better +quality audio for a given bitrate. The ac3_fixed encoder is not the +default codec for any of the output formats, so it must be specified explicitly +using the option -acodec ac3_fixed in order to use it. +

                  + +

                  15.2.1 AC-3 Metadata

                  + +

                  The AC-3 metadata options are used to set parameters that describe the audio, +but in most cases do not affect the audio encoding itself. Some of the options +do directly affect or influence the decoding and playback of the resulting +bitstream, while others are just for informational purposes. A few of the +options will add bits to the output stream that could otherwise be used for +audio data, and will thus affect the quality of the output. Those will be +indicated accordingly with a note in the option list below. +

                  +

                  These parameters are described in detail in several publicly-available +documents. +

                  + + +

                  15.2.1.1 Metadata Control Options

                  + +
                  +
                  -per_frame_metadata boolean
                  +

                  Allow Per-Frame Metadata. Specifies if the encoder should check for changing +metadata for each frame. +

                  +
                  0
                  +

                  The metadata values set at initialization will be used for every frame in the +stream. (default) +

                  +
                  1
                  +

                  Metadata values can be changed before encoding each frame. +

                  +
                  + +
                  +
                  + + +

                  15.2.1.2 Downmix Levels

                  + +
                  +
                  -center_mixlev level
                  +

                  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: +

                  +
                  0.707
                  +

                  Apply -3dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain (default) +

                  +
                  0.500
                  +

                  Apply -6dB gain +

                  +
                  + +
                  +
                  -surround_mixlev level
                  +

                  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: +

                  +
                  0.707
                  +

                  Apply -3dB gain +

                  +
                  0.500
                  +

                  Apply -6dB gain (default) +

                  +
                  0.000
                  +

                  Silence Surround Channel(s) +

                  +
                  + +
                  +
                  + + +

                  15.2.1.3 Audio Production Information

                  +

                  Audio Production Information is optional information describing the mixing +environment. Either none or both of the fields are written to the bitstream. +

                  +
                  +
                  -mixing_level number
                  +

                  Mixing Level. Specifies peak sound pressure level (SPL) in the production +environment when the mix was mastered. Valid values are 80 to 111, or -1 for +unknown or not indicated. The default value is -1, but that value cannot be +used if the Audio Production Information is written to the bitstream. Therefore, +if the room_type option is not the default value, the mixing_level +option must not be -1. +

                  +
                  +
                  -room_type type
                  +

                  Room Type. Describes the equalization used during the final mixing session at +the studio or on the dubbing stage. A large room is a dubbing stage with the +industry standard X-curve equalization; a small room has flat equalization. +This field will not be written to the bitstream if both the mixing_level +option and the room_type option have the default values. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  large
                  +

                  Large Room +

                  +
                  2
                  +
                  small
                  +

                  Small Room +

                  +
                  + +
                  +
                  + + +

                  15.2.1.4 Other Metadata Options

                  + +
                  +
                  -copyright boolean
                  +

                  Copyright Indicator. Specifies whether a copyright exists for this audio. +

                  +
                  0
                  +
                  off
                  +

                  No Copyright Exists (default) +

                  +
                  1
                  +
                  on
                  +

                  Copyright Exists +

                  +
                  + +
                  +
                  -dialnorm value
                  +

                  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. +

                  +
                  +
                  -dsur_mode mode
                  +

                  Dolby Surround Mode. Specifies whether the stereo signal uses Dolby Surround +(Pro Logic). This field will only be written to the bitstream if the audio +stream is stereo. Using this option does NOT mean the encoder will actually +apply Dolby Surround processing. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  off
                  +

                  Not Dolby Surround Encoded +

                  +
                  2
                  +
                  on
                  +

                  Dolby Surround Encoded +

                  +
                  + +
                  +
                  -original boolean
                  +

                  Original Bit Stream Indicator. Specifies whether this audio is from the +original source and not a copy. +

                  +
                  0
                  +
                  off
                  +

                  Not Original Source +

                  +
                  1
                  +
                  on
                  +

                  Original Source (default) +

                  +
                  + +
                  +
                  + + +

                  15.2.2 Extended Bitstream Information

                  +

                  The extended bitstream options are part of the Alternate Bit Stream Syntax as +specified in Annex D of the A/52:2010 standard. It is grouped into 2 parts. +If any one parameter in a group is specified, all values in that group will be +written to the bitstream. Default values are used for those that are written +but have not been specified. If the mixing levels are written, the decoder +will use these values instead of the ones specified in the center_mixlev +and surround_mixlev options if it supports the Alternate Bit Stream +Syntax. +

                  + +

                  15.2.2.1 Extended Bitstream Information - Part 1

                  + +
                  +
                  -dmix_mode mode
                  +

                  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. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  ltrt
                  +

                  Lt/Rt Downmix Preferred +

                  +
                  2
                  +
                  loro
                  +

                  Lo/Ro Downmix Preferred +

                  +
                  + +
                  +
                  -ltrt_cmixlev level
                  +

                  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. +

                  +
                  1.414
                  +

                  Apply +3dB gain +

                  +
                  1.189
                  +

                  Apply +1.5dB gain +

                  +
                  1.000
                  +

                  Apply 0dB gain +

                  +
                  0.841
                  +

                  Apply -1.5dB gain +

                  +
                  0.707
                  +

                  Apply -3.0dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain (default) +

                  +
                  0.500
                  +

                  Apply -6.0dB gain +

                  +
                  0.000
                  +

                  Silence Center Channel +

                  +
                  + +
                  +
                  -ltrt_surmixlev level
                  +

                  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. +

                  +
                  0.841
                  +

                  Apply -1.5dB gain +

                  +
                  0.707
                  +

                  Apply -3.0dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain +

                  +
                  0.500
                  +

                  Apply -6.0dB gain (default) +

                  +
                  0.000
                  +

                  Silence Surround Channel(s) +

                  +
                  + +
                  +
                  -loro_cmixlev level
                  +

                  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. +

                  +
                  1.414
                  +

                  Apply +3dB gain +

                  +
                  1.189
                  +

                  Apply +1.5dB gain +

                  +
                  1.000
                  +

                  Apply 0dB gain +

                  +
                  0.841
                  +

                  Apply -1.5dB gain +

                  +
                  0.707
                  +

                  Apply -3.0dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain (default) +

                  +
                  0.500
                  +

                  Apply -6.0dB gain +

                  +
                  0.000
                  +

                  Silence Center Channel +

                  +
                  + +
                  +
                  -loro_surmixlev level
                  +

                  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. +

                  +
                  0.841
                  +

                  Apply -1.5dB gain +

                  +
                  0.707
                  +

                  Apply -3.0dB gain +

                  +
                  0.595
                  +

                  Apply -4.5dB gain +

                  +
                  0.500
                  +

                  Apply -6.0dB gain (default) +

                  +
                  0.000
                  +

                  Silence Surround Channel(s) +

                  +
                  + +
                  +
                  + + +

                  15.2.2.2 Extended Bitstream Information - Part 2

                  + +
                  +
                  -dsurex_mode mode
                  +

                  Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX +(7.1 matrixed to 5.1). Using this option does NOT mean the encoder will actually +apply Dolby Surround EX processing. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  on
                  +

                  Dolby Surround EX Off +

                  +
                  2
                  +
                  off
                  +

                  Dolby Surround EX On +

                  +
                  + +
                  +
                  -dheadphone_mode mode
                  +

                  Dolby Headphone Mode. Indicates whether the stream uses Dolby Headphone +encoding (multi-channel matrixed to 2.0 for use with headphones). Using this +option does NOT mean the encoder will actually apply Dolby Headphone +processing. +

                  +
                  0
                  +
                  notindicated
                  +

                  Not Indicated (default) +

                  +
                  1
                  +
                  on
                  +

                  Dolby Headphone Off +

                  +
                  2
                  +
                  off
                  +

                  Dolby Headphone On +

                  +
                  + +
                  +
                  -ad_conv_type type
                  +

                  A/D Converter Type. Indicates whether the audio has passed through HDCD A/D +conversion. +

                  +
                  0
                  +
                  standard
                  +

                  Standard A/D Converter (default) +

                  +
                  1
                  +
                  hdcd
                  +

                  HDCD A/D Converter +

                  +
                  + +
                  +
                  + + +

                  15.2.3 Other AC-3 Encoding Options

                  + +
                  +
                  -stereo_rematrixing boolean
                  +

                  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. +

                  +
                  +
                  + + +

                  15.2.4 Floating-Point-Only AC-3 Encoding Options

                  + +

                  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. +

                  +
                  +
                  -channel_coupling boolean
                  +

                  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. +

                  +
                  -1
                  +
                  auto
                  +

                  Selected by Encoder (default) +

                  +
                  0
                  +
                  off
                  +

                  Disable Channel Coupling +

                  +
                  1
                  +
                  on
                  +

                  Enable Channel Coupling +

                  +
                  + +
                  +
                  -cpl_start_band number
                  +

                  Coupling Start Band. Sets the channel coupling start band, from 1 to 15. If a +value higher than the bandwidth is used, it will be reduced to 1 less than the +coupling end band. If auto is used, the start band will be determined by +the encoder based on the bit rate, sample rate, and channel layout. This option +has no effect if channel coupling is disabled. +

                  +
                  -1
                  +
                  auto
                  +

                  Selected by Encoder (default) +

                  +
                  + +
                  +
                  + +

                  +

                  +

                  15.3 libmp3lame

                  + +

                  LAME (Lame Ain’t an MP3 Encoder) MP3 encoder wrapper. +

                  +

                  Requires the presence of the libmp3lame headers and library during +configuration. You need to explicitly configure the build with +--enable-libmp3lame. +

                  +

                  See libshine for a fixed-point MP3 encoder, although with a +lower quality. +

                  + +

                  15.3.1 Options

                  + +

                  The following options are supported by the libmp3lame wrapper. The +lame-equivalent of the options are listed in parentheses. +

                  +
                  +
                  b (-b)
                  +

                  Set bitrate expressed in bits/s for CBR. LAME bitrate is +expressed in kilobits/s. +

                  +
                  +
                  q (-V)
                  +

                  Set constant quality setting for VBR. This option is valid only +using the ffmpeg command-line tool. For library interface +users, use ‘global_quality’. +

                  +
                  +
                  compression_level (-q)
                  +

                  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. +

                  +
                  +
                  reservoir
                  +

                  Enable use of bit reservoir when set to 1. Default value is 1. LAME +has this enabled by default, but can be overriden by use +‘--nores’ option. +

                  +
                  +
                  joint_stereo (-m j)
                  +

                  Enable the encoder to use (on a frame by frame basis) either L/R +stereo or mid/side stereo. Default value is 1. +

                  +
                  +
                  + + +

                  15.4 libopencore-amrnb

                  + +

                  OpenCORE Adaptive Multi-Rate Narrowband encoder. +

                  +

                  Requires the presence of the libopencore-amrnb headers and library during +configuration. You need to explicitly configure the build with +--enable-libopencore-amrnb --enable-version3. +

                  +

                  This is a mono-only encoder. Officially it only supports 8000Hz sample rate, +but you can override it by setting ‘strict’ to ‘unofficial’ or +lower. +

                  + +

                  15.4.1 Options

                  + +
                  +
                  b
                  +

                  Set bitrate in bits per second. Only the following bitrates are supported, +otherwise libavcodec will round to the nearest valid bitrate. +

                  +
                  +
                  4750
                  +
                  5150
                  +
                  5900
                  +
                  6700
                  +
                  7400
                  +
                  7950
                  +
                  10200
                  +
                  12200
                  +
                  + +
                  +
                  dtx
                  +

                  Allow discontinuous transmission (generate comfort noise) when set to 1. The +default value is 0 (disabled). +

                  +
                  +
                  + +

                  +

                  +

                  15.5 libshine

                  + +

                  Shine Fixed-Point MP3 encoder wrapper. +

                  +

                  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. +

                  +

                  This encoder only supports stereo and mono input. This is also CBR-only. +

                  +

                  The original project (last updated in early 2007) is at +http://sourceforge.net/projects/libshine-fxp/. We only support the +updated fork by the Savonet/Liquidsoap project at https://github.com/savonet/shine. +

                  +

                  Requires the presence of the libshine headers and library during +configuration. You need to explicitly configure the build with +--enable-libshine. +

                  +

                  See also libmp3lame. +

                  + +

                  15.5.1 Options

                  + +

                  The following options are supported by the libshine wrapper. The +shineenc-equivalent of the options are listed in parentheses. +

                  +
                  +
                  b (-b)
                  +

                  Set bitrate expressed in bits/s for CBR. shineenc-b’ option +is expressed in kilobits/s. +

                  +
                  +
                  + + +

                  15.6 libtwolame

                  + +

                  TwoLAME MP2 encoder wrapper. +

                  +

                  Requires the presence of the libtwolame headers and library during +configuration. You need to explicitly configure the build with +--enable-libtwolame. +

                  + +

                  15.6.1 Options

                  + +

                  The following options are supported by the libtwolame wrapper. The +twolame-equivalent options follow the FFmpeg ones and are in +parentheses. +

                  +
                  +
                  b (-b)
                  +

                  Set bitrate expressed in bits/s for CBR. twolameb’ +option is expressed in kilobits/s. Default value is 128k. +

                  +
                  +
                  q (-V)
                  +

                  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 +ffmpeg command-line tool. For library interface users, +use ‘global_quality’. +

                  +
                  +
                  mode (--mode)
                  +

                  Set the mode of the resulting audio. Possible values: +

                  +
                  +
                  auto
                  +

                  Choose mode automatically based on the input. This is the default. +

                  +
                  stereo
                  +

                  Stereo +

                  +
                  joint_stereo
                  +

                  Joint stereo +

                  +
                  dual_channel
                  +

                  Dual channel +

                  +
                  mono
                  +

                  Mono +

                  +
                  + +
                  +
                  psymodel (--psyc-mode)
                  +

                  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. +

                  +
                  +
                  energy_levels (--energy)
                  +

                  Enable energy levels extensions when set to 1. The default value is +0 (disabled). +

                  +
                  +
                  error_protection (--protect)
                  +

                  Enable CRC error protection when set to 1. The default value is 0 +(disabled). +

                  +
                  +
                  copyright (--copyright)
                  +

                  Set MPEG audio copyright flag when set to 1. The default value is 0 +(disabled). +

                  +
                  +
                  original (--original)
                  +

                  Set MPEG audio original flag when set to 1. The default value is 0 +(disabled). +

                  +
                  +
                  + +

                  +

                  +

                  15.7 libvo-aacenc

                  + +

                  VisualOn AAC encoder. +

                  +

                  Requires the presence of the libvo-aacenc headers and library during +configuration. You need to explicitly configure the build with +--enable-libvo-aacenc --enable-version3. +

                  +

                  This encoder is considered to be worse than the +native experimental FFmpeg AAC encoder, according to +multiple sources. +

                  + +

                  15.7.1 Options

                  + +

                  The VisualOn AAC encoder only support encoding AAC-LC and up to 2 +channels. It is also CBR-only. +

                  +
                  +
                  b
                  +

                  Set bit rate in bits/s. +

                  +
                  +
                  + + +

                  15.8 libvo-amrwbenc

                  + +

                  VisualOn Adaptive Multi-Rate Wideband encoder. +

                  +

                  Requires the presence of the libvo-amrwbenc headers and library during +configuration. You need to explicitly configure the build with +--enable-libvo-amrwbenc --enable-version3. +

                  +

                  This is a mono-only encoder. Officially it only supports 16000Hz sample +rate, but you can override it by setting ‘strict’ to +‘unofficial’ or lower. +

                  + +

                  15.8.1 Options

                  + +
                  +
                  b
                  +

                  Set bitrate in bits/s. Only the following bitrates are supported, otherwise +libavcodec will round to the nearest valid bitrate. +

                  +
                  +
                  6600
                  +
                  8850
                  +
                  12650
                  +
                  14250
                  +
                  15850
                  +
                  18250
                  +
                  19850
                  +
                  23050
                  +
                  23850
                  +
                  + +
                  +
                  dtx
                  +

                  Allow discontinuous transmission (generate comfort noise) when set to 1. The +default value is 0 (disabled). +

                  +
                  +
                  + + +

                  15.9 libopus

                  + +

                  libopus Opus Interactive Audio Codec encoder wrapper. +

                  +

                  Requires the presence of the libopus headers and library during +configuration. You need to explicitly configure the build with +--enable-libopus. +

                  + +

                  15.9.1 Option Mapping

                  + +

                  Most libopus options are modeled after the opusenc utility from +opus-tools. The following is an option mapping chart describing options +supported by the libopus wrapper, and their opusenc-equivalent +in parentheses. +

                  +
                  +
                  b (bitrate)
                  +

                  Set the bit rate in bits/s. FFmpeg’s ‘b’ option is +expressed in bits/s, while opusenc’s ‘bitrate’ in +kilobits/s. +

                  +
                  +
                  vbr (vbr, hard-cbr, and cvbr)
                  +

                  Set VBR mode. The FFmpeg ‘vbr’ option has the following +valid arguments, with the their opusenc equivalent options +in parentheses: +

                  +
                  +
                  off (hard-cbr)
                  +

                  Use constant bit rate encoding. +

                  +
                  +
                  on (vbr)
                  +

                  Use variable bit rate encoding (the default). +

                  +
                  +
                  constrained (cvbr)
                  +

                  Use constrained variable bit rate encoding. +

                  +
                  + +
                  +
                  compression_level (comp)
                  +

                  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. +

                  +
                  +
                  frame_duration (framesize)
                  +

                  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. +

                  +
                  +
                  packet_loss (expect-loss)
                  +

                  Set expected packet loss percentage. The default is 0. +

                  +
                  +
                  application (N.A.)
                  +

                  Set intended application type. Valid options are listed below: +

                  +
                  +
                  voip
                  +

                  Favor improved speech intelligibility. +

                  +
                  audio
                  +

                  Favor faithfulness to the input (the default). +

                  +
                  lowdelay
                  +

                  Restrict to only the lowest delay modes. +

                  +
                  + +
                  +
                  cutoff (N.A.)
                  +

                  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). +

                  +
                  +
                  + + +

                  15.10 libvorbis

                  + +

                  libvorbis encoder wrapper. +

                  +

                  Requires the presence of the libvorbisenc headers and library during +configuration. You need to explicitly configure the build with +--enable-libvorbis. +

                  + +

                  15.10.1 Options

                  + +

                  The following options are supported by the libvorbis wrapper. The +oggenc-equivalent of the options are listed in parentheses. +

                  +

                  To get a more accurate and extensive documentation of the libvorbis +options, consult the libvorbisenc’s and oggenc’s documentations. +See http://xiph.org/vorbis/, +http://wiki.xiph.org/Vorbis-tools, and oggenc(1). +

                  +
                  +
                  b (-b)
                  +

                  Set bitrate expressed in bits/s for ABR. oggenc-b’ is +expressed in kilobits/s. +

                  +
                  +
                  q (-q)
                  +

                  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 ‘3.0’. +

                  +

                  This option is valid only using the ffmpeg command-line tool. +For library interface users, use ‘global_quality’. +

                  +
                  +
                  cutoff (--advanced-encode-option lowpass_frequency=N)
                  +

                  Set cutoff bandwidth in Hz, a value of 0 disables cutoff. oggenc’s +related option is expressed in kHz. The default value is ‘0’ (cutoff +disabled). +

                  +
                  +
                  minrate (-m)
                  +

                  Set minimum bitrate expressed in bits/s. oggenc-m’ is +expressed in kilobits/s. +

                  +
                  +
                  maxrate (-M)
                  +

                  Set maximum bitrate expressed in bits/s. oggenc-M’ is +expressed in kilobits/s. This only has effect on ABR mode. +

                  +
                  +
                  iblock (--advanced-encode-option impulse_noisetune=N)
                  +

                  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. +

                  +
                  +
                  + + +

                  15.11 libwavpack

                  + +

                  A wrapper providing WavPack encoding through libwavpack. +

                  +

                  Only lossless mode using 32-bit integer samples is supported currently. +The ‘compression_level’ option can be used to control speed vs. +compression tradeoff, with the values mapped to libwavpack as follows: +

                  +
                  +
                  0
                  +

                  Fast mode - corresponding to the wavpack ‘-f’ option. +

                  +
                  +
                  1
                  +

                  Normal (default) settings. +

                  +
                  +
                  2
                  +

                  High quality - corresponding to the wavpack ‘-h’ option. +

                  +
                  +
                  3
                  +

                  Very high quality - corresponding to the wavpack ‘-hh’ option. +

                  +
                  +
                  4-8
                  +

                  Same as 3, but with extra processing enabled - corresponding to the wavpack +‘-x’ option. I.e. 4 is the same as ‘-x2’ and 8 is the same as +‘-x6’. +

                  +
                  +
                  + + + +

                  16. Video Encoders

                  + +

                  A description of some of the currently available video encoders +follows. +

                  + +

                  16.1 libtheora

                  + +

                  Theora format supported through libtheora. +

                  +

                  Requires the presence of the libtheora headers and library during +configuration. You need to explicitly configure the build with +--enable-libtheora. +

                  + +

                  16.1.1 Options

                  + +

                  The following global options are mapped to internal libtheora options +which affect the quality and the bitrate of the encoded stream. +

                  +
                  +
                  b
                  +

                  Set the video bitrate, only works if the qscale flag in +‘flags’ is not enabled. +

                  +
                  +
                  flags
                  +

                  Used to enable constant quality mode encoding through the +‘qscale’ flag, and to enable the pass1 and pass2 +modes. +

                  +
                  +
                  g
                  +

                  Set the GOP size. +

                  +
                  +
                  global_quality
                  +

                  Set the global quality in lambda units, only works if the +qscale flag in ‘flags’ is enabled. The value is clipped +in the [0 - 10*FF_QP2LAMBDA] range, and then multiplied for 6.3 +to get a value in the native libtheora range [0-63]. A higher value +corresponds to a higher quality. +

                  +

                  For example, to set maximum constant quality encoding with +ffmpeg: +

                   
                  ffmpeg -i INPUT -flags:v qscale -global_quality:v "10*QP2LAMBDA" -codec:v libtheora OUTPUT.ogg
                  +
                  +
                  +
                  + + +

                  16.2 libvpx

                  + +

                  VP8 format supported through libvpx. +

                  +

                  Requires the presence of the libvpx headers and library during configuration. +You need to explicitly configure the build with --enable-libvpx. +

                  + +

                  16.2.1 Options

                  + +

                  Mapping from FFmpeg to libvpx options with conversion notes in parentheses. +

                  +
                  +
                  threads
                  +

                  g_threads +

                  +
                  +
                  profile
                  +

                  g_profile +

                  +
                  +
                  vb
                  +

                  rc_target_bitrate +

                  +
                  +
                  g
                  +

                  kf_max_dist +

                  +
                  +
                  keyint_min
                  +

                  kf_min_dist +

                  +
                  +
                  qmin
                  +

                  rc_min_quantizer +

                  +
                  +
                  qmax
                  +

                  rc_max_quantizer +

                  +
                  +
                  bufsize, vb
                  +

                  rc_buf_sz +(bufsize * 1000 / vb) +

                  +

                  rc_buf_optimal_sz +(bufsize * 1000 / vb * 5 / 6) +

                  +
                  +
                  rc_init_occupancy, vb
                  +

                  rc_buf_initial_sz +(rc_init_occupancy * 1000 / vb) +

                  +
                  +
                  rc_buffer_aggressivity
                  +

                  rc_undershoot_pct +

                  +
                  +
                  skip_threshold
                  +

                  rc_dropframe_thresh +

                  +
                  +
                  qcomp
                  +

                  rc_2pass_vbr_bias_pct +

                  +
                  +
                  maxrate, vb
                  +

                  rc_2pass_vbr_maxsection_pct +(maxrate * 100 / vb) +

                  +
                  +
                  minrate, vb
                  +

                  rc_2pass_vbr_minsection_pct +(minrate * 100 / vb) +

                  +
                  +
                  minrate, maxrate, vb
                  +

                  VPX_CBR +(minrate == maxrate == vb) +

                  +
                  +
                  crf
                  +

                  VPX_CQ, VP8E_SET_CQ_LEVEL +

                  +
                  +
                  quality
                  +
                  +
                  best
                  +

                  VPX_DL_BEST_QUALITY +

                  +
                  good
                  +

                  VPX_DL_GOOD_QUALITY +

                  +
                  realtime
                  +

                  VPX_DL_REALTIME +

                  +
                  + +
                  +
                  speed
                  +

                  VP8E_SET_CPUUSED +

                  +
                  +
                  nr
                  +

                  VP8E_SET_NOISE_SENSITIVITY +

                  +
                  +
                  mb_threshold
                  +

                  VP8E_SET_STATIC_THRESHOLD +

                  +
                  +
                  slices
                  +

                  VP8E_SET_TOKEN_PARTITIONS +

                  +
                  +
                  max-intra-rate
                  +

                  VP8E_SET_MAX_INTRA_BITRATE_PCT +

                  +
                  +
                  force_key_frames
                  +

                  VPX_EFLAG_FORCE_KF +

                  +
                  +
                  Alternate reference frame related
                  +
                  +
                  vp8flags altref
                  +

                  VP8E_SET_ENABLEAUTOALTREF +

                  +
                  arnr_max_frames
                  +

                  VP8E_SET_ARNR_MAXFRAMES +

                  +
                  arnr_type
                  +

                  VP8E_SET_ARNR_TYPE +

                  +
                  arnr_strength
                  +

                  VP8E_SET_ARNR_STRENGTH +

                  +
                  rc_lookahead
                  +

                  g_lag_in_frames +

                  +
                  + +
                  +
                  vp8flags error_resilient
                  +

                  g_error_resilient +

                  +
                  +
                  + +

                  For more information about libvpx see: +http://www.webmproject.org/ +

                  + +

                  16.3 libx264

                  + +

                  x264 H.264/MPEG-4 AVC encoder wrapper. +

                  +

                  This encoder requires the presence of the libx264 headers and library +during configuration. You need to explicitly configure the build with +--enable-libx264. +

                  +

                  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). +

                  +

                  Many libx264 encoder options are mapped to FFmpeg global codec +options, while unique encoder options are provided through private +options. Additionally the ‘x264opts’ and ‘x264-params’ +private options allows to pass a list of key=value tuples as accepted +by the libx264 x264_param_parse function. +

                  +

                  The x264 project website is at +http://www.videolan.org/developers/x264.html. +

                  + +

                  16.3.1 Options

                  + +

                  The following options are supported by the libx264 wrapper. The +x264-equivalent options or values are listed in parentheses +for easy migration. +

                  +

                  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 +the Codec Options chapter. +

                  +

                  To get a more accurate and extensive documentation of the libx264 +options, invoke the command x264 --full-help or consult +the libx264 documentation. +

                  +
                  +
                  b (bitrate)
                  +

                  Set bitrate in bits/s. Note that FFmpeg’s ‘b’ option is +expressed in bits/s, while x264’s ‘bitrate’ is in +kilobits/s. +

                  +
                  +
                  bf (bframes)
                  +
                  g (keyint)
                  +
                  qmax (qpmax)
                  +
                  qmin (qpmin)
                  +
                  qdiff (qpstep)
                  +
                  qblur (qblur)
                  +
                  qcomp (qcomp)
                  +
                  refs (ref)
                  +
                  sc_threshold (scenecut)
                  +
                  trellis (trellis)
                  +
                  nr (nr)
                  +
                  me_range (merange)
                  +
                  me_method (me)
                  +

                  Set motion estimation method. Possible values in the decreasing order +of speed: +

                  +
                  +
                  dia (dia)
                  +
                  epzs (dia)
                  +

                  Diamond search with radius 1 (fastest). ‘epzs’ is an alias for +‘dia’. +

                  +
                  hex (hex)
                  +

                  Hexagonal search with radius 2. +

                  +
                  umh (umh)
                  +

                  Uneven multi-hexagon search. +

                  +
                  esa (esa)
                  +

                  Exhaustive search. +

                  +
                  tesa (tesa)
                  +

                  Hadamard exhaustive search (slowest). +

                  +
                  + +
                  +
                  subq (subme)
                  +
                  b_strategy (b-adapt)
                  +
                  keyint_min (min-keyint)
                  +
                  coder
                  +

                  Set entropy encoder. Possible values: +

                  +
                  +
                  ac
                  +

                  Enable CABAC. +

                  +
                  +
                  vlc
                  +

                  Enable CAVLC and disable CABAC. It generates the same effect as +x264’s ‘--no-cabac’ option. +

                  +
                  + +
                  +
                  cmp
                  +

                  Set full pixel motion estimation comparation algorithm. Possible values: +

                  +
                  +
                  chroma
                  +

                  Enable chroma in motion estimation. +

                  +
                  +
                  sad
                  +

                  Ignore chroma in motion estimation. It generates the same effect as +x264’s ‘--no-chroma-me’ option. +

                  +
                  + +
                  +
                  threads (threads)
                  +
                  thread_type
                  +

                  Set multithreading technique. Possible values: +

                  +
                  +
                  slice
                  +

                  Slice-based multithreading. It generates the same effect as +x264’s ‘--sliced-threads’ option. +

                  +
                  frame
                  +

                  Frame-based multithreading. +

                  +
                  + +
                  +
                  flags
                  +

                  Set encoding flags. It can be used to disable closed GOP and enable +open GOP by setting it to -cgop. The result is similar to +the behavior of x264’s ‘--open-gop’ option. +

                  +
                  +
                  rc_init_occupancy (vbv-init)
                  +
                  preset (preset)
                  +

                  Set the encoding preset. +

                  +
                  +
                  tune (tune)
                  +

                  Set tuning of the encoding params. +

                  +
                  +
                  profile (profile)
                  +

                  Set profile restrictions. +

                  +
                  +
                  fastfirstpass
                  +

                  Enable fast settings when encoding first pass, when set to 1. When set +to 0, it has the same effect of x264’s +‘--slow-firstpass’ option. +

                  +
                  +
                  crf (crf)
                  +

                  Set the quality for constant quality mode. +

                  +
                  +
                  crf_max (crf-max)
                  +

                  In CRF mode, prevents VBV from lowering quality beyond this point. +

                  +
                  +
                  qp (qp)
                  +

                  Set constant quantization rate control method parameter. +

                  +
                  +
                  aq-mode (aq-mode)
                  +

                  Set AQ method. Possible values: +

                  +
                  +
                  none (0)
                  +

                  Disabled. +

                  +
                  +
                  variance (1)
                  +

                  Variance AQ (complexity mask). +

                  +
                  +
                  autovariance (2)
                  +

                  Auto-variance AQ (experimental). +

                  +
                  + +
                  +
                  aq-strength (aq-strength)
                  +

                  Set AQ strength, reduce blocking and blurring in flat and textured areas. +

                  +
                  +
                  psy
                  +

                  Use psychovisual optimizations when set to 1. When set to 0, it has the +same effect as x264’s ‘--no-psy’ option. +

                  +
                  +
                  psy-rd (psy-rd)
                  +

                  Set strength of psychovisual optimization, in +psy-rd:psy-trellis format. +

                  +
                  +
                  rc-lookahead (rc-lookahead)
                  +

                  Set number of frames to look ahead for frametype and ratecontrol. +

                  +
                  +
                  weightb
                  +

                  Enable weighted prediction for B-frames when set to 1. When set to 0, +it has the same effect as x264’s ‘--no-weightb’ option. +

                  +
                  +
                  weightp (weightp)
                  +

                  Set weighted prediction method for P-frames. Possible values: +

                  +
                  +
                  none (0)
                  +

                  Disabled +

                  +
                  simple (1)
                  +

                  Enable only weighted refs +

                  +
                  smart (2)
                  +

                  Enable both weighted refs and duplicates +

                  +
                  + +
                  +
                  ssim (ssim)
                  +

                  Enable calculation and printing SSIM stats after the encoding. +

                  +
                  +
                  intra-refresh (intra-refresh)
                  +

                  Enable the use of Periodic Intra Refresh instead of IDR frames when set +to 1. +

                  +
                  +
                  bluray-compat (bluray-compat)
                  +

                  Configure the encoder to be compatible with the bluray standard. +It is a shorthand for setting "bluray-compat=1 force-cfr=1". +

                  +
                  +
                  b-bias (b-bias)
                  +

                  Set the influence on how often B-frames are used. +

                  +
                  +
                  b-pyramid (b-pyramid)
                  +

                  Set method for keeping of some B-frames as references. Possible values: +

                  +
                  +
                  none (none)
                  +

                  Disabled. +

                  +
                  strict (strict)
                  +

                  Strictly hierarchical pyramid. +

                  +
                  normal (normal)
                  +

                  Non-strict (not Blu-ray compatible). +

                  +
                  + +
                  +
                  mixed-refs
                  +

                  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 x264’s ‘--no-mixed-refs’ option. +

                  +
                  +
                  8x8dct
                  +

                  Enable adaptive spatial transform (high profile 8x8 transform) +when set to 1. When set to 0, it has the same effect as +x264’s ‘--no-8x8dct’ option. +

                  +
                  +
                  fast-pskip
                  +

                  Enable early SKIP detection on P-frames when set to 1. When set +to 0, it has the same effect as x264’s +‘--no-fast-pskip’ option. +

                  +
                  +
                  aud (aud)
                  +

                  Enable use of access unit delimiters when set to 1. +

                  +
                  +
                  mbtree
                  +

                  Enable use macroblock tree ratecontrol when set to 1. When set +to 0, it has the same effect as x264’s +‘--no-mbtree’ option. +

                  +
                  +
                  deblock (deblock)
                  +

                  Set loop filter parameters, in alpha:beta form. +

                  +
                  +
                  cplxblur (cplxblur)
                  +

                  Set fluctuations reduction in QP (before curve compression). +

                  +
                  +
                  partitions (partitions)
                  +

                  Set partitions to consider as a comma-separated list of. Possible +values in the list: +

                  +
                  +
                  p8x8
                  +

                  8x8 P-frame partition. +

                  +
                  p4x4
                  +

                  4x4 P-frame partition. +

                  +
                  b8x8
                  +

                  4x4 B-frame partition. +

                  +
                  i8x8
                  +

                  8x8 I-frame partition. +

                  +
                  i4x4
                  +

                  4x4 I-frame partition. +(Enabling ‘p4x4’ requires ‘p8x8’ to be enabled. Enabling +‘i8x8’ requires adaptive spatial transform (‘8x8dct’ +option) to be enabled.) +

                  +
                  none (none)
                  +

                  Do not consider any partitions. +

                  +
                  all (all)
                  +

                  Consider every partition. +

                  +
                  + +
                  +
                  direct-pred (direct)
                  +

                  Set direct MV prediction mode. Possible values: +

                  +
                  +
                  none (none)
                  +

                  Disable MV prediction. +

                  +
                  spatial (spatial)
                  +

                  Enable spatial predicting. +

                  +
                  temporal (temporal)
                  +

                  Enable temporal predicting. +

                  +
                  auto (auto)
                  +

                  Automatically decided. +

                  +
                  + +
                  +
                  slice-max-size (slice-max-size)
                  +

                  Set the limit of the size of each slice in bytes. If not specified +but RTP payload size (‘ps’) is specified, that is used. +

                  +
                  +
                  stats (stats)
                  +

                  Set the file name for multi-pass stats. +

                  +
                  +
                  nal-hrd (nal-hrd)
                  +

                  Set signal HRD information (requires ‘vbv-bufsize’ to be set). +Possible values: +

                  +
                  +
                  none (none)
                  +

                  Disable HRD information signaling. +

                  +
                  vbr (vbr)
                  +

                  Variable bit rate. +

                  +
                  cbr (cbr)
                  +

                  Constant bit rate (not allowed in MP4 container). +

                  +
                  + +
                  +
                  x264opts (N.A.)
                  +

                  Set any x264 option, see x264 --fullhelp for a list. +

                  +

                  Argument is a list of key=value couples separated by +":". In filter and psy-rd 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. +

                  +

                  For example to specify libx264 encoding options with ffmpeg: +

                   
                  ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
                  +
                  + +
                  +
                  x264-params (N.A.)
                  +

                  Override the x264 configuration using a :-separated list of key=value +parameters. +

                  +

                  This option is functionally the same as the ‘x264opts’, but is +duplicated for compability with the Libav fork. +

                  +

                  For example to specify libx264 encoding options with ffmpeg: +

                   
                  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
                  +
                  +
                  +
                  + +

                  Encoding ffpresets for common usages are provided so they can be used with the +general presets system (e.g. passing the ‘pre’ option). +

                  + +

                  16.4 libxvid

                  + +

                  Xvid MPEG-4 Part 2 encoder wrapper. +

                  +

                  This encoder requires the presence of the libxvidcore headers and library +during configuration. You need to explicitly configure the build with +--enable-libxvid --enable-gpl. +

                  +

                  The native mpeg4 encoder supports the MPEG-4 Part 2 format, so +users can encode to this format without this library. +

                  + +

                  16.4.1 Options

                  + +

                  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 the Codec Options chapter for their documentation. The other shared options +which are not listed have no effect for the libxvid encoder. +

                  +
                  +
                  b
                  +
                  g
                  +
                  qmin
                  +
                  qmax
                  +
                  mpeg_quant
                  +
                  threads
                  +
                  bf
                  +
                  b_qfactor
                  +
                  b_qoffset
                  +
                  flags
                  +

                  Set specific encoding flags. Possible values: +

                  +
                  +
                  mv4
                  +

                  Use four motion vector by macroblock. +

                  +
                  +
                  aic
                  +

                  Enable high quality AC prediction. +

                  +
                  +
                  gray
                  +

                  Only encode grayscale. +

                  +
                  +
                  gmc
                  +

                  Enable the use of global motion compensation (GMC). +

                  +
                  +
                  qpel
                  +

                  Enable quarter-pixel motion compensation. +

                  +
                  +
                  cgop
                  +

                  Enable closed GOP. +

                  +
                  +
                  global_header
                  +

                  Place global headers in extradata instead of every keyframe. +

                  +
                  +
                  + +
                  +
                  trellis
                  +
                  me_method
                  +

                  Set motion estimation method. Possible values in decreasing order of +speed and increasing order of quality: +

                  +
                  +
                  zero
                  +

                  Use no motion estimation (default). +

                  +
                  +
                  phods
                  +
                  x1
                  +
                  log
                  +

                  Enable advanced diamond zonal search for 16x16 blocks and half-pixel +refinement for 16x16 blocks. ‘x1’ and ‘log’ are aliases for +‘phods’. +

                  +
                  +
                  epzs
                  +

                  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. +

                  +
                  +
                  full
                  +

                  Enable all of the things described above, plus extended 16x16 and 8x8 +blocks search. +

                  +
                  + +
                  +
                  mbd
                  +

                  Set macroblock decision algorithm. Possible values in the increasing +order of quality: +

                  +
                  +
                  simple
                  +

                  Use macroblock comparing function algorithm (default). +

                  +
                  +
                  bits
                  +

                  Enable rate distortion-based half pixel and quarter pixel refinement for +16x16 blocks. +

                  +
                  +
                  rd
                  +

                  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. +

                  +
                  + +
                  +
                  lumi_aq
                  +

                  Enable lumi masking adaptive quantization when set to 1. Default is 0 +(disabled). +

                  +
                  +
                  variance_aq
                  +

                  Enable variance adaptive quantization when set to 1. Default is 0 +(disabled). +

                  +

                  When combined with ‘lumi_aq’, 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. +

                  +
                  +
                  ssim
                  +

                  Set structural similarity (SSIM) displaying method. Possible values: +

                  +
                  +
                  off
                  +

                  Disable displaying of SSIM information. +

                  +
                  +
                  avg
                  +

                  Output average SSIM at the end of encoding to stdout. The format of +showing the average SSIM is: +

                  +
                   
                  Average SSIM: %f
                  +
                  + +

                  For users who are not familiar with C, %f means a float number, or +a decimal (e.g. 0.939232). +

                  +
                  +
                  frame
                  +

                  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: +

                  +
                   
                         SSIM: avg: %1.3f min: %1.3f max: %1.3f
                  +
                  + +

                  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). +

                  +
                  +
                  + +
                  +
                  ssim_acc
                  +

                  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. +

                  +
                  +
                  + + +

                  16.5 png

                  + +

                  PNG image encoder. +

                  + +

                  16.5.1 Private options

                  + +
                  +
                  dpi integer
                  +

                  Set physical density of pixels, in dots per inch, unset by default +

                  +
                  dpm integer
                  +

                  Set physical density of pixels, in dots per meter, unset by default +

                  +
                  + + +

                  16.6 ProRes

                  + +

                  Apple ProRes encoder. +

                  +

                  FFmpeg contains 2 ProRes encoders, the prores-aw and prores-ks encoder. +The used encoder can be choosen with the -vcodec option. +

                  + +

                  16.6.1 Private Options for prores-ks

                  + +
                  +
                  profile integer
                  +

                  Select the ProRes profile to encode +

                  +
                  proxy
                  +
                  lt
                  +
                  standard
                  +
                  hq
                  +
                  4444
                  +
                  + +
                  +
                  quant_mat integer
                  +

                  Select quantization matrix. +

                  +
                  auto
                  +
                  default
                  +
                  proxy
                  +
                  lt
                  +
                  standard
                  +
                  hq
                  +
                  +

                  If set to auto, the matrix matching the profile will be picked. +If not set, the matrix providing the highest quality, default, will be +picked. +

                  +
                  +
                  bits_per_mb integer
                  +

                  How many bits to allot for coding one macroblock. Different profiles use +between 200 and 2400 bits per macroblock, the maximum is 8000. +

                  +
                  +
                  mbs_per_slice integer
                  +

                  Number of macroblocks in each slice (1-8); the default value (8) +should be good in almost all situations. +

                  +
                  +
                  vendor string
                  +

                  Override the 4-byte vendor ID. +A custom vendor ID like apl0 would claim the stream was produced by +the Apple encoder. +

                  +
                  +
                  alpha_bits integer
                  +

                  Specify number of bits for alpha component. +Possible values are 0, 8 and 16. +Use 0 to disable alpha plane coding. +

                  +
                  +
                  + + +

                  16.6.2 Speed considerations

                  + +

                  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. +

                  +

                  Setting a higher ‘bits_per_mb’ limit will improve the speed. +

                  +

                  For the fastest encoding speed set the ‘qscale’ parameter (4 is the +recommended value) and do not set a size constraint. +

                  + +

                  17. Bitstream Filters

                  + +

                  When you configure your FFmpeg build, all the supported bitstream +filters are enabled by default. You can list all available ones using +the configure option --list-bsfs. +

                  +

                  You can disable all the bitstream filters using the configure option +--disable-bsfs, and selectively enable any bitstream filter using +the option --enable-bsf=BSF, or you can disable a particular +bitstream filter using the option --disable-bsf=BSF. +

                  +

                  The option -bsfs of the ff* tools will display the list of +all the supported bitstream filters included in your build. +

                  +

                  Below is a description of the currently available bitstream filters. +

                  + +

                  17.1 aac_adtstoasc

                  + +

                  Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration +bitstream filter. +

                  +

                  This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4 +ADTS header and removes the ADTS header. +

                  +

                  This is required for example when copying an AAC stream from a raw +ADTS AAC container to a FLV or a MOV/MP4 file. +

                  + +

                  17.2 chomp

                  + +

                  Remove zero padding at the end of a packet. +

                  + +

                  17.3 dump_extra

                  + +

                  Add extradata to the beginning of the filtered packets. +

                  +

                  The additional argument specifies which packets should be filtered. +It accepts the values: +

                  +
                  a
                  +

                  add extradata to all key packets, but only if local_header is +set in the ‘flags2’ codec context field +

                  +
                  +
                  k
                  +

                  add extradata to all key packets +

                  +
                  +
                  e
                  +

                  add extradata to all packets +

                  +
                  + +

                  If not specified it is assumed ‘k’. +

                  +

                  For example the following ffmpeg command forces a global +header (thus disabling individual packet headers) in the H.264 packets +generated by the libx264 encoder, but corrects them by adding +the header stored in extradata to the key packets: +

                   
                  ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
                  +
                  + + +

                  17.4 h264_mp4toannexb

                  + +

                  Convert an H.264 bitstream from length prefixed mode to start code +prefixed mode (as defined in the Annex B of the ITU-T H.264 +specification). +

                  +

                  This is required by some streaming formats, typically the MPEG-2 +transport stream format ("mpegts"). +

                  +

                  For example to remux an MP4 file containing an H.264 stream to mpegts +format with ffmpeg, you can use the command: +

                  +
                   
                  ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
                  +
                  + + +

                  17.5 imx_dump_header

                  + + +

                  17.6 mjpeg2jpeg

                  + +

                  Convert MJPEG/AVI1 packets to full JPEG/JFIF packets. +

                  +

                  MJPEG is a video codec wherein each video frame is essentially a +JPEG image. The individual frames can be extracted without loss, +e.g. by +

                  +
                   
                  ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
                  +
                  + +

                  Unfortunately, these chunks are incomplete JPEG images, because +they lack the DHT segment required for decoding. Quoting from +http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml: +

                  +

                  Avery Lee, writing in the rec.video.desktop newsgroup in 2001, +commented that "MJPEG, or at least the MJPEG in AVIs having the +MJPG fourcc, is restricted JPEG with a fixed – and *omitted* – +Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2, +and it must use basic Huffman encoding, not arithmetic or +progressive. . . . You can indeed extract the MJPEG frames and +decode them with a regular JPEG decoder, but you have to prepend +the DHT segment to them, or else the decoder won’t have any idea +how to decompress the data. The exact table necessary is given in +the OpenDML spec." +

                  +

                  This bitstream filter patches the header of frames extracted from an MJPEG +stream (carrying the AVI1 header ID and lacking a DHT segment) to +produce fully qualified JPEG images. +

                  +
                   
                  ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
                  +exiftran -i -9 frame*.jpg
                  +ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
                  +
                  + + +

                  17.7 mjpega_dump_header

                  + + +

                  17.8 movsub

                  + + +

                  17.9 mp3_header_compress

                  + + +

                  17.10 mp3_header_decompress

                  + + +

                  17.11 noise

                  + + +

                  17.12 remove_extra

                  + + +

                  18. Format Options

                  + +

                  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. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools, or by setting the value explicitly in the +AVFormatContext options or using the ‘libavutil/opt.h’ API +for programmatic use. +

                  +

                  The list of supported options follows: +

                  +
                  +
                  avioflags flags (input/output)
                  +

                  Possible values: +

                  +
                  direct
                  +

                  Reduce buffering. +

                  +
                  + +
                  +
                  probesize integer (input)
                  +

                  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. +

                  +
                  +
                  packetsize integer (output)
                  +

                  Set packet size. +

                  +
                  +
                  fflags flags (input/output)
                  +

                  Set format flags. +

                  +

                  Possible values: +

                  +
                  ignidx
                  +

                  Ignore index. +

                  +
                  genpts
                  +

                  Generate PTS. +

                  +
                  nofillin
                  +

                  Do not fill in missing values that can be exactly calculated. +

                  +
                  noparse
                  +

                  Disable AVParsers, this needs +nofillin too. +

                  +
                  igndts
                  +

                  Ignore DTS. +

                  +
                  discardcorrupt
                  +

                  Discard corrupted frames. +

                  +
                  sortdts
                  +

                  Try to interleave output packets by DTS. +

                  +
                  keepside
                  +

                  Do not merge side data. +

                  +
                  latm
                  +

                  Enable RTP MP4A-LATM payload. +

                  +
                  nobuffer
                  +

                  Reduce the latency introduced by optional buffering +

                  +
                  + +
                  +
                  seek2any integer (input)
                  +

                  Allow seeking to non-keyframes on demuxer level when supported if set to 1. +Default is 0. +

                  +
                  +
                  analyzeduration integer (input)
                  +

                  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. +

                  +
                  +
                  cryptokey hexadecimal string (input)
                  +

                  Set decryption key. +

                  +
                  +
                  indexmem integer (input)
                  +

                  Set max memory used for timestamp index (per stream). +

                  +
                  +
                  rtbufsize integer (input)
                  +

                  Set max memory used for buffering real-time frames. +

                  +
                  +
                  fdebug flags (input/output)
                  +

                  Print specific debug info. +

                  +

                  Possible values: +

                  +
                  ts
                  +
                  + +
                  +
                  max_delay integer (input/output)
                  +

                  Set maximum muxing or demuxing delay in microseconds. +

                  +
                  +
                  fpsprobesize integer (input)
                  +

                  Set number of frames used to probe fps. +

                  +
                  +
                  audio_preload integer (output)
                  +

                  Set microseconds by which audio packets should be interleaved earlier. +

                  +
                  +
                  chunk_duration integer (output)
                  +

                  Set microseconds for each chunk. +

                  +
                  +
                  chunk_size integer (output)
                  +

                  Set size in bytes for each chunk. +

                  +
                  +
                  err_detect, f_err_detect flags (input)
                  +

                  Set error detection flags. f_err_detect is deprecated and +should be used only via the ffmpeg tool. +

                  +

                  Possible values: +

                  +
                  crccheck
                  +

                  Verify embedded CRCs. +

                  +
                  bitstream
                  +

                  Detect bitstream specification deviations. +

                  +
                  buffer
                  +

                  Detect improper bitstream length. +

                  +
                  explode
                  +

                  Abort decoding on minor error detection. +

                  +
                  careful
                  +

                  Consider things that violate the spec and have not been seen in the +wild as errors. +

                  +
                  compliant
                  +

                  Consider all spec non compliancies as errors. +

                  +
                  aggressive
                  +

                  Consider things that a sane encoder should not do as an error. +

                  +
                  + +
                  +
                  use_wallclock_as_timestamps integer (input)
                  +

                  Use wallclock as timestamps. +

                  +
                  +
                  avoid_negative_ts integer (output)
                  +

                  Shift timestamps to make them non-negative. A value of 1 enables shifting, +a value of 0 disables it, the default value of -1 enables shifting +when required by the target format. +

                  +

                  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. +

                  +

                  Also note that this affects only leading negative timestamps, and not +non-monotonic negative timestamps. +

                  +
                  +
                  skip_initial_bytes integer (input)
                  +

                  Set number of bytes to skip before reading header and frames if set to 1. +Default is 0. +

                  +
                  +
                  correct_ts_overflow integer (input)
                  +

                  Correct single timestamp overflows if set to 1. Default is 1. +

                  +
                  +
                  flush_packets integer (output)
                  +

                  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. +

                  +
                  + + +

                  +

                  +

                  18.1 Format stream specifiers

                  + +

                  Format stream specifiers allow selection of one or more streams that +match specific properties. +

                  +

                  Possible forms of stream specifiers are: +

                  +
                  stream_index
                  +

                  Matches the stream with this index. +

                  +
                  +
                  stream_type[:stream_index]
                  +

                  stream_type is one of following: ’v’ for video, ’a’ for audio, +’s’ for subtitle, ’d’ for data, and ’t’ for attachments. If +stream_index is given, then it matches the stream number +stream_index of this type. Otherwise, it matches all streams of +this type. +

                  +
                  +
                  p:program_id[:stream_index]
                  +

                  If stream_index is given, then it matches the stream with number +stream_index in the program with the id +program_id. Otherwise, it matches all streams in the program. +

                  +
                  +
                  #stream_id
                  +

                  Matches the stream by a format-specific ID. +

                  +
                  + +

                  The exact semantics of stream specifiers is defined by the +avformat_match_stream_specifier() function declared in the +‘libavformat/avformat.h’ header. +

                  + +

                  19. Demuxers

                  + +

                  Demuxers are configured elements in FFmpeg that can read the +multimedia streams from a particular type of file. +

                  +

                  When you configure your FFmpeg build, all the supported demuxers +are enabled by default. You can list all available ones using the +configure option --list-demuxers. +

                  +

                  You can disable all the demuxers using the configure option +--disable-demuxers, and selectively enable a single demuxer with +the option --enable-demuxer=DEMUXER, or disable it +with the option --disable-demuxer=DEMUXER. +

                  +

                  The option -formats of the ff* tools will display the list of +enabled demuxers. +

                  +

                  The description of some of the currently available demuxers follows. +

                  + +

                  19.1 applehttp

                  + +

                  Apple HTTP Live Streaming demuxer. +

                  +

                  This demuxer presents all AVStreams from all variant streams. +The id field is set to the bitrate variant index number. By setting +the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), +the caller can decide which variant streams to actually receive. +The total bitrate of the variant that the stream belongs to is +available in a metadata key named "variant_bitrate". +

                  + +

                  19.2 asf

                  + +

                  Advanced Systems Format demuxer. +

                  +

                  This demuxer is used to demux ASF files and MMS network streams. +

                  +
                  +
                  -no_resync_search bool
                  +

                  Do not try to resynchronize by looking for a certain optional start code. +

                  +
                  + +

                  +

                  +

                  19.3 concat

                  + +

                  Virtual concatenation script demuxer. +

                  +

                  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. +

                  +

                  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. +

                  +

                  All files must have the same streams (same codecs, same time base, etc.). +

                  +

                  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 +duration directive can be used to override the duration stored in +each file. +

                  + +

                  19.3.1 Syntax

                  + +

                  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: +

                  +
                  +
                  file path
                  +

                  Path to a file to read; special characters and spaces must be escaped with +backslash or single quotes. +

                  +

                  All subsequent directives apply to that file. +

                  +
                  +
                  ffconcat version 1.0
                  +

                  Identify the script type and version. It also sets the ‘safe’ option +to 1 if it was to its default -1. +

                  +

                  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. +

                  +
                  +
                  duration dur
                  +

                  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. +

                  +

                  If the duration is set for all files, then it is possible to seek in the +whole concatenated video. +

                  +
                  +
                  + + +

                  19.3.2 Options

                  + +

                  This demuxer accepts the following option: +

                  +
                  +
                  safe
                  +

                  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. +

                  +

                  If set to 0, any file name is accepted. +

                  +

                  The default is -1, it is equivalent to 1 if the format was automatically +probed and 0 otherwise. +

                  +
                  +
                  + + +

                  19.4 flv

                  + +

                  Adobe Flash Video Format demuxer. +

                  +

                  This demuxer is used to demux FLV files and RTMP network streams. +

                  +
                  +
                  -flv_metadata bool
                  +

                  Allocate the streams according to the onMetaData array content. +

                  +
                  + + +

                  19.5 libgme

                  + +

                  The Game Music Emu library is a collection of video game music file emulators. +

                  +

                  See http://code.google.com/p/game-music-emu/ for more information. +

                  +

                  Some files have multiple tracks. The demuxer will pick the first track by +default. The ‘track_index’ option can be used to select a different +track. Track indexes start at 0. The demuxer exports the number of tracks as +tracks meta data entry. +

                  +

                  For very large files, the ‘max_size’ option may have to be adjusted. +

                  + +

                  19.6 libquvi

                  + +

                  Play media from Internet services using the quvi project. +

                  +

                  The demuxer accepts a ‘format’ option to request a specific quality. It +is by default set to best. +

                  +

                  See http://quvi.sourceforge.net/ for more information. +

                  +

                  FFmpeg needs to be built with --enable-libquvi for this demuxer to be +enabled. +

                  + +

                  19.7 image2

                  + +

                  Image file demuxer. +

                  +

                  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 pattern_type. +

                  +

                  The pattern may contain a suffix which is used to automatically +determine the format of the images contained in the files. +

                  +

                  The size, the pixel format, and the format of each image must be the +same for all the files in the sequence. +

                  +

                  This demuxer accepts the following options: +

                  +
                  framerate
                  +

                  Set the frame rate for the video stream. It defaults to 25. +

                  +
                  loop
                  +

                  If set to 1, loop over the input. Default value is 0. +

                  +
                  pattern_type
                  +

                  Select the pattern type used to interpret the provided filename. +

                  +

                  pattern_type accepts one of the following values. +

                  +
                  sequence
                  +

                  Select a sequence pattern type, used to specify a sequence of files +indexed by sequential numbers. +

                  +

                  A sequence pattern may contain the string "%d" or "%0Nd", which +specifies the position of the characters representing a sequential +number in each filename matched by the pattern. If the form +"%d0Nd" is used, the string representing the number in each +filename is 0-padded and N is the total number of 0-padded +digits representing the number. The literal character ’%’ can be +specified in the pattern with the string "%%". +

                  +

                  If the sequence pattern contains "%d" or "%0Nd", the first filename of +the file list specified by the pattern must contain a number +inclusively contained between start_number and +start_number+start_number_range-1, and all the following +numbers must be sequential. +

                  +

                  For example the pattern "img-%03d.bmp" will match a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc.; the pattern "i%%m%%g-%d.jpg" will match a +sequence of filenames of the form ‘i%m%g-1.jpg’, +‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, etc. +

                  +

                  Note that the pattern must not necessarily contain "%d" or +"%0Nd", for example to convert a single image file +‘img.jpeg’ you can employ the command: +

                   
                  ffmpeg -i img.jpeg img.png
                  +
                  + +
                  +
                  glob
                  +

                  Select a glob wildcard pattern type. +

                  +

                  The pattern is interpreted like a glob() pattern. This is only +selectable if libavformat was compiled with globbing support. +

                  +
                  +
                  glob_sequence (deprecated, will be removed)
                  +

                  Select a mixed glob wildcard/sequence pattern. +

                  +

                  If your version of libavformat was compiled with globbing support, and +the provided pattern contains at least one glob meta character among +%*?[]{} that is preceded by an unescaped "%", the pattern is +interpreted like a glob() pattern, otherwise it is interpreted +like a sequence pattern. +

                  +

                  All glob special characters %*?[]{} must be prefixed +with "%". To escape a literal "%" you shall use "%%". +

                  +

                  For example the pattern foo-%*.jpeg will match all the +filenames prefixed by "foo-" and terminating with ".jpeg", and +foo-%?%?%?.jpeg will match all the filenames prefixed with +"foo-", followed by a sequence of three characters, and terminating +with ".jpeg". +

                  +

                  This pattern type is deprecated in favor of glob and +sequence. +

                  +
                  + +

                  Default value is glob_sequence. +

                  +
                  pixel_format
                  +

                  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. +

                  +
                  start_number
                  +

                  Set the index of the file matched by the image file pattern to start +to read from. Default value is 0. +

                  +
                  start_number_range
                  +

                  Set the index interval range to check when looking for the first image +file in the sequence, starting from start_number. Default value +is 5. +

                  +
                  ts_from_file
                  +

                  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. +

                  +
                  video_size
                  +

                  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. +

                  +
                  + + +

                  19.7.1 Examples

                  + +
                    +
                  • +Use ffmpeg for creating a video from the images in the file +sequence ‘img-001.jpeg’, ‘img-002.jpeg’, ..., assuming an +input frame rate of 10 frames per second: +
                     
                    ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
                    +
                    + +
                  • +As above, but start by reading from a file with index 100 in the sequence: +
                     
                    ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
                    +
                    + +
                  • +Read images matching the "*.png" glob pattern , that is all the files +terminating with the ".png" suffix: +
                     
                    ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
                    +
                    +
                  + + +

                  19.8 mpegts

                  + +

                  MPEG-2 transport stream demuxer. +

                  +
                  +
                  fix_teletext_pts
                  +

                  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. +

                  +
                  + + +

                  19.9 rawvideo

                  + +

                  Raw video demuxer. +

                  +

                  This demuxer allows 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. +

                  +

                  This demuxer accepts the following options: +

                  +
                  framerate
                  +

                  Set input video frame rate. Default value is 25. +

                  +
                  +
                  pixel_format
                  +

                  Set the input video pixel format. Default value is yuv420p. +

                  +
                  +
                  video_size
                  +

                  Set the input video size. This value must be specified explicitly. +

                  +
                  + +

                  For example to read a rawvideo file ‘input.raw’ with +ffplay, assuming a pixel format of rgb24, a video +size of 320x240, and a frame rate of 10 images per second, use +the command: +

                   
                  ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
                  +
                  + + +

                  19.10 sbg

                  + +

                  SBaGen script demuxer. +

                  +

                  This demuxer reads the script language used by SBaGen +http://uazu.net/sbagen/ to generate binaural beats sessions. A SBG +script looks like that: +

                   
                  -SE
                  +a: 300-2.5/3 440+4.5/0
                  +b: 300-2.5/0 440+4.5/3
                  +off: -
                  +NOW      == a
                  ++0:07:00 == b
                  ++0:14:00 == a
                  ++0:21:00 == b
                  ++0:30:00    off
                  +
                  + +

                  A SBG script can mix absolute and relative timestamps. If the script uses +either only absolute timestamps (including the script start time) or only +relative ones, then its layout is fixed, and the conversion is +straightforward. On the other hand, if the script mixes both kind of +timestamps, then the NOW reference for relative timestamps will be +taken from the current time of day at the time the script is read, and the +script layout will be frozen according to that reference. That means that if +the script is directly played, the actual times will match the absolute +timestamps up to the sound controller’s clock accuracy, but if the user +somehow pauses the playback or seeks, all times will be shifted accordingly. +

                  + +

                  19.11 tedcaptions

                  + +

                  JSON captions used for TED Talks. +

                  +

                  TED does not provide links to the captions, but they can be guessed from the +page. The file ‘tools/bookmarklets.html’ from the FFmpeg source tree +contains a bookmarklet to expose them. +

                  +

                  This demuxer accepts the following option: +

                  +
                  start_time
                  +

                  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. +

                  +
                  + +

                  Example: convert the captions to a format most players understand: +

                   
                  ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
                  +
                  + + +

                  20. Muxers

                  + +

                  Muxers are configured elements in FFmpeg which allow writing +multimedia streams to a particular type of file. +

                  +

                  When you configure your FFmpeg build, all the supported muxers +are enabled by default. You can list all available muxers using the +configure option --list-muxers. +

                  +

                  You can disable all the muxers with the configure option +--disable-muxers and selectively enable / disable single muxers +with the options --enable-muxer=MUXER / +--disable-muxer=MUXER. +

                  +

                  The option -formats of the ff* tools will display the list of +enabled muxers. +

                  +

                  A description of some of the currently available muxers follows. +

                  +

                  +

                  +

                  20.1 aiff

                  + +

                  Audio Interchange File Format muxer. +

                  +

                  It accepts the following options: +

                  +
                  +
                  write_id3v2
                  +

                  Enable ID3v2 tags writing when set to 1. Default is 0 (disabled). +

                  +
                  +
                  id3v2_version
                  +

                  Select ID3v2 version to write. Currently only version 3 and 4 (aka. +ID3v2.3 and ID3v2.4) are supported. The default is version 4. +

                  +
                  +
                  + +

                  +

                  +

                  20.2 crc

                  + +

                  CRC (Cyclic Redundancy Check) testing format. +

                  +

                  This muxer computes and prints the Adler-32 CRC of all the input audio +and video frames. By default audio frames are converted to signed +16-bit raw audio and video frames to raw video before computing the +CRC. +

                  +

                  The output of the muxer consists of a single line of the form: +CRC=0xCRC, where CRC is a hexadecimal number 0-padded to +8 digits containing the CRC for all the decoded input frames. +

                  +

                  For example to compute the CRC of the input, and store it in the file +‘out.crc’: +

                   
                  ffmpeg -i INPUT -f crc out.crc
                  +
                  + +

                  You can print the CRC to stdout with the command: +

                   
                  ffmpeg -i INPUT -f crc -
                  +
                  + +

                  You can select the output format of each frame with ffmpeg by +specifying the audio and video codec and format. For example to +compute the CRC of the input audio converted to PCM unsigned 8-bit +and the input video converted to MPEG-2 video, use the command: +

                   
                  ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
                  +
                  + +

                  See also the framecrc muxer. +

                  +

                  +

                  +

                  20.3 framecrc

                  + +

                  Per-packet CRC (Cyclic Redundancy Check) testing format. +

                  +

                  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. +

                  +

                  The output of the muxer consists of a line for each audio and video +packet of the form: +

                   
                  stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC
                  +
                  + +

                  CRC is a hexadecimal number 0-padded to 8 digits containing the +CRC of the packet. +

                  +

                  For example to compute the CRC of the audio and video frames in +‘INPUT’, converted to raw audio and video packets, and store it +in the file ‘out.crc’: +

                   
                  ffmpeg -i INPUT -f framecrc out.crc
                  +
                  + +

                  To print the information to stdout, use the command: +

                   
                  ffmpeg -i INPUT -f framecrc -
                  +
                  + +

                  With ffmpeg, 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: +

                   
                  ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
                  +
                  + +

                  See also the crc muxer. +

                  +

                  +

                  +

                  20.4 framemd5

                  + +

                  Per-packet MD5 testing format. +

                  +

                  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. +

                  +

                  The output of the muxer consists of a line for each audio and video +packet of the form: +

                   
                  stream_index, packet_dts, packet_pts, packet_duration, packet_size, MD5
                  +
                  + +

                  MD5 is a hexadecimal number representing the computed MD5 hash +for the packet. +

                  +

                  For example to compute the MD5 of the audio and video frames in +‘INPUT’, converted to raw audio and video packets, and store it +in the file ‘out.md5’: +

                   
                  ffmpeg -i INPUT -f framemd5 out.md5
                  +
                  + +

                  To print the information to stdout, use the command: +

                   
                  ffmpeg -i INPUT -f framemd5 -
                  +
                  + +

                  See also the md5 muxer. +

                  +

                  +

                  +

                  20.5 hls

                  + +

                  Apple HTTP Live Streaming muxer that segments MPEG-TS according to +the HTTP Live Streaming specification. +

                  +

                  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. +

                  +
                   
                  ffmpeg -i in.nut out.m3u8
                  +
                  + +
                  +
                  -hls_time seconds
                  +

                  Set the segment length in seconds. +

                  +
                  -hls_list_size size
                  +

                  Set the maximum number of playlist entries. +

                  +
                  -hls_wrap wrap
                  +

                  Set the number after which index wraps. +

                  +
                  -start_number number
                  +

                  Start the sequence from number. +

                  +
                  + +

                  +

                  +

                  20.6 ico

                  + +

                  ICO file muxer. +

                  +

                  Microsoft’s icon file format (ICO) has some strict limitations that should be noted: +

                  +
                    +
                  • +Size cannot exceed 256 pixels in any dimension + +
                  • +Only BMP and PNG images can be stored + +
                  • +If a BMP image is used, it must be one of the following pixel formats: +
                     
                    BMP Bit Depth      FFmpeg Pixel Format
                    +1bit               pal8
                    +4bit               pal8
                    +8bit               pal8
                    +16bit              rgb555le
                    +24bit              bgr24
                    +32bit              bgra
                    +
                    + +
                  • +If a BMP image is used, it must use the BITMAPINFOHEADER DIB header + +
                  • +If a PNG image is used, it must use the rgba pixel format +
                  + +

                  +

                  +

                  20.7 image2

                  + +

                  Image file muxer. +

                  +

                  The image file muxer writes video frames to image files. +

                  +

                  The output filenames are specified by a pattern, which can be used to +produce sequentially numbered series of files. +The pattern may contain the string "%d" or "%0Nd", this string +specifies the position of the characters representing a numbering in +the filenames. If the form "%0Nd" is used, the string +representing the number in each filename is 0-padded to N +digits. The literal character ’%’ can be specified in the pattern with +the string "%%". +

                  +

                  If the pattern contains "%d" or "%0Nd", the first filename of +the file list specified will contain the number 1, all the following +numbers will be sequential. +

                  +

                  The pattern may contain a suffix which is used to automatically +determine the format of the image files to write. +

                  +

                  For example the pattern "img-%03d.bmp" will specify a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc. +The pattern "img%%-%d.jpg" will specify a sequence of filenames of the +form ‘img%-1.jpg’, ‘img%-2.jpg’, ..., ‘img%-10.jpg’, +etc. +

                  +

                  The following example shows how to use ffmpeg for creating a +sequence of files ‘img-001.jpeg’, ‘img-002.jpeg’, ..., +taking one image every second from the input video: +

                   
                  ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg'
                  +
                  + +

                  Note that with ffmpeg, if the format is not specified with the +-f option and the output filename specifies an image file +format, the image2 muxer is automatically selected, so the previous +command can be written as: +

                   
                  ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg'
                  +
                  + +

                  Note also that the pattern must not necessarily contain "%d" or +"%0Nd", for example to create a single image file +‘img.jpeg’ from the input video you can employ the command: +

                   
                  ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
                  +
                  + +
                  +
                  start_number number
                  +

                  Start the sequence from number. Default value is 1. Must be a +non-negative number. +

                  +
                  +
                  -update number
                  +

                  If number is nonzero, the filename will always be interpreted as just a +filename, not a pattern, and this file will be continuously overwritten with new +images. +

                  +
                  +
                  + +

                  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. +

                  + +

                  20.8 matroska

                  + +

                  Matroska container muxer. +

                  +

                  This muxer implements the matroska and webm container specs. +

                  +

                  The recognized metadata settings in this muxer are: +

                  +
                  +
                  title=title name
                  +

                  Name provided to a single track +

                  +
                  + +
                  +
                  language=language name
                  +

                  Specifies the language of the track in the Matroska languages form +

                  +
                  + +
                  +
                  stereo_mode=mode
                  +

                  Stereo 3D video layout of two views in a single video track +

                  +
                  mono
                  +

                  video is not stereo +

                  +
                  left_right
                  +

                  Both views are arranged side by side, Left-eye view is on the left +

                  +
                  bottom_top
                  +

                  Both views are arranged in top-bottom orientation, Left-eye view is at bottom +

                  +
                  top_bottom
                  +

                  Both views are arranged in top-bottom orientation, Left-eye view is on top +

                  +
                  checkerboard_rl
                  +

                  Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first +

                  +
                  checkerboard_lr
                  +

                  Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first +

                  +
                  row_interleaved_rl
                  +

                  Each view is constituted by a row based interleaving, Right-eye view is first row +

                  +
                  row_interleaved_lr
                  +

                  Each view is constituted by a row based interleaving, Left-eye view is first row +

                  +
                  col_interleaved_rl
                  +

                  Both views are arranged in a column based interleaving manner, Right-eye view is first column +

                  +
                  col_interleaved_lr
                  +

                  Both views are arranged in a column based interleaving manner, Left-eye view is first column +

                  +
                  anaglyph_cyan_red
                  +

                  All frames are in anaglyph format viewable through red-cyan filters +

                  +
                  right_left
                  +

                  Both views are arranged side by side, Right-eye view is on the left +

                  +
                  anaglyph_green_magenta
                  +

                  All frames are in anaglyph format viewable through green-magenta filters +

                  +
                  block_lr
                  +

                  Both eyes laced in one Block, Left-eye view is first +

                  +
                  block_rl
                  +

                  Both eyes laced in one Block, Right-eye view is first +

                  +
                  +
                  +
                  + +

                  For example a 3D WebM clip can be created using the following command line: +

                   
                  ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
                  +
                  + +

                  This muxer supports the following options: +

                  +
                  +
                  reserve_index_space
                  +

                  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. +

                  +

                  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. +

                  +

                  Note that cues are only written if the output is seekable and this option will +have no effect if it is not. +

                  +
                  +
                  + +

                  +

                  +

                  20.9 md5

                  + +

                  MD5 testing format. +

                  +

                  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. +

                  +

                  The output of the muxer consists of a single line of the form: +MD5=MD5, where MD5 is a hexadecimal number representing +the computed MD5 hash. +

                  +

                  For example to compute the MD5 hash of the input converted to raw +audio and video, and store it in the file ‘out.md5’: +

                   
                  ffmpeg -i INPUT -f md5 out.md5
                  +
                  + +

                  You can print the MD5 to stdout with the command: +

                   
                  ffmpeg -i INPUT -f md5 -
                  +
                  + +

                  See also the framemd5 muxer. +

                  + +

                  20.10 MOV/MP4/ISMV

                  + +

                  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 faststart to the movflags, or +using the qt-faststart 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. +

                  +

                  Fragmentation is enabled by setting one of the AVOptions that define +how to cut the file into fragments: +

                  +
                  +
                  -moov_size bytes
                  +

                  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. +

                  +
                  -movflags frag_keyframe
                  +

                  Start a new fragment at each video keyframe. +

                  +
                  -frag_duration duration
                  +

                  Create fragments that are duration microseconds long. +

                  +
                  -frag_size size
                  +

                  Create fragments that contain up to size bytes of payload data. +

                  +
                  -movflags frag_custom
                  +

                  Allow the caller to manually choose when to cut fragments, by +calling av_write_frame(ctx, NULL) to write a fragment with +the packets written so far. (This is only useful with other +applications integrating libavformat, not from ffmpeg.) +

                  +
                  -min_frag_duration duration
                  +

                  Don’t create fragments that are shorter than duration microseconds long. +

                  +
                  + +

                  If more than one condition is specified, fragments are cut when +one of the specified conditions is fulfilled. The exception to this is +-min_frag_duration, which has to be fulfilled for any of the other +conditions to apply. +

                  +

                  Additionally, the way the output file is written can be adjusted +through a few other options: +

                  +
                  +
                  -movflags empty_moov
                  +

                  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. +

                  +

                  Files written with this option set do not work in QuickTime. +This option is implicitly set when writing ismv (Smooth Streaming) files. +

                  +
                  -movflags separate_moof
                  +

                  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. +

                  +

                  This option is implicitly set when writing ismv (Smooth Streaming) files. +

                  +
                  -movflags faststart
                  +

                  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. +

                  +
                  -movflags rtphint
                  +

                  Add RTP hinting tracks to the output file. +

                  +
                  + +

                  Smooth Streaming content can be pushed in real time to a publishing +point on IIS with this muxer. Example: +

                   
                  ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
                  +
                  + + +

                  20.11 mp3

                  + +

                  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 +id3v2_version option controls which one is used. The legacy ID3v1 tag is +not written by default, but may be enabled with the write_id3v1 option. +

                  +

                  For seekable output the muxer also writes 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 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 title and comment map to APIC +description and picture type respectively. See +http://id3.org/id3v2.4.0-frames for allowed picture types. +

                  +

                  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. +

                  +

                  Examples: +

                  +

                  Write an mp3 with an ID3v2.3 header and an ID3v1 footer: +

                   
                  ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
                  +
                  + +

                  To attach a picture to an mp3 file select both the audio and the picture stream +with map: +

                   
                  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
                  +
                  + + +

                  20.12 mpegts

                  + +

                  MPEG transport stream muxer. +

                  +

                  This muxer implements ISO 13818-1 and part of ETSI EN 300 468. +

                  +

                  The muxer options are: +

                  +
                  +
                  -mpegts_original_network_id number
                  +

                  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. +

                  +
                  -mpegts_transport_stream_id number
                  +

                  Set the transport_stream_id (default 0x0001). This identifies a +transponder in DVB. +

                  +
                  -mpegts_service_id number
                  +

                  Set the service_id (default 0x0001) also known as program in DVB. +

                  +
                  -mpegts_pmt_start_pid number
                  +

                  Set the first PID for PMT (default 0x1000, max 0x1f00). +

                  +
                  -mpegts_start_pid number
                  +

                  Set the first PID for data packets (default 0x0100, max 0x0f00). +

                  +
                  -mpegts_m2ts_mode number
                  +

                  Enable m2ts mode if set to 1. Default value is -1 which disables m2ts mode. +

                  +
                  -muxrate number
                  +

                  Set muxrate. +

                  +
                  -pes_payload_size number
                  +

                  Set minimum PES packet payload in bytes. +

                  +
                  -mpegts_flags flags
                  +

                  Set flags (see below). +

                  +
                  -mpegts_copyts number
                  +

                  Preserve original timestamps, if value is set to 1. Default value is -1, which +results in shifting timestamps so that they start from 0. +

                  +
                  -tables_version number
                  +

                  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: +

                   
                  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
                  +...
                  +
                  +
                  +
                  + +

                  Option mpegts_flags may take a set of such flags: +

                  +
                  +
                  resend_headers
                  +

                  Reemit PAT/PMT before writing the next packet. +

                  +
                  latm
                  +

                  Use LATM packetization for AAC. +

                  +
                  + +

                  The recognized metadata settings in mpegts muxer are service_provider +and service_name. If they are not set the default for +service_provider is "FFmpeg" and the default for +service_name is "Service01". +

                  +
                   
                  ffmpeg -i file.mpg -c copy \
                  +     -mpegts_original_network_id 0x1122 \
                  +     -mpegts_transport_stream_id 0x3344 \
                  +     -mpegts_service_id 0x5566 \
                  +     -mpegts_pmt_start_pid 0x1500 \
                  +     -mpegts_start_pid 0x150 \
                  +     -metadata service_provider="Some provider" \
                  +     -metadata service_name="Some Channel" \
                  +     -y out.ts
                  +
                  + + +

                  20.13 null

                  + +

                  Null muxer. +

                  +

                  This muxer does not generate any output file, it is mainly useful for +testing or benchmarking purposes. +

                  +

                  For example to benchmark decoding with ffmpeg you can use the +command: +

                   
                  ffmpeg -benchmark -i INPUT -f null out.null
                  +
                  + +

                  Note that the above command does not read or write the ‘out.null’ +file, but specifying the output file is required by the ffmpeg +syntax. +

                  +

                  Alternatively you can write the command as: +

                   
                  ffmpeg -benchmark -i INPUT -f null -
                  +
                  + + +

                  20.14 ogg

                  + +

                  Ogg container muxer. +

                  +
                  +
                  -page_duration duration
                  +

                  Preferred page duration, in microseconds. The muxer will attempt to create +pages that are approximately duration 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. +

                  +
                  + + +

                  20.15 segment, stream_segment, ssegment

                  + +

                  Basic stream segmenter. +

                  +

                  The segmenter muxer outputs streams to a number of separate files of nearly +fixed duration. Output filename pattern can be set in a fashion similar to +image2. +

                  +

                  stream_segment 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. +ssegment is a shorter alias for stream_segment. +

                  +

                  Every segment starts with a keyframe of the selected reference stream, +which is set through the ‘reference_stream’ option. +

                  +

                  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. +

                  +

                  The segment muxer works best with a single constant frame rate video. +

                  +

                  Optionally it can generate a list of the created segments, by setting +the option segment_list. The list type is specified by the +segment_list_type option. +

                  +

                  The segment muxer supports the following options: +

                  +
                  +
                  reference_stream specifier
                  +

                  Set the reference stream, as specified by the string specifier. +If specifier is set to auto, the reference is choosen +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 auto. +

                  +
                  +
                  segment_format format
                  +

                  Override the inner container format, by default it is guessed by the filename +extension. +

                  +
                  +
                  segment_list name
                  +

                  Generate also a listfile named name. If not specified no +listfile is generated. +

                  +
                  +
                  segment_list_flags flags
                  +

                  Set flags affecting the segment list generation. +

                  +

                  It currently supports the following flags: +

                  +
                  cache
                  +

                  Allow caching (only affects M3U8 list files). +

                  +
                  +
                  live
                  +

                  Allow live-friendly file generation. +

                  +
                  + +

                  Default value is samp. +

                  +
                  +
                  segment_list_size size
                  +

                  Update the list file so that it contains at most the last size +segments. If 0 the list file will contain all the segments. Default +value is 0. +

                  +
                  +
                  segment_list_type type
                  +

                  Specify the format for the segment list file. +

                  +

                  The following values are recognized: +

                  +
                  flat
                  +

                  Generate a flat list for the created segments, one segment per line. +

                  +
                  +
                  csv, ext
                  +

                  Generate a list for the created segments, one segment per line, +each line matching the format (comma-separated values): +

                   
                  segment_filename,segment_start_time,segment_end_time
                  +
                  + +

                  segment_filename 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. +

                  +

                  segment_start_time and segment_end_time specify +the segment start and end time expressed in seconds. +

                  +

                  A list file with the suffix ".csv" or ".ext" will +auto-select this format. +

                  +

                  ext’ is deprecated in favor or ‘csv’. +

                  +
                  +
                  ffconcat
                  +

                  Generate an ffconcat file for the created segments. The resulting file +can be read using the FFmpeg concat demuxer. +

                  +

                  A list file with the suffix ".ffcat" or ".ffconcat" will +auto-select this format. +

                  +
                  +
                  m3u8
                  +

                  Generate an extended M3U8 file, version 3, compliant with +http://tools.ietf.org/id/draft-pantos-http-live-streaming. +

                  +

                  A list file with the suffix ".m3u8" will auto-select this format. +

                  +
                  + +

                  If not specified the type is guessed from the list file name suffix. +

                  +
                  +
                  segment_time time
                  +

                  Set segment duration to time, the value must be a duration +specification. Default value is "2". See also the +‘segment_times’ option. +

                  +

                  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. +

                  +
                  +
                  segment_time_delta delta
                  +

                  Specify the accuracy time when selecting the start time for a +segment, expressed as a duration specification. Default value is "0". +

                  +

                  When delta is specified a key-frame will start a new segment if its +PTS satisfies the relation: +

                   
                  PTS >= start_time - time_delta
                  +
                  + +

                  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. +

                  +

                  In particular may be used in combination with the ‘ffmpeg’ option +force_key_frames. The key frame times specified by +force_key_frames 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*frame_rate should address the worst case mismatch between +the specified time and the time set by force_key_frames. +

                  +
                  +
                  segment_times times
                  +

                  Specify a list of split points. times contains a list of comma +separated duration specifications, in increasing order. See also +the ‘segment_time’ option. +

                  +
                  +
                  segment_frames frames
                  +

                  Specify a list of split video frame numbers. frames contains a +list of comma separated integer numbers, in increasing order. +

                  +

                  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. +

                  +
                  +
                  segment_wrap limit
                  +

                  Wrap around segment index once it reaches limit. +

                  +
                  +
                  segment_start_number number
                  +

                  Set the sequence number of the first segment. Defaults to 0. +

                  +
                  +
                  reset_timestamps 1|0
                  +

                  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 0 by default. +

                  +
                  +
                  initial_offset offset
                  +

                  Specify timestamp offset to apply to the output packet timestamps. The +argument must be a time duration specification, and defaults to 0. +

                  +
                  + + +

                  20.15.1 Examples

                  + +
                    +
                  • +To remux the content of file ‘in.mkv’ to a list of segments +‘out-000.nut’, ‘out-001.nut’, etc., and write the list of +generated segments to ‘out.list’: +
                     
                    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.list out%03d.nut
                    +
                    + +
                  • +As the example above, but segment the input file according to the split +points specified by the segment_times option: +
                     
                    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
                    +
                    + +
                  • +As the example above, but use the ffmpegforce_key_frames’ +option to force key frames in the input at the specified location, together +with the segment option ‘segment_time_delta’ to account for +possible roundings operated when setting key frame times. +
                     
                    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
                    +
                    +

                    In order to force key frames on the input file, transcoding is +required. +

                    +
                  • +Segment the input file by splitting the input file according to the +frame numbers sequence specified with the ‘segment_frames’ option: +
                     
                    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
                    +
                    + +
                  • +To convert the ‘in.mkv’ to TS segments using the libx264 +and libfaac encoders: +
                     
                    ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a libfaac -f ssegment -segment_list out.list out%03d.ts
                    +
                    + +
                  • +Segment the input file, and create an M3U8 live playlist (can be used +as live HLS source): +
                     
                    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
                    +
                    +
                  + + +

                  20.16 tee

                  + +

                  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. +

                  +

                  It is different from specifying several outputs to the ffmpeg +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. +

                  +

                  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 the “Quoting and escaping” section in the ffmpeg-utils +manual). +

                  +

                  Muxer options can be specified for each slave by prepending them as a list of +key=value 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. +

                  +

                  The following special options are also recognized: +

                  +
                  f
                  +

                  Specify the format name. Useful if it cannot be guessed from the +output name suffix. +

                  +
                  +
                  bsfs[/spec]
                  +

                  Specify a list of bitstream filters to apply to the specified +output. It is possible to specify to which streams a given bitstream +filter applies, by appending a stream specifier to the option +separated by /. If the stream specifier is not specified, the +bistream filters will be applied to all streams in the output. +

                  +

                  Several bitstream filters can be specified, separated by ",". +

                  +
                  +
                  select
                  +

                  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. +

                  +
                  + +

                  Some examples follow. +

                    +
                  • +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): +
                     
                    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/"
                    +
                    + +
                  • +Use ffmpeg to encode the input, and send the output +to three different destinations. The dump_extra 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 ‘out.aac’ in order to make it contain only +audio packets. +
                     
                    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"
                    +
                    +
                  + +

                  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 ‘global_header’ flag. +

                  + +

                  21. Metadata

                  + +

                  FFmpeg is able to dump metadata from media files into a simple UTF-8-encoded +INI-like text file and then load it back using the metadata muxer/demuxer. +

                  +

                  The file format is as follows: +

                    +
                  1. +A file consists of a header and a number of metadata tags divided into sections, +each on its own line. + +
                  2. +The header is a ’;FFMETADATA’ string, followed by a version number (now 1). + +
                  3. +Metadata tags are of the form ’key=value’ + +
                  4. +Immediately after header follows global metadata + +
                  5. +After global metadata there may be sections with per-stream/per-chapter +metadata. + +
                  6. +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. + +
                  7. +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. + +
                  8. +Empty lines and lines starting with ’;’ or ’#’ are ignored. + +
                  9. +Metadata keys or values containing special characters (’=’, ’;’, ’#’, ’\’ and a +newline) must be escaped with a backslash ’\’. + +
                  10. +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’). +
                  + +

                  A ffmetadata file might look like this: +

                   
                  ;FFMETADATA1
                  +title=bike\\shed
                  +;this is a comment
                  +artist=FFmpeg troll team
                  +
                  +[CHAPTER]
                  +TIMEBASE=1/1000
                  +START=0
                  +#chapter ends at 0:01:00
                  +END=60000
                  +title=chapter \#1
                  +[STREAM]
                  +title=multi\
                  +line
                  +
                  + +

                  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. +

                  +

                  Extracting an ffmetadata file with ‘ffmpeg’ goes as follows: +

                   
                  ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
                  +
                  + +

                  Reinserting edited metadata information from the FFMETADATAFILE file can +be done as: +

                   
                  ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
                  +
                  + + +

                  22. Protocols

                  + +

                  Protocols are configured elements in FFmpeg that enable access to +resources that require specific protocols. +

                  +

                  When you configure your FFmpeg build, all the supported protocols are +enabled by default. You can list all available ones using the +configure option "–list-protocols". +

                  +

                  You can disable all the protocols using the configure option +"–disable-protocols", and selectively enable a protocol using the +option "–enable-protocol=PROTOCOL", or you can disable a +particular protocol using the option +"–disable-protocol=PROTOCOL". +

                  +

                  The option "-protocols" of the ff* tools will display the list of +supported protocols. +

                  +

                  A description of the currently available protocols follows. +

                  + +

                  22.1 bluray

                  + +

                  Read BluRay playlist. +

                  +

                  The accepted options are: +

                  +
                  angle
                  +

                  BluRay angle +

                  +
                  +
                  chapter
                  +

                  Start chapter (1...N) +

                  +
                  +
                  playlist
                  +

                  Playlist to read (BDMV/PLAYLIST/?????.mpls) +

                  +
                  +
                  + +

                  Examples: +

                  +

                  Read longest playlist from BluRay mounted to /mnt/bluray: +

                   
                  bluray:/mnt/bluray
                  +
                  + +

                  Read angle 2 of playlist 4 from BluRay mounted to /mnt/bluray, start from chapter 2: +

                   
                  -playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
                  +
                  + + +

                  22.2 cache

                  + +

                  Caching wrapper for input stream. +

                  +

                  Cache the input stream to temporary file. It brings seeking capability to live streams. +

                  +
                   
                  cache:URL
                  +
                  + + +

                  22.3 concat

                  + +

                  Physical concatenation protocol. +

                  +

                  Allow to read and seek from many resource in sequence as if they were +a unique resource. +

                  +

                  A URL accepted by this protocol has the syntax: +

                   
                  concat:URL1|URL2|...|URLN
                  +
                  + +

                  where URL1, URL2, ..., URLN are the urls of the +resource to be concatenated, each one possibly specifying a distinct +protocol. +

                  +

                  For example to read a sequence of files ‘split1.mpeg’, +‘split2.mpeg’, ‘split3.mpeg’ with ffplay use the +command: +

                   
                  ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
                  +
                  + +

                  Note that you may need to escape the character "|" which is special for +many shells. +

                  + +

                  22.4 crypto

                  + +

                  AES-encrypted stream reading protocol. +

                  +

                  The accepted options are: +

                  +
                  key
                  +

                  Set the AES decryption key binary block from given hexadecimal representation. +

                  +
                  +
                  iv
                  +

                  Set the AES decryption initialization vector binary block from given hexadecimal representation. +

                  +
                  + +

                  Accepted URL formats: +

                   
                  crypto:URL
                  +crypto+URL
                  +
                  + + +

                  22.5 data

                  + +

                  Data in-line in the URI. See http://en.wikipedia.org/wiki/Data_URI_scheme. +

                  +

                  For example, to convert a GIF file given inline with ffmpeg: +

                   
                  ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
                  +
                  + + +

                  22.6 file

                  + +

                  File access protocol. +

                  +

                  Allow to read from or read to a file. +

                  +

                  For example to read from a file ‘input.mpeg’ with ffmpeg +use the command: +

                   
                  ffmpeg -i file:input.mpeg output.mpeg
                  +
                  + +

                  The ff* tools default to the file protocol, that is a resource +specified with the name "FILE.mpeg" is interpreted as the URL +"file:FILE.mpeg". +

                  +

                  This protocol accepts the following options: +

                  +
                  +
                  truncate
                  +

                  Truncate existing files on write, if set to 1. A value of 0 prevents +truncating. Default value is 1. +

                  +
                  +
                  blocksize
                  +

                  Set I/O operation maximum block size, in bytes. Default value is +INT_MAX, 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. +

                  +
                  + + +

                  22.7 ftp

                  + +

                  FTP (File Transfer Protocol). +

                  +

                  Allow to read from or write to remote resources using FTP protocol. +

                  +

                  Following syntax is required. +

                   
                  ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
                  +
                  + +

                  This protocol accepts the following options. +

                  +
                  +
                  timeout
                  +

                  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. +

                  +
                  +
                  ftp-anonymous-password
                  +

                  Password used when login as anonymous user. Typically an e-mail address +should be used. +

                  +
                  +
                  ftp-write-seekable
                  +

                  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. +

                  +
                  + +

                  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. +

                  + +

                  22.8 gopher

                  + +

                  Gopher protocol. +

                  + +

                  22.9 hls

                  + +

                  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 +"+proto" after the hls URI scheme name, where proto +is either "file" or "http". +

                  +
                   
                  hls+http://host/path/to/remote/resource.m3u8
                  +hls+file://path/to/local/resource.m3u8
                  +
                  + +

                  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. +

                  + +

                  22.10 http

                  + +

                  HTTP (Hyper Text Transfer Protocol). +

                  +

                  This protocol accepts the following options. +

                  +
                  +
                  seekable
                  +

                  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. +

                  +
                  +
                  chunked_post
                  +

                  If set to 1 use chunked transfer-encoding for posts, default is 1. +

                  +
                  +
                  headers
                  +

                  Set custom HTTP headers, can override built in default headers. The +value must be a string encoding the headers. +

                  +
                  +
                  content_type
                  +

                  Force a content type. +

                  +
                  +
                  user-agent
                  +

                  Override User-Agent header. If not specified the protocol will use a +string describing the libavformat build. +

                  +
                  +
                  multiple_requests
                  +

                  Use persistent connections if set to 1. By default it is 0. +

                  +
                  +
                  post_data
                  +

                  Set custom HTTP post data. +

                  +
                  +
                  timeout
                  +

                  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. +

                  +
                  +
                  mime_type
                  +

                  Set MIME type. +

                  +
                  +
                  icy
                  +

                  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 ‘icy_metadata_headers’ and ‘icy_metadata_packet’ options. +The default is 0. +

                  +
                  +
                  icy_metadata_headers
                  +

                  If the server supports ICY metadata, this contains the ICY specific HTTP reply +headers, separated with newline characters. +

                  +
                  +
                  icy_metadata_packet
                  +

                  If the server supports ICY metadata, and ‘icy’ was set to 1, this +contains the last non-empty metadata packet sent by the server. +

                  +
                  +
                  cookies
                  +

                  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. +

                  +
                  + + +

                  22.10.1 HTTP Cookies

                  + +

                  Some HTTP requests will be denied unless cookie values are passed in with the +request. The ‘cookies’ 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. +

                  +

                  The required syntax to play a stream specifying a cookie is: +

                   
                  ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
                  +
                  + + +

                  22.11 mmst

                  + +

                  MMS (Microsoft Media Server) protocol over TCP. +

                  + +

                  22.12 mmsh

                  + +

                  MMS (Microsoft Media Server) protocol over HTTP. +

                  +

                  The required syntax is: +

                   
                  mmsh://server[:port][/app][/playpath]
                  +
                  + + +

                  22.13 md5

                  + +

                  MD5 output protocol. +

                  +

                  Computes the MD5 hash of the data to be written, and on close writes +this to the designated output or stdout if none is specified. It can +be used to test muxers without writing an actual file. +

                  +

                  Some examples follow. +

                   
                  # Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
                  +ffmpeg -i input.flv -f avi -y md5:output.avi.md5
                  +
                  +# Write the MD5 hash of the encoded AVI file to stdout.
                  +ffmpeg -i input.flv -f avi -y md5:
                  +
                  + +

                  Note that some formats (typically MOV) require the output protocol to +be seekable, so they will fail with the MD5 output protocol. +

                  + +

                  22.14 pipe

                  + +

                  UNIX pipe access protocol. +

                  +

                  Allow to read and write from UNIX pipes. +

                  +

                  The accepted syntax is: +

                   
                  pipe:[number]
                  +
                  + +

                  number is the number corresponding to the file descriptor of the +pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number +is not specified, by default the stdout file descriptor will be used +for writing, stdin for reading. +

                  +

                  For example to read from stdin with ffmpeg: +

                   
                  cat test.wav | ffmpeg -i pipe:0
                  +# ...this is the same as...
                  +cat test.wav | ffmpeg -i pipe:
                  +
                  + +

                  For writing to stdout with ffmpeg: +

                   
                  ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
                  +# ...this is the same as...
                  +ffmpeg -i test.wav -f avi pipe: | cat > test.avi
                  +
                  + +

                  This protocol accepts the following options: +

                  +
                  +
                  blocksize
                  +

                  Set I/O operation maximum block size, in bytes. Default value is +INT_MAX, 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. +

                  +
                  + +

                  Note that some formats (typically MOV), require the output protocol to +be seekable, so they will fail with the pipe output protocol. +

                  + +

                  22.15 rtmp

                  + +

                  Real-Time Messaging Protocol. +

                  +

                  The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia +content across a TCP/IP network. +

                  +

                  The required syntax is: +

                   
                  rtmp://[username:password@]server[:port][/app][/instance][/playpath]
                  +
                  + +

                  The accepted parameters are: +

                  +
                  username
                  +

                  An optional username (mostly for publishing). +

                  +
                  +
                  password
                  +

                  An optional password (mostly for publishing). +

                  +
                  +
                  server
                  +

                  The address of the RTMP server. +

                  +
                  +
                  port
                  +

                  The number of the TCP port to use (by default is 1935). +

                  +
                  +
                  app
                  +

                  It is the name of the application to access. It usually corresponds to +the path where the application is installed on the RTMP server +(e.g. ‘/ondemand/’, ‘/flash/live/’, etc.). You can override +the value parsed from the URI through the rtmp_app option, too. +

                  +
                  +
                  playpath
                  +

                  It is the path or name of the resource to play with reference to the +application specified in app, may be prefixed by "mp4:". You +can override the value parsed from the URI through the rtmp_playpath +option, too. +

                  +
                  +
                  listen
                  +

                  Act as a server, listening for an incoming connection. +

                  +
                  +
                  timeout
                  +

                  Maximum time to wait for the incoming connection. Implies listen. +

                  +
                  + +

                  Additionally, the following parameters can be set via command line options +(or in code via AVOptions): +

                  +
                  rtmp_app
                  +

                  Name of application to connect on the RTMP server. This option +overrides the parameter specified in the URI. +

                  +
                  +
                  rtmp_buffer
                  +

                  Set the client buffer time in milliseconds. The default is 3000. +

                  +
                  +
                  rtmp_conn
                  +

                  Extra arbitrary AMF connection parameters, parsed from a string, +e.g. like B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0. +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. NB:myFlag:1). This option may be used multiple +times to construct arbitrary AMF sequences. +

                  +
                  +
                  rtmp_flashver
                  +

                  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>).) +

                  +
                  +
                  rtmp_flush_interval
                  +

                  Number of packets flushed in the same request (RTMPT only). The default +is 10. +

                  +
                  +
                  rtmp_live
                  +

                  Specify that the media is a live stream. No resuming or seeking in +live streams is possible. The default value is any, 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 live and +recorded. +

                  +
                  +
                  rtmp_pageurl
                  +

                  URL of the web page in which the media was embedded. By default no +value will be sent. +

                  +
                  +
                  rtmp_playpath
                  +

                  Stream identifier to play or to publish. This option overrides the +parameter specified in the URI. +

                  +
                  +
                  rtmp_subscribe
                  +

                  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. +

                  +
                  +
                  rtmp_swfhash
                  +

                  SHA256 hash of the decompressed SWF file (32 bytes). +

                  +
                  +
                  rtmp_swfsize
                  +

                  Size of the decompressed SWF file, required for SWFVerification. +

                  +
                  +
                  rtmp_swfurl
                  +

                  URL of the SWF player for the media. By default no value will be sent. +

                  +
                  +
                  rtmp_swfverify
                  +

                  URL to player swf file, compute hash/size automatically. +

                  +
                  +
                  rtmp_tcurl
                  +

                  URL of the target stream. Defaults to proto://host[:port]/app. +

                  +
                  +
                  + +

                  For example to read with ffplay a multimedia resource named +"sample" from the application "vod" from an RTMP server "myserver": +

                   
                  ffplay rtmp://myserver/vod/sample
                  +
                  + +

                  To publish to a password protected server, passing the playpath and +app names separately: +

                   
                  ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
                  +
                  + + +

                  22.16 rtmpe

                  + +

                  Encrypted Real-Time Messaging Protocol. +

                  +

                  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. +

                  + +

                  22.17 rtmps

                  + +

                  Real-Time Messaging Protocol over a secure SSL connection. +

                  +

                  The Real-Time Messaging Protocol (RTMPS) is used for streaming +multimedia content across an encrypted connection. +

                  + +

                  22.18 rtmpt

                  + +

                  Real-Time Messaging Protocol tunneled through HTTP. +

                  +

                  The Real-Time Messaging Protocol tunneled through HTTP (RTMPT) is used +for streaming multimedia content within HTTP requests to traverse +firewalls. +

                  + +

                  22.19 rtmpte

                  + +

                  Encrypted Real-Time Messaging Protocol tunneled through HTTP. +

                  +

                  The Encrypted Real-Time Messaging Protocol tunneled through HTTP (RTMPTE) +is used for streaming multimedia content within HTTP requests to traverse +firewalls. +

                  + +

                  22.20 rtmpts

                  + +

                  Real-Time Messaging Protocol tunneled through HTTPS. +

                  +

                  The Real-Time Messaging Protocol tunneled through HTTPS (RTMPTS) is used +for streaming multimedia content within HTTPS requests to traverse +firewalls. +

                  + +

                  22.21 libssh

                  + +

                  Secure File Transfer Protocol via libssh +

                  +

                  Allow to read from or write to remote resources using SFTP protocol. +

                  +

                  Following syntax is required. +

                  +
                   
                  sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
                  +
                  + +

                  This protocol accepts the following options. +

                  +
                  +
                  timeout
                  +

                  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. +

                  +
                  +
                  truncate
                  +

                  Truncate existing files on write, if set to 1. A value of 0 prevents +truncating. Default value is 1. +

                  +
                  +
                  + +

                  Example: Play a file stored on remote server. +

                  +
                   
                  ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
                  +
                  + + +

                  22.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte

                  + +

                  Real-Time Messaging Protocol and its variants supported through +librtmp. +

                  +

                  Requires the presence of the librtmp headers and library during +configuration. You need to explicitly configure the build with +"–enable-librtmp". If enabled this will replace the native RTMP +protocol. +

                  +

                  This protocol provides most client functions and a few server +functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), +encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled +variants of these encrypted types (RTMPTE, RTMPTS). +

                  +

                  The required syntax is: +

                   
                  rtmp_proto://server[:port][/app][/playpath] options
                  +
                  + +

                  where rtmp_proto is one of the strings "rtmp", "rtmpt", "rtmpe", +"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and +server, port, app and playpath have the same +meaning as specified for the RTMP native protocol. +options contains a list of space-separated options of the form +key=val. +

                  +

                  See the librtmp manual page (man 3 librtmp) for more information. +

                  +

                  For example, to stream a file in real-time to an RTMP server using +ffmpeg: +

                   
                  ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
                  +
                  + +

                  To play the same stream using ffplay: +

                   
                  ffplay "rtmp://myserver/live/mystream live=1"
                  +
                  + + +

                  22.23 rtp

                  + +

                  Real-time Transport Protocol. +

                  +

                  The required syntax for an RTP URL is: +rtp://hostname[:port][?option=val...] +

                  +

                  port specifies the RTP port to use. +

                  +

                  The following URL options are supported: +

                  +
                  +
                  ttl=n
                  +

                  Set the TTL (Time-To-Live) value (for multicast only). +

                  +
                  +
                  rtcpport=n
                  +

                  Set the remote RTCP port to n. +

                  +
                  +
                  localrtpport=n
                  +

                  Set the local RTP port to n. +

                  +
                  +
                  localrtcpport=n'
                  +

                  Set the local RTCP port to n. +

                  +
                  +
                  pkt_size=n
                  +

                  Set max packet size (in bytes) to n. +

                  +
                  +
                  connect=0|1
                  +

                  Do a connect() on the UDP socket (if set to 1) or not (if set +to 0). +

                  +
                  +
                  sources=ip[,ip]
                  +

                  List allowed source IP addresses. +

                  +
                  +
                  block=ip[,ip]
                  +

                  List disallowed (blocked) source IP addresses. +

                  +
                  +
                  write_to_source=0|1
                  +

                  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). +

                  +
                  +
                  localport=n
                  +

                  Set the local RTP port to n. +

                  +

                  This is a deprecated option. Instead, ‘localrtpport’ should be +used. +

                  +
                  +
                  + +

                  Important notes: +

                  +
                    +
                  1. +If ‘rtcpport’ is not set the RTCP port will be set to the RTP +port value plus 1. + +
                  2. +If ‘localrtpport’ (the local RTP port) is not set any available +port will be used for the local RTP and RTCP ports. + +
                  3. +If ‘localrtcpport’ (the local RTCP port) is not set it will be +set to the the local RTP port value plus 1. +
                  + + +

                  22.24 rtsp

                  + +

                  RTSP is not technically a protocol handler in libavformat, it is a demuxer +and muxer. The demuxer supports both normal RTSP (with data transferred +over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with +data transferred over RDT). +

                  +

                  The muxer can be used to send a stream using RTSP ANNOUNCE to a server +supporting it (currently Darwin Streaming Server and Mischa Spiegelmock’s +RTSP server). +

                  +

                  The required syntax for a RTSP url is: +

                   
                  rtsp://hostname[:port]/path
                  +
                  + +

                  The following options (set on the ffmpeg/ffplay command +line, or set in code via AVOptions or in avformat_open_input), +are supported: +

                  +

                  Flags for rtsp_transport: +

                  +
                  +
                  udp
                  +

                  Use UDP as lower transport protocol. +

                  +
                  +
                  tcp
                  +

                  Use TCP (interleaving within the RTSP control channel) as lower +transport protocol. +

                  +
                  +
                  udp_multicast
                  +

                  Use UDP multicast as lower transport protocol. +

                  +
                  +
                  http
                  +

                  Use HTTP tunneling as lower transport protocol, which is useful for +passing proxies. +

                  +
                  + +

                  Multiple lower transport protocols may be specified, in that case they are +tried one at a time (if the setup of one fails, the next one is tried). +For the muxer, only the tcp and udp options are supported. +

                  +

                  Flags for rtsp_flags: +

                  +
                  +
                  filter_src
                  +

                  Accept packets only from negotiated peer address and port. +

                  +
                  listen
                  +

                  Act as a server, listening for an incoming connection. +

                  +
                  + +

                  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 max_delay field of AVFormatContext). +

                  +

                  When watching multi-bitrate Real-RTSP streams with ffplay, the +streams to display can be chosen with -vst n and +-ast n for video and audio respectively, and can be switched +on the fly by pressing v and a. +

                  +

                  Example command lines: +

                  +

                  To watch a stream over UDP, with a max reordering delay of 0.5 seconds: +

                  +
                   
                  ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
                  +
                  + +

                  To watch a stream tunneled over HTTP: +

                  +
                   
                  ffplay -rtsp_transport http rtsp://server/video.mp4
                  +
                  + +

                  To send a stream in realtime to a RTSP server, for others to watch: +

                  +
                   
                  ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
                  +
                  + +

                  To receive a stream in realtime: +

                  +
                   
                  ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp output
                  +
                  + +
                  +
                  stimeout
                  +

                  Socket IO timeout in micro seconds. +

                  +
                  + + +

                  22.25 sap

                  + +

                  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. +

                  + +

                  22.25.1 Muxer

                  + +

                  The syntax for a SAP url given to the muxer is: +

                   
                  sap://destination[:port][?options]
                  +
                  + +

                  The RTP packets are sent to destination on port port, +or to port 5004 if no port is specified. +options is a &-separated list. The following options +are supported: +

                  +
                  +
                  announce_addr=address
                  +

                  Specify the destination IP address for sending the announcements to. +If omitted, the announcements are sent to the commonly used SAP +announcement multicast address 224.2.127.254 (sap.mcast.net), or +ff0e::2:7ffe if destination is an IPv6 address. +

                  +
                  +
                  announce_port=port
                  +

                  Specify the port to send the announcements on, defaults to +9875 if not specified. +

                  +
                  +
                  ttl=ttl
                  +

                  Specify the time to live value for the announcements and RTP packets, +defaults to 255. +

                  +
                  +
                  same_port=0|1
                  +

                  If set to 1, send all RTP streams on the same port pair. If zero (the +default), all streams are sent on unique ports, with each stream on a +port 2 numbers higher than the previous. +VLC/Live555 requires this to be set to 1, to be able to receive the stream. +The RTP stack in libavformat for receiving requires all streams to be sent +on unique ports. +

                  +
                  + +

                  Example command lines follow. +

                  +

                  To broadcast a stream on the local subnet, for watching in VLC: +

                  +
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1
                  +
                  + +

                  Similarly, for watching in ffplay: +

                  +
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255
                  +
                  + +

                  And for watching in ffplay, over IPv6: +

                  +
                   
                  ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]
                  +
                  + + +

                  22.25.2 Demuxer

                  + +

                  The syntax for a SAP url given to the demuxer is: +

                   
                  sap://[address][:port]
                  +
                  + +

                  address is the multicast address to listen for announcements on, +if omitted, the default 224.2.127.254 (sap.mcast.net) is used. port +is the port that is listened on, 9875 if omitted. +

                  +

                  The demuxers listens for announcements on the given address and port. +Once an announcement is received, it tries to receive that particular stream. +

                  +

                  Example command lines follow. +

                  +

                  To play back the first stream announced on the normal SAP multicast address: +

                  +
                   
                  ffplay sap://
                  +
                  + +

                  To play back the first stream announced on one the default IPv6 SAP multicast address: +

                  +
                   
                  ffplay sap://[ff0e::2:7ffe]
                  +
                  + + +

                  22.26 sctp

                  + +

                  Stream Control Transmission Protocol. +

                  +

                  The accepted URL syntax is: +

                   
                  sctp://host:port[?options]
                  +
                  + +

                  The protocol accepts the following options: +

                  +
                  listen
                  +

                  If set to any value, listen for an incoming connection. Outgoing connection is done by default. +

                  +
                  +
                  max_streams
                  +

                  Set the maximum number of streams. By default no limit is set. +

                  +
                  + + +

                  22.27 srtp

                  + +

                  Secure Real-time Transport Protocol. +

                  +

                  The accepted options are: +

                  +
                  srtp_in_suite
                  +
                  srtp_out_suite
                  +

                  Select input and output encoding suites. +

                  +

                  Supported values: +

                  +
                  AES_CM_128_HMAC_SHA1_80
                  +
                  SRTP_AES128_CM_HMAC_SHA1_80
                  +
                  AES_CM_128_HMAC_SHA1_32
                  +
                  SRTP_AES128_CM_HMAC_SHA1_32
                  +
                  + +
                  +
                  srtp_in_params
                  +
                  srtp_out_params
                  +

                  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. +

                  +
                  + + +

                  22.28 tcp

                  + +

                  Trasmission Control Protocol. +

                  +

                  The required syntax for a TCP url is: +

                   
                  tcp://hostname:port[?options]
                  +
                  + +
                  +
                  listen
                  +

                  Listen for an incoming connection +

                  +
                  +
                  timeout=microseconds
                  +

                  In read mode: if no data arrived in more than this time interval, raise error. +In write mode: if socket cannot be written in more than this time interval, raise error. +This also sets timeout on TCP connection establishing. +

                  +
                   
                  ffmpeg -i input -f format tcp://hostname:port?listen
                  +ffplay tcp://hostname:port
                  +
                  + +
                  +
                  + + +

                  22.29 tls

                  + +

                  Transport Layer Security (TLS) / Secure Sockets Layer (SSL) +

                  +

                  The required syntax for a TLS/SSL url is: +

                   
                  tls://hostname:port[?options]
                  +
                  + +

                  The following parameters can be set via command line options +(or in code via AVOptions): +

                  +
                  +
                  ca_file, cafile=filename
                  +

                  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. +

                  +
                  +
                  tls_verify=1|0
                  +

                  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.) +

                  +

                  This is disabled by default since it requires a CA database to be +provided by the caller in many cases. +

                  +
                  +
                  cert_file, cert=filename
                  +

                  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.) +

                  +
                  +
                  key_file, key=filename
                  +

                  A file containing the private key for the certificate. +

                  +
                  +
                  listen=1|0
                  +

                  If enabled, listen for connections on the provided port, and assume +the server role in the handshake instead of the client role. +

                  +
                  +
                  + +

                  Example command lines: +

                  +

                  To create a TLS/SSL server that serves an input stream. +

                  +
                   
                  ffmpeg -i input -f format tls://hostname:port?listen&cert=server.crt&key=server.key
                  +
                  + +

                  To play back a stream from the TLS/SSL server using ffplay: +

                  +
                   
                  ffplay tls://hostname:port
                  +
                  + + +

                  22.30 udp

                  + +

                  User Datagram Protocol. +

                  +

                  The required syntax for a UDP url is: +

                   
                  udp://hostname:port[?options]
                  +
                  + +

                  options contains a list of &-separated options of the form key=val. +

                  +

                  In case threading is enabled on the system, a circular buffer is used +to store the incoming data, which allows to reduce loss of data due to +UDP socket buffer overruns. The fifo_size and +overrun_nonfatal options are related to this buffer. +

                  +

                  The list of supported options follows. +

                  +
                  +
                  buffer_size=size
                  +

                  Set the UDP socket buffer size in bytes. This is used both for the +receiving and the sending buffer size. +

                  +
                  +
                  localport=port
                  +

                  Override the local UDP port to bind with. +

                  +
                  +
                  localaddr=addr
                  +

                  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. +

                  +
                  +
                  pkt_size=size
                  +

                  Set the size in bytes of UDP packets. +

                  +
                  +
                  reuse=1|0
                  +

                  Explicitly allow or disallow reusing UDP sockets. +

                  +
                  +
                  ttl=ttl
                  +

                  Set the time to live value (for multicast only). +

                  +
                  +
                  connect=1|0
                  +

                  Initialize the UDP socket with connect(). In this case, the +destination address can’t be changed with ff_udp_set_remote_url later. +If the destination address isn’t known at the start, this option can +be specified in ff_udp_set_remote_url, too. +This allows finding out the source address for the packets with getsockname, +and makes writes return with AVERROR(ECONNREFUSED) if "destination +unreachable" is received. +For receiving, this gives the benefit of only receiving packets from +the specified peer address/port. +

                  +
                  +
                  sources=address[,address]
                  +

                  Only receive packets sent to the multicast group from one of the +specified sender IP addresses. +

                  +
                  +
                  block=address[,address]
                  +

                  Ignore packets sent to the multicast group from the specified +sender IP addresses. +

                  +
                  +
                  fifo_size=units
                  +

                  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. +

                  +
                  +
                  overrun_nonfatal=1|0
                  +

                  Survive in case of UDP receiving circular buffer overrun. Default +value is 0. +

                  +
                  +
                  timeout=microseconds
                  +

                  In read mode: if no data arrived in more than this time interval, raise error. +

                  +
                  + +

                  Some usage examples of the UDP protocol with ffmpeg follow. +

                  +

                  To stream over UDP to a remote endpoint: +

                   
                  ffmpeg -i input -f format udp://hostname:port
                  +
                  + +

                  To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer: +

                   
                  ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
                  +
                  + +

                  To receive over UDP from a remote endpoint: +

                   
                  ffmpeg -i udp://[multicast-address]:port
                  +
                  + + +

                  22.31 unix

                  + +

                  Unix local socket +

                  +

                  The required syntax for a Unix socket URL is: +

                  +
                   
                  unix://filepath
                  +
                  + +

                  The following parameters can be set via command line options +(or in code via AVOptions): +

                  +
                  +
                  timeout
                  +

                  Timeout in ms. +

                  +
                  listen
                  +

                  Create the Unix socket in listening mode. +

                  +
                  + + +

                  23. Device Options

                  + +

                  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). +

                  +

                  In addition each input or output device may support so-called private +options, which are specific for that component. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools, or by setting the value explicitly in the device +AVFormatContext options or using the ‘libavutil/opt.h’ API +for programmatic use. +

                  + + +

                  24. Input Devices

                  + +

                  Input devices are configured elements in FFmpeg which allow to access +the data coming from a multimedia device attached to your system. +

                  +

                  When you configure your FFmpeg build, all the supported input devices +are enabled by default. You can list all available ones using the +configure option "–list-indevs". +

                  +

                  You can disable all the input devices using the configure option +"–disable-indevs", and selectively enable an input device using the +option "–enable-indev=INDEV", or you can disable a particular +input device using the option "–disable-indev=INDEV". +

                  +

                  The option "-formats" of the ff* tools will display the list of +supported input devices (amongst the demuxers). +

                  +

                  A description of the currently available input devices follows. +

                  + +

                  24.1 alsa

                  + +

                  ALSA (Advanced Linux Sound Architecture) input device. +

                  +

                  To enable this input device during configuration you need libasound +installed on your system. +

                  +

                  This device allows capturing from an ALSA device. The name of the +device to capture has to be an ALSA card identifier. +

                  +

                  An ALSA identifier has the syntax: +

                   
                  hw:CARD[,DEV[,SUBDEV]]
                  +
                  + +

                  where the DEV and SUBDEV components are optional. +

                  +

                  The three arguments (in order: CARD,DEV,SUBDEV) +specify card number or identifier, device number and subdevice number +(-1 means any). +

                  +

                  To see the list of cards currently recognized by your system check the +files ‘/proc/asound/cards’ and ‘/proc/asound/devices’. +

                  +

                  For example to capture with ffmpeg from an ALSA device with +card id 0, you may run the command: +

                   
                  ffmpeg -f alsa -i hw:0 alsaout.wav
                  +
                  + +

                  For more information see: +http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html +

                  + +

                  24.2 bktr

                  + +

                  BSD video input device. +

                  + +

                  24.3 dshow

                  + +

                  Windows DirectShow input device. +

                  +

                  DirectShow support is enabled when FFmpeg is built with the mingw-w64 project. +Currently only audio and video devices are supported. +

                  +

                  Multiple devices may be opened as separate inputs, but they may also be +opened on the same input, which should improve synchronism between them. +

                  +

                  The input name should be in the format: +

                  +
                   
                  TYPE=NAME[:TYPE=NAME]
                  +
                  + +

                  where TYPE can be either audio or video, +and NAME is the device’s name. +

                  + +

                  24.3.1 Options

                  + +

                  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. +

                  +
                  +
                  video_size
                  +

                  Set the video size in the captured video. +

                  +
                  +
                  framerate
                  +

                  Set the frame rate in the captured video. +

                  +
                  +
                  sample_rate
                  +

                  Set the sample rate (in Hz) of the captured audio. +

                  +
                  +
                  sample_size
                  +

                  Set the sample size (in bits) of the captured audio. +

                  +
                  +
                  channels
                  +

                  Set the number of channels in the captured audio. +

                  +
                  +
                  list_devices
                  +

                  If set to ‘true’, print a list of devices and exit. +

                  +
                  +
                  list_options
                  +

                  If set to ‘true’, print a list of selected device’s options +and exit. +

                  +
                  +
                  video_device_number
                  +

                  Set video device number for devices with same name (starts at 0, +defaults to 0). +

                  +
                  +
                  audio_device_number
                  +

                  Set audio device number for devices with same name (starts at 0, +defaults to 0). +

                  +
                  +
                  pixel_format
                  +

                  Select pixel format to be used by DirectShow. This may only be set when +the video codec is not set or set to rawvideo. +

                  +
                  +
                  audio_buffer_size
                  +

                  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 +http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx +

                  +
                  +
                  + + +

                  24.3.2 Examples

                  + +
                    +
                  • +Print the list of DirectShow supported devices and exit: +
                     
                    $ ffmpeg -list_devices true -f dshow -i dummy
                    +
                    + +
                  • +Open video device Camera: +
                     
                    $ ffmpeg -f dshow -i video="Camera"
                    +
                    + +
                  • +Open second video device with name Camera: +
                     
                    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
                    +
                    + +
                  • +Open video device Camera and audio device Microphone: +
                     
                    $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
                    +
                    + +
                  • +Print the list of supported options in selected device and exit: +
                     
                    $ ffmpeg -list_options true -f dshow -i video="Camera"
                    +
                    + +
                  + + +

                  24.4 dv1394

                  + +

                  Linux DV 1394 input device. +

                  + +

                  24.5 fbdev

                  + +

                  Linux framebuffer input device. +

                  +

                  The Linux framebuffer is a graphic hardware-independent abstraction +layer to show graphics on a computer monitor, typically on the +console. It is accessed through a file device node, usually +‘/dev/fb0’. +

                  +

                  For more detailed information read the file +Documentation/fb/framebuffer.txt included in the Linux source tree. +

                  +

                  To record from the framebuffer device ‘/dev/fb0’ with +ffmpeg: +

                   
                  ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
                  +
                  + +

                  You can take a single screenshot image with the command: +

                   
                  ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
                  +
                  + +

                  See also http://linux-fbdev.sourceforge.net/, and fbset(1). +

                  + +

                  24.6 iec61883

                  + +

                  FireWire DV/HDV input device using libiec61883. +

                  +

                  To enable this input device, you need libiec61883, libraw1394 and +libavc1394 installed on your system. Use the configure option +--enable-libiec61883 to compile with the device enabled. +

                  +

                  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. +

                  +

                  Specify the FireWire port to be used as input file, or "auto" +to choose the first port connected. +

                  + +

                  24.6.1 Options

                  + +
                  +
                  dvtype
                  +

                  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 ‘auto’, ‘dv’ and ‘hdv’ are supported. +

                  +
                  +
                  dvbuffer
                  +

                  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. +

                  +
                  +
                  dvguid
                  +

                  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. +

                  +
                  +
                  + + +

                  24.6.2 Examples

                  + +
                    +
                  • +Grab and show the input of a FireWire DV/HDV device. +
                     
                    ffplay -f iec61883 -i auto
                    +
                    + +
                  • +Grab and record the input of a FireWire DV/HDV device, +using a packet buffer of 100000 packets if the source is HDV. +
                     
                    ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg
                    +
                    + +
                  + + +

                  24.7 jack

                  + +

                  JACK input device. +

                  +

                  To enable this input device during configuration you need libjack +installed on your system. +

                  +

                  A JACK input device creates one or more JACK writable clients, one for +each audio channel, with name client_name:input_N, where +client_name is the name provided by the application, and N +is a number which identifies the channel. +Each writable client will send the acquired data to the FFmpeg input +device. +

                  +

                  Once you have created one or more JACK readable clients, you need to +connect them to one or more JACK writable clients. +

                  +

                  To connect or disconnect JACK clients you can use the jack_connect +and jack_disconnect programs, or do it through a graphical interface, +for example with qjackctl. +

                  +

                  To list the JACK clients and their properties you can invoke the command +jack_lsp. +

                  +

                  Follows an example which shows how to capture a JACK readable client +with ffmpeg. +

                   
                  # Create a JACK writable client with name "ffmpeg".
                  +$ ffmpeg -f jack -i ffmpeg -y out.wav
                  +
                  +# Start the sample jack_metro readable client.
                  +$ jack_metro -b 120 -d 0.2 -f 4000
                  +
                  +# List the current JACK clients.
                  +$ jack_lsp -c
                  +system:capture_1
                  +system:capture_2
                  +system:playback_1
                  +system:playback_2
                  +ffmpeg:input_1
                  +metro:120_bpm
                  +
                  +# Connect metro to the ffmpeg writable client.
                  +$ jack_connect metro:120_bpm ffmpeg:input_1
                  +
                  + +

                  For more information read: +http://jackaudio.org/ +

                  + +

                  24.8 lavfi

                  + +

                  Libavfilter input virtual device. +

                  +

                  This input device reads data from the open output pads of a libavfilter +filtergraph. +

                  +

                  For each filtergraph open output, the input device will create a +corresponding stream which is mapped to the generated output. Currently +only video data is supported. The filtergraph is specified through the +option ‘graph’. +

                  + +

                  24.8.1 Options

                  + +
                  +
                  graph
                  +

                  Specify the filtergraph to use as input. Each video open output must be +labelled by a unique string of the form "outN", where N is a +number starting from 0 corresponding to the mapped input stream +generated by the device. +The first unlabelled output is automatically assigned to the "out0" +label, but all the others need to be specified explicitly. +

                  +

                  If not specified defaults to the filename specified for the input +device. +

                  +
                  +
                  graph_file
                  +

                  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 graph. +

                  +
                  +
                  + + +

                  24.8.2 Examples

                  + +
                    +
                  • +Create a color video stream and play it back with ffplay: +
                     
                    ffplay -f lavfi -graph "color=c=pink [out0]" dummy
                    +
                    + +
                  • +As the previous example, but use filename for specifying the graph +description, and omit the "out0" label: +
                     
                    ffplay -f lavfi color=c=pink
                    +
                    + +
                  • +Create three different video test filtered sources and play them: +
                     
                    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
                    +
                    + +
                  • +Read an audio stream from a file using the amovie source and play it +back with ffplay: +
                     
                    ffplay -f lavfi "amovie=test.wav"
                    +
                    + +
                  • +Read an audio stream and a video stream and play it back with +ffplay: +
                     
                    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
                    +
                    + +
                  + + +

                  24.9 libdc1394

                  + +

                  IIDC1394 input device, based on libdc1394 and libraw1394. +

                  + +

                  24.10 openal

                  + +

                  The OpenAL input device provides audio capture on all systems with a +working OpenAL 1.1 implementation. +

                  +

                  To enable this input device during configuration, you need OpenAL +headers and libraries installed on your system, and need to configure +FFmpeg with --enable-openal. +

                  +

                  OpenAL headers and libraries should be provided as part of your OpenAL +implementation, or as an additional download (an SDK). Depending on your +installation you may need to specify additional flags via the +--extra-cflags and --extra-ldflags for allowing the build +system to locate the OpenAL headers and libraries. +

                  +

                  An incomplete list of OpenAL implementations follows: +

                  +
                  +
                  Creative
                  +

                  The official Windows implementation, providing hardware acceleration +with supported devices and software fallback. +See http://openal.org/. +

                  +
                  OpenAL Soft
                  +

                  Portable, open source (LGPL) software implementation. Includes +backends for the most common sound APIs on the Windows, Linux, +Solaris, and BSD operating systems. +See http://kcat.strangesoft.net/openal.html. +

                  +
                  Apple
                  +

                  OpenAL is part of Core Audio, the official Mac OS X Audio interface. +See http://developer.apple.com/technologies/mac/audio-and-video.html +

                  +
                  + +

                  This device allows to capture from an audio input device handled +through OpenAL. +

                  +

                  You need to specify the name of the device to capture in the provided +filename. If the empty string is provided, the device will +automatically select the default device. You can get the list of the +supported devices by using the option list_devices. +

                  + +

                  24.10.1 Options

                  + +
                  +
                  channels
                  +

                  Set the number of channels in the captured audio. Only the values +‘1’ (monaural) and ‘2’ (stereo) are currently supported. +Defaults to ‘2’. +

                  +
                  +
                  sample_size
                  +

                  Set the sample size (in bits) of the captured audio. Only the values +‘8’ and ‘16’ are currently supported. Defaults to +‘16’. +

                  +
                  +
                  sample_rate
                  +

                  Set the sample rate (in Hz) of the captured audio. +Defaults to ‘44.1k’. +

                  +
                  +
                  list_devices
                  +

                  If set to ‘true’, print a list of devices and exit. +Defaults to ‘false’. +

                  +
                  +
                  + + +

                  24.10.2 Examples

                  + +

                  Print the list of OpenAL supported devices and exit: +

                   
                  $ ffmpeg -list_devices true -f openal -i dummy out.ogg
                  +
                  + +

                  Capture from the OpenAL device ‘DR-BT101 via PulseAudio’: +

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
                  +
                  + +

                  Capture from the default device (note the empty string ” as filename): +

                   
                  $ ffmpeg -f openal -i '' out.ogg
                  +
                  + +

                  Capture from two devices simultaneously, writing to two different files, +within the same ffmpeg command: +

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
                  +
                  +

                  Note: not all OpenAL implementations support multiple simultaneous capture - +try the latest OpenAL Soft if the above does not work. +

                  + +

                  24.11 oss

                  + +

                  Open Sound System input device. +

                  +

                  The filename to provide to the input device is the device node +representing the OSS input device, and is usually set to +‘/dev/dsp’. +

                  +

                  For example to grab from ‘/dev/dsp’ using ffmpeg use the +command: +

                   
                  ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
                  +
                  + +

                  For more information about OSS see: +http://manuals.opensound.com/usersguide/dsp.html +

                  + +

                  24.12 pulse

                  + +

                  PulseAudio input device. +

                  +

                  To enable this output device you need to configure FFmpeg with --enable-libpulse. +

                  +

                  The filename to provide to the input device is a source device or the +string "default" +

                  +

                  To list the PulseAudio source devices and their properties you can invoke +the command pactl list sources. +

                  +

                  More information about PulseAudio can be found on http://www.pulseaudio.org. +

                  + +

                  24.12.1 Options

                  +
                  +
                  server
                  +

                  Connect to a specific PulseAudio server, specified by an IP address. +Default server is used when not provided. +

                  +
                  +
                  name
                  +

                  Specify the application name PulseAudio will use when showing active clients, +by default it is the LIBAVFORMAT_IDENT string. +

                  +
                  +
                  stream_name
                  +

                  Specify the stream name PulseAudio will use when showing active streams, +by default it is "record". +

                  +
                  +
                  sample_rate
                  +

                  Specify the samplerate in Hz, by default 48kHz is used. +

                  +
                  +
                  channels
                  +

                  Specify the channels in use, by default 2 (stereo) is set. +

                  +
                  +
                  frame_size
                  +

                  Specify the number of bytes per frame, by default it is set to 1024. +

                  +
                  +
                  fragment_size
                  +

                  Specify the minimal buffering fragment in PulseAudio, it will affect the +audio latency. By default it is unset. +

                  +
                  + + +

                  24.12.2 Examples

                  +

                  Record a stream from default device: +

                   
                  ffmpeg -f pulse -i default /tmp/pulse.wav
                  +
                  + + +

                  24.13 sndio

                  + +

                  sndio input device. +

                  +

                  To enable this input device during configuration you need libsndio +installed on your system. +

                  +

                  The filename to provide to the input device is the device node +representing the sndio input device, and is usually set to +‘/dev/audio0’. +

                  +

                  For example to grab from ‘/dev/audio0’ using ffmpeg use the +command: +

                   
                  ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
                  +
                  + + +

                  24.14 video4linux2, v4l2

                  + +

                  Video4Linux2 input video device. +

                  +

                  "v4l2" can be used as alias for "video4linux2". +

                  +

                  If FFmpeg is built with v4l-utils support (by using the +--enable-libv4l2 configure option), it is possible to use it with the +-use_libv4l2 input device option. +

                  +

                  The name of the device to grab is a file device node, usually Linux +systems tend to automatically create such nodes when the device +(e.g. an USB webcam) is plugged into the system, and has a name of the +kind ‘/dev/videoN’, where N is a number associated to +the device. +

                  +

                  Video4Linux2 devices usually support a limited set of +widthxheight sizes and frame rates. You can check which are +supported using -list_formats all for Video4Linux2 devices. +Some devices, like TV cards, support one or more standards. It is possible +to list all the supported standards using -list_standards all. +

                  +

                  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 +‘-timestamps abs’ or ‘-ts abs’ option can be used to force +conversion into the real time clock. +

                  +

                  Some usage examples of the video4linux2 device with ffmpeg +and ffplay: +

                    +
                  • +Grab and show the input of a video4linux2 device: +
                     
                    ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
                    +
                    + +
                  • +Grab and record the input of a video4linux2 device, leave the +frame rate and size as previously set: +
                     
                    ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
                    +
                    +
                  + +

                  For more information about Video4Linux, check http://linuxtv.org/. +

                  + +

                  24.14.1 Options

                  + +
                  +
                  standard
                  +

                  Set the standard. Must be the name of a supported standard. To get a +list of the supported standards, use the ‘list_standards’ +option. +

                  +
                  +
                  channel
                  +

                  Set the input channel number. Default to -1, which means using the +previously selected channel. +

                  +
                  +
                  video_size
                  +

                  Set the video frame size. The argument must be a string in the form +WIDTHxHEIGHT or a valid size abbreviation. +

                  +
                  +
                  pixel_format
                  +

                  Select the pixel format (only valid for raw video input). +

                  +
                  +
                  input_format
                  +

                  Set the preferred pixel format (for raw video) or a codec name. +This option allows to select the input format, when several are +available. +

                  +
                  +
                  framerate
                  +

                  Set the preferred video frame rate. +

                  +
                  +
                  list_formats
                  +

                  List available formats (supported pixel formats, codecs, and frame +sizes) and exit. +

                  +

                  Available values are: +

                  +
                  all
                  +

                  Show all available (compressed and non-compressed) formats. +

                  +
                  +
                  raw
                  +

                  Show only raw video (non-compressed) formats. +

                  +
                  +
                  compressed
                  +

                  Show only compressed formats. +

                  +
                  + +
                  +
                  list_standards
                  +

                  List supported standards and exit. +

                  +

                  Available values are: +

                  +
                  all
                  +

                  Show all supported standards. +

                  +
                  + +
                  +
                  timestamps, ts
                  +

                  Set type of timestamps for grabbed frames. +

                  +

                  Available values are: +

                  +
                  default
                  +

                  Use timestamps from the kernel. +

                  +
                  +
                  abs
                  +

                  Use absolute timestamps (wall clock). +

                  +
                  +
                  mono2abs
                  +

                  Force conversion from monotonic to absolute timestamps. +

                  +
                  + +

                  Default value is default. +

                  +
                  + + +

                  24.15 vfwcap

                  + +

                  VfW (Video for Windows) capture input device. +

                  +

                  The filename passed as input is the capture driver number, ranging from +0 to 9. You may use "list" as filename to print a list of drivers. Any +other filename will be interpreted as device number 0. +

                  + +

                  24.16 x11grab

                  + +

                  X11 video input device. +

                  +

                  This device allows to capture a region of an X11 display. +

                  +

                  The filename passed as input has the syntax: +

                   
                  [hostname]:display_number.screen_number[+x_offset,y_offset]
                  +
                  + +

                  hostname:display_number.screen_number specifies the +X11 display name of the screen to grab from. hostname can be +omitted, and defaults to "localhost". The environment variable +DISPLAY contains the default display name. +

                  +

                  x_offset and y_offset specify the offsets of the grabbed +area with respect to the top-left border of the X11 screen. They +default to 0. +

                  +

                  Check the X11 documentation (e.g. man X) for more detailed information. +

                  +

                  Use the dpyinfo program for getting basic information about the +properties of your X11 display (e.g. grep for "name" or "dimensions"). +

                  +

                  For example to grab from ‘:0.0’ using ffmpeg: +

                   
                  ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
                  +
                  + +

                  Grab at position 10,20: +

                   
                  ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
                  +
                  + + +

                  24.16.1 Options

                  + +
                  +
                  draw_mouse
                  +

                  Specify whether to draw the mouse pointer. A value of 0 specify +not to draw the pointer. Default value is 1. +

                  +
                  +
                  follow_mouse
                  +

                  Make the grabbed area follow the mouse. The argument can be +centered or a number of pixels PIXELS. +

                  +

                  When it is specified with "centered", the grabbing region follows the mouse +pointer and keeps the pointer at the center of region; otherwise, the region +follows only when the mouse pointer reaches within PIXELS (greater than +zero) to the edge of region. +

                  +

                  For example: +

                   
                  ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
                  +
                  + +

                  To follow only when the mouse pointer reaches within 100 pixels to edge: +

                   
                  ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
                  +
                  + +
                  +
                  framerate
                  +

                  Set the grabbing frame rate. Default value is ntsc, +corresponding to a frame rate of 30000/1001. +

                  +
                  +
                  show_region
                  +

                  Show grabbed region on screen. +

                  +

                  If show_region is specified with 1, 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. +

                  +

                  For example: +

                   
                  ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
                  +
                  + +

                  With follow_mouse: +

                   
                  ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
                  +
                  + +
                  +
                  video_size
                  +

                  Set the video frame size. Default value is vga. +

                  +
                  + + +

                  25. Output Devices

                  + +

                  Output devices are configured elements in FFmpeg that can write +multimedia data to an output device attached to your system. +

                  +

                  When you configure your FFmpeg build, all the supported output devices +are enabled by default. You can list all available ones using the +configure option "–list-outdevs". +

                  +

                  You can disable all the output devices using the configure option +"–disable-outdevs", and selectively enable an output device using the +option "–enable-outdev=OUTDEV", or you can disable a particular +input device using the option "–disable-outdev=OUTDEV". +

                  +

                  The option "-formats" of the ff* tools will display the list of +enabled output devices (amongst the muxers). +

                  +

                  A description of the currently available output devices follows. +

                  + +

                  25.1 alsa

                  + +

                  ALSA (Advanced Linux Sound Architecture) output device. +

                  + +

                  25.2 caca

                  + +

                  CACA output device. +

                  +

                  This output device allows 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. +

                  +

                  To enable this output device you need to configure FFmpeg with +--enable-libcaca. +libcaca is a graphics library that outputs text instead of pixels. +

                  +

                  For more information about libcaca, check: +http://caca.zoy.org/wiki/libcaca +

                  + +

                  25.2.1 Options

                  + +
                  +
                  window_title
                  +

                  Set the CACA window title, if not specified default to the filename +specified for the output device. +

                  +
                  +
                  window_size
                  +

                  Set the CACA window size, can be a string of the form +widthxheight or a video size abbreviation. +If not specified it defaults to the size of the input video. +

                  +
                  +
                  driver
                  +

                  Set display driver. +

                  +
                  +
                  algorithm
                  +

                  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 -list_dither algorithms. +

                  +
                  +
                  antialias
                  +

                  Set antialias method. Antialiasing smoothens the rendered +image and avoids the commonly seen staircase effect. +The accepted values are listed with -list_dither antialiases. +

                  +
                  +
                  charset
                  +

                  Set which characters are going to be used when rendering text. +The accepted values are listed with -list_dither charsets. +

                  +
                  +
                  color
                  +

                  Set color to be used when rendering text. +The accepted values are listed with -list_dither colors. +

                  +
                  +
                  list_drivers
                  +

                  If set to ‘true’, print a list of available drivers and exit. +

                  +
                  +
                  list_dither
                  +

                  List available dither options related to the argument. +The argument must be one of algorithms, antialiases, +charsets, colors. +

                  +
                  + + +

                  25.2.2 Examples

                  + +
                    +
                  • +The following command shows the ffmpeg output is an +CACA window, forcing its size to 80x25: +
                     
                    ffmpeg -i INPUT -vcodec rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
                    +
                    + +
                  • +Show the list of available drivers and exit: +
                     
                    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
                    +
                    + +
                  • +Show the list of available dither colors and exit: +
                     
                    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
                    +
                    +
                  + + +

                  25.3 fbdev

                  + +

                  Linux framebuffer output device. +

                  +

                  The Linux framebuffer is a graphic hardware-independent abstraction +layer to show graphics on a computer monitor, typically on the +console. It is accessed through a file device node, usually +‘/dev/fb0’. +

                  +

                  For more detailed information read the file +‘Documentation/fb/framebuffer.txt’ included in the Linux source tree. +

                  + +

                  25.3.1 Options

                  +
                  +
                  xoffset
                  +
                  yoffset
                  +

                  Set x/y coordinate of top left corner. Default is 0. +

                  +
                  + + +

                  25.3.2 Examples

                  +

                  Play a file on framebuffer device ‘/dev/fb0’. +Required pixel format depends on current framebuffer settings. +

                   
                  ffmpeg -re -i INPUT -vcodec rawvideo -pix_fmt bgra -f fbdev /dev/fb0
                  +
                  + +

                  See also http://linux-fbdev.sourceforge.net/, and fbset(1). +

                  + +

                  25.4 oss

                  + +

                  OSS (Open Sound System) output device. +

                  + +

                  25.5 pulse

                  + +

                  PulseAudio output device. +

                  +

                  To enable this output device you need to configure FFmpeg with --enable-libpulse. +

                  +

                  More information about PulseAudio can be found on http://www.pulseaudio.org +

                  + +

                  25.5.1 Options

                  +
                  +
                  server
                  +

                  Connect to a specific PulseAudio server, specified by an IP address. +Default server is used when not provided. +

                  +
                  +
                  name
                  +

                  Specify the application name PulseAudio will use when showing active clients, +by default it is the LIBAVFORMAT_IDENT string. +

                  +
                  +
                  stream_name
                  +

                  Specify the stream name PulseAudio will use when showing active streams, +by default it is set to the specified output name. +

                  +
                  +
                  device
                  +

                  Specify the device to use. Default device is used when not provided. +List of output devices can be obtained with command pactl list sinks. +

                  +
                  +
                  + + +

                  25.5.2 Examples

                  +

                  Play a file on default device on default server: +

                   
                  ffmpeg  -i INPUT -f pulse "stream name"
                  +
                  + + +

                  25.6 sdl

                  + +

                  SDL (Simple DirectMedia Layer) output device. +

                  +

                  This output device allows to show a video stream in an SDL +window. Only one SDL window is allowed per application, so you can +have only one instance of this output device in an application. +

                  +

                  To enable this output device you need libsdl installed on your system +when configuring your build. +

                  +

                  For more information about SDL, check: +http://www.libsdl.org/ +

                  + +

                  25.6.1 Options

                  + +
                  +
                  window_title
                  +

                  Set the SDL window title, if not specified default to the filename +specified for the output device. +

                  +
                  +
                  icon_title
                  +

                  Set the name of the iconified SDL window, if not specified it is set +to the same value of window_title. +

                  +
                  +
                  window_size
                  +

                  Set the SDL window size, can be a string of the form +widthxheight or a video size abbreviation. +If not specified it defaults to the size of the input video, +downscaled according to the aspect ratio. +

                  +
                  +
                  window_fullscreen
                  +

                  Set fullscreen mode when non-zero value is provided. +Zero is a default. +

                  +
                  + + +

                  25.6.2 Examples

                  + +

                  The following command shows the ffmpeg output is an +SDL window, forcing its size to the qcif format: +

                   
                  ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
                  +
                  + + +

                  25.7 sndio

                  + +

                  sndio audio output device. +

                  + +

                  25.8 xv

                  + +

                  XV (XVideo) output device. +

                  +

                  This output device allows to show a video stream in a X Window System +window. +

                  + +

                  25.8.1 Options

                  + +
                  +
                  display_name
                  +

                  Specify the hardware display name, which determines the display and +communications domain to be used. +

                  +

                  The display name or DISPLAY environment variable can be a string in +the format hostname[:number[.screen_number]]. +

                  +

                  hostname specifies the name of the host machine on which the +display is physically attached. number specifies the number of +the display server on that host machine. screen_number specifies +the screen to be used on that server. +

                  +

                  If unspecified, it defaults to the value of the DISPLAY environment +variable. +

                  +

                  For example, dual-headed:0.1 would specify screen 1 of display +0 on the machine named “dual-headed”. +

                  +

                  Check the X11 specification for more detailed information about the +display name format. +

                  +
                  +
                  window_size
                  +

                  Set the created window size, can be a string of the form +widthxheight or a video size abbreviation. If not +specified it defaults to the size of the input video. +

                  +
                  +
                  window_x
                  +
                  window_y
                  +

                  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. +

                  +
                  +
                  window_title
                  +

                  Set the window title, if not specified default to the filename +specified for the output device. +

                  +
                  + +

                  For more information about XVideo see http://www.x.org/. +

                  + +

                  25.8.2 Examples

                  + +
                    +
                  • +Decode, display and encode video input with ffmpeg at the +same time: +
                     
                    ffmpeg -i INPUT OUTPUT -f xv display
                    +
                    + +
                  • +Decode and display the input video to multiple X11 windows: +
                     
                    ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
                    +
                    +
                  + + +

                  26. Resampler Options

                  + +

                  The audio resampler supports the following named options. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools, option=value for the aresample filter, +by setting the value explicitly in the +SwrContext options or using the ‘libavutil/opt.h’ API for +programmatic use. +

                  +
                  +
                  ich, in_channel_count
                  +

                  Set the number of input channels. Default value is 0. Setting this +value is not mandatory if the corresponding channel layout +‘in_channel_layout’ is set. +

                  +
                  +
                  och, out_channel_count
                  +

                  Set the number of output channels. Default value is 0. Setting this +value is not mandatory if the corresponding channel layout +‘out_channel_layout’ is set. +

                  +
                  +
                  uch, used_channel_count
                  +

                  Set the number of used input channels. Default value is 0. This option is +only used for special remapping. +

                  +
                  +
                  isr, in_sample_rate
                  +

                  Set the input sample rate. Default value is 0. +

                  +
                  +
                  osr, out_sample_rate
                  +

                  Set the output sample rate. Default value is 0. +

                  +
                  +
                  isf, in_sample_fmt
                  +

                  Specify the input sample format. It is set by default to none. +

                  +
                  +
                  osf, out_sample_fmt
                  +

                  Specify the output sample format. It is set by default to none. +

                  +
                  +
                  tsf, internal_sample_fmt
                  +

                  Set the internal sample format. Default value is none. +This will automatically be chosen when it is not explicitly set. +

                  +
                  +
                  icl, in_channel_layout
                  +
                  ocl, out_channel_layout
                  +

                  Set the input/output channel layout. +

                  +

                  See (ffmpeg-utils)channel layout syntax +for the required syntax. +

                  +
                  +
                  clev, center_mix_level
                  +

                  Set the center mix level. It is a value expressed in deciBel, and must be +in the interval [-32,32]. +

                  +
                  +
                  slev, surround_mix_level
                  +

                  Set the surround mix level. It is a value expressed in deciBel, and must +be in the interval [-32,32]. +

                  +
                  +
                  lfe_mix_level
                  +

                  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]. +

                  +
                  +
                  rmvol, rematrix_volume
                  +

                  Set rematrix volume. Default value is 1.0. +

                  +
                  +
                  rematrix_maxval
                  +

                  Set maximum output value for rematrixing. +This can be used to prevent clipping vs. preventing volumn reduction +A value of 1.0 prevents cliping. +

                  +
                  +
                  flags, swr_flags
                  +

                  Set flags used by the converter. Default value is 0. +

                  +

                  It supports the following individual flags: +

                  +
                  res
                  +

                  force resampling, this flag forces resampling to be used even when the +input and output sample rates match. +

                  +
                  + +
                  +
                  dither_scale
                  +

                  Set the dither scale. Default value is 1. +

                  +
                  +
                  dither_method
                  +

                  Set dither method. Default value is 0. +

                  +

                  Supported values: +

                  +
                  rectangular
                  +

                  select rectangular dither +

                  +
                  triangular
                  +

                  select triangular dither +

                  +
                  triangular_hp
                  +

                  select triangular dither with high pass +

                  +
                  lipshitz
                  +

                  select lipshitz noise shaping dither +

                  +
                  shibata
                  +

                  select shibata noise shaping dither +

                  +
                  low_shibata
                  +

                  select low shibata noise shaping dither +

                  +
                  high_shibata
                  +

                  select high shibata noise shaping dither +

                  +
                  f_weighted
                  +

                  select f-weighted noise shaping dither +

                  +
                  modified_e_weighted
                  +

                  select modified-e-weighted noise shaping dither +

                  +
                  improved_e_weighted
                  +

                  select improved-e-weighted noise shaping dither +

                  +
                  +
                  + +
                  +
                  resampler
                  +

                  Set resampling engine. Default value is swr. +

                  +

                  Supported values: +

                  +
                  swr
                  +

                  select the native SW Resampler; filter options precision and cheby are not +applicable in this case. +

                  +
                  soxr
                  +

                  select the SoX Resampler (where available); compensation, and filter options +filter_size, phase_shift, filter_type & kaiser_beta, are not applicable in this +case. +

                  +
                  + +
                  +
                  filter_size
                  +

                  For swr only, set resampling filter size, default value is 32. +

                  +
                  +
                  phase_shift
                  +

                  For swr only, set resampling phase shift, default value is 10, and must be in +the interval [0,30]. +

                  +
                  +
                  linear_interp
                  +

                  Use Linear Interpolation if set to 1, default value is 0. +

                  +
                  +
                  cutoff
                  +

                  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). +

                  +
                  +
                  precision
                  +

                  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’. +

                  +
                  +
                  cheby
                  +

                  For soxr only, selects passband rolloff none (Chebyshev) & higher-precision +approximation for ’irrational’ ratios. Default value is 0. +

                  +
                  +
                  async
                  +

                  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. +

                  +
                  +
                  first_pts
                  +

                  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. +

                  +
                  +
                  min_comp
                  +

                  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 +(‘min_comp’ = FLT_MAX). +

                  +
                  +
                  min_hard_comp
                  +

                  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 ‘min_comp’. +The default is 0.1. +

                  +
                  +
                  comp_duration
                  +

                  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. +

                  +
                  +
                  max_soft_comp
                  +

                  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. +

                  +
                  +
                  matrix_encoding
                  +

                  Select matrixed stereo encoding. +

                  +

                  It accepts the following values: +

                  +
                  none
                  +

                  select none +

                  +
                  dolby
                  +

                  select Dolby +

                  +
                  dplii
                  +

                  select Dolby Pro Logic II +

                  +
                  + +

                  Default value is none. +

                  +
                  +
                  filter_type
                  +

                  For swr only, select resampling filter type. This only affects resampling +operations. +

                  +

                  It accepts the following values: +

                  +
                  cubic
                  +

                  select cubic +

                  +
                  blackman_nuttall
                  +

                  select Blackman Nuttall Windowed Sinc +

                  +
                  kaiser
                  +

                  select Kaiser Windowed Sinc +

                  +
                  + +
                  +
                  kaiser_beta
                  +

                  For swr only, set Kaiser Window Beta value. Must be an integer in the +interval [2,16], default value is 9. +

                  +
                  +
                  output_sample_bits
                  +

                  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. +

                  +
                  +
                  + +

                  +

                  +

                  27. Scaler Options

                  + +

                  The video scaler supports the following named options. +

                  +

                  Options may be set by specifying -option value in the +FFmpeg tools. For programmatic use, they can be set explicitly in the +SwsContext options or through the ‘libavutil/opt.h’ API. +

                  +
                  +
                  +

                  +

                  +
                  sws_flags
                  +

                  Set the scaler flags. This is also used to set the scaling +algorithm. Only a single algorithm should be selected. +

                  +

                  It accepts the following values: +

                  +
                  fast_bilinear
                  +

                  Select fast bilinear scaling algorithm. +

                  +
                  +
                  bilinear
                  +

                  Select bilinear scaling algorithm. +

                  +
                  +
                  bicubic
                  +

                  Select bicubic scaling algorithm. +

                  +
                  +
                  experimental
                  +

                  Select experimental scaling algorithm. +

                  +
                  +
                  neighbor
                  +

                  Select nearest neighbor rescaling algorithm. +

                  +
                  +
                  area
                  +

                  Select averaging area rescaling algorithm. +

                  +
                  +
                  bicubiclin
                  +

                  Select bicubic scaling algorithm for the luma component, bilinear for +chroma components. +

                  +
                  +
                  gauss
                  +

                  Select Gaussian rescaling algorithm. +

                  +
                  +
                  sinc
                  +

                  Select sinc rescaling algorithm. +

                  +
                  +
                  lanczos
                  +

                  Select lanczos rescaling algorithm. +

                  +
                  +
                  spline
                  +

                  Select natural bicubic spline rescaling algorithm. +

                  +
                  +
                  print_info
                  +

                  Enable printing/debug logging. +

                  +
                  +
                  accurate_rnd
                  +

                  Enable accurate rounding. +

                  +
                  +
                  full_chroma_int
                  +

                  Enable full chroma interpolation. +

                  +
                  +
                  full_chroma_inp
                  +

                  Select full chroma input. +

                  +
                  +
                  bitexact
                  +

                  Enable bitexact output. +

                  +
                  + +
                  +
                  srcw
                  +

                  Set source width. +

                  +
                  +
                  srch
                  +

                  Set source height. +

                  +
                  +
                  dstw
                  +

                  Set destination width. +

                  +
                  +
                  dsth
                  +

                  Set destination height. +

                  +
                  +
                  src_format
                  +

                  Set source pixel format (must be expressed as an integer). +

                  +
                  +
                  dst_format
                  +

                  Set destination pixel format (must be expressed as an integer). +

                  +
                  +
                  src_range
                  +

                  Select source range. +

                  +
                  +
                  dst_range
                  +

                  Select destination range. +

                  +
                  +
                  param0, param1
                  +

                  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. +

                  +
                  +
                  sws_dither
                  +

                  Set the dithering algorithm. Accepts one of the following +values. Default value is ‘auto’. +

                  +
                  +
                  auto
                  +

                  automatic choice +

                  +
                  +
                  none
                  +

                  no dithering +

                  +
                  +
                  bayer
                  +

                  bayer dither +

                  +
                  +
                  ed
                  +

                  error diffusion dither +

                  +
                  + +
                  +
                  + + +

                  28. Filtering Introduction

                  + +

                  Filtering in FFmpeg is enabled through the libavfilter library. +

                  +

                  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. +

                  +
                   
                                  [main]
                  +input --> split ---------------------> overlay --> output
                  +            |                             ^
                  +            |[tmp]                  [flip]|
                  +            +-----> crop --> vflip -------+
                  +
                  + +

                  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: +

                  +
                   
                  ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
                  +
                  + +

                  The result will be that in output the top half of the video is mirrored +onto the bottom half. +

                  +

                  Filters in the same linear chain are separated by commas, and distinct +linear chains of filters are separated by semicolons. In our example, +crop,vflip are in one linear chain, split and +overlay 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 [main] and [tmp]. +

                  +

                  The stream sent to the second output of split, labelled as +[tmp], is processed through the crop filter, which crops +away the lower half part of the video, and then vertically flipped. The +overlay filter takes in input the first unchanged output of the +split filter (which was labelled as [main]), and overlay on its +lower half the output generated by the crop,vflip filterchain. +

                  +

                  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. +

                  +

                  There exist so-called source filters that do not have an +audio/video input, and sink filters that will not have audio/video +output. +

                  + + +

                  29. graph2dot

                  + +

                  The ‘graph2dot’ program included in the FFmpeg ‘tools’ +directory can be used to parse a filtergraph description and issue a +corresponding textual representation in the dot language. +

                  +

                  Invoke the command: +

                   
                  graph2dot -h
                  +
                  + +

                  to see how to use ‘graph2dot’. +

                  +

                  You can then pass the dot description to the ‘dot’ program (from +the graphviz suite of programs) and obtain a graphical representation +of the filtergraph. +

                  +

                  For example the sequence of commands: +

                   
                  echo GRAPH_DESCRIPTION | \
                  +tools/graph2dot -o graph.tmp && \
                  +dot -Tpng graph.tmp -o graph.png && \
                  +display graph.png
                  +
                  + +

                  can be used to create and display an image representing the graph +described by the GRAPH_DESCRIPTION string. 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: +

                   
                  ffmpeg -i infile -vf scale=640:360 outfile
                  +
                  +

                  your GRAPH_DESCRIPTION string will need to be of the form: +

                   
                  nullsrc,scale=640:360,nullsink
                  +
                  +

                  you may also need to set the nullsrc parameters and add a format +filter in order to simulate a specific input file. +

                  + + +

                  30. Filtergraph description

                  + +

                  A filtergraph is a directed graph of connected filters. It can contain +cycles, and there can be multiple links between a pair of +filters. Each link has one input pad on one side connecting it to one +filter from which it takes its input, and one output pad on the other +side connecting it to the one filter accepting its output. +

                  +

                  Each filter in a filtergraph is an instance of a filter class +registered in the application, which defines the features and the +number of input and output pads of the filter. +

                  +

                  A filter with no input pads is called a "source", a filter with no +output pads is called a "sink". +

                  +

                  +

                  +

                  30.1 Filtergraph syntax

                  + +

                  A filtergraph can be represented using a textual representation, which is +recognized by the ‘-filter’/‘-vf’ and ‘-filter_complex’ +options in ffmpeg and ‘-vf’ in ffplay, and by the +avfilter_graph_parse()/avfilter_graph_parse2() function defined in +‘libavfilter/avfilter.h’. +

                  +

                  A filterchain consists of a sequence of connected filters, each one +connected to the previous one in the sequence. A filterchain is +represented by a list of ","-separated filter descriptions. +

                  +

                  A filtergraph consists of a sequence of filterchains. A sequence of +filterchains is represented by a list of ";"-separated filterchain +descriptions. +

                  +

                  A filter is represented by a string of the form: +[in_link_1]...[in_link_N]filter_name=arguments[out_link_1]...[out_link_M] +

                  +

                  filter_name is the name of the filter class of which the +described filter is an instance of, and has to be the name of one of +the filter classes registered in the program. +The name of the filter class is optionally followed by a string +"=arguments". +

                  +

                  arguments is a string which contains the parameters used to +initialize the filter instance. It may have one of the following forms: +

                    +
                  • +A ’:’-separated list of key=value pairs. + +
                  • +A ’:’-separated list of value. In this case, the keys are assumed to be +the option names in the order they are declared. E.g. the fade filter +declares three options in this order – ‘type’, ‘start_frame’ and +‘nb_frames’. Then the parameter list in:0:30 means that the value +in is assigned to the option ‘type’, 0 to +‘start_frame’ and 30 to ‘nb_frames’. + +
                  • +A ’:’-separated list of mixed direct value and long key=value +pairs. The direct value must precede the key=value pairs, and +follow the same constraints order of the previous point. The following +key=value pairs can be set in any preferred order. + +
                  + +

                  If the option value itself is a list of items (e.g. the format filter +takes a list of pixel formats), the items in the list are usually separated by +’|’. +

                  +

                  The list of arguments can be quoted using the character "’" as initial +and ending mark, and the character ’\’ for escaping the characters +within the quoted text; otherwise the argument string is considered +terminated when the next special character (belonging to the set +"[]=;,") is encountered. +

                  +

                  The name and arguments of the filter are optionally preceded and +followed by a list of link labels. +A link label allows to name a link and associate it to a filter output +or input pad. The preceding labels in_link_1 +... in_link_N, are associated to the filter input pads, +the following labels out_link_1 ... out_link_M, are +associated to the output pads. +

                  +

                  When two link labels with the same name are found in the +filtergraph, a link between the corresponding input and output pad is +created. +

                  +

                  If an output pad is not labelled, it is linked by default to the first +unlabelled input pad of the next filter in the filterchain. +For example in the filterchain: +

                   
                  nullsrc, split[L1], [L2]overlay, nullsink
                  +
                  +

                  the split filter instance has two output pads, and the overlay filter +instance two input pads. The first output pad of split is labelled +"L1", the first input pad of overlay is labelled "L2", and the second +output pad of split is linked to the second input pad of overlay, +which are both unlabelled. +

                  +

                  In a complete filterchain all the unlabelled filter input and output +pads must be connected. A filtergraph is considered valid if all the +filter input and output pads of all the filterchains are connected. +

                  +

                  Libavfilter will automatically insert scale filters where format +conversion is required. It is possible to specify swscale flags +for those automatically inserted scalers by prepending +sws_flags=flags; +to the filtergraph description. +

                  +

                  Follows a BNF description for the filtergraph syntax: +

                   
                  NAME             ::= sequence of alphanumeric characters and '_'
                  +LINKLABEL        ::= "[" NAME "]"
                  +LINKLABELS       ::= LINKLABEL [LINKLABELS]
                  +FILTER_ARGUMENTS ::= sequence of chars (eventually quoted)
                  +FILTER           ::= [LINKLABELS] NAME ["=" FILTER_ARGUMENTS] [LINKLABELS]
                  +FILTERCHAIN      ::= FILTER [,FILTERCHAIN]
                  +FILTERGRAPH      ::= [sws_flags=flags;] FILTERCHAIN [;FILTERGRAPH]
                  +
                  + + +

                  30.2 Notes on filtergraph escaping

                  + +

                  Some filter arguments require the use of special characters, typically +: to separate key=value pairs in a named options list. In this +case the user should perform a first level escaping when specifying +the filter arguments. For example, consider the following literal +string to be embedded in the drawtext filter arguments: +

                   
                  this is a 'string': may contain one, or more, special characters
                  +
                  + +

                  Since : is special for the filter arguments syntax, it needs to +be escaped, so you get: +

                   
                  text=this is a \'string\'\: may contain one, or more, special characters
                  +
                  + +

                  A second level of escaping is required when embedding the filter +arguments in a filtergraph description, in order to escape all the +filtergraph special characters. Thus the example above becomes: +

                   
                  drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
                  +
                  + +

                  Finally an additional level of escaping may be needed when writing the +filtergraph description in a shell command, which depends on the +escaping rules of the adopted shell. For example, assuming that +\ is special and needs to be escaped with another \, the +previous string will finally result in: +

                   
                  -vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
                  +
                  + +

                  Sometimes, it might be more convenient to employ quoting in place of +escaping. For example the string: +

                   
                  Caesar: tu quoque, Brute, fili mi
                  +
                  + +

                  Can be quoted in the filter arguments as: +

                   
                  text='Caesar: tu quoque, Brute, fili mi'
                  +
                  + +

                  And finally inserted in a filtergraph like: +

                   
                  drawtext=text=\'Caesar: tu quoque\, Brute\, fili mi\'
                  +
                  + +

                  See the “Quoting and escaping” section in the ffmpeg-utils manual +for more information about the escaping and quoting rules adopted by +FFmpeg. +

                  + +

                  31. Timeline editing

                  + +

                  Some filters support a generic ‘enable’ 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. +

                  +

                  The expression accepts the following values: +

                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 0 +

                  +
                  +
                  pos
                  +

                  the position in the file of the input frame, NAN if unknown +

                  +
                  + +

                  Additionally, these filters support an ‘enable’ command that can be used +to re-define the expression. +

                  +

                  Like any other filtering option, the ‘enable’ option follows the same +rules. +

                  +

                  For example, to enable a blur filter (smartblur) from 10 seconds to 3 +minutes, and a curves filter starting at 3 seconds: +

                   
                  smartblur = enable='between(t,10,3*60)',
                  +curves    = enable='gte(t,3)' : preset=cross_process
                  +
                  + + + +

                  32. Audio Filters

                  + +

                  When you configure your FFmpeg build, you can disable any of the +existing filters using --disable-filters. +The configure output will show the audio filters included in your +build. +

                  +

                  Below is a description of the currently available audio filters. +

                  + +

                  32.1 aconvert

                  + +

                  Convert the input audio format to the specified formats. +

                  +

                  This filter is deprecated. Use aformat instead. +

                  +

                  The filter accepts a string of the form: +"sample_format:channel_layout". +

                  +

                  sample_format specifies the sample format, and can be a string or the +corresponding numeric value defined in ‘libavutil/samplefmt.h’. Use ’p’ +suffix for a planar sample format. +

                  +

                  channel_layout specifies the channel layout, and can be a string +or the corresponding number value defined in ‘libavutil/channel_layout.h’. +

                  +

                  The special parameter "auto", signifies that the filter will +automatically select the output format depending on the output filter. +

                  + +

                  32.1.1 Examples

                  + +
                    +
                  • +Convert input to float, planar, stereo: +
                     
                    aconvert=fltp:stereo
                    +
                    + +
                  • +Convert input to unsigned 8-bit, automatically select out channel layout: +
                     
                    aconvert=u8:auto
                    +
                    +
                  + + +

                  32.2 adelay

                  + +

                  Delay one or more audio channels. +

                  +

                  Samples in delayed channel are filled with silence. +

                  +

                  The filter accepts the following option: +

                  +
                  +
                  delays
                  +

                  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. +

                  +
                  + + +

                  32.2.1 Examples

                  + +
                    +
                  • +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. +
                     
                    adelay=1500:0:500
                    +
                    +
                  + + +

                  32.3 aecho

                  + +

                  Apply echoing to the input audio. +

                  +

                  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 delay, and the +loudness of the reflected signal is the decay. +Multiple echoes can have different delays and decays. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  in_gain
                  +

                  Set input gain of reflected signal. Default is 0.6. +

                  +
                  +
                  out_gain
                  +

                  Set output gain of reflected signal. Default is 0.3. +

                  +
                  +
                  delays
                  +

                  Set list of time intervals in milliseconds between original signal and reflections +separated by ’|’. Allowed range for each delay is (0 - 90000.0]. +Default is 1000. +

                  +
                  +
                  decays
                  +

                  Set list of loudnesses of reflected signals separated by ’|’. +Allowed range for each decay is (0 - 1.0]. +Default is 0.5. +

                  +
                  + + +

                  32.3.1 Examples

                  + +
                    +
                  • +Make it sound as if there are twice as many instruments as are actually playing: +
                     
                    aecho=0.8:0.88:60:0.4
                    +
                    + +
                  • +If delay is very short, then it sound like a (metallic) robot playing music: +
                     
                    aecho=0.8:0.88:6:0.4
                    +
                    + +
                  • +A longer delay will sound like an open air concert in the mountains: +
                     
                    aecho=0.8:0.9:1000:0.3
                    +
                    + +
                  • +Same as above but with one more mountain: +
                     
                    aecho=0.8:0.9:1000|1800:0.3|0.25
                    +
                    +
                  + + +

                  32.4 afade

                  + +

                  Apply fade-in/out effect to input audio. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  type, t
                  +

                  Specify the effect type, can be either in for fade-in, or +out for a fade-out effect. Default is in. +

                  +
                  +
                  start_sample, ss
                  +

                  Specify the number of the start sample for starting to apply the fade +effect. Default is 0. +

                  +
                  +
                  nb_samples, ns
                  +

                  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. +

                  +
                  +
                  start_time, st
                  +

                  Specify time for starting to apply the fade effect. Default is 0. +The accepted syntax is: +

                   
                  [-]HH[:MM[:SS[.m...]]]
                  +[-]S+[.m...]
                  +
                  +

                  See also the function av_parse_time(). +If set this option is used instead of start_sample one. +

                  +
                  +
                  duration, d
                  +

                  Specify the duration for which the fade effect has to last. Default is 0. +The accepted syntax is: +

                   
                  [-]HH[:MM[:SS[.m...]]]
                  +[-]S+[.m...]
                  +
                  +

                  See also the function av_parse_time(). +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 nb_samples one. +

                  +
                  +
                  curve
                  +

                  Set curve for fade transition. +

                  +

                  It accepts the following values: +

                  +
                  tri
                  +

                  select triangular, linear slope (default) +

                  +
                  qsin
                  +

                  select quarter of sine wave +

                  +
                  hsin
                  +

                  select half of sine wave +

                  +
                  esin
                  +

                  select exponential sine wave +

                  +
                  log
                  +

                  select logarithmic +

                  +
                  par
                  +

                  select inverted parabola +

                  +
                  qua
                  +

                  select quadratic +

                  +
                  cub
                  +

                  select cubic +

                  +
                  squ
                  +

                  select square root +

                  +
                  cbr
                  +

                  select cubic root +

                  +
                  +
                  +
                  + + +

                  32.4.1 Examples

                  + +
                    +
                  • +Fade in first 15 seconds of audio: +
                     
                    afade=t=in:ss=0:d=15
                    +
                    + +
                  • +Fade out last 25 seconds of a 900 seconds audio: +
                     
                    afade=t=out:st=875:d=25
                    +
                    +
                  + +

                  +

                  +

                  32.5 aformat

                  + +

                  Set output format constraints for the input audio. The framework will +negotiate the most appropriate format to minimize conversions. +

                  +

                  The filter accepts the following named parameters: +

                  +
                  sample_fmts
                  +

                  A ’|’-separated list of requested sample formats. +

                  +
                  +
                  sample_rates
                  +

                  A ’|’-separated list of requested sample rates. +

                  +
                  +
                  channel_layouts
                  +

                  A ’|’-separated list of requested channel layouts. +

                  +

                  See (ffmpeg-utils)channel layout syntax +for the required syntax. +

                  +
                  + +

                  If a parameter is omitted, all values are allowed. +

                  +

                  For example to force the output to either unsigned 8-bit or signed 16-bit stereo: +

                   
                  aformat=sample_fmts=u8|s16:channel_layouts=stereo
                  +
                  + + +

                  32.6 allpass

                  + +

                  Apply a two-pole all-pass filter with central frequency (in Hz) +frequency, and filter-width width. +An all-pass filter changes the audio’s frequency to phase relationship +without changing its frequency to amplitude relationship. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set frequency in Hz. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Specify the band-width of a filter in width_type units. +

                  +
                  + + +

                  32.7 amerge

                  + +

                  Merge two or more audio streams into a single multi-channel stream. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  inputs
                  +

                  Set the number of inputs. Default is 2. +

                  +
                  +
                  + +

                  If the channel layouts of the inputs are disjoint, and therefore compatible, +the channel layout of the output will be set accordingly and the channels +will be reordered as necessary. If the channel layouts of the inputs are not +disjoint, the output will have all the channels of the first input then all +the channels of the second input, in that order, and the channel layout of +the output will be the default value corresponding to the total number of +channels. +

                  +

                  For example, if the first input is in 2.1 (FL+FR+LF) and the second input +is FC+BL+BR, then the output will be in 5.1, with the channels in the +following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the +first input, b1 is the first channel of the second input). +

                  +

                  On the other hand, if both input are in stereo, the output channels will be +in the default order: a1, a2, b1, b2, and the channel layout will be +arbitrarily set to 4.0, which may or may not be the expected value. +

                  +

                  All inputs must have the same sample rate, and format. +

                  +

                  If inputs do not have the same duration, the output will stop with the +shortest. +

                  + +

                  32.7.1 Examples

                  + +
                    +
                  • +Merge two mono files into a stereo stream: +
                     
                    amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
                    +
                    + +
                  • +Multiple merges assuming 1 video stream and 6 audio streams in ‘input.mkv’: +
                     
                    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
                    +
                    +
                  + + +

                  32.8 amix

                  + +

                  Mixes multiple audio inputs into a single output. +

                  +

                  For example +

                   
                  ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
                  +
                  +

                  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. +

                  +

                  The filter accepts the following named parameters: +

                  +
                  inputs
                  +

                  Number of inputs. If unspecified, it defaults to 2. +

                  +
                  +
                  duration
                  +

                  How to determine the end-of-stream. +

                  +
                  longest
                  +

                  Duration of longest input. (default) +

                  +
                  +
                  shortest
                  +

                  Duration of shortest input. +

                  +
                  +
                  first
                  +

                  Duration of first input. +

                  +
                  +
                  + +
                  +
                  dropout_transition
                  +

                  Transition time, in seconds, for volume renormalization when an input +stream ends. The default value is 2 seconds. +

                  +
                  +
                  + + +

                  32.9 anull

                  + +

                  Pass the audio source unchanged to the output. +

                  + +

                  32.10 apad

                  + +

                  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. +

                  + +

                  32.11 aphaser

                  +

                  Add a phasing effect to the input audio. +

                  +

                  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. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  in_gain
                  +

                  Set input gain. Default is 0.4. +

                  +
                  +
                  out_gain
                  +

                  Set output gain. Default is 0.74 +

                  +
                  +
                  delay
                  +

                  Set delay in milliseconds. Default is 3.0. +

                  +
                  +
                  decay
                  +

                  Set decay. Default is 0.4. +

                  +
                  +
                  speed
                  +

                  Set modulation speed in Hz. Default is 0.5. +

                  +
                  +
                  type
                  +

                  Set modulation type. Default is triangular. +

                  +

                  It accepts the following values: +

                  +
                  triangular, t
                  +
                  sinusoidal, s
                  +
                  +
                  +
                  + +

                  +

                  +

                  32.12 aresample

                  + +

                  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. +

                  +

                  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. +

                  +

                  The filter accepts the syntax +[sample_rate:]resampler_options, where sample_rate +expresses a sample rate and resampler_options is a list of +key=value pairs, separated by ":". See the +ffmpeg-resampler manual for the complete list of supported options. +

                  + +

                  32.12.1 Examples

                  + +
                    +
                  • +Resample the input audio to 44100Hz: +
                     
                    aresample=44100
                    +
                    + +
                  • +Stretch/squeeze samples to the given timestamps, with a maximum of 1000 +samples per second compensation: +
                     
                    aresample=async=1000
                    +
                    +
                  + + +

                  32.13 asetnsamples

                  + +

                  Set the number of samples per each output audio frame. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  nb_out_samples, n
                  +

                  Set the number of frames per each output audio frame. The number is +intended as the number of samples per each channel. +Default value is 1024. +

                  +
                  +
                  pad, 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. +

                  +
                  + +

                  For example, to set the number of per-frame samples to 1234 and +disable padding for the last frame, use: +

                   
                  asetnsamples=n=1234:p=0
                  +
                  + + +

                  32.14 asetrate

                  + +

                  Set the sample rate without altering the PCM data. +This will result in a change of speed and pitch. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  sample_rate, r
                  +

                  Set the output sample rate. Default is 44100 Hz. +

                  +
                  + + +

                  32.15 ashowinfo

                  + +

                  Show a line containing various information for each input audio frame. +The input audio is not modified. +

                  +

                  The shown line contains a sequence of key/value pairs of the form +key:value. +

                  +

                  A description of each shown parameter follows: +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 0 +

                  +
                  +
                  pts
                  +

                  Presentation timestamp of the input frame, in time base units; the time base +depends on the filter input pad, and is usually 1/sample_rate. +

                  +
                  +
                  pts_time
                  +

                  presentation timestamp of the input frame in seconds +

                  +
                  +
                  pos
                  +

                  position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic audio) +

                  +
                  +
                  fmt
                  +

                  sample format +

                  +
                  +
                  chlayout
                  +

                  channel layout +

                  +
                  +
                  rate
                  +

                  sample rate for the audio frame +

                  +
                  +
                  nb_samples
                  +

                  number of samples (per channel) in the frame +

                  +
                  +
                  checksum
                  +

                  Adler-32 checksum (printed in hexadecimal) of the audio data. For planar audio +the data is treated as if all the planes were concatenated. +

                  +
                  +
                  plane_checksums
                  +

                  A list of Adler-32 checksums for each data plane. +

                  +
                  + + +

                  32.16 astats

                  + +

                  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. +

                  +

                  The filter accepts the following option: +

                  +
                  length
                  +

                  Short window length in seconds, used for peak and trough RMS measurement. +Default is 0.05 (50 miliseconds). Allowed range is [0.1 - 10]. +

                  +
                  + +

                  A description of each shown parameter follows: +

                  +
                  +
                  DC offset
                  +

                  Mean amplitude displacement from zero. +

                  +
                  +
                  Min level
                  +

                  Minimal sample level. +

                  +
                  +
                  Max level
                  +

                  Maximal sample level. +

                  +
                  +
                  Peak level dB
                  +
                  RMS level dB
                  +

                  Standard peak and RMS level measured in dBFS. +

                  +
                  +
                  RMS peak dB
                  +
                  RMS trough dB
                  +

                  Peak and trough values for RMS level measured over a short window. +

                  +
                  +
                  Crest factor
                  +

                  Standard ratio of peak to RMS level (note: not in dB). +

                  +
                  +
                  Flat factor
                  +

                  Flatness (i.e. consecutive samples with the same value) of the signal at its peak levels +(i.e. either Min level or Max level). +

                  +
                  +
                  Peak count
                  +

                  Number of occasions (not the number of samples) that the signal attained either +Min level or Max level. +

                  +
                  + + +

                  32.17 astreamsync

                  + +

                  Forward two audio streams and control the order the buffers are forwarded. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  expr, e
                  +

                  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: +

                  +
                  +
                  b1 b2
                  +

                  number of buffers forwarded so far on each stream +

                  +
                  s1 s2
                  +

                  number of samples forwarded so far on each stream +

                  +
                  t1 t2
                  +

                  current timestamp of each stream +

                  +
                  + +

                  The default value is t1-t2, which means to always forward the stream +that has a smaller timestamp. +

                  +
                  + + +

                  32.17.1 Examples

                  + +

                  Stress-test amerge by randomly sending buffers on the wrong +input, while avoiding too much of a desynchronization: +

                   
                  amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
                  +[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
                  +[a2] [b2] amerge
                  +
                  + + +

                  32.18 asyncts

                  + +

                  Synchronize audio data with timestamps by squeezing/stretching it and/or +dropping samples/adding silence when needed. +

                  +

                  This filter is not built by default, please use aresample to do squeezing/stretching. +

                  +

                  The filter accepts the following named parameters: +

                  +
                  compensate
                  +

                  Enable stretching/squeezing the data to make it match the timestamps. Disabled +by default. When disabled, time gaps are covered with silence. +

                  +
                  +
                  min_delta
                  +

                  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. +

                  +
                  +
                  max_comp
                  +

                  Maximum compensation in samples per second. Relevant only with compensate=1. +Default value 500. +

                  +
                  +
                  first_pts
                  +

                  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. +

                  +
                  +
                  + + +

                  32.19 atempo

                  + +

                  Adjust audio tempo. +

                  +

                  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. +

                  + +

                  32.19.1 Examples

                  + +
                    +
                  • +Slow down audio to 80% tempo: +
                     
                    atempo=0.8
                    +
                    + +
                  • +To speed up audio to 125% tempo: +
                     
                    atempo=1.25
                    +
                    +
                  + + +

                  32.20 atrim

                  + +

                  Trim the input so that the output contains one continuous subpart of the input. +

                  +

                  This filter accepts the following options: +

                  +
                  start
                  +

                  Specify time of the start of the kept section, i.e. the audio sample +with the timestamp start will be the first sample in the output. +

                  +
                  +
                  end
                  +

                  Specify time of the first audio sample that will be dropped, i.e. the +audio sample immediately preceding the one with the timestamp end will be +the last sample in the output. +

                  +
                  +
                  start_pts
                  +

                  Same as start, except this option sets the start timestamp in samples +instead of seconds. +

                  +
                  +
                  end_pts
                  +

                  Same as end, except this option sets the end timestamp in samples instead +of seconds. +

                  +
                  +
                  duration
                  +

                  Specify maximum duration of the output. +

                  +
                  +
                  start_sample
                  +

                  Number of the first sample that should be passed to output. +

                  +
                  +
                  end_sample
                  +

                  Number of the first sample that should be dropped. +

                  +
                  + +

                  start’, ‘end’, ‘duration’ are expressed as time +duration specifications, check the "Time duration" section in the +ffmpeg-utils manual. +

                  +

                  Note that the first two sets of the start/end options and the ‘duration’ +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. +

                  +

                  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. +

                  +

                  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. +

                  +

                  Examples: +

                    +
                  • +drop everything except the second minute of input +
                     
                    ffmpeg -i INPUT -af atrim=60:120
                    +
                    + +
                  • +keep only the first 1000 samples +
                     
                    ffmpeg -i INPUT -af atrim=end_sample=1000
                    +
                    + +
                  + + +

                  32.21 bandpass

                  + +

                  Apply a two-pole Butterworth band-pass filter with central +frequency frequency, and (3dB-point) band-width width. +The csg 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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set the filter’s central frequency. Default is 3000. +

                  +
                  +
                  csg
                  +

                  Constant skirt gain if set to 1. Defaults to 0. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Specify the band-width of a filter in width_type units. +

                  +
                  + + +

                  32.22 bandreject

                  + +

                  Apply a two-pole Butterworth band-reject filter with central +frequency frequency, and (3dB-point) band-width width. +The filter roll off at 6dB per octave (20dB per decade). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set the filter’s central frequency. Default is 3000. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Specify the band-width of a filter in width_type units. +

                  +
                  + + +

                  32.23 bass

                  + +

                  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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  gain, g
                  +

                  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. +

                  +
                  +
                  frequency, f
                  +

                  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 100 Hz. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Determine how steep is the filter’s shelf transition. +

                  +
                  + + +

                  32.24 biquad

                  + +

                  Apply a biquad IIR filter with the given coefficients. +Where b0, b1, b2 and a0, a1, a2 +are the numerator and denominator coefficients respectively. +

                  + +

                  32.25 channelmap

                  + +

                  Remap input channels to new locations. +

                  +

                  This filter accepts the following named parameters: +

                  +
                  channel_layout
                  +

                  Channel layout of the output stream. +

                  +
                  +
                  map
                  +

                  Map channels from input to output. The argument is a ’|’-separated list of +mappings, each in the in_channel-out_channel or +in_channel form. in_channel can be either the name of the input +channel (e.g. FL for front left) or its index in the input channel layout. +out_channel is the name of the output channel or its index in the output +channel layout. If out_channel is not given then it is implicitly an +index, starting with zero and increasing by one for each mapping. +

                  +
                  + +

                  If no mapping is present, the filter will implicitly map input channels to +output channels preserving index. +

                  +

                  For example, assuming a 5.1+downmix input MOV file +

                   
                  ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
                  +
                  +

                  will create an output WAV file tagged as stereo from the downmix channels of +the input. +

                  +

                  To fix a 5.1 WAV improperly encoded in AAC’s native channel order +

                   
                  ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav
                  +
                  + + +

                  32.26 channelsplit

                  + +

                  Split each channel in input audio stream into a separate output stream. +

                  +

                  This filter accepts the following named parameters: +

                  +
                  channel_layout
                  +

                  Channel layout of the input stream. Default is "stereo". +

                  +
                  + +

                  For example, assuming a stereo input MP3 file +

                   
                  ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
                  +
                  +

                  will create an output Matroska file with two audio streams, one containing only +the left channel and the other the right channel. +

                  +

                  To split a 5.1 WAV file into per-channel files +

                   
                  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
                  +
                  + + +

                  32.27 compand

                  + +

                  Compress or expand audio dynamic range. +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  attacks
                  +
                  decays
                  +

                  Set list of times in seconds for each channel over which the instantaneous +level of the input signal is averaged to determine its volume. +‘attacks’ refers to increase of volume and ‘decays’ 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. +Typical value for attack is 0.3 seconds and for decay 0.8 +seconds. +

                  +
                  +
                  points
                  +

                  Set list of points for transfer function, specified in dB relative to maximum +possible signal amplitude. +Each key points list need to be defined using the following syntax: +x0/y0 x1/y1 x2/y2 .... +

                  +

                  The input values must be in strictly increasing order but the transfer +function does not have to be monotonically rising. +The point 0/0 is assumed but may be overridden (by 0/out-dBn). +Typical values for the transfer function are -70/-70 -60/-20. +

                  +
                  +
                  soft-knee
                  +

                  Set amount for which the points at where adjacent line segments on the +transfer function meet will be rounded. Defaults is 0.01. +

                  +
                  +
                  gain
                  +

                  Set additional gain in dB to be applied at all points on the transfer function +and allows easy adjustment of the overall gain. +Default is 0. +

                  +
                  +
                  volume
                  +

                  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. Default is 0. +

                  +
                  +
                  delay
                  +

                  Set delay in seconds. Default is 0. The input audio +is analysed 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. +

                  +
                  + + +

                  32.27.1 Examples

                  +
                    +
                  • +Make music with both quiet and loud passages suitable for listening +in a noisy environment: +
                     
                    compand=.3 .3:1 1:-90/-60 -60/-40 -40/-30 -20/-20:6:0:-90:0.2
                    +
                    + +
                  • +Noise-gate for when the noise is at a lower level than the signal: +
                     
                    compand=.1 .1:.2 .2:-900/-900 -50.1/-900 -50/-50:.01:0:-90:.1
                    +
                    + +
                  • +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): +
                     
                    compand=.1 .1:.1 .1:-45.1/-45.1 -45/-900 0/-900:.01:45:-90:.1
                    +
                    +
                  + + +

                  32.28 earwax

                  + +

                  Make audio easier to listen to on headphones. +

                  +

                  This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio +so that when listened to on headphones the stereo image is moved from +inside your head (standard for headphones) to outside and in front of +the listener (standard for speakers). +

                  +

                  Ported from SoX. +

                  + +

                  32.29 equalizer

                  + +

                  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. +

                  +

                  In order to produce complex equalisation curves, this filter can +be given several times, each with a different central frequency. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set the filter’s central frequency in Hz. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Specify the band-width of a filter in width_type units. +

                  +
                  +
                  gain, g
                  +

                  Set the required gain or attenuation in dB. +Beware of clipping when using a positive gain. +

                  +
                  + + +

                  32.30 highpass

                  + +

                  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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set frequency in Hz. Default is 3000. +

                  +
                  +
                  poles, p
                  +

                  Set number of poles. Default is 2. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  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. +

                  +
                  + + +

                  32.31 join

                  + +

                  Join multiple input streams into one multi-channel stream. +

                  +

                  The filter accepts the following named parameters: +

                  +
                  inputs
                  +

                  Number of input streams. Defaults to 2. +

                  +
                  +
                  channel_layout
                  +

                  Desired output channel layout. Defaults to stereo. +

                  +
                  +
                  map
                  +

                  Map channels from inputs to output. The argument is a ’|’-separated list of +mappings, each in the input_idx.in_channel-out_channel +form. input_idx is the 0-based index of the input stream. in_channel +can be either the name of the input channel (e.g. FL for front left) or its +index in the specified input stream. out_channel is the name of the output +channel. +

                  +
                  + +

                  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. +

                  +

                  E.g. to join 3 inputs (with properly set channel layouts) +

                   
                  ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
                  +
                  + +

                  To build a 5.1 output from 6 single-channel streams: +

                   
                  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
                  +
                  + + +

                  32.32 ladspa

                  + +

                  Load a LADSPA (Linux Audio Developer’s Simple Plugin API) plugin. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-ladspa. +

                  +
                  +
                  file, f
                  +

                  Specifies the name of LADSPA plugin library to load. If the environment +variable LADSPA_PATH is defined, the LADSPA plugin is searched in +each one of the directories specified by the colon separated list in +LADSPA_PATH, otherwise in the standard LADSPA paths, which are in +this order: ‘HOME/.ladspa/lib/’, ‘/usr/local/lib/ladspa/’, +‘/usr/lib/ladspa/’. +

                  +
                  +
                  plugin, 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. +

                  +
                  +
                  controls, c
                  +

                  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=value0|c1=value1|c2=value2|..., where +valuei is the value set on the i-th control. +If ‘controls’ is set to help, all available controls and +their valid ranges are printed. +

                  +
                  +
                  sample_rate, s
                  +

                  Specify the sample rate, default to 44100. Only used if plugin have +zero inputs. +

                  +
                  +
                  nb_samples, n
                  +

                  Set the number of samples per channel per each output frame, default +is 1024. Only used if plugin have zero inputs. +

                  +
                  +
                  duration, d
                  +

                  Set the minimum duration of the sourced audio. See the function +av_parse_time() 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. +

                  +
                  +
                  + + +

                  32.32.1 Examples

                  + +
                    +
                  • +List all available plugins within amp (LADSPA example plugin) library: +
                     
                    ladspa=file=amp
                    +
                    + +
                  • +List all available controls and their valid ranges for vcf_notch +plugin from VCF library: +
                     
                    ladspa=f=vcf:p=vcf_notch:c=help
                    +
                    + +
                  • +Simulate low quality audio equipment using Computer Music Toolkit (CMT) +plugin library: +
                     
                    ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
                    +
                    + +
                  • +Add reverberation to the audio using TAP-plugins +(Tom’s Audio Processing plugins): +
                     
                    ladspa=file=tap_reverb:tap_reverb
                    +
                    + +
                  • +Generate white noise, with 0.2 amplitude: +
                     
                    ladspa=file=cmt:noise_source_white:c=c0=.2
                    +
                    + +
                  • +Generate 20 bpm clicks using plugin C* Click - Metronome from the +C* Audio Plugin Suite (CAPS) library: +
                     
                    ladspa=file=caps:Click:c=c1=20'
                    +
                    + +
                  • +Apply C* Eq10X2 - Stereo 10-band equaliser effect: +
                     
                    ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
                    +
                    +
                  + + +

                  32.32.2 Commands

                  + +

                  This filter supports the following commands: +

                  +
                  cN
                  +

                  Modify the N-th control value. +

                  +

                  If the specified value is not valid, it is ignored and prior one is kept. +

                  +
                  + + +

                  32.33 lowpass

                  + +

                  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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set frequency in Hz. Default is 500. +

                  +
                  +
                  poles, p
                  +

                  Set number of poles. Default is 2. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  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. +

                  +
                  + + +

                  32.34 pan

                  + +

                  Mix channels with specific gain levels. The filter accepts the output +channel layout followed by a set of channels definitions. +

                  +

                  This filter is also designed to remap efficiently the channels of an audio +stream. +

                  +

                  The filter accepts parameters of the form: +"l:outdef:outdef:..." +

                  +
                  +
                  l
                  +

                  output channel layout or number of channels +

                  +
                  +
                  outdef
                  +

                  output channel specification, of the form: +"out_name=[gain*]in_name[+[gain*]in_name...]" +

                  +
                  +
                  out_name
                  +

                  output channel to define, either a channel name (FL, FR, etc.) or a channel +number (c0, c1, etc.) +

                  +
                  +
                  gain
                  +

                  multiplicative coefficient for the channel, 1 leaving the volume unchanged +

                  +
                  +
                  in_name
                  +

                  input channel to use, see out_name for details; it is not possible to mix +named and numbered input channels +

                  +
                  + +

                  If the ‘=’ in a channel specification is replaced by ‘<’, then the gains for +that specification will be renormalized so that the total is 1, thus +avoiding clipping noise. +

                  + +

                  32.34.1 Mixing examples

                  + +

                  For example, if you want to down-mix from stereo to mono, but with a bigger +factor for the left channel: +

                   
                  pan=1:c0=0.9*c0+0.1*c1
                  +
                  + +

                  A customized down-mix to stereo that works automatically for 3-, 4-, 5- and +7-channels surround: +

                   
                  pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
                  +
                  + +

                  Note that ffmpeg integrates a default down-mix (and up-mix) system +that should be preferred (see "-ac" option) unless you have very specific +needs. +

                  + +

                  32.34.2 Remapping examples

                  + +

                  The channel remapping will be effective if, and only if: +

                  +
                    +
                  • gain coefficients are zeroes or ones, +
                  • only one input per channel output, +
                  + +

                  If all these conditions are satisfied, the filter will notify the user ("Pure +channel mapping detected"), and use an optimized and lossless method to do the +remapping. +

                  +

                  For example, if you have a 5.1 source and want a stereo audio stream by +dropping the extra channels: +

                   
                  pan="stereo: c0=FL : c1=FR"
                  +
                  + +

                  Given the same source, you can also switch front left and front right channels +and keep the input channel layout: +

                   
                  pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
                  +
                  + +

                  If the input is a stereo audio stream, you can mute the front left channel (and +still keep the stereo channel layout) with: +

                   
                  pan="stereo:c1=c1"
                  +
                  + +

                  Still with a stereo audio stream input, you can copy the right channel in both +front left and right: +

                   
                  pan="stereo: c0=FR : c1=FR"
                  +
                  + + +

                  32.35 replaygain

                  + +

                  ReplayGain scanner filter. This filter takes an audio stream as an input and +outputs it unchanged. +At end of filtering it displays track_gain and track_peak. +

                  + +

                  32.36 resample

                  + +

                  Convert the audio sample format, sample rate and channel layout. This filter is +not meant to be used directly. +

                  + +

                  32.37 silencedetect

                  + +

                  Detect silence in an audio stream. +

                  +

                  This filter logs a message when it detects that the input audio volume is less +or equal to a noise tolerance value for a duration greater or equal to the +minimum detected noise duration. +

                  +

                  The printed times and duration are expressed in seconds. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  duration, d
                  +

                  Set silence duration until notification (default is 2 seconds). +

                  +
                  +
                  noise, n
                  +

                  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. +

                  +
                  + + +

                  32.37.1 Examples

                  + +
                    +
                  • +Detect 5 seconds of silence with -50dB noise tolerance: +
                     
                    silencedetect=n=-50dB:d=5
                    +
                    + +
                  • +Complete example with ffmpeg to detect silence with 0.0001 noise +tolerance in ‘silence.mp3’: +
                     
                    ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
                    +
                    +
                  + + +

                  32.38 treble

                  + +

                  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). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  gain, g
                  +

                  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. +

                  +
                  +
                  frequency, f
                  +

                  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 3000 Hz. +

                  +
                  +
                  width_type
                  +

                  Set method to specify band-width of filter. +

                  +
                  h
                  +

                  Hz +

                  +
                  q
                  +

                  Q-Factor +

                  +
                  o
                  +

                  octave +

                  +
                  s
                  +

                  slope +

                  +
                  + +
                  +
                  width, w
                  +

                  Determine how steep is the filter’s shelf transition. +

                  +
                  + + +

                  32.39 volume

                  + +

                  Adjust the input audio volume. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  volume
                  +

                  Expresses how the audio volume will be increased or decreased. +

                  +

                  Output values are clipped to the maximum value. +

                  +

                  The output audio volume is given by the relation: +

                   
                  output_volume = volume * input_volume
                  +
                  + +

                  Default value for volume is 1.0. +

                  +
                  +
                  precision
                  +

                  Set the mathematical precision. +

                  +

                  This determines which input sample formats will be allowed, which affects the +precision of the volume scaling. +

                  +
                  +
                  fixed
                  +

                  8-bit fixed-point; limits input sample format to U8, S16, and S32. +

                  +
                  float
                  +

                  32-bit floating-point; limits input sample format to FLT. (default) +

                  +
                  double
                  +

                  64-bit floating-point; limits input sample format to DBL. +

                  +
                  +
                  +
                  + + +

                  32.39.1 Examples

                  + +
                    +
                  • +Halve the input audio volume: +
                     
                    volume=volume=0.5
                    +volume=volume=1/2
                    +volume=volume=-6.0206dB
                    +
                    + +

                    In all the above example the named key for ‘volume’ can be +omitted, for example like in: +

                     
                    volume=0.5
                    +
                    + +
                  • +Increase input audio power by 6 decibels using fixed-point precision: +
                     
                    volume=volume=6dB:precision=fixed
                    +
                    +
                  + + +

                  32.40 volumedetect

                  + +

                  Detect the volume of the input video. +

                  +

                  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. +

                  +

                  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). +

                  +

                  All volumes are in decibels relative to the maximum PCM value. +

                  + +

                  32.40.1 Examples

                  + +

                  Here is an excerpt of the output: +

                   
                  [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
                  +
                  + +

                  It means that: +

                    +
                  • +The mean square energy is approximately -27 dB, or 10^-2.7. +
                  • +The largest sample is at -4 dB, or more precisely between -4 dB and -5 dB. +
                  • +There are 6 samples at -4 dB, 62 at -5 dB, 286 at -6 dB, etc. +
                  + +

                  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. +

                  + + +

                  33. Audio Sources

                  + +

                  Below is a description of the currently available audio sources. +

                  + +

                  33.1 abuffer

                  + +

                  Buffer audio frames, and make them available to the filter chain. +

                  +

                  This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/asrc_abuffer.h’. +

                  +

                  It accepts the following named parameters: +

                  +
                  +
                  time_base
                  +

                  Timebase which will be used for timestamps of submitted frames. It must be +either a floating-point number or in numerator/denominator form. +

                  +
                  +
                  sample_rate
                  +

                  The sample rate of the incoming audio buffers. +

                  +
                  +
                  sample_fmt
                  +

                  The sample format of the incoming audio buffers. +Either a sample format name or its corresponging integer representation from +the enum AVSampleFormat in ‘libavutil/samplefmt.h’ +

                  +
                  +
                  channel_layout
                  +

                  The channel layout of the incoming audio buffers. +Either a channel layout name from channel_layout_map in +‘libavutil/channel_layout.c’ or its corresponding integer representation +from the AV_CH_LAYOUT_* macros in ‘libavutil/channel_layout.h’ +

                  +
                  +
                  channels
                  +

                  The number of channels of the incoming audio buffers. +If both channels and channel_layout are specified, then they +must be consistent. +

                  +
                  +
                  + + +

                  33.1.1 Examples

                  + +
                   
                  abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
                  +
                  + +

                  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: +

                   
                  abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
                  +
                  + + +

                  33.2 aevalsrc

                  + +

                  Generate an audio signal specified by an expression. +

                  +

                  This source accepts in input one or more expressions (one for each +channel), which are evaluated and used to generate a corresponding +audio signal. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  exprs
                  +

                  Set the ’|’-separated expressions list for each separate channel. In case the +‘channel_layout’ option is not specified, the selected channel layout +depends on the number of provided expressions. +

                  +
                  +
                  channel_layout, c
                  +

                  Set the channel layout. The number of channels in the specified layout +must be equal to the number of specified expressions. +

                  +
                  +
                  duration, d
                  +

                  Set the minimum duration of the sourced audio. See the function +av_parse_time() for the accepted format. +Note that the resulting duration may be greater than the specified +duration, as the generated audio is always cut at the end of a +complete frame. +

                  +

                  If not specified, or the expressed duration is negative, the audio is +supposed to be generated forever. +

                  +
                  +
                  nb_samples, n
                  +

                  Set the number of samples per channel per each output frame, +default to 1024. +

                  +
                  +
                  sample_rate, s
                  +

                  Specify the sample rate, default to 44100. +

                  +
                  + +

                  Each expression in exprs can contain the following constants: +

                  +
                  +
                  n
                  +

                  number of the evaluated sample, starting from 0 +

                  +
                  +
                  t
                  +

                  time of the evaluated sample expressed in seconds, starting from 0 +

                  +
                  +
                  s
                  +

                  sample rate +

                  +
                  +
                  + + +

                  33.2.1 Examples

                  + +
                    +
                  • +Generate silence: +
                     
                    aevalsrc=0
                    +
                    + +
                  • +Generate a sin signal with frequency of 440 Hz, set sample rate to +8000 Hz: +
                     
                    aevalsrc="sin(440*2*PI*t):s=8000"
                    +
                    + +
                  • +Generate a two channels signal, specify the channel layout (Front +Center + Back Center) explicitly: +
                     
                    aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
                    +
                    + +
                  • +Generate white noise: +
                     
                    aevalsrc="-2+random(0)"
                    +
                    + +
                  • +Generate an amplitude modulated signal: +
                     
                    aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
                    +
                    + +
                  • +Generate 2.5 Hz binaural beats on a 360 Hz carrier: +
                     
                    aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
                    +
                    + +
                  + + +

                  33.3 anullsrc

                  + +

                  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). +

                  +

                  This source accepts the following options: +

                  +
                  +
                  channel_layout, cl
                  +
                  +

                  Specify the channel layout, and can be either an integer or a string +representing a channel layout. The default value of channel_layout +is "stereo". +

                  +

                  Check the channel_layout_map definition in +‘libavutil/channel_layout.c’ for the mapping between strings and +channel layout values. +

                  +
                  +
                  sample_rate, r
                  +

                  Specify the sample rate, and defaults to 44100. +

                  +
                  +
                  nb_samples, n
                  +

                  Set the number of samples per requested frames. +

                  +
                  +
                  + + +

                  33.3.1 Examples

                  + +
                    +
                  • +Set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO. +
                     
                    anullsrc=r=48000:cl=4
                    +
                    + +
                  • +Do the same operation with a more obvious syntax: +
                     
                    anullsrc=r=48000:cl=mono
                    +
                    +
                  + +

                  All the parameters need to be explicitly defined. +

                  + +

                  33.4 flite

                  + +

                  Synthesize a voice utterance using the libflite library. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libflite. +

                  +

                  Note that the flite library is not thread-safe. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  list_voices
                  +

                  If set to 1, list the names of the available voices and exit +immediately. Default value is 0. +

                  +
                  +
                  nb_samples, n
                  +

                  Set the maximum number of samples per frame. Default value is 512. +

                  +
                  +
                  textfile
                  +

                  Set the filename containing the text to speak. +

                  +
                  +
                  text
                  +

                  Set the text to speak. +

                  +
                  +
                  voice, v
                  +

                  Set the voice to use for the speech synthesis. Default value is +kal. See also the list_voices option. +

                  +
                  + + +

                  33.4.1 Examples

                  + +
                    +
                  • +Read from file ‘speech.txt’, and synthetize the text using the +standard flite voice: +
                     
                    flite=textfile=speech.txt
                    +
                    + +
                  • +Read the specified text selecting the slt voice: +
                     
                    flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
                    +
                    + +
                  • +Input text to ffmpeg: +
                     
                    ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
                    +
                    + +
                  • +Make ‘ffplay’ speak the specified text, using flite and +the lavfi device: +
                     
                    ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
                    +
                    +
                  + +

                  For more information about libflite, check: +http://www.speech.cs.cmu.edu/flite/ +

                  + +

                  33.5 sine

                  + +

                  Generate an audio signal made of a sine wave with amplitude 1/8. +

                  +

                  The audio signal is bit-exact. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  frequency, f
                  +

                  Set the carrier frequency. Default is 440 Hz. +

                  +
                  +
                  beep_factor, b
                  +

                  Enable a periodic beep every second with frequency beep_factor times +the carrier frequency. Default is 0, meaning the beep is disabled. +

                  +
                  +
                  sample_rate, r
                  +

                  Specify the sample rate, default is 44100. +

                  +
                  +
                  duration, d
                  +

                  Specify the duration of the generated audio stream. +

                  +
                  +
                  samples_per_frame
                  +

                  Set the number of samples per output frame, default is 1024. +

                  +
                  + + +

                  33.5.1 Examples

                  + +
                    +
                  • +Generate a simple 440 Hz sine wave: +
                     
                    sine
                    +
                    + +
                  • +Generate a 220 Hz sine wave with a 880 Hz beep each second, for 5 seconds: +
                     
                    sine=220:4:d=5
                    +sine=f=220:b=4:d=5
                    +sine=frequency=220:beep_factor=4:duration=5
                    +
                    + +
                  + + + +

                  34. Audio Sinks

                  + +

                  Below is a description of the currently available audio sinks. +

                  + +

                  34.1 abuffersink

                  + +

                  Buffer audio frames, and make them available to the end of filter chain. +

                  +

                  This sink is mainly intended for programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’ +or the options system. +

                  +

                  It accepts a pointer to an AVABufferSinkContext structure, which +defines the incoming buffers’ formats, to be passed as the opaque +parameter to avfilter_init_filter for initialization. +

                  + +

                  34.2 anullsink

                  + +

                  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. +

                  + + +

                  35. Video Filters

                  + +

                  When you configure your FFmpeg build, you can disable any of the +existing filters using --disable-filters. +The configure output will show the video filters included in your +build. +

                  +

                  Below is a description of the currently available video filters. +

                  + +

                  35.1 alphaextract

                  + +

                  Extract the alpha component from the input as a grayscale video. This +is especially useful with the alphamerge filter. +

                  + +

                  35.2 alphamerge

                  + +

                  Add or replace the alpha component of the primary input with the +grayscale value of a second input. This is intended for use with +alphaextract to allow the transmission or storage of frame +sequences that have alpha in a format that doesn’t support an alpha +channel. +

                  +

                  For example, to reconstruct full frames from a normal YUV-encoded video +and a separate video created with alphaextract, you might use: +

                   
                  movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
                  +
                  + +

                  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 overlay filter instead. +

                  + +

                  35.3 ass

                  + +

                  Same as the subtitles 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. +

                  + +

                  35.4 bbox

                  + +

                  Compute the bounding box for the non-black pixels in the input frame +luminance plane. +

                  +

                  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. +

                  +

                  The filter accepts the following option: +

                  +
                  +
                  min_val
                  +

                  Set the minimal luminance value. Default is 16. +

                  +
                  + + +

                  35.5 blackdetect

                  + +

                  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. +

                  +

                  In order to display the output lines, you need to set the loglevel at +least to the AV_LOG_INFO value. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  black_min_duration, d
                  +

                  Set the minimum detected black duration expressed in seconds. It must +be a non-negative floating point number. +

                  +

                  Default value is 2.0. +

                  +
                  +
                  picture_black_ratio_th, pic_th
                  +

                  Set the threshold for considering a picture "black". +Express the minimum value for the ratio: +

                   
                  nb_black_pixels / nb_pixels
                  +
                  + +

                  for which a picture is considered black. +Default value is 0.98. +

                  +
                  +
                  pixel_black_th, pix_th
                  +

                  Set the threshold for considering a pixel "black". +

                  +

                  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: +

                   
                  absolute_threshold = luminance_minimum_value + pixel_black_th * luminance_range_size
                  +
                  + +

                  luminance_range_size and luminance_minimum_value 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. +

                  +

                  Default value is 0.10. +

                  +
                  + +

                  The following example sets the maximum pixel threshold to the minimum +value, and detects only black intervals of 2 or more seconds: +

                   
                  blackdetect=d=2:pix_th=0.00
                  +
                  + + +

                  35.6 blackframe

                  + +

                  Detect frames that are (almost) completely black. Can be useful to +detect chapter transitions or commercials. Output lines consist of +the frame number of the detected frame, the percentage of blackness, +the position in the file if known or -1 and the timestamp in seconds. +

                  +

                  In order to display the output lines, you need to set the loglevel at +least to the AV_LOG_INFO value. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  amount
                  +

                  Set the percentage of the pixels that have to be below the threshold, defaults +to 98. +

                  +
                  +
                  threshold, thresh
                  +

                  Set the threshold below which a pixel value is considered black, defaults to +32. +

                  +
                  +
                  + + +

                  35.7 blend

                  + +

                  Blend two video frames into each other. +

                  +

                  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. +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  c0_mode
                  +
                  c1_mode
                  +
                  c2_mode
                  +
                  c3_mode
                  +
                  all_mode
                  +

                  Set blend mode for specific pixel component or all pixel components in case +of all_mode. Default value is normal. +

                  +

                  Available values for component modes are: +

                  +
                  addition
                  +
                  and
                  +
                  average
                  +
                  burn
                  +
                  darken
                  +
                  difference
                  +
                  divide
                  +
                  dodge
                  +
                  exclusion
                  +
                  hardlight
                  +
                  lighten
                  +
                  multiply
                  +
                  negation
                  +
                  normal
                  +
                  or
                  +
                  overlay
                  +
                  phoenix
                  +
                  pinlight
                  +
                  reflect
                  +
                  screen
                  +
                  softlight
                  +
                  subtract
                  +
                  vividlight
                  +
                  xor
                  +
                  + +
                  +
                  c0_opacity
                  +
                  c1_opacity
                  +
                  c2_opacity
                  +
                  c3_opacity
                  +
                  all_opacity
                  +

                  Set blend opacity for specific pixel component or all pixel components in case +of all_opacity. Only used in combination with pixel component blend modes. +

                  +
                  +
                  c0_expr
                  +
                  c1_expr
                  +
                  c2_expr
                  +
                  c3_expr
                  +
                  all_expr
                  +

                  Set blend expression for specific pixel component or all pixel components in case +of all_expr. Note that related mode options will be ignored if those are set. +

                  +

                  The expressions can use the following variables: +

                  +
                  +
                  N
                  +

                  The sequential number of the filtered frame, starting from 0. +

                  +
                  +
                  X
                  +
                  Y
                  +

                  the coordinates of the current sample +

                  +
                  +
                  W
                  +
                  H
                  +

                  the width and height of currently filtered plane +

                  +
                  +
                  SW
                  +
                  SH
                  +

                  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 1,1 for the luma plane, and +0.5,0.5 for chroma planes. +

                  +
                  +
                  T
                  +

                  Time of the current frame, expressed in seconds. +

                  +
                  +
                  TOP, A
                  +

                  Value of pixel component at current location for first video frame (top layer). +

                  +
                  +
                  BOTTOM, B
                  +

                  Value of pixel component at current location for second video frame (bottom layer). +

                  +
                  + +
                  +
                  shortest
                  +

                  Force termination when the shortest input terminates. Default is 0. +

                  +
                  repeatlast
                  +

                  Continue applying the last bottom frame after the end of the stream. A value of +0 disable the filter after the last frame of the bottom layer is reached. +Default is 1. +

                  +
                  + + +

                  35.7.1 Examples

                  + +
                    +
                  • +Apply transition from bottom layer to top layer in first 10 seconds: +
                     
                    blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
                    +
                    + +
                  • +Apply 1x1 checkerboard effect: +
                     
                    blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
                    +
                    +
                  + + +

                  35.8 boxblur

                  + +

                  Apply boxblur algorithm to the input video. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  luma_radius, lr
                  +
                  luma_power, lp
                  +
                  chroma_radius, cr
                  +
                  chroma_power, cp
                  +
                  alpha_radius, ar
                  +
                  alpha_power, ap
                  +
                  + +

                  A description of the accepted options follows. +

                  +
                  +
                  luma_radius, lr
                  +
                  chroma_radius, cr
                  +
                  alpha_radius, ar
                  +

                  Set an expression for the box radius in pixels used for blurring the +corresponding input plane. +

                  +

                  The radius value must be a non-negative number, and must not be +greater than the value of the expression min(w,h)/2 for the +luma and alpha planes, and of min(cw,ch)/2 for the chroma +planes. +

                  +

                  Default value for ‘luma_radius’ is "2". If not specified, +‘chroma_radius’ and ‘alpha_radius’ default to the +corresponding value set for ‘luma_radius’. +

                  +

                  The expressions can contain the following constants: +

                  +
                  w
                  +
                  h
                  +

                  the input width and height in pixels +

                  +
                  +
                  cw
                  +
                  ch
                  +

                  the input chroma image width and height in pixels +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  + +
                  +
                  luma_power, lp
                  +
                  chroma_power, cp
                  +
                  alpha_power, ap
                  +

                  Specify how many times the boxblur filter is applied to the +corresponding plane. +

                  +

                  Default value for ‘luma_power’ is 2. If not specified, +‘chroma_power’ and ‘alpha_power’ default to the +corresponding value set for ‘luma_power’. +

                  +

                  A value of 0 will disable the effect. +

                  +
                  + + +

                  35.8.1 Examples

                  + +
                    +
                  • +Apply a boxblur filter with luma, chroma, and alpha radius +set to 2: +
                     
                    boxblur=luma_radius=2:luma_power=1
                    +boxblur=2:1
                    +
                    + +
                  • +Set luma radius to 2, alpha and chroma radius to 0: +
                     
                    boxblur=2:1:cr=0:ar=0
                    +
                    + +
                  • +Set luma and chroma radius to a fraction of the video dimension: +
                     
                    boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
                    +
                    +
                  + + +

                  35.9 colorbalance

                  +

                  Modify intensity of primary colors (red, green and blue) of input frames. +

                  +

                  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. +

                  +

                  A positive adjustment value shifts the balance towards the primary color, a negative +value towards the complementary color. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  rs
                  +
                  gs
                  +
                  bs
                  +

                  Adjust red, green and blue shadows (darkest pixels). +

                  +
                  +
                  rm
                  +
                  gm
                  +
                  bm
                  +

                  Adjust red, green and blue midtones (medium pixels). +

                  +
                  +
                  rh
                  +
                  gh
                  +
                  bh
                  +

                  Adjust red, green and blue highlights (brightest pixels). +

                  +

                  Allowed ranges for options are [-1.0, 1.0]. Defaults are 0. +

                  +
                  + + +

                  35.9.1 Examples

                  + +
                    +
                  • +Add red color cast to shadows: +
                     
                    colorbalance=rs=.3
                    +
                    +
                  + + +

                  35.10 colorchannelmixer

                  + +

                  Adjust video input frames by re-mixing color channels. +

                  +

                  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: +

                   
                  red=red*rr + blue*rb + green*rg + alpha*ra
                  +
                  + +

                  The filter accepts the following options: +

                  +
                  +
                  rr
                  +
                  rg
                  +
                  rb
                  +
                  ra
                  +

                  Adjust contribution of input red, green, blue and alpha channels for output red channel. +Default is 1 for rr, and 0 for rg, rb and ra. +

                  +
                  +
                  gr
                  +
                  gg
                  +
                  gb
                  +
                  ga
                  +

                  Adjust contribution of input red, green, blue and alpha channels for output green channel. +Default is 1 for gg, and 0 for gr, gb and ga. +

                  +
                  +
                  br
                  +
                  bg
                  +
                  bb
                  +
                  ba
                  +

                  Adjust contribution of input red, green, blue and alpha channels for output blue channel. +Default is 1 for bb, and 0 for br, bg and ba. +

                  +
                  +
                  ar
                  +
                  ag
                  +
                  ab
                  +
                  aa
                  +

                  Adjust contribution of input red, green, blue and alpha channels for output alpha channel. +Default is 1 for aa, and 0 for ar, ag and ab. +

                  +

                  Allowed ranges for options are [-2.0, 2.0]. +

                  +
                  + + +

                  35.10.1 Examples

                  + +
                    +
                  • +Convert source to grayscale: +
                     
                    colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
                    +
                    +
                  • +Simulate sepia tones: +
                     
                    colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
                    +
                    +
                  + + +

                  35.11 colormatrix

                  + +

                  Convert color matrix. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  src
                  +
                  dst
                  +

                  Specify the source and destination color matrix. Both values must be +specified. +

                  +

                  The accepted values are: +

                  +
                  bt709
                  +

                  BT.709 +

                  +
                  +
                  bt601
                  +

                  BT.601 +

                  +
                  +
                  smpte240m
                  +

                  SMPTE-240M +

                  +
                  +
                  fcc
                  +

                  FCC +

                  +
                  +
                  +
                  + +

                  For example to convert from BT.601 to SMPTE-240M, use the command: +

                   
                  colormatrix=bt601:smpte240m
                  +
                  + + +

                  35.12 copy

                  + +

                  Copy the input source unchanged to the output. Mainly useful for +testing purposes. +

                  + +

                  35.13 crop

                  + +

                  Crop the input video to given dimensions. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  w, out_w
                  +

                  Width of the output video. It defaults to iw. +This expression is evaluated only once during the filter +configuration. +

                  +
                  +
                  h, out_h
                  +

                  Height of the output video. It defaults to ih. +This expression is evaluated only once during the filter +configuration. +

                  +
                  +
                  x
                  +

                  Horizontal position, in the input video, of the left edge of the output video. +It defaults to (in_w-out_w)/2. +This expression is evaluated per-frame. +

                  +
                  +
                  y
                  +

                  Vertical position, in the input video, of the top edge of the output video. +It defaults to (in_h-out_h)/2. +This expression is evaluated per-frame. +

                  +
                  +
                  keep_aspect
                  +

                  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. +

                  +
                  + +

                  The out_w, out_h, x, y parameters are +expressions containing the following constants: +

                  +
                  +
                  x
                  +
                  y
                  +

                  the computed values for x and y. They are evaluated for +each new frame. +

                  +
                  +
                  in_w
                  +
                  in_h
                  +

                  the input width and height +

                  +
                  +
                  iw
                  +
                  ih
                  +

                  same as in_w and in_h +

                  +
                  +
                  out_w
                  +
                  out_h
                  +

                  the output (cropped) width and height +

                  +
                  +
                  ow
                  +
                  oh
                  +

                  same as out_w and out_h +

                  +
                  +
                  a
                  +

                  same as iw / ih +

                  +
                  +
                  sar
                  +

                  input sample aspect ratio +

                  +
                  +
                  dar
                  +

                  input display aspect ratio, it is the same as (iw / ih) * sar +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  n
                  +

                  the number of input frame, starting from 0 +

                  +
                  +
                  pos
                  +

                  the position in the file of the input frame, NAN if unknown +

                  +
                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  +
                  + +

                  The expression for out_w may depend on the value of out_h, +and the expression for out_h may depend on out_w, but they +cannot depend on x and y, as x and y are +evaluated after out_w and out_h. +

                  +

                  The x and y parameters specify the expressions for the +position of the top-left corner of the output (non-cropped) area. They +are evaluated for each frame. If the evaluated value is not valid, it +is approximated to the nearest valid value. +

                  +

                  The expression for x may depend on y, and the expression +for y may depend on x. +

                  + +

                  35.13.1 Examples

                  + +
                    +
                  • +Crop area with size 100x100 at position (12,34). +
                     
                    crop=100:100:12:34
                    +
                    + +

                    Using named options, the example above becomes: +

                     
                    crop=w=100:h=100:x=12:y=34
                    +
                    + +
                  • +Crop the central input area with size 100x100: +
                     
                    crop=100:100
                    +
                    + +
                  • +Crop the central input area with size 2/3 of the input video: +
                     
                    crop=2/3*in_w:2/3*in_h
                    +
                    + +
                  • +Crop the input video central square: +
                     
                    crop=out_w=in_h
                    +crop=in_h
                    +
                    + +
                  • +Delimit the rectangle with the top-left corner placed at position +100:100 and the right-bottom corner corresponding to the right-bottom +corner of the input image: +
                     
                    crop=in_w-100:in_h-100:100:100
                    +
                    + +
                  • +Crop 10 pixels from the left and right borders, and 20 pixels from +the top and bottom borders +
                     
                    crop=in_w-2*10:in_h-2*20
                    +
                    + +
                  • +Keep only the bottom right quarter of the input image: +
                     
                    crop=in_w/2:in_h/2:in_w/2:in_h/2
                    +
                    + +
                  • +Crop height for getting Greek harmony: +
                     
                    crop=in_w:1/PHI*in_w
                    +
                    + +
                  • +Appply trembling effect: +
                     
                    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)
                    +
                    + +
                  • +Apply erratic camera effect depending on timestamp: +
                     
                    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"
                    +
                    + +
                  • +Set x depending on the value of y: +
                     
                    crop=in_w/2:in_h/2:y:10+10*sin(n/10)
                    +
                    +
                  + + +

                  35.14 cropdetect

                  + +

                  Auto-detect crop size. +

                  +

                  Calculate necessary cropping parameters and prints the recommended +parameters through the logging system. The detected dimensions +correspond to the non-black area of the input video. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  limit
                  +

                  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. +

                  +
                  +
                  round
                  +

                  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. +

                  +
                  +
                  reset_count, reset
                  +

                  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. +

                  +

                  This can be useful when channel logos distort the video area. 0 +indicates never reset and return the largest area encountered during +playback. +

                  +
                  + +

                  +

                  +

                  35.15 curves

                  + +

                  Apply color adjustments using curves. +

                  +

                  This filter is similar to the Adobe Photoshop and GIMP curves tools. Each +component (red, green and blue) has its values defined by N 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. +

                  +

                  By default, a component curve is defined by the two points (0;0) and +(1;1). This creates a straight line where each original pixel value is +"adjusted" to its own value, which means no change to the image. +

                  +

                  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 x and y values must +be in the [0;1] interval. If the computed curves happened to go outside +the vector spaces, the values will be clipped accordingly. +

                  +

                  If there is no key point defined in x=0, the filter will automatically +insert a (0;0) point. In the same way, if there is no key point defined +in x=1, the filter will automatically insert a (1;1) point. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  preset
                  +

                  Select one of the available color presets. This option can be used in addition +to the ‘r’, ‘g’, ‘b’ parameters; in this case, the later +options takes priority on the preset values. +Available presets are: +

                  +
                  none
                  +
                  color_negative
                  +
                  cross_process
                  +
                  darker
                  +
                  increase_contrast
                  +
                  lighter
                  +
                  linear_contrast
                  +
                  medium_contrast
                  +
                  negative
                  +
                  strong_contrast
                  +
                  vintage
                  +
                  +

                  Default is none. +

                  +
                  master, m
                  +

                  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 +‘r’, ‘g’, ‘b’ or ‘all’ since it acts like a +post-processing LUT. +

                  +
                  red, r
                  +

                  Set the key points for the red component. +

                  +
                  green, g
                  +

                  Set the key points for the green component. +

                  +
                  blue, b
                  +

                  Set the key points for the blue component. +

                  +
                  all
                  +

                  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 +‘all’ setting. +

                  +
                  psfile
                  +

                  Specify a Photoshop curves file (.asv) to import the settings from. +

                  +
                  + +

                  To avoid some filtergraph syntax conflicts, each key points list need to be +defined using the following syntax: x0/y0 x1/y1 x2/y2 .... +

                  + +

                  35.15.1 Examples

                  + +
                    +
                  • +Increase slightly the middle level of blue: +
                     
                    curves=blue='0.5/0.58'
                    +
                    + +
                  • +Vintage effect: +
                     
                    curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
                    +
                    +

                    Here we obtain the following coordinates for each components: +

                    +
                    red
                    +

                    (0;0.11) (0.42;0.51) (1;0.95) +

                    +
                    green
                    +

                    (0;0) (0.50;0.48) (1;1) +

                    +
                    blue
                    +

                    (0;0.22) (0.49;0.44) (1;0.80) +

                    +
                    + +
                  • +The previous example can also be achieved with the associated built-in preset: +
                     
                    curves=preset=vintage
                    +
                    + +
                  • +Or simply: +
                     
                    curves=vintage
                    +
                    + +
                  • +Use a Photoshop preset and redefine the points of the green component: +
                     
                    curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53'
                    +
                    +
                  + + +

                  35.16 dctdnoiz

                  + +

                  Denoise frames using 2D DCT (frequency domain filtering). +

                  +

                  This filter is not designed for real time and can be extremely slow. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  sigma, s
                  +

                  Set the noise sigma constant. +

                  +

                  This sigma defines a hard threshold of 3 * sigma; every DCT +coefficient (absolute value) below this threshold with be dropped. +

                  +

                  If you need a more advanced filtering, see ‘expr’. +

                  +

                  Default is 0. +

                  +
                  +
                  overlap
                  +

                  Set number overlapping pixels for each block. Each block is of size +16x16. 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. +

                  +

                  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. +

                  +

                  Default value is 15. +

                  +
                  +
                  expr, e
                  +

                  Set the coefficient factor expression. +

                  +

                  For each coefficient of a DCT block, this expression will be evaluated as a +multiplier value for the coefficient. +

                  +

                  If this is option is set, the ‘sigma’ option will be ignored. +

                  +

                  The absolute value of the coefficient can be accessed through the c +variable. +

                  +
                  + + +

                  35.16.1 Examples

                  + +

                  Apply a denoise with a ‘sigma’ of 4.5: +

                   
                  dctdnoiz=4.5
                  +
                  + +

                  The same operation can be achieved using the expression system: +

                   
                  dctdnoiz=e='gte(c, 4.5*3)'
                  +
                  + +

                  +

                  +

                  35.17 decimate

                  + +

                  Drop duplicated frames at regular intervals. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  cycle
                  +

                  Set the number of frames from which one will be dropped. Setting this to +N means one frame in every batch of N frames will be dropped. +Default is 5. +

                  +
                  +
                  dupthresh
                  +

                  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 1.1 +

                  +
                  +
                  scthresh
                  +

                  Set scene change threshold. Default is 15. +

                  +
                  +
                  blockx
                  +
                  blocky
                  +

                  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 32. +

                  +
                  +
                  ppsrc
                  +

                  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 +1, 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 +0. +

                  +
                  +
                  chroma
                  +

                  Set whether or not chroma is considered in the metric calculations. Default is +1. +

                  +
                  + + +

                  35.18 delogo

                  + +

                  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). +

                  +

                  This filter accepts the following options: +

                  +
                  x
                  +
                  y
                  +

                  Specify the top left corner coordinates of the logo. They must be +specified. +

                  +
                  +
                  w
                  +
                  h
                  +

                  Specify the width and height of the logo to clear. They must be +specified. +

                  +
                  +
                  band, t
                  +

                  Specify the thickness of the fuzzy edge of the rectangle (added to +w and h). The default value is 4. +

                  +
                  +
                  show
                  +

                  When set to 1, a green rectangle is drawn on the screen to simplify +finding the right x, y, w, and h parameters. +The default value is 0. +

                  +

                  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. +

                  +
                  +
                  + + +

                  35.18.1 Examples

                  + +
                    +
                  • +Set a rectangle covering the area with top left corner coordinates 0,0 +and size 100x77, setting a band of size 10: +
                     
                    delogo=x=0:y=0:w=100:h=77:band=10
                    +
                    + +
                  + + +

                  35.19 deshake

                  + +

                  Attempt to fix small changes in horizontal and/or vertical shift. This +filter helps remove camera shake from hand-holding a camera, bumping a +tripod, moving on a vehicle, etc. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  x
                  +
                  y
                  +
                  w
                  +
                  h
                  +

                  Specify a rectangular area where to limit the search for motion +vectors. +If desired the search for motion vectors can be limited to a +rectangular area of the frame defined by its top left corner, width +and height. These parameters have the same meaning as the drawbox +filter which can be used to visualise the position of the bounding +box. +

                  +

                  This is useful when simultaneous movement of subjects within the frame +might be confused for camera motion by the motion vector search. +

                  +

                  If any or all of x, y, w and h are set to -1 +then the full frame is used. This allows later options to be set +without specifying the bounding box for the motion vector search. +

                  +

                  Default - search the whole frame. +

                  +
                  +
                  rx
                  +
                  ry
                  +

                  Specify the maximum extent of movement in x and y directions in the +range 0-64 pixels. Default 16. +

                  +
                  +
                  edge
                  +

                  Specify how to generate pixels to fill blanks at the edge of the +frame. Available values are: +

                  +
                  blank, 0
                  +

                  Fill zeroes at blank locations +

                  +
                  original, 1
                  +

                  Original image at blank locations +

                  +
                  clamp, 2
                  +

                  Extruded edge value at blank locations +

                  +
                  mirror, 3
                  +

                  Mirrored edge at blank locations +

                  +
                  +

                  Default value is ‘mirror’. +

                  +
                  +
                  blocksize
                  +

                  Specify the blocksize to use for motion search. Range 4-128 pixels, +default 8. +

                  +
                  +
                  contrast
                  +

                  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. +

                  +
                  +
                  search
                  +

                  Specify the search strategy. Available values are: +

                  +
                  exhaustive, 0
                  +

                  Set exhaustive search +

                  +
                  less, 1
                  +

                  Set less exhaustive search. +

                  +
                  +

                  Default value is ‘exhaustive’. +

                  +
                  +
                  filename
                  +

                  If set then a detailed log of the motion search is written to the +specified file. +

                  +
                  +
                  opencl
                  +

                  If set to 1, specify using OpenCL capabilities, only available if +FFmpeg was configured with --enable-opencl. Default value is 0. +

                  +
                  +
                  + + +

                  35.20 drawbox

                  + +

                  Draw a colored box on the input image. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  x
                  +
                  y
                  +

                  The expressions which specify the top left corner coordinates of the box. Default to 0. +

                  +
                  +
                  width, w
                  +
                  height, h
                  +

                  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. +

                  +
                  +
                  color, c
                  +

                  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 invert is used, the box edge color is the same as the +video with inverted luma. +

                  +
                  +
                  thickness, t
                  +

                  The expression which sets the thickness of the box edge. Default value is 3. +

                  +

                  See below for the list of accepted constants. +

                  +
                  + +

                  The parameters for x, y, w and h and t are expressions containing the +following constants: +

                  +
                  +
                  dar
                  +

                  The input display aspect ratio, it is the same as (w / h) * sar. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  in_h, ih
                  +
                  in_w, iw
                  +

                  The input width and height. +

                  +
                  +
                  sar
                  +

                  The input sample aspect ratio. +

                  +
                  +
                  x
                  +
                  y
                  +

                  The x and y offset coordinates where the box is drawn. +

                  +
                  +
                  w
                  +
                  h
                  +

                  The width and height of the drawn box. +

                  +
                  +
                  t
                  +

                  The thickness of the drawn box. +

                  +

                  These constants allow the x, y, w, h and t expressions to refer to +each other, so you may for example specify y=x/dar or h=w/dar. +

                  +
                  +
                  + + +

                  35.20.1 Examples

                  + +
                    +
                  • +Draw a black box around the edge of the input image: +
                     
                    drawbox
                    +
                    + +
                  • +Draw a box with color red and an opacity of 50%: +
                     
                    drawbox=10:20:200:60:red@0.5
                    +
                    + +

                    The previous example can be specified as: +

                     
                    drawbox=x=10:y=20:w=200:h=60:color=red@0.5
                    +
                    + +
                  • +Fill the box with pink color: +
                     
                    drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max
                    +
                    + +
                  • +Draw a 2-pixel red 2.40:1 mask: +
                     
                    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
                    +
                    +
                  + + +

                  35.21 drawgrid

                  + +

                  Draw a grid on the input image. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  x
                  +
                  y
                  +

                  The expressions which specify the coordinates of some point of grid intersection (meant to configure offset). Both default to 0. +

                  +
                  +
                  width, w
                  +
                  height, h
                  +

                  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 thickness, so image gets +framed. Default to 0. +

                  +
                  +
                  color, c
                  +

                  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 invert is used, the grid color is the same as the +video with inverted luma. +

                  +
                  +
                  thickness, t
                  +

                  The expression which sets the thickness of the grid line. Default value is 1. +

                  +

                  See below for the list of accepted constants. +

                  +
                  + +

                  The parameters for x, y, w and h and t are expressions containing the +following constants: +

                  +
                  +
                  dar
                  +

                  The input display aspect ratio, it is the same as (w / h) * sar. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  in_h, ih
                  +
                  in_w, iw
                  +

                  The input grid cell width and height. +

                  +
                  +
                  sar
                  +

                  The input sample aspect ratio. +

                  +
                  +
                  x
                  +
                  y
                  +

                  The x and y coordinates of some point of grid intersection (meant to configure offset). +

                  +
                  +
                  w
                  +
                  h
                  +

                  The width and height of the drawn cell. +

                  +
                  +
                  t
                  +

                  The thickness of the drawn cell. +

                  +

                  These constants allow the x, y, w, h and t expressions to refer to +each other, so you may for example specify y=x/dar or h=w/dar. +

                  +
                  +
                  + + +

                  35.21.1 Examples

                  + +
                    +
                  • +Draw a grid with cell 100x100 pixels, thickness 2 pixels, with color red and an opacity of 50%: +
                     
                    drawgrid=width=100:height=100:thickness=2:color=red@0.5
                    +
                    + +
                  • +Draw a white 3x3 grid with an opacity of 50%: +
                     
                    drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
                    +
                    +
                  + +

                  +

                  +

                  35.22 drawtext

                  + +

                  Draw text string or text from specified file on top of video using the +libfreetype library. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libfreetype. +

                  + +

                  35.22.1 Syntax

                  + +

                  The description of the accepted parameters follows. +

                  +
                  +
                  box
                  +

                  Used to draw a box around text using background color. +Value should be either 1 (enable) or 0 (disable). +The default value of box is 0. +

                  +
                  +
                  boxcolor
                  +

                  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. +

                  +

                  The default value of boxcolor is "white". +

                  +
                  +
                  expansion
                  +

                  Select how the text is expanded. Can be either none, +strftime (deprecated) or +normal (default). See the Text expansion section +below for details. +

                  +
                  +
                  fix_bounds
                  +

                  If true, check and fix text coords to avoid clipping. +

                  +
                  +
                  fontcolor
                  +

                  The color to be used for drawing fonts. For the syntax of this option, check +the "Color" section in the ffmpeg-utils manual. +

                  +

                  The default value of fontcolor is "black". +

                  +
                  +
                  fontfile
                  +

                  The font file to be used for drawing text. Path must be included. +This parameter is mandatory. +

                  +
                  +
                  fontsize
                  +

                  The font size to be used for drawing text. +The default value of fontsize is 16. +

                  +
                  +
                  ft_load_flags
                  +

                  Flags to be used for loading the fonts. +

                  +

                  The flags map the corresponding flags supported by libfreetype, and are +a combination of the following values: +

                  +
                  default
                  +
                  no_scale
                  +
                  no_hinting
                  +
                  render
                  +
                  no_bitmap
                  +
                  vertical_layout
                  +
                  force_autohint
                  +
                  crop_bitmap
                  +
                  pedantic
                  +
                  ignore_global_advance_width
                  +
                  no_recurse
                  +
                  ignore_transform
                  +
                  monochrome
                  +
                  linear_design
                  +
                  no_autohint
                  +
                  + +

                  Default value is "render". +

                  +

                  For more information consult the documentation for the FT_LOAD_* +libfreetype flags. +

                  +
                  +
                  shadowcolor
                  +

                  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. +

                  +

                  The default value of shadowcolor is "black". +

                  +
                  +
                  shadowx
                  +
                  shadowy
                  +

                  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". +

                  +
                  +
                  start_number
                  +

                  The starting frame number for the n/frame_num variable. The default value +is "0". +

                  +
                  +
                  tabsize
                  +

                  The size in number of spaces to use for rendering the tab. +Default value is 4. +

                  +
                  +
                  timecode
                  +

                  Set the initial timecode representation in "hh:mm:ss[:;.]ff" +format. It can be used with or without text parameter. timecode_rate +option must be specified. +

                  +
                  +
                  timecode_rate, rate, r
                  +

                  Set the timecode frame rate (timecode only). +

                  +
                  +
                  text
                  +

                  The text string to be drawn. The text must be a sequence of UTF-8 +encoded characters. +This parameter is mandatory if no file is specified with the parameter +textfile. +

                  +
                  +
                  textfile
                  +

                  A text file containing text to be drawn. The text must be a sequence +of UTF-8 encoded characters. +

                  +

                  This parameter is mandatory if no text string is specified with the +parameter text. +

                  +

                  If both text and textfile are specified, an error is thrown. +

                  +
                  +
                  reload
                  +

                  If set to 1, the textfile will be reloaded before each frame. +Be sure to update it atomically, or it may be read partially, or even fail. +

                  +
                  +
                  x
                  +
                  y
                  +

                  The expressions which specify the offsets where text will be drawn +within the video frame. They are relative to the top/left border of the +output image. +

                  +

                  The default value of x and y is "0". +

                  +

                  See below for the list of accepted constants and functions. +

                  +
                  + +

                  The parameters for x and y are expressions containing the +following constants and functions: +

                  +
                  +
                  dar
                  +

                  input display aspect ratio, it is the same as (w / h) * sar +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  line_h, lh
                  +

                  the height of each text line +

                  +
                  +
                  main_h, h, H
                  +

                  the input height +

                  +
                  +
                  main_w, w, W
                  +

                  the input width +

                  +
                  +
                  max_glyph_a, ascent
                  +

                  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. +

                  +
                  +
                  max_glyph_d, descent
                  +

                  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. +

                  +
                  +
                  max_glyph_h
                  +

                  maximum glyph height, that is the maximum height for all the glyphs +contained in the rendered text, it is equivalent to ascent - +descent. +

                  +
                  +
                  max_glyph_w
                  +

                  maximum glyph width, that is the maximum width for all the glyphs +contained in the rendered text +

                  +
                  +
                  n
                  +

                  the number of input frame, starting from 0 +

                  +
                  +
                  rand(min, max)
                  +

                  return a random number included between min and max +

                  +
                  +
                  sar
                  +

                  input sample aspect ratio +

                  +
                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  +
                  text_h, th
                  +

                  the height of the rendered text +

                  +
                  +
                  text_w, tw
                  +

                  the width of the rendered text +

                  +
                  +
                  x
                  +
                  y
                  +

                  the x and y offset coordinates where the text is drawn. +

                  +

                  These parameters allow the x and y expressions to refer +each other, so you can for example specify y=x/dar. +

                  +
                  + +

                  If libavfilter was built with --enable-fontconfig, then +‘fontfile’ can be a fontconfig pattern or omitted. +

                  +

                  +

                  +

                  35.22.2 Text expansion

                  + +

                  If ‘expansion’ is set to strftime, +the filter recognizes strftime() sequences in the provided text and +expands them accordingly. Check the documentation of strftime(). This +feature is deprecated. +

                  +

                  If ‘expansion’ is set to none, the text is printed verbatim. +

                  +

                  If ‘expansion’ is set to normal (which is the default), +the following expansion mechanism is used. +

                  +

                  The backslash character ’\’, followed by any character, always expands to +the second character. +

                  +

                  Sequence of the form %{...} 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. +

                  +

                  Note that they probably must also be escaped as the value for the +‘text’ 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. +

                  +

                  The following functions are available: +

                  +
                  +
                  expr, e
                  +

                  The expression evaluation result. +

                  +

                  It must take one argument specifying the expression to be evaluated, +which accepts the same constants and functions as the x and +y values. Note that not all constants should be used, for +example the text size is not known when evaluating the expression, so +the constants text_w and text_h will have an undefined +value. +

                  +
                  +
                  gmtime
                  +

                  The time at which the filter is running, expressed in UTC. +It can accept an argument: a strftime() format string. +

                  +
                  +
                  localtime
                  +

                  The time at which the filter is running, expressed in the local time zone. +It can accept an argument: a strftime() format string. +

                  +
                  +
                  metadata
                  +

                  Frame metadata. It must take one argument specifying metadata key. +

                  +
                  +
                  n, frame_num
                  +

                  The frame number, starting from 0. +

                  +
                  +
                  pict_type
                  +

                  A 1 character description of the current picture type. +

                  +
                  +
                  pts
                  +

                  The timestamp of the current frame, in seconds, with microsecond accuracy. +

                  +
                  +
                  + + +

                  35.22.3 Examples

                  + +
                    +
                  • +Draw "Test Text" with font FreeSerif, using the default values for the +optional parameters. + +
                     
                    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
                    +
                    + +
                  • +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%. + +
                     
                    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
                    +          x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
                    +
                    + +

                    Note that the double quotes are not necessary if spaces are not used +within the parameter list. +

                    +
                  • +Show the text at the center of the video frame: +
                     
                    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
                    +
                    + +
                  • +Show a text line sliding from right to left in the last row of the video +frame. The file ‘LONG_LINE’ is assumed to contain a single line +with no newlines. +
                     
                    drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
                    +
                    + +
                  • +Show the content of file ‘CREDITS’ off the bottom of the frame and scroll up. +
                     
                    drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
                    +
                    + +
                  • +Draw a single green letter "g", at the center of the input video. +The glyph baseline is placed at half screen height. +
                     
                    drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
                    +
                    + +
                  • +Show text for 1 second every 3 seconds: +
                     
                    drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
                    +
                    + +
                  • +Use fontconfig to set the font. Note that the colons need to be escaped. +
                     
                    drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
                    +
                    + +
                  • +Print the date of a real-time encoding (see strftime(3)): +
                     
                    drawtext='fontfile=FreeSans.ttf:text=%{localtime:%a %b %d %Y}'
                    +
                    + +
                  + +

                  For more information about libfreetype, check: +http://www.freetype.org/. +

                  +

                  For more information about fontconfig, check: +http://freedesktop.org/software/fontconfig/fontconfig-user.html. +

                  + +

                  35.23 edgedetect

                  + +

                  Detect and draw edges. The filter uses the Canny Edge Detection algorithm. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  low
                  +
                  high
                  +

                  Set low and high threshold values used by the Canny thresholding +algorithm. +

                  +

                  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. +

                  +

                  low and high threshold values must be choosen in the range +[0,1], and low should be lesser or equal to high. +

                  +

                  Default value for low is 20/255, and default value for high +is 50/255. +

                  +
                  + +

                  Example: +

                   
                  edgedetect=low=0.1:high=0.4
                  +
                  + + +

                  35.24 extractplanes

                  + +

                  Extract color channel components from input video stream into +separate grayscale video streams. +

                  +

                  The filter accepts the following option: +

                  +
                  +
                  planes
                  +

                  Set plane(s) to extract. +

                  +

                  Available values for planes are: +

                  +
                  y
                  +
                  u
                  +
                  v
                  +
                  a
                  +
                  r
                  +
                  g
                  +
                  b
                  +
                  + +

                  Choosing planes not available in the input will result in an error. +That means you cannot select r, g, b planes +with y, u, v planes at same time. +

                  +
                  + + +

                  35.24.1 Examples

                  + +
                    +
                  • +Extract luma, u and v color channel component from input video frame +into 3 grayscale outputs: +
                     
                    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
                    +
                    +
                  + + +

                  35.25 fade

                  + +

                  Apply fade-in/out effect to input video. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  type, t
                  +

                  The effect type – can be either "in" for fade-in, or "out" for a fade-out +effect. +Default is in. +

                  +
                  +
                  start_frame, s
                  +

                  Specify the number of the start frame for starting to apply the fade +effect. Default is 0. +

                  +
                  +
                  nb_frames, n
                  +

                  The number of frames for which the fade effect has to last. At the end of the +fade-in effect the output video will have the same intensity as the input video, +at the end of the fade-out transition the output video will be completely black. +Default is 25. +

                  +
                  +
                  alpha
                  +

                  If set to 1, fade only alpha channel, if one exists on the input. +Default value is 0. +

                  +
                  +
                  start_time, st
                  +

                  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. +

                  +
                  +
                  duration, d
                  +

                  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 completely black. +If both duration and nb_frames are specified, duration is used. Default is 0. +

                  +
                  + + +

                  35.25.1 Examples

                  + +
                    +
                  • +Fade in first 30 frames of video: +
                     
                    fade=in:0:30
                    +
                    + +

                    The command above is equivalent to: +

                     
                    fade=t=in:s=0:n=30
                    +
                    + +
                  • +Fade out last 45 frames of a 200-frame video: +
                     
                    fade=out:155:45
                    +fade=type=out:start_frame=155:nb_frames=45
                    +
                    + +
                  • +Fade in first 25 frames and fade out last 25 frames of a 1000-frame video: +
                     
                    fade=in:0:25, fade=out:975:25
                    +
                    + +
                  • +Make first 5 frames black, then fade in from frame 5-24: +
                     
                    fade=in:5:20
                    +
                    + +
                  • +Fade in alpha over first 25 frames of video: +
                     
                    fade=in:0:25:alpha=1
                    +
                    + +
                  • +Make first 5.5 seconds black, then fade in for 0.5 seconds: +
                     
                    fade=t=in:st=5.5:d=0.5
                    +
                    + +
                  + + +

                  35.26 field

                  + +

                  Extract a single field from an interlaced image using stride +arithmetic to avoid wasting CPU time. The output frames are marked as +non-interlaced. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  type
                  +

                  Specify whether to extract the top (if the value is 0 or +top) or the bottom field (if the value is 1 or +bottom). +

                  +
                  + + +

                  35.27 fieldmatch

                  + +

                  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 fieldmatch needs to be +followed by a decimation filter such as decimate in the filtergraph. +

                  +

                  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, +fieldmatch 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 yadif before decimation. +

                  +

                  In addition to the various configuration options, fieldmatch can take an +optional second stream, activated through the ‘ppsrc’ 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. +

                  +

                  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 fieldmatch is based on. While the semantic and usage are very +close, some behaviour and options names can differ. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  order
                  +

                  Specify the assumed field order of the input stream. Available values are: +

                  +
                  +
                  auto
                  +

                  Auto detect parity (use FFmpeg’s internal parity value). +

                  +
                  bff
                  +

                  Assume bottom field first. +

                  +
                  tff
                  +

                  Assume top field first. +

                  +
                  + +

                  Note that it is sometimes recommended not to trust the parity announced by the +stream. +

                  +

                  Default value is auto. +

                  +
                  +
                  mode
                  +

                  Set the matching mode or strategy to use. ‘pc’ 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, ‘pcn_ub’ 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 ‘pc’ and ‘pcn_ub’ in terms of risking +jerkiness and creating duplicate frames versus finding good matches in sections +with bad edits, orphaned fields, blended fields, etc. +

                  +

                  More details about p/c/n/u/b are available in p/c/n/u/b meaning section. +

                  +

                  Available values are: +

                  +
                  +
                  pc
                  +

                  2-way matching (p/c) +

                  +
                  pc_n
                  +

                  2-way matching, and trying 3rd match if still combed (p/c + n) +

                  +
                  pc_u
                  +

                  2-way matching, and trying 3rd match (same order) if still combed (p/c + u) +

                  +
                  pc_n_ub
                  +

                  2-way matching, trying 3rd match if still combed, and trying 4th/5th matches if +still combed (p/c + n + u/b) +

                  +
                  pcn
                  +

                  3-way matching (p/c/n) +

                  +
                  pcn_ub
                  +

                  3-way matching, and trying 4th/5th matches if all 3 of the original matches are +detected as combed (p/c/n + u/b) +

                  +
                  + +

                  The parenthesis at the end indicate the matches that would be used for that +mode assuming ‘order’=tff (and ‘field’ on auto or +top). +

                  +

                  In terms of speed ‘pc’ mode is by far the fastest and ‘pcn_ub’ is +the slowest. +

                  +

                  Default value is pc_n. +

                  +
                  +
                  ppsrc
                  +

                  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 ‘clip2’ feature from +VFM/TFM. +

                  +

                  Default value is 0 (disabled). +

                  +
                  +
                  field
                  +

                  Set the field to match from. It is recommended to set this to the same value as +‘order’ 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: +

                  +
                  +
                  auto
                  +

                  Automatic (same value as ‘order’). +

                  +
                  bottom
                  +

                  Match from the bottom field. +

                  +
                  top
                  +

                  Match from the top field. +

                  +
                  + +

                  Default value is auto. +

                  +
                  +
                  mchroma
                  +

                  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 0 +only if your clip has bad chroma problems such as heavy rainbowing or other +artifacts. Setting this to 0 could also be used to speed things up at +the cost of some accuracy. +

                  +

                  Default value is 1. +

                  +
                  +
                  y0
                  +
                  y1
                  +

                  These define an exclusion band which excludes the lines between ‘y0’ and +‘y1’ 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. ‘y0’ sets the starting scan line and +‘y1’ sets the ending line; all lines in between ‘y0’ and +‘y1’ (including ‘y0’ and ‘y1’) will be ignored. Setting +‘y0’ and ‘y1’ to the same value will disable the feature. +‘y0’ and ‘y1’ defaults to 0. +

                  +
                  +
                  scthresh
                  +

                  Set the scene change detection threshold as a percentage of maximum change on +the luma plane. Good values are in the [8.0, 14.0] range. Scene change +detection is only relevant in case ‘combmatch’=sc. The range for +‘scthresh’ is [0.0, 100.0]. +

                  +

                  Default value is 12.0. +

                  +
                  +
                  combmatch
                  +

                  When ‘combatch’ is not none, fieldmatch will take into +account the combed scores of matches when deciding what match to use as the +final match. Available values are: +

                  +
                  +
                  none
                  +

                  No final matching based on combed scores. +

                  +
                  sc
                  +

                  Combed scores are only used when a scene change is detected. +

                  +
                  full
                  +

                  Use combed scores all the time. +

                  +
                  + +

                  Default is sc. +

                  +
                  +
                  combdbg
                  +

                  Force fieldmatch to calculate the combed metrics for certain matches and +print them. This setting is known as ‘micout’ in TFM/VFM vocabulary. +Available values are: +

                  +
                  +
                  none
                  +

                  No forced calculation. +

                  +
                  pcn
                  +

                  Force p/c/n calculations. +

                  +
                  pcnub
                  +

                  Force p/c/n/u/b calculations. +

                  +
                  + +

                  Default value is none. +

                  +
                  +
                  cthresh
                  +

                  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 +-1 (every pixel will be detected as combed) to 255 (no pixel will +be detected as combed). This is basically a pixel difference value. A good +range is [8, 12]. +

                  +

                  Default value is 9. +

                  +
                  +
                  chroma
                  +

                  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 ‘chroma’=0 is usually more reliable, except for the case +where there is chroma only combing in the source. +

                  +

                  Default value is 0. +

                  +
                  +
                  blockx
                  +
                  blocky
                  +

                  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 +‘combpel’ pixels are required to be detected as combed for a frame to be +declared combed. See the ‘combpel’ parameter description for more info. +Possible values are any number that is a power of 2 starting at 4 and going up +to 512. +

                  +

                  Default value is 16. +

                  +
                  +
                  combpel
                  +

                  The number of combed pixels inside any of the ‘blocky’ by +‘blockx’ size blocks on the frame for the frame to be detected as +combed. While ‘cthresh’ 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 ‘blockx’ and ‘blocky’ settings) on the +frame. Minimum value is 0 and maximum is blocky x blockx (at +which point no frames will ever be detected as combed). This setting is known +as ‘MI’ in TFM/VFM vocabulary. +

                  +

                  Default value is 80. +

                  +
                  + +

                  +

                  +

                  35.27.1 p/c/n/u/b meaning

                  + + +

                  35.27.1.1 p/c/n

                  + +

                  We assume the following telecined stream: +

                  +
                   
                  Top fields:     1 2 2 3 4
                  +Bottom fields:  1 2 3 4 4
                  +
                  + +

                  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. +

                  +

                  When fieldmatch is configured to run a matching from bottom +(‘field’=bottom) this is how this input stream get transformed: +

                  +
                   
                  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
                  +
                  + +

                  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 decimate filter. +

                  +

                  The same operation now matching from top fields (‘field’=top) +looks like this: +

                  +
                   
                  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
                  +
                  + +

                  In these examples, we can see what p, c and n mean; +basically, they refer to the frame and field of the opposite parity: +

                  +
                    +
                  • p matches the field of the opposite parity in the previous frame +
                  • c matches the field of the opposite parity in the current frame +
                  • n matches the field of the opposite parity in the next frame +
                  + + +

                  35.27.1.2 u/b

                  + +

                  The u and b 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. +

                  +

                  With bottom matching (‘field’=bottom): +

                   
                  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
                  +
                  + +

                  With top matching (‘field’=top): +

                   
                  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
                  +
                  + + +

                  35.27.2 Examples

                  + +

                  Simple IVTC of a top field first telecined stream: +

                   
                  fieldmatch=order=tff:combmatch=none, decimate
                  +
                  + +

                  Advanced IVTC, with fallback on yadif for still combed frames: +

                   
                  fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
                  +
                  + + +

                  35.28 fieldorder

                  + +

                  Transform the field order of the input video. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  order
                  +

                  Output field order. Valid values are tff for top field first or bff +for bottom field first. +

                  +
                  + +

                  Default value is ‘tff’. +

                  +

                  Transformation is achieved by shifting the picture content up or down +by one line, and filling the remaining line with appropriate picture content. +This method is consistent with most broadcast field order converters. +

                  +

                  If the input video is not flagged as being interlaced, or it is already +flagged as being of the required output field order then this filter does +not alter the incoming video. +

                  +

                  This filter is very useful when converting to or from PAL DV material, +which is bottom field first. +

                  +

                  For example: +

                   
                  ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
                  +
                  + + +

                  35.29 fifo

                  + +

                  Buffer input images and send them when they are requested. +

                  +

                  This filter is mainly useful when auto-inserted by the libavfilter +framework. +

                  +

                  The filter does not take parameters. +

                  +

                  +

                  +

                  35.30 format

                  + +

                  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. +

                  +

                  This filter accepts the following parameters: +

                  +
                  pix_fmts
                  +

                  A ’|’-separated list of pixel format names, for example +"pix_fmts=yuv420p|monow|rgb24". +

                  +
                  +
                  + + +

                  35.30.1 Examples

                  + +
                    +
                  • +Convert the input video to the format yuv420p +
                     
                    format=pix_fmts=yuv420p
                    +
                    + +

                    Convert the input video to any of the formats in the list +

                     
                    format=pix_fmts=yuv420p|yuv444p|yuv410p
                    +
                    +
                  + + +

                  35.31 fps

                  + +

                  Convert the video to specified constant frame rate by duplicating or dropping +frames as necessary. +

                  +

                  This filter accepts the following named parameters: +

                  +
                  fps
                  +

                  Desired output frame rate. The default is 25. +

                  +
                  +
                  round
                  +

                  Rounding method. +

                  +

                  Possible values are: +

                  +
                  zero
                  +

                  zero round towards 0 +

                  +
                  inf
                  +

                  round away from 0 +

                  +
                  down
                  +

                  round towards -infinity +

                  +
                  up
                  +

                  round towards +infinity +

                  +
                  near
                  +

                  round to nearest +

                  +
                  +

                  The default is near. +

                  +
                  +
                  start_time
                  +

                  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. +

                  +
                  +
                  + +

                  Alternatively, the options can be specified as a flat string: +fps[:round]. +

                  +

                  See also the setpts filter. +

                  + +

                  35.31.1 Examples

                  + +
                    +
                  • +A typical usage in order to set the fps to 25: +
                     
                    fps=fps=25
                    +
                    + +
                  • +Sets the fps to 24, using abbreviation and rounding method to round to nearest: +
                     
                    fps=fps=film:round=near
                    +
                    +
                  + + +

                  35.32 framestep

                  + +

                  Select one frame every N-th frame. +

                  +

                  This filter accepts the following option: +

                  +
                  step
                  +

                  Select frame after every step frames. +Allowed values are positive integers higher than 0. Default value is 1. +

                  +
                  + +

                  +

                  +

                  35.33 frei0r

                  + +

                  Apply a frei0r effect to the input video. +

                  +

                  To enable compilation of this filter you need to install the frei0r +header and configure FFmpeg with --enable-frei0r. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  filter_name
                  +

                  The name to the frei0r effect to load. If the environment variable +FREI0R_PATH is defined, the frei0r effect is searched in each one of the +directories specified by the colon separated list in FREIOR_PATH, +otherwise in the standard frei0r paths, which are in this order: +‘HOME/.frei0r-1/lib/’, ‘/usr/local/lib/frei0r-1/’, +‘/usr/lib/frei0r-1/’. +

                  +
                  +
                  filter_params
                  +

                  A ’|’-separated list of parameters to pass to the frei0r effect. +

                  +
                  +
                  + +

                  A frei0r effect parameter can be a boolean (whose values are specified +with "y" and "n"), a double, a color (specified by the syntax +R/G/B, (R, G, and B being float +numbers from 0.0 to 1.0) or by a color description specified in the "Color" +section in the ffmpeg-utils manual), a position (specified by the syntax X/Y, +X and Y being float numbers) and a string. +

                  +

                  The number and kind of parameters depend on the loaded effect. If an +effect parameter is not specified the default value is set. +

                  + +

                  35.33.1 Examples

                  + +
                    +
                  • +Apply the distort0r effect, set the first two double parameters: +
                     
                    frei0r=filter_name=distort0r:filter_params=0.5|0.01
                    +
                    + +
                  • +Apply the colordistance effect, take a color as first parameter: +
                     
                    frei0r=colordistance:0.2/0.3/0.4
                    +frei0r=colordistance:violet
                    +frei0r=colordistance:0x112233
                    +
                    + +
                  • +Apply the perspective effect, specify the top left and top right image +positions: +
                     
                    frei0r=perspective:0.2/0.2|0.8/0.2
                    +
                    +
                  + +

                  For more information see: +http://frei0r.dyne.org +

                  + +

                  35.34 geq

                  + +

                  The filter accepts the following options: +

                  +
                  +
                  lum_expr, lum
                  +

                  Set the luminance expression. +

                  +
                  cb_expr, cb
                  +

                  Set the chrominance blue expression. +

                  +
                  cr_expr, cr
                  +

                  Set the chrominance red expression. +

                  +
                  alpha_expr, a
                  +

                  Set the alpha expression. +

                  +
                  red_expr, r
                  +

                  Set the red expression. +

                  +
                  green_expr, g
                  +

                  Set the green expression. +

                  +
                  blue_expr, b
                  +

                  Set the blue expression. +

                  +
                  + +

                  The colorspace is selected according to the specified options. If one +of the ‘lum_expr’, ‘cb_expr’, or ‘cr_expr’ +options is specified, the filter will automatically select a YCbCr +colorspace. If one of the ‘red_expr’, ‘green_expr’, or +‘blue_expr’ options is specified, it will select an RGB +colorspace. +

                  +

                  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. +

                  +

                  The expressions can use the following variables and functions: +

                  +
                  +
                  N
                  +

                  The sequential number of the filtered frame, starting from 0. +

                  +
                  +
                  X
                  +
                  Y
                  +

                  The coordinates of the current sample. +

                  +
                  +
                  W
                  +
                  H
                  +

                  The width and height of the image. +

                  +
                  +
                  SW
                  +
                  SH
                  +

                  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 1,1 for the luma plane, and +0.5,0.5 for chroma planes. +

                  +
                  +
                  T
                  +

                  Time of the current frame, expressed in seconds. +

                  +
                  +
                  p(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the current +plane. +

                  +
                  +
                  lum(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the luminance +plane. +

                  +
                  +
                  cb(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the +blue-difference chroma plane. Return 0 if there is no such plane. +

                  +
                  +
                  cr(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the +red-difference chroma plane. Return 0 if there is no such plane. +

                  +
                  +
                  r(x, y)
                  +
                  g(x, y)
                  +
                  b(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the +red/green/blue component. Return 0 if there is no such component. +

                  +
                  +
                  alpha(x, y)
                  +

                  Return the value of the pixel at location (x,y) of the alpha +plane. Return 0 if there is no such plane. +

                  +
                  + +

                  For functions, if x and y are outside the area, the value will be +automatically clipped to the closer edge. +

                  + +

                  35.34.1 Examples

                  + +
                    +
                  • +Flip the image horizontally: +
                     
                    geq=p(W-X\,Y)
                    +
                    + +
                  • +Generate a bidimensional sine wave, with angle PI/3 and a +wavelength of 100 pixels: +
                     
                    geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
                    +
                    + +
                  • +Generate a fancy enigmatic moving light: +
                     
                    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
                    +
                    + +
                  • +Generate a quick emboss effect: +
                     
                    format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
                    +
                    + +
                  • +Modify RGB components depending on pixel position: +
                     
                    geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
                    +
                    +
                  + + +

                  35.35 gradfun

                  + +

                  Fix the banding artifacts that are sometimes introduced into nearly flat +regions by truncation to 8bit color depth. +Interpolate the gradients that should go where the bands are, and +dither them. +

                  +

                  This filter is designed for playback only. Do not use it prior to +lossy compression, because compression tends to lose the dither and +bring back the bands. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  strength
                  +

                  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. +

                  +
                  +
                  radius
                  +

                  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. +

                  +
                  +
                  + +

                  Alternatively, the options can be specified as a flat string: +strength[:radius] +

                  + +

                  35.35.1 Examples

                  + +
                    +
                  • +Apply the filter with a 3.5 strength and radius of 8: +
                     
                    gradfun=3.5:8
                    +
                    + +
                  • +Specify radius, omitting the strength (which will fall-back to the default +value): +
                     
                    gradfun=radius=8
                    +
                    + +
                  + +

                  +

                  +

                  35.36 haldclut

                  + +

                  Apply a Hald CLUT to a video stream. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  shortest
                  +

                  Force termination when the shortest input terminates. Default is 0. +

                  +
                  repeatlast
                  +

                  Continue applying the last CLUT after the end of the stream. A value of +0 disable the filter after the last frame of the CLUT is reached. +Default is 1. +

                  +
                  + +

                  haldclut also has the same interpolation options as lut3d (both +filters share the same internals). +

                  +

                  More information about the Hald CLUT can be found on Eskil Steenberg’s website +(Hald CLUT author) at http://www.quelsolaar.com/technology/clut.html. +

                  + +

                  35.36.1 Workflow examples

                  + + +

                  35.36.1.1 Hald CLUT video stream

                  + +

                  Generate an identity Hald CLUT stream altered with various effects: +

                   
                  ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
                  +
                  + +

                  Note: make sure you use a lossless codec. +

                  +

                  Then use it with haldclut to apply it on some random stream: +

                   
                  ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
                  +
                  + +

                  The Hald CLUT will be applied to the 10 first seconds (duration of +‘clut.nut’), then the latest picture of that CLUT stream will be applied +to the remaining frames of the mandelbrot stream. +

                  + +

                  35.36.1.2 Hald CLUT with preview

                  + +

                  A Hald CLUT is supposed to be a squared image of Level*Level*Level by +Level*Level*Level 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. +

                  +

                  Typically, the following generated Hald CLUT will be supported by the +haldclut filter: +

                  +
                   
                  ffmpeg -f lavfi -i haldclutsrc=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
                  +
                  + +

                  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. +

                  +

                  Then, the effect of this Hald CLUT can be visualized with: +

                   
                  ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
                  +
                  + + +

                  35.37 hflip

                  + +

                  Flip the input video horizontally. +

                  +

                  For example to horizontally flip the input video with ffmpeg: +

                   
                  ffmpeg -i in.avi -vf "hflip" out.avi
                  +
                  + + +

                  35.38 histeq

                  +

                  This filter applies a global color histogram equalization on a +per-frame basis. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  strength
                  +

                  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. +

                  +
                  +
                  intensity
                  +

                  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. +

                  +
                  +
                  antibanding
                  +

                  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 none, weak or +strong. It defaults to none. +

                  +
                  + + +

                  35.39 histogram

                  + +

                  Compute and draw a color distribution histogram for the input video. +

                  +

                  The computed histogram is a representation of distribution of color components +in an image. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  mode
                  +

                  Set histogram mode. +

                  +

                  It accepts the following values: +

                  +
                  levels
                  +

                  standard histogram that display 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 current frame. Bellow each graph is color component scale meter. +

                  +
                  +
                  color
                  +

                  chroma values in vectorscope, if brighter more such chroma values are +distributed in an image. +Displays chroma values (U/V color placement) in two dimensional graph +(which is called a vectorscope). It can be used to read of the hue and +saturation of the current frame. At a same time it is a histogram. +The whiter a pixel in the vectorscope, the more pixels of the input frame +correspond to that pixel (that is the 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. +

                  +

                  The position of a white pixel in the graph corresponds to the chroma value +of a pixel of the input clip. So the graph can be used to read of 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 you increase the amount of a specific color, while leaving +the other colors unchanged, the saturation increases, and you move towards +the edge of the square. +

                  +
                  +
                  color2
                  +

                  chroma values in vectorscope, similar as color but actual chroma values +are displayed. +

                  +
                  +
                  waveform
                  +

                  per row/column color component graph. In row mode graph in the left side represents +color component value 0 and right side represents value = 255. In column mode top +side represents color component value = 0 and bottom side represents value = 255. +

                  +
                  +

                  Default value is levels. +

                  +
                  +
                  level_height
                  +

                  Set height of level in levels. Default value is 200. +Allowed range is [50, 2048]. +

                  +
                  +
                  scale_height
                  +

                  Set height of color scale in levels. Default value is 12. +Allowed range is [0, 40]. +

                  +
                  +
                  step
                  +

                  Set step for waveform mode. Smaller values are useful to find out how much +of same luminance values across input rows/columns are distributed. +Default value is 10. Allowed range is [1, 255]. +

                  +
                  +
                  waveform_mode
                  +

                  Set mode for waveform. Can be either row, or column. +Default is row. +

                  +
                  +
                  waveform_mirror
                  +

                  Set mirroring mode for waveform. 0 means unmirrored, 1 +means mirrored. In mirrored mode, higher values will be represented on the left +side for row mode and at the top for column mode. Default is +0 (unmirrored). +

                  +
                  +
                  display_mode
                  +

                  Set display mode for waveform and levels. +It accepts the following values: +

                  +
                  parade
                  +

                  Display separate graph for the color components side by side in +row waveform mode or one below other in column waveform mode +for waveform histogram mode. For levels histogram mode +per color component graphs are placed one bellow other. +

                  +

                  This display mode in waveform 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 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 make by making adjustments to level the +three waveforms. +

                  +
                  +
                  overlay
                  +

                  Presents information that’s identical to that in the parade, except +that the graphs representing color components are superimposed directly +over one another. +

                  +

                  This display mode in waveform histogram mode can make it easier to spot +the relative differences or similarities in overlapping areas of the color +components that are supposed to be identical, such as neutral whites, grays, +or blacks. +

                  +
                  +

                  Default is parade. +

                  +
                  +
                  levels_mode
                  +

                  Set mode for levels. Can be either linear, or logarithmic. +Default is linear. +

                  +
                  + + +

                  35.39.1 Examples

                  + +
                    +
                  • +Calculate and draw histogram: +
                     
                    ffplay -i input -vf histogram
                    +
                    + +
                  + +

                  +

                  +

                  35.40 hqdn3d

                  + +

                  High precision/quality 3d denoise filter. This filter aims to reduce +image noise producing smooth images and making still images really +still. It should enhance compressibility. +

                  +

                  It accepts the following optional parameters: +

                  +
                  +
                  luma_spatial
                  +

                  a non-negative float number which specifies spatial luma strength, +defaults to 4.0 +

                  +
                  +
                  chroma_spatial
                  +

                  a non-negative float number which specifies spatial chroma strength, +defaults to 3.0*luma_spatial/4.0 +

                  +
                  +
                  luma_tmp
                  +

                  a float number which specifies luma temporal strength, defaults to +6.0*luma_spatial/4.0 +

                  +
                  +
                  chroma_tmp
                  +

                  a float number which specifies chroma temporal strength, defaults to +luma_tmp*chroma_spatial/luma_spatial +

                  +
                  + + +

                  35.41 hue

                  + +

                  Modify the hue and/or the saturation of the input. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  h
                  +

                  Specify the hue angle as a number of degrees. It accepts an expression, +and defaults to "0". +

                  +
                  +
                  s
                  +

                  Specify the saturation in the [-10,10] range. It accepts an expression and +defaults to "1". +

                  +
                  +
                  H
                  +

                  Specify the hue angle as a number of radians. It accepts an +expression, and defaults to "0". +

                  +
                  +
                  b
                  +

                  Specify the brightness in the [-10,10] range. It accepts an expression and +defaults to "0". +

                  +
                  + +

                  h’ and ‘H’ are mutually exclusive, and can’t be +specified at the same time. +

                  +

                  The ‘b’, ‘h’, ‘H’ and ‘s’ option values are +expressions containing the following constants: +

                  +
                  +
                  n
                  +

                  frame count of the input frame starting from 0 +

                  +
                  +
                  pts
                  +

                  presentation timestamp of the input frame expressed in time base units +

                  +
                  +
                  r
                  +

                  frame rate of the input video, NAN if the input frame rate is unknown +

                  +
                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  +
                  tb
                  +

                  time base of the input video +

                  +
                  + + +

                  35.41.1 Examples

                  + +
                    +
                  • +Set the hue to 90 degrees and the saturation to 1.0: +
                     
                    hue=h=90:s=1
                    +
                    + +
                  • +Same command but expressing the hue in radians: +
                     
                    hue=H=PI/2:s=1
                    +
                    + +
                  • +Rotate hue and make the saturation swing between 0 +and 2 over a period of 1 second: +
                     
                    hue="H=2*PI*t: s=sin(2*PI*t)+1"
                    +
                    + +
                  • +Apply a 3 seconds saturation fade-in effect starting at 0: +
                     
                    hue="s=min(t/3\,1)"
                    +
                    + +

                    The general fade-in expression can be written as: +

                     
                    hue="s=min(0\, max((t-START)/DURATION\, 1))"
                    +
                    + +
                  • +Apply a 3 seconds saturation fade-out effect starting at 5 seconds: +
                     
                    hue="s=max(0\, min(1\, (8-t)/3))"
                    +
                    + +

                    The general fade-out expression can be written as: +

                     
                    hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
                    +
                    + +
                  + + +

                  35.41.2 Commands

                  + +

                  This filter supports the following commands: +

                  +
                  b
                  +
                  s
                  +
                  h
                  +
                  H
                  +

                  Modify the hue and/or the saturation and/or brightness of the input video. +The command accepts the same syntax of the corresponding option. +

                  +

                  If the specified expression is not valid, it is kept at its current +value. +

                  +
                  + + +

                  35.42 idet

                  + +

                  Detect video interlacing type. +

                  +

                  This filter tries to detect if the input is interlaced or progressive, +top or bottom field first. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  intl_thres
                  +

                  Set interlacing threshold. +

                  +
                  prog_thres
                  +

                  Set progressive threshold. +

                  +
                  + + +

                  35.43 il

                  + +

                  Deinterleave or interleave fields. +

                  +

                  This filter allows 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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  luma_mode, l
                  +
                  chroma_mode, c
                  +
                  alpha_mode, a
                  +

                  Available values for luma_mode, chroma_mode and +alpha_mode are: +

                  +
                  +
                  none
                  +

                  Do nothing. +

                  +
                  +
                  deinterleave, d
                  +

                  Deinterleave fields, placing one above the other. +

                  +
                  +
                  interleave, i
                  +

                  Interleave fields. Reverse the effect of deinterleaving. +

                  +
                  +

                  Default value is none. +

                  +
                  +
                  luma_swap, ls
                  +
                  chroma_swap, cs
                  +
                  alpha_swap, as
                  +

                  Swap luma/chroma/alpha fields. Exchange even & odd lines. Default value is 0. +

                  +
                  + + +

                  35.44 interlace

                  + +

                  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. +

                  +
                   
                     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
                  +
                  + +

                  It accepts the following optional parameters: +

                  +
                  +
                  scan
                  +

                  determines whether the interlaced frame is taken from the even (tff - default) +or odd (bff) lines of the progressive frame. +

                  +
                  +
                  lowpass
                  +

                  Enable (default) or disable the vertical lowpass filter to avoid twitter +interlacing and reduce moire patterns. +

                  +
                  + + +

                  35.45 kerndeint

                  + +

                  Deinterlace input video by applying Donald Graft’s adaptive kernel +deinterling. Work on interlaced parts of a video to produce +progressive frames. +

                  +

                  The description of the accepted parameters follows. +

                  +
                  +
                  thresh
                  +

                  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. +

                  +
                  +
                  map
                  +

                  Paint pixels exceeding the threshold value to white if set to 1. +Default is 0. +

                  +
                  +
                  order
                  +

                  Set the fields order. Swap fields if set to 1, leave fields alone if +0. Default is 0. +

                  +
                  +
                  sharp
                  +

                  Enable additional sharpening if set to 1. Default is 0. +

                  +
                  +
                  twoway
                  +

                  Enable twoway sharpening if set to 1. Default is 0. +

                  +
                  + + +

                  35.45.1 Examples

                  + +
                    +
                  • +Apply default values: +
                     
                    kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
                    +
                    + +
                  • +Enable additional sharpening: +
                     
                    kerndeint=sharp=1
                    +
                    + +
                  • +Paint processed pixels in white: +
                     
                    kerndeint=map=1
                    +
                    +
                  + +

                  +

                  +

                  35.46 lut3d

                  + +

                  Apply a 3D LUT to an input video. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  file
                  +

                  Set the 3D LUT file name. +

                  +

                  Currently supported formats: +

                  +
                  3dl
                  +

                  AfterEffects +

                  +
                  cube
                  +

                  Iridas +

                  +
                  dat
                  +

                  DaVinci +

                  +
                  m3d
                  +

                  Pandora +

                  +
                  +
                  +
                  interp
                  +

                  Select interpolation mode. +

                  +

                  Available values are: +

                  +
                  +
                  nearest
                  +

                  Use values from the nearest defined point. +

                  +
                  trilinear
                  +

                  Interpolate values using the 8 points defining a cube. +

                  +
                  tetrahedral
                  +

                  Interpolate values using a tetrahedron. +

                  +
                  +
                  +
                  + + +

                  35.47 lut, lutrgb, lutyuv

                  + +

                  Compute a look-up table for binding each pixel component input value +to an output value, and apply it to input video. +

                  +

                  lutyuv applies a lookup table to a YUV input video, lutrgb +to an RGB input video. +

                  +

                  These filters accept the following options: +

                  +
                  c0
                  +

                  set first pixel component expression +

                  +
                  c1
                  +

                  set second pixel component expression +

                  +
                  c2
                  +

                  set third pixel component expression +

                  +
                  c3
                  +

                  set fourth pixel component expression, corresponds to the alpha component +

                  +
                  +
                  r
                  +

                  set red component expression +

                  +
                  g
                  +

                  set green component expression +

                  +
                  b
                  +

                  set blue component expression +

                  +
                  a
                  +

                  alpha component expression +

                  +
                  +
                  y
                  +

                  set Y/luminance component expression +

                  +
                  u
                  +

                  set U/Cb component expression +

                  +
                  v
                  +

                  set V/Cr component expression +

                  +
                  + +

                  Each of them specifies the expression to use for computing the lookup table for +the corresponding pixel component values. +

                  +

                  The exact component associated to each of the c* options depends on the +format in input. +

                  +

                  The lut filter requires either YUV or RGB pixel formats in input, +lutrgb requires RGB pixel formats in input, and lutyuv requires YUV. +

                  +

                  The expressions can contain the following constants and functions: +

                  +
                  +
                  w
                  +
                  h
                  +

                  the input width and height +

                  +
                  +
                  val
                  +

                  input value for the pixel component +

                  +
                  +
                  clipval
                  +

                  the input value clipped in the minval-maxval range +

                  +
                  +
                  maxval
                  +

                  maximum value for the pixel component +

                  +
                  +
                  minval
                  +

                  minimum value for the pixel component +

                  +
                  +
                  negval
                  +

                  the negated value for the pixel component value clipped in the +minval-maxval range , it corresponds to the expression +"maxval-clipval+minval" +

                  +
                  +
                  clip(val)
                  +

                  the computed value in val clipped in the +minval-maxval range +

                  +
                  +
                  gammaval(gamma)
                  +

                  the computed gamma correction value of the pixel component value +clipped in the minval-maxval range, corresponds to the +expression +"pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval" +

                  +
                  +
                  + +

                  All expressions default to "val". +

                  + +

                  35.47.1 Examples

                  + +
                    +
                  • +Negate input video: +
                     
                    lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
                    +lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
                    +
                    + +

                    The above is the same as: +

                     
                    lutrgb="r=negval:g=negval:b=negval"
                    +lutyuv="y=negval:u=negval:v=negval"
                    +
                    + +
                  • +Negate luminance: +
                     
                    lutyuv=y=negval
                    +
                    + +
                  • +Remove chroma components, turns the video into a graytone image: +
                     
                    lutyuv="u=128:v=128"
                    +
                    + +
                  • +Apply a luma burning effect: +
                     
                    lutyuv="y=2*val"
                    +
                    + +
                  • +Remove green and blue components: +
                     
                    lutrgb="g=0:b=0"
                    +
                    + +
                  • +Set a constant alpha channel value on input: +
                     
                    format=rgba,lutrgb=a="maxval-minval/2"
                    +
                    + +
                  • +Correct luminance gamma by a 0.5 factor: +
                     
                    lutyuv=y=gammaval(0.5)
                    +
                    + +
                  • +Discard least significant bits of luma: +
                     
                    lutyuv=y='bitand(val, 128+64+32)'
                    +
                    +
                  + + +

                  35.48 mergeplanes

                  + +

                  Merge color channel components from several video streams. +

                  +

                  The filter accepts up to 4 input streams, and merge selected input +planes to the output video. +

                  +

                  This filter accepts the following options: +

                  +
                  mapping
                  +

                  Set input to output plane mapping. Default is 0. +

                  +

                  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. +

                  +
                  +
                  format
                  +

                  Set output pixel format. Default is yuva444p. +

                  +
                  + + +

                  35.48.1 Examples

                  + +
                    +
                  • +Merge three gray video streams of same width and height into single video stream: +
                     
                    [a0][a1][a2]mergeplanes=0x001020:yuv444p
                    +
                    + +
                  • +Merge 1st yuv444p stream and 2nd gray video stream into yuva444p video stream: +
                     
                    [a0][a1]mergeplanes=0x00010210:yuva444p
                    +
                    + +
                  • +Swap Y and A plane in yuva444p stream: +
                     
                    format=yuva444p,mergeplanes=0x03010200:yuva444p
                    +
                    + +
                  • +Swap U and V plane in yuv420p stream: +
                     
                    format=yuv420p,mergeplanes=0x000201:yuv420p
                    +
                    + +
                  • +Cast a rgb24 clip to yuv444p: +
                     
                    format=rgb24,mergeplanes=0x000102:yuv444p
                    +
                    +
                  + + +

                  35.49 mcdeint

                  + +

                  Apply motion-compensation deinterlacing. +

                  +

                  It needs one field per frame as input and must thus be used together +with yadif=1/3 or equivalent. +

                  +

                  This filter accepts the following options: +

                  +
                  mode
                  +

                  Set the deinterlacing mode. +

                  +

                  It accepts one of the following values: +

                  +
                  fast
                  +
                  medium
                  +
                  slow
                  +

                  use iterative motion estimation +

                  +
                  extra_slow
                  +

                  like ‘slow’, but use multiple reference frames. +

                  +
                  +

                  Default value is ‘fast’. +

                  +
                  +
                  parity
                  +

                  Set the picture field parity assumed for the input video. It must be +one of the following values: +

                  +
                  +
                  0, tff
                  +

                  assume top field first +

                  +
                  1, bff
                  +

                  assume bottom field first +

                  +
                  + +

                  Default value is ‘bff’. +

                  +
                  +
                  qp
                  +

                  Set per-block quantization parameter (QP) used by the internal +encoder. +

                  +

                  Higher values should result in a smoother motion vector field but less +optimal individual vectors. Default value is 1. +

                  +
                  + + +

                  35.50 mp

                  + +

                  Apply an MPlayer filter to the input video. +

                  +

                  This filter provides a wrapper around some of the filters of +MPlayer/MEncoder. +

                  +

                  This wrapper is considered experimental. Some of the wrapped filters +may not work properly and we may drop support for them, as they will +be implemented natively into FFmpeg. Thus you should avoid +depending on them when writing portable scripts. +

                  +

                  The filter accepts the parameters: +filter_name[:=]filter_params +

                  +

                  filter_name is the name of a supported MPlayer filter, +filter_params is a string containing the parameters accepted by +the named filter. +

                  +

                  The list of the currently supported filters follows: +

                  +
                  eq2
                  +
                  eq
                  +
                  fspp
                  +
                  ilpack
                  +
                  pp7
                  +
                  softpulldown
                  +
                  uspp
                  +
                  + +

                  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. +

                  + +

                  35.50.1 Examples

                  + +
                    +
                  • +Adjust gamma, brightness, contrast: +
                     
                    mp=eq2=1.0:2:0.5
                    +
                    +
                  + +

                  See also mplayer(1), http://www.mplayerhq.hu/. +

                  + +

                  35.51 mpdecimate

                  + +

                  Drop frames that do not differ greatly from the previous frame in +order to reduce frame rate. +

                  +

                  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. +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  max
                  +

                  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. +

                  +

                  Default value is 0. +

                  +
                  +
                  hi
                  +
                  lo
                  +
                  frac
                  +

                  Set the dropping threshold values. +

                  +

                  Values for ‘hi’ and ‘lo’ 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. +

                  +

                  A frame is a candidate for dropping if no 8x8 blocks differ by more +than a threshold of ‘hi’, and if no more than ‘frac’ blocks (1 +meaning the whole image) differ by more than a threshold of ‘lo’. +

                  +

                  Default value for ‘hi’ is 64*12, default value for ‘lo’ is +64*5, and default value for ‘frac’ is 0.33. +

                  +
                  + + + +

                  35.52 negate

                  + +

                  Negate input video. +

                  +

                  This filter accepts an integer in input, if non-zero it negates the +alpha component (if available). The default value in input is 0. +

                  + +

                  35.53 noformat

                  + +

                  Force libavfilter not to use any of the specified pixel formats for the +input to the next filter. +

                  +

                  This filter accepts the following parameters: +

                  +
                  pix_fmts
                  +

                  A ’|’-separated list of pixel format names, for example +"pix_fmts=yuv420p|monow|rgb24". +

                  +
                  +
                  + + +

                  35.53.1 Examples

                  + +
                    +
                  • +Force libavfilter to use a format different from yuv420p for the +input to the vflip filter: +
                     
                    noformat=pix_fmts=yuv420p,vflip
                    +
                    + +
                  • +Convert the input video to any of the formats not contained in the list: +
                     
                    noformat=yuv420p|yuv444p|yuv410p
                    +
                    +
                  + + +

                  35.54 noise

                  + +

                  Add noise on video input frame. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  all_seed
                  +
                  c0_seed
                  +
                  c1_seed
                  +
                  c2_seed
                  +
                  c3_seed
                  +

                  Set noise seed for specific pixel component or all pixel components in case +of all_seed. Default value is 123457. +

                  +
                  +
                  all_strength, alls
                  +
                  c0_strength, c0s
                  +
                  c1_strength, c1s
                  +
                  c2_strength, c2s
                  +
                  c3_strength, c3s
                  +

                  Set noise strength for specific pixel component or all pixel components in case +all_strength. Default value is 0. Allowed range is [0, 100]. +

                  +
                  +
                  all_flags, allf
                  +
                  c0_flags, c0f
                  +
                  c1_flags, c1f
                  +
                  c2_flags, c2f
                  +
                  c3_flags, c3f
                  +

                  Set pixel component flags or set flags for all components if all_flags. +Available values for component flags are: +

                  +
                  a
                  +

                  averaged temporal noise (smoother) +

                  +
                  p
                  +

                  mix random noise with a (semi)regular pattern +

                  +
                  t
                  +

                  temporal noise (noise pattern changes between frames) +

                  +
                  u
                  +

                  uniform noise (gaussian otherwise) +

                  +
                  +
                  +
                  + + +

                  35.54.1 Examples

                  + +

                  Add temporal and uniform noise to input video: +

                   
                  noise=alls=20:allf=t+u
                  +
                  + + +

                  35.55 null

                  + +

                  Pass the video source unchanged to the output. +

                  + +

                  35.56 ocv

                  + +

                  Apply video transform using libopencv. +

                  +

                  To enable this filter install libopencv library and headers and +configure FFmpeg with --enable-libopencv. +

                  +

                  This filter accepts the following parameters: +

                  +
                  +
                  filter_name
                  +

                  The name of the libopencv filter to apply. +

                  +
                  +
                  filter_params
                  +

                  The parameters to pass to the libopencv filter. If not specified the default +values are assumed. +

                  +
                  +
                  + +

                  Refer to the official libopencv documentation for more precise +information: +http://opencv.willowgarage.com/documentation/c/image_filtering.html +

                  +

                  Follows the list of supported libopencv filters. +

                  +

                  +

                  +

                  35.56.1 dilate

                  + +

                  Dilate an image by using a specific structuring element. +This filter corresponds to the libopencv function cvDilate. +

                  +

                  It accepts the parameters: struct_el|nb_iterations. +

                  +

                  struct_el represents a structuring element, and has the syntax: +colsxrows+anchor_xxanchor_y/shape +

                  +

                  cols and rows represent the number of columns and rows of +the structuring element, anchor_x and anchor_y the anchor +point, and shape the shape for the structuring element, and +can be one of the values "rect", "cross", "ellipse", "custom". +

                  +

                  If the value for shape is "custom", it must be followed by a +string of the form "=filename". The file with name +filename is assumed to represent a binary image, with each +printable character corresponding to a bright pixel. When a custom +shape is used, cols and rows are ignored, the number +or columns and rows of the read file are assumed instead. +

                  +

                  The default value for struct_el is "3x3+0x0/rect". +

                  +

                  nb_iterations specifies the number of times the transform is +applied to the image, and defaults to 1. +

                  +

                  Follow some example: +

                   
                  # use the default values
                  +ocv=dilate
                  +
                  +# dilate using a structuring element with a 5x5 cross, iterate two times
                  +ocv=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
                  +
                  + + +

                  35.56.2 erode

                  + +

                  Erode an image by using a specific structuring element. +This filter corresponds to the libopencv function cvErode. +

                  +

                  The filter accepts the parameters: struct_el:nb_iterations, +with the same syntax and semantics as the dilate filter. +

                  + +

                  35.56.3 smooth

                  + +

                  Smooth the input video. +

                  +

                  The filter takes the following parameters: +type|param1|param2|param3|param4. +

                  +

                  type is the type of smooth filter to apply, and can be one of +the following values: "blur", "blur_no_scale", "median", "gaussian", +"bilateral". The default value is "gaussian". +

                  +

                  param1, param2, param3, and param4 are +parameters whose meanings depend on smooth type. param1 and +param2 accept integer positive values or 0, param3 and +param4 accept float values. +

                  +

                  The default value for param1 is 3, the default value for the +other parameters is 0. +

                  +

                  These parameters correspond to the parameters assigned to the +libopencv function cvSmooth. +

                  +

                  +

                  +

                  35.57 overlay

                  + +

                  Overlay one video on top of another. +

                  +

                  It takes two inputs and one output, the first input is the "main" +video on which the second input is overlayed. +

                  +

                  This filter accepts the following parameters: +

                  +

                  A description of the accepted options follows. +

                  +
                  +
                  x
                  +
                  y
                  +

                  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). +

                  +
                  +
                  eval
                  +

                  Set when the expressions for ‘x’, and ‘y’ are evaluated. +

                  +

                  It accepts the following values: +

                  +
                  init
                  +

                  only evaluate expressions once during the filter initialization or +when a command is processed +

                  +
                  +
                  frame
                  +

                  evaluate expressions for each incoming frame +

                  +
                  + +

                  Default value is ‘frame’. +

                  +
                  +
                  shortest
                  +

                  If set to 1, force the output to terminate when the shortest input +terminates. Default value is 0. +

                  +
                  +
                  format
                  +

                  Set the format for the output video. +

                  +

                  It accepts the following values: +

                  +
                  yuv420
                  +

                  force YUV420 output +

                  +
                  +
                  yuv444
                  +

                  force YUV444 output +

                  +
                  +
                  rgb
                  +

                  force RGB output +

                  +
                  + +

                  Default value is ‘yuv420’. +

                  +
                  +
                  rgb (deprecated)
                  +

                  If set to 1, force the filter to accept inputs in the RGB +color space. Default value is 0. This option is deprecated, use +‘format’ instead. +

                  +
                  +
                  repeatlast
                  +

                  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. +

                  +
                  + +

                  The ‘x’, and ‘y’ expressions can contain the following +parameters. +

                  +
                  +
                  main_w, W
                  +
                  main_h, H
                  +

                  main input width and height +

                  +
                  +
                  overlay_w, w
                  +
                  overlay_h, h
                  +

                  overlay input width and height +

                  +
                  +
                  x
                  +
                  y
                  +

                  the computed values for x and y. They are evaluated for +each new frame. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values of the output +format. For example for the pixel format "yuv422p" hsub is 2 and +vsub is 1. +

                  +
                  +
                  n
                  +

                  the number of input frame, starting from 0 +

                  +
                  +
                  pos
                  +

                  the position in the file of the input frame, NAN if unknown +

                  +
                  +
                  t
                  +

                  timestamp expressed in seconds, NAN if the input timestamp is unknown +

                  +
                  + +

                  Note that the n, pos, t variables are available only +when evaluation is done per frame, and will evaluate to NAN +when ‘eval’ is set to ‘init’. +

                  +

                  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 setpts=PTS-STARTPTS filter to +have them begin in the same zero timestamp, as it does the example for +the movie filter. +

                  +

                  You can chain together more overlays but you should test the +efficiency of such approach. +

                  + +

                  35.57.1 Commands

                  + +

                  This filter supports the following commands: +

                  +
                  x
                  +
                  y
                  +

                  Modify the x and y of the overlay input. +The command accepts the same syntax of the corresponding option. +

                  +

                  If the specified expression is not valid, it is kept at its current +value. +

                  +
                  + + +

                  35.57.2 Examples

                  + +
                    +
                  • +Draw the overlay at 10 pixels from the bottom right corner of the main +video: +
                     
                    overlay=main_w-overlay_w-10:main_h-overlay_h-10
                    +
                    + +

                    Using named options the example above becomes: +

                     
                    overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
                    +
                    + +
                  • +Insert a transparent PNG logo in the bottom left corner of the input, +using the ffmpeg tool with the -filter_complex option: +
                     
                    ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
                    +
                    + +
                  • +Insert 2 different transparent PNG logos (second logo on bottom +right corner) using the ffmpeg tool: +
                     
                    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
                    +
                    + +
                  • +Add a transparent color layer on top of the main video, WxH +must specify the size of the main input to the overlay filter: +
                     
                    color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
                    +
                    + +
                  • +Play an original video and a filtered version (here with the deshake +filter) side by side using the ffplay tool: +
                     
                    ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
                    +
                    + +

                    The above command is the same as: +

                     
                    ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
                    +
                    + +
                  • +Make a sliding overlay appearing from the left to the right top part of the +screen starting since time 2: +
                     
                    overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
                    +
                    + +
                  • +Compose output by putting two input videos side to side: +
                     
                    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]
                    +"
                    +
                    + +
                  • +Chain several overlays in cascade: +
                     
                    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]
                    +
                    + +
                  + + +

                  35.58 owdenoise

                  + +

                  Apply Overcomplete Wavelet denoiser. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  depth
                  +

                  Set depth. +

                  +

                  Larger depth values will denoise lower frequency components more, but +slow down filtering. +

                  +

                  Must be an int in the range 8-16, default is 8. +

                  +
                  +
                  luma_strength, ls
                  +

                  Set luma strength. +

                  +

                  Must be a double value in the range 0-1000, default is 1.0. +

                  +
                  +
                  chroma_strength, cs
                  +

                  Set chroma strength. +

                  +

                  Must be a double value in the range 0-1000, default is 1.0. +

                  +
                  + + +

                  35.59 pad

                  + +

                  Add paddings to the input image, and place the original input at the +given coordinates x, y. +

                  +

                  This filter accepts the following parameters: +

                  +
                  +
                  width, w
                  +
                  height, h
                  +

                  Specify an expression for the size of the output image with the +paddings added. If the value for width or height is 0, the +corresponding input size is used for the output. +

                  +

                  The width expression can reference the value set by the +height expression, and vice versa. +

                  +

                  The default value of width and height is 0. +

                  +
                  +
                  x
                  +
                  y
                  +

                  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. +

                  +

                  The x expression can reference the value set by the y +expression, and vice versa. +

                  +

                  The default value of x and y is 0. +

                  +
                  +
                  color
                  +

                  Specify the color of the padded area. For the syntax of this option, +check the "Color" section in the ffmpeg-utils manual. +

                  +

                  The default value of color is "black". +

                  +
                  + +

                  The value for the width, height, x, and y +options are expressions containing the following constants: +

                  +
                  +
                  in_w
                  +
                  in_h
                  +

                  the input video width and height +

                  +
                  +
                  iw
                  +
                  ih
                  +

                  same as in_w and in_h +

                  +
                  +
                  out_w
                  +
                  out_h
                  +

                  the output width and height, that is the size of the padded area as +specified by the width and height expressions +

                  +
                  +
                  ow
                  +
                  oh
                  +

                  same as out_w and out_h +

                  +
                  +
                  x
                  +
                  y
                  +

                  x and y offsets as specified by the x and y +expressions, or NAN if not yet specified +

                  +
                  +
                  a
                  +

                  same as iw / ih +

                  +
                  +
                  sar
                  +

                  input sample aspect ratio +

                  +
                  +
                  dar
                  +

                  input display aspect ratio, it is the same as (iw / ih) * sar +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  + + +

                  35.59.1 Examples

                  + +
                    +
                  • +Add paddings with color "violet" to the input video. Output video +size is 640x480, the top-left corner of the input video is placed at +column 0, row 40: +
                     
                    pad=640:480:0:40:violet
                    +
                    + +

                    The example above is equivalent to the following command: +

                     
                    pad=width=640:height=480:x=0:y=40:color=violet
                    +
                    + +
                  • +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: +
                     
                    pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
                    +
                    + +
                  • +Pad the input to get a squared output with size equal to the maximum +value between the input width and height, and put the input video at +the center of the padded area: +
                     
                    pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
                    +
                    + +
                  • +Pad the input to get a final w/h ratio of 16:9: +
                     
                    pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
                    +
                    + +
                  • +In case of anamorphic video, in order to set the output display aspect +correctly, it is necessary to use sar in the expression, +according to the relation: +
                     
                    (ih * X / ih) * sar = output_dar
                    +X = output_dar / sar
                    +
                    + +

                    Thus the previous example needs to be modified to: +

                     
                    pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
                    +
                    + +
                  • +Double output size and put the input video in the bottom-right +corner of the output padded area: +
                     
                    pad="2*iw:2*ih:ow-iw:oh-ih"
                    +
                    +
                  + + +

                  35.60 perspective

                  + +

                  Correct perspective of video not recorded perpendicular to the screen. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  x0
                  +
                  y0
                  +
                  x1
                  +
                  y1
                  +
                  x2
                  +
                  y2
                  +
                  x3
                  +
                  y3
                  +

                  Set coordinates expression for top left, top right, bottom left and bottom right corners. +Default values are 0:0:W:0:0:H:W:H with which perspective will remain unchanged. +

                  +

                  The expressions can use the following variables: +

                  +
                  +
                  W
                  +
                  H
                  +

                  the width and height of video frame. +

                  +
                  + +
                  +
                  interpolation
                  +

                  Set interpolation for perspective correction. +

                  +

                  It accepts the following values: +

                  +
                  linear
                  +
                  cubic
                  +
                  + +

                  Default value is ‘linear’. +

                  +
                  + + +

                  35.61 phase

                  + +

                  Delay interlaced video by one field time so that the field order changes. +

                  +

                  The intended use is to fix PAL movies that have been captured with the +opposite field order to the film-to-video transfer. +

                  +

                  A description of the accepted parameters follows. +

                  +
                  +
                  mode
                  +

                  Set phase mode. +

                  +

                  It accepts the following values: +

                  +
                  t
                  +

                  Capture field order top-first, transfer bottom-first. +Filter will delay the bottom field. +

                  +
                  +
                  b
                  +

                  Capture field order bottom-first, transfer top-first. +Filter will delay the top field. +

                  +
                  +
                  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. +

                  +
                  +
                  a
                  +

                  Capture field order determined automatically by field flags, transfer +opposite. +Filter selects among ‘t’ and ‘b’ modes on a frame by frame +basis using field flags. If no field information is available, +then this works just like ‘u’. +

                  +
                  +
                  u
                  +

                  Capture unknown or varying, transfer opposite. +Filter selects among ‘t’ and ‘b’ on a frame by frame basis by +analyzing the images and selecting the alternative that produces best +match between the fields. +

                  +
                  +
                  T
                  +

                  Capture top-first, transfer unknown or varying. +Filter selects among ‘t’ and ‘p’ using image analysis. +

                  +
                  +
                  B
                  +

                  Capture bottom-first, transfer unknown or varying. +Filter selects among ‘b’ and ‘p’ using image analysis. +

                  +
                  +
                  A
                  +

                  Capture determined by field flags, transfer unknown or varying. +Filter selects among ‘t’, ‘b’ and ‘p’ using field flags and +image analysis. If no field information is available, then this works just +like ‘U’. This is the default mode. +

                  +
                  +
                  U
                  +

                  Both capture and transfer unknown or varying. +Filter selects among ‘t’, ‘b’ and ‘p’ using image analysis only. +

                  +
                  +
                  +
                  + + +

                  35.62 pixdesctest

                  + +

                  Pixel format descriptor test filter, mainly useful for internal +testing. The output video should be equal to the input video. +

                  +

                  For example: +

                   
                  format=monow, pixdesctest
                  +
                  + +

                  can be used to test the monowhite pixel format descriptor definition. +

                  + +

                  35.63 pp

                  + +

                  Enable the specified chain of postprocessing subfilters using libpostproc. This +library should be automatically selected with a GPL build (--enable-gpl). +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. +

                  +

                  The filters accept the following options: +

                  +
                  +
                  subfilters
                  +

                  Set postprocessing subfilters string. +

                  +
                  + +

                  All subfilters share common options to determine their scope: +

                  +
                  +
                  a/autoq
                  +

                  Honor the quality commands for this subfilter. +

                  +
                  +
                  c/chrom
                  +

                  Do chrominance filtering, too (default). +

                  +
                  +
                  y/nochrom
                  +

                  Do luminance filtering only (no chrominance). +

                  +
                  +
                  n/noluma
                  +

                  Do chrominance filtering only (no luminance). +

                  +
                  + +

                  These options can be appended after the subfilter name, separated by a ’|’. +

                  +

                  Available subfilters are: +

                  +
                  +
                  hb/hdeblock[|difference[|flatness]]
                  +

                  Horizontal deblocking filter +

                  +
                  difference
                  +

                  Difference factor where higher values mean more deblocking (default: 32). +

                  +
                  flatness
                  +

                  Flatness threshold where lower values mean more deblocking (default: 39). +

                  +
                  + +
                  +
                  vb/vdeblock[|difference[|flatness]]
                  +

                  Vertical deblocking filter +

                  +
                  difference
                  +

                  Difference factor where higher values mean more deblocking (default: 32). +

                  +
                  flatness
                  +

                  Flatness threshold where lower values mean more deblocking (default: 39). +

                  +
                  + +
                  +
                  ha/hadeblock[|difference[|flatness]]
                  +

                  Accurate horizontal deblocking filter +

                  +
                  difference
                  +

                  Difference factor where higher values mean more deblocking (default: 32). +

                  +
                  flatness
                  +

                  Flatness threshold where lower values mean more deblocking (default: 39). +

                  +
                  + +
                  +
                  va/vadeblock[|difference[|flatness]]
                  +

                  Accurate vertical deblocking filter +

                  +
                  difference
                  +

                  Difference factor where higher values mean more deblocking (default: 32). +

                  +
                  flatness
                  +

                  Flatness threshold where lower values mean more deblocking (default: 39). +

                  +
                  +
                  +
                  + +

                  The horizontal and vertical deblocking filters share the difference and +flatness values so you cannot set different horizontal and vertical +thresholds. +

                  +
                  +
                  h1/x1hdeblock
                  +

                  Experimental horizontal deblocking filter +

                  +
                  +
                  v1/x1vdeblock
                  +

                  Experimental vertical deblocking filter +

                  +
                  +
                  dr/dering
                  +

                  Deringing filter +

                  +
                  +
                  tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer
                  +
                  +
                  threshold1
                  +

                  larger -> stronger filtering +

                  +
                  threshold2
                  +

                  larger -> stronger filtering +

                  +
                  threshold3
                  +

                  larger -> stronger filtering +

                  +
                  + +
                  +
                  al/autolevels[:f/fullyrange], automatic brightness / contrast correction
                  +
                  +
                  f/fullyrange
                  +

                  Stretch luminance to 0-255. +

                  +
                  + +
                  +
                  lb/linblenddeint
                  +

                  Linear blend deinterlacing filter that deinterlaces the given block by +filtering all lines with a (1 2 1) filter. +

                  +
                  +
                  li/linipoldeint
                  +

                  Linear interpolating deinterlacing filter that deinterlaces the given block by +linearly interpolating every second line. +

                  +
                  +
                  ci/cubicipoldeint
                  +

                  Cubic interpolating deinterlacing filter deinterlaces the given block by +cubically interpolating every second line. +

                  +
                  +
                  md/mediandeint
                  +

                  Median deinterlacing filter that deinterlaces the given block by applying a +median filter to every second line. +

                  +
                  +
                  fd/ffmpegdeint
                  +

                  FFmpeg deinterlacing filter that deinterlaces the given block by filtering every +second line with a (-1 4 2 4 -1) filter. +

                  +
                  +
                  l5/lowpass5
                  +

                  Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given +block by filtering all lines with a (-1 2 6 2 -1) filter. +

                  +
                  +
                  fq/forceQuant[|quantizer]
                  +

                  Overrides the quantizer table from the input with the constant quantizer you +specify. +

                  +
                  quantizer
                  +

                  Quantizer to use +

                  +
                  + +
                  +
                  de/default
                  +

                  Default pp filter combination (hb|a,vb|a,dr|a) +

                  +
                  +
                  fa/fast
                  +

                  Fast pp filter combination (h1|a,v1|a,dr|a) +

                  +
                  +
                  ac
                  +

                  High quality pp filter combination (ha|a|128|7,va|a,dr|a) +

                  +
                  + + +

                  35.63.1 Examples

                  + +
                    +
                  • +Apply horizontal and vertical deblocking, deringing and automatic +brightness/contrast: +
                     
                    pp=hb/vb/dr/al
                    +
                    + +
                  • +Apply default filters without brightness/contrast correction: +
                     
                    pp=de/-al
                    +
                    + +
                  • +Apply default filters and temporal denoiser: +
                     
                    pp=default/tmpnoise|1|2|3
                    +
                    + +
                  • +Apply deblocking on luminance only, and switch vertical deblocking on or off +automatically depending on available CPU time: +
                     
                    pp=hb|y/vb|a
                    +
                    +
                  + + +

                  35.64 psnr

                  + +

                  Obtain the average, maximum and minimum PSNR (Peak Signal to Noise +Ratio) between two input videos. +

                  +

                  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. +

                  +

                  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. +

                  +

                  The obtained average PSNR is printed through the logging system. +

                  +

                  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: +

                  +
                   
                  PSNR = 10*log10(MAX^2/MSE)
                  +
                  + +

                  Where MAX is the average of the maximum values of each component of the +image. +

                  +

                  The description of the accepted parameters follows. +

                  +
                  +
                  stats_file, f
                  +

                  If specified the filter will use the named file to save the PSNR of +each individual frame. +

                  +
                  + +

                  The file printed if stats_file is selected, contains a sequence of +key/value pairs of the form key:value for each compared +couple of frames. +

                  +

                  A description of each shown parameter follows: +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 1 +

                  +
                  +
                  mse_avg
                  +

                  Mean Square Error pixel-by-pixel average difference of the compared +frames, averaged over all the image components. +

                  +
                  +
                  mse_y, mse_u, mse_v, mse_r, mse_g, mse_g, mse_a
                  +

                  Mean Square Error pixel-by-pixel average difference of the compared +frames for the component specified by the suffix. +

                  +
                  +
                  psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a
                  +

                  Peak Signal to Noise ratio of the compared frames for the component +specified by the suffix. +

                  +
                  + +

                  For example: +

                   
                  movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
                  +[main][ref] psnr="stats_file=stats.log" [out]
                  +
                  + +

                  On this example the input file being processed is compared with the +reference file ‘ref_movie.mpg’. The PSNR of each individual frame +is stored in ‘stats.log’. +

                  + +

                  35.65 pullup

                  + +

                  Pulldown reversal (inverse telecine) filter, capable of handling mixed +hard-telecine, 24000/1001 fps progressive, and 30000/1001 fps progressive +content. +

                  +

                  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. +

                  +

                  To produce content with an even framerate, insert the fps filter after +pullup, use fps=24000/1001 if the input frame rate is 29.97fps, +fps=24 for 30fps and the (rare) telecined 25fps input. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  jl
                  +
                  jr
                  +
                  jt
                  +
                  jb
                  +

                  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. +

                  +
                  +
                  sb
                  +

                  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 0. +

                  +
                  +
                  mp
                  +

                  Set the metric plane to use. It accepts the following values: +

                  +
                  l
                  +

                  Use luma plane. +

                  +
                  +
                  u
                  +

                  Use chroma blue plane. +

                  +
                  +
                  v
                  +

                  Use chroma red plane. +

                  +
                  + +

                  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 ‘mp’ to a chroma plane is to reduce CPU +load and make pullup usable in realtime on slow machines. +

                  +
                  + +

                  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: +

                   
                  ffmpeg -i input -vf pullup -r 24000/1001 ...
                  +
                  + + +

                  35.66 removelogo

                  + +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  filename, f
                  +

                  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. +

                  +
                  + +

                  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. +

                  +

                  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. +

                  + +

                  35.67 rotate

                  + +

                  Rotate video by an arbitrary angle expressed in radians. +

                  +

                  The filter accepts the following options: +

                  +

                  A description of the optional parameters follows. +

                  +
                  angle, a
                  +

                  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". +

                  +

                  This expression is evaluated for each frame. +

                  +
                  +
                  out_w, ow
                  +

                  Set the output width expression, default value is "iw". +This expression is evaluated just once during configuration. +

                  +
                  +
                  out_h, oh
                  +

                  Set the output height expression, default value is "ih". +This expression is evaluated just once during configuration. +

                  +
                  +
                  bilinear
                  +

                  Enable bilinear interpolation if set to 1, a value of 0 disables +it. Default value is 1. +

                  +
                  +
                  fillcolor, c
                  +

                  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). +

                  +

                  Default value is "black". +

                  +
                  + +

                  The expressions for the angle and the output size can contain the +following constants and functions: +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 0. It is always NAN +before the first frame is filtered. +

                  +
                  +
                  t
                  +

                  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. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  +
                  in_w, iw
                  +
                  in_h, ih
                  +

                  the input video width and heigth +

                  +
                  +
                  out_w, ow
                  +
                  out_h, oh
                  +

                  the output width and heigth, that is the size of the padded area as +specified by the width and height expressions +

                  +
                  +
                  rotw(a)
                  +
                  roth(a)
                  +

                  the minimal width/height required for completely containing the input +video rotated by a radians. +

                  +

                  These are only available when computing the ‘out_w’ and +‘out_h’ expressions. +

                  +
                  + + +

                  35.67.1 Examples

                  + +
                    +
                  • +Rotate the input by PI/6 radians clockwise: +
                     
                    rotate=PI/6
                    +
                    + +
                  • +Rotate the input by PI/6 radians counter-clockwise: +
                     
                    rotate=-PI/6
                    +
                    + +
                  • +Apply a constant rotation with period T, starting from an angle of PI/3: +
                     
                    rotate=PI/3+2*PI*t/T
                    +
                    + +
                  • +Make the input video rotation oscillating with a period of T +seconds and an amplitude of A radians: +
                     
                    rotate=A*sin(2*PI/T*t)
                    +
                    + +
                  • +Rotate the video, output size is choosen so that the whole rotating +input video is always completely contained in the output: +
                     
                    rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
                    +
                    + +
                  • +Rotate the video, reduce the output size so that no background is ever +shown: +
                     
                    rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
                    +
                    +
                  + + +

                  35.67.2 Commands

                  + +

                  The filter supports the following commands: +

                  +
                  +
                  a, angle
                  +

                  Set the angle expression. +The command accepts the same syntax of the corresponding option. +

                  +

                  If the specified expression is not valid, it is kept at its current +value. +

                  +
                  + + +

                  35.68 sab

                  + +

                  Apply Shape Adaptive Blur. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  luma_radius, lr
                  +

                  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. +

                  +
                  +
                  luma_pre_filter_radius, lpfr
                  +

                  Set luma pre-filter radius, must be a value in the 0.1-2.0 range, default +value is 1.0. +

                  +
                  +
                  luma_strength, ls
                  +

                  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. +

                  +
                  +
                  chroma_radius, cr
                  +

                  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. +

                  +
                  +
                  chroma_pre_filter_radius, cpfr
                  +

                  Set chroma pre-filter radius, must be a value in the 0.1-2.0 range. +

                  +
                  +
                  chroma_strength, cs
                  +

                  Set chroma maximum difference between pixels to still be considered, +must be a value in the 0.1-100.0 range. +

                  +
                  + +

                  Each chroma option value, if not explicitly specified, is set to the +corresponding luma option value. +

                  + +

                  35.69 scale

                  + +

                  Scale (resize) the input video, using the libswscale library. +

                  +

                  The scale filter forces the output display aspect ratio to be the same +of the input, by changing the output sample aspect ratio. +

                  +

                  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. +

                  + +

                  35.69.1 Options

                  +

                  The filter accepts the following options, or any of the options +supported by the libswscale scaler. +

                  +

                  See (ffmpeg-scaler)scaler_options for +the complete list of scaler options. +

                  +
                  +
                  width, w
                  +
                  height, h
                  +

                  Set the output video dimension expression. Default value is the input +dimension. +

                  +

                  If the value is 0, the input width is used for the output. +

                  +

                  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 +

                  +

                  See below for the list of accepted constants for use in the dimension +expression. +

                  +
                  +
                  interl
                  +

                  Set the interlacing mode. It accepts the following values: +

                  +
                  +
                  1
                  +

                  Force interlaced aware scaling. +

                  +
                  +
                  0
                  +

                  Do not apply interlaced scaling. +

                  +
                  +
                  -1
                  +

                  Select interlaced aware scaling depending on whether the source frames +are flagged as interlaced or not. +

                  +
                  + +

                  Default value is ‘0’. +

                  +
                  +
                  flags
                  +

                  Set libswscale scaling flags. See +(ffmpeg-scaler)sws_flags for the +complete list of values. If not explictly specified the filter applies +the default flags. +

                  +
                  +
                  size, s
                  +

                  Set the video size. For the syntax of this option, check the "Video size" +section in the ffmpeg-utils manual. +

                  +
                  +
                  in_color_matrix
                  +
                  out_color_matrix
                  +

                  Set in/output YCbCr color space type. +

                  +

                  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 color space type depends on the pixel format. +

                  +

                  Possible values: +

                  +
                  +
                  auto
                  +

                  Choose automatically. +

                  +
                  +
                  bt709
                  +

                  Format conforming to International Telecommunication Union (ITU) +Recommendation BT.709. +

                  +
                  +
                  fcc
                  +

                  Set color space conforming to the United States Federal Communications +Commission (FCC) Code of Federal Regulations (CFR) Title 47 (2003) 73.682 (a). +

                  +
                  +
                  bt601
                  +

                  Set color space conforming to: +

                  +
                    +
                  • +ITU Radiocommunication Sector (ITU-R) Recommendation BT.601 + +
                  • +ITU-R Rec. BT.470-6 (1998) Systems B, B1, and G + +
                  • +Society of Motion Picture and Television Engineers (SMPTE) ST 170:2004 + +
                  + +
                  +
                  smpte240m
                  +

                  Set color space conforming to SMPTE ST 240:1999. +

                  +
                  + +
                  +
                  in_range
                  +
                  out_range
                  +

                  Set in/output YCbCr sample range. +

                  +

                  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: +

                  +
                  +
                  auto
                  +

                  Choose automatically. +

                  +
                  +
                  jpeg/full/pc
                  +

                  Set full range (0-255 in case of 8-bit luma). +

                  +
                  +
                  mpeg/tv
                  +

                  Set "MPEG" range (16-235 in case of 8-bit luma). +

                  +
                  + +
                  +
                  force_original_aspect_ratio
                  +

                  Enable decreasing or increasing output video width or height if necessary to +keep the original aspect ratio. Possible values: +

                  +
                  +
                  disable
                  +

                  Scale the video as specified and disable this feature. +

                  +
                  +
                  decrease
                  +

                  The output video dimensions will automatically be decreased if needed. +

                  +
                  +
                  increase
                  +

                  The output video dimensions will automatically be increased if needed. +

                  +
                  +
                  + +

                  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. +

                  +

                  Please note that this is a different thing than specifying -1 for ‘w’ +or ‘h’, you still need to specify the output resolution for this option +to work. +

                  +
                  +
                  + +

                  The values of the ‘w’ and ‘h’ options are expressions +containing the following constants: +

                  +
                  +
                  in_w
                  +
                  in_h
                  +

                  the input width and height +

                  +
                  +
                  iw
                  +
                  ih
                  +

                  same as in_w and in_h +

                  +
                  +
                  out_w
                  +
                  out_h
                  +

                  the output (scaled) width and height +

                  +
                  +
                  ow
                  +
                  oh
                  +

                  same as out_w and out_h +

                  +
                  +
                  a
                  +

                  same as iw / ih +

                  +
                  +
                  sar
                  +

                  input sample aspect ratio +

                  +
                  +
                  dar
                  +

                  input display aspect ratio. Calculated from (iw / ih) * sar. +

                  +
                  +
                  hsub
                  +
                  vsub
                  +

                  horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +

                  +
                  + + +

                  35.69.2 Examples

                  + +
                    +
                  • +Scale the input video to a size of 200x100: +
                     
                    scale=w=200:h=100
                    +
                    + +

                    This is equivalent to: +

                     
                    scale=200:100
                    +
                    + +

                    or: +

                     
                    scale=200x100
                    +
                    + +
                  • +Specify a size abbreviation for the output size: +
                     
                    scale=qcif
                    +
                    + +

                    which can also be written as: +

                     
                    scale=size=qcif
                    +
                    + +
                  • +Scale the input to 2x: +
                     
                    scale=w=2*iw:h=2*ih
                    +
                    + +
                  • +The above is the same as: +
                     
                    scale=2*in_w:2*in_h
                    +
                    + +
                  • +Scale the input to 2x with forced interlaced scaling: +
                     
                    scale=2*iw:2*ih:interl=1
                    +
                    + +
                  • +Scale the input to half size: +
                     
                    scale=w=iw/2:h=ih/2
                    +
                    + +
                  • +Increase the width, and set the height to the same size: +
                     
                    scale=3/2*iw:ow
                    +
                    + +
                  • +Seek for Greek harmony: +
                     
                    scale=iw:1/PHI*iw
                    +scale=ih*PHI:ih
                    +
                    + +
                  • +Increase the height, and set the width to 3/2 of the height: +
                     
                    scale=w=3/2*oh:h=3/5*ih
                    +
                    + +
                  • +Increase the size, but make the size a multiple of the chroma +subsample values: +
                     
                    scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
                    +
                    + +
                  • +Increase the width to a maximum of 500 pixels, keep the same input +aspect ratio: +
                     
                    scale=w='min(500\, iw*3/2):h=-1'
                    +
                    +
                  + + +

                  35.70 separatefields

                  + +

                  The separatefields 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. +

                  +

                  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 setfield filter before separatefields filter. +

                  + +

                  35.71 setdar, setsar

                  + +

                  The setdar filter sets the Display Aspect Ratio for the filter +output video. +

                  +

                  This is done by changing the specified Sample (aka Pixel) Aspect +Ratio, according to the following equation: +

                   
                  DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR
                  +
                  + +

                  Keep in mind that the setdar filter does not modify the pixel +dimensions of the video frame. Also the display aspect ratio set by +this filter may be changed by later filters in the filterchain, +e.g. in case of scaling or if another "setdar" or a "setsar" filter is +applied. +

                  +

                  The setsar filter sets the Sample (aka Pixel) Aspect Ratio for +the filter output video. +

                  +

                  Note that as a consequence of the application of this filter, the +output display aspect ratio will change according to the equation +above. +

                  +

                  Keep in mind that the sample aspect ratio set by the setsar +filter may be changed by later filters in the filterchain, e.g. if +another "setsar" or a "setdar" filter is applied. +

                  +

                  The filters accept the following options: +

                  +
                  +
                  r, ratio, dar (setdar only), sar (setsar only)
                  +

                  Set the aspect ratio used by the filter. +

                  +

                  The parameter can be a floating point number string, an expression, or +a string of the form num:den, where num and +den are the numerator and denominator of the aspect ratio. If +the parameter is not specified, it is assumed the value "0". +In case the form "num:den" is used, the : character +should be escaped. +

                  +
                  +
                  max
                  +

                  Set the maximum integer value to use for expressing numerator and +denominator when reducing the expressed aspect ratio to a rational. +Default value is 100. +

                  +
                  +
                  + + +

                  35.71.1 Examples

                  + +
                    +
                  • +To change the display aspect ratio to 16:9, specify one of the following: +
                     
                    setdar=dar=1.77777
                    +setdar=dar=16/9
                    +setdar=dar=1.77777
                    +
                    + +
                  • +To change the sample aspect ratio to 10:11, specify: +
                     
                    setsar=sar=10/11
                    +
                    + +
                  • +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: +
                     
                    setdar=ratio=16/9:max=1000
                    +
                    + +
                  + +

                  +

                  +

                  35.72 setfield

                  + +

                  Force field for the output video frame. +

                  +

                  The setfield 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. fieldorder or yadif). +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  mode
                  +

                  Available values are: +

                  +
                  +
                  auto
                  +

                  Keep the same field property. +

                  +
                  +
                  bff
                  +

                  Mark the frame as bottom-field-first. +

                  +
                  +
                  tff
                  +

                  Mark the frame as top-field-first. +

                  +
                  +
                  prog
                  +

                  Mark the frame as progressive. +

                  +
                  +
                  +
                  + + +

                  35.73 showinfo

                  + +

                  Show a line containing various information for each input video frame. +The input video is not modified. +

                  +

                  The shown line contains a sequence of key/value pairs of the form +key:value. +

                  +

                  A description of each shown parameter follows: +

                  +
                  +
                  n
                  +

                  sequential number of the input frame, starting from 0 +

                  +
                  +
                  pts
                  +

                  Presentation TimeStamp of the input frame, expressed as a number of +time base units. The time base unit depends on the filter input pad. +

                  +
                  +
                  pts_time
                  +

                  Presentation TimeStamp of the input frame, expressed as a number of +seconds +

                  +
                  +
                  pos
                  +

                  position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic video) +

                  +
                  +
                  fmt
                  +

                  pixel format name +

                  +
                  +
                  sar
                  +

                  sample aspect ratio of the input frame, expressed in the form +num/den +

                  +
                  +
                  s
                  +

                  size of the input frame. For the syntax of this option, check the "Video size" +section in the ffmpeg-utils manual. +

                  +
                  +
                  i
                  +

                  interlaced mode ("P" for "progressive", "T" for top field first, "B" +for bottom field first) +

                  +
                  +
                  iskey
                  +

                  1 if the frame is a key frame, 0 otherwise +

                  +
                  +
                  type
                  +

                  picture type of the input frame ("I" for an I-frame, "P" for a +P-frame, "B" for a B-frame, "?" for unknown type). +Check also the documentation of the AVPictureType enum and of +the av_get_picture_type_char function defined in +‘libavutil/avutil.h’. +

                  +
                  +
                  checksum
                  +

                  Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame +

                  +
                  +
                  plane_checksum
                  +

                  Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, +expressed in the form "[c0 c1 c2 c3]" +

                  +
                  + +

                  +

                  +

                  35.74 smartblur

                  + +

                  Blur the input video without impacting the outlines. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  luma_radius, lr
                  +

                  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. +

                  +
                  +
                  luma_strength, ls
                  +

                  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. +

                  +
                  +
                  luma_threshold, lt
                  +

                  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. +

                  +
                  +
                  chroma_radius, cr
                  +

                  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. +

                  +
                  +
                  chroma_strength, cs
                  +

                  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. +

                  +
                  +
                  chroma_threshold, ct
                  +

                  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. +

                  +
                  + +

                  If a chroma option is not explicitly set, the corresponding luma value +is set. +

                  + +

                  35.75 stereo3d

                  + +

                  Convert between different stereoscopic image formats. +

                  +

                  The filters accept the following options: +

                  +
                  +
                  in
                  +

                  Set stereoscopic image format of input. +

                  +

                  Available values for input image formats are: +

                  +
                  sbsl
                  +

                  side by side parallel (left eye left, right eye right) +

                  +
                  +
                  sbsr
                  +

                  side by side crosseye (right eye left, left eye right) +

                  +
                  +
                  sbs2l
                  +

                  side by side parallel with half width resolution +(left eye left, right eye right) +

                  +
                  +
                  sbs2r
                  +

                  side by side crosseye with half width resolution +(right eye left, left eye right) +

                  +
                  +
                  abl
                  +

                  above-below (left eye above, right eye below) +

                  +
                  +
                  abr
                  +

                  above-below (right eye above, left eye below) +

                  +
                  +
                  ab2l
                  +

                  above-below with half height resolution +(left eye above, right eye below) +

                  +
                  +
                  ab2r
                  +

                  above-below with half height resolution +(right eye above, left eye below) +

                  +
                  +
                  al
                  +

                  alternating frames (left eye first, right eye second) +

                  +
                  +
                  ar
                  +

                  alternating frames (right eye first, left eye second) +

                  +

                  Default value is ‘sbsl’. +

                  +
                  + +
                  +
                  out
                  +

                  Set stereoscopic image format of output. +

                  +

                  Available values for output image formats are all the input formats as well as: +

                  +
                  arbg
                  +

                  anaglyph red/blue gray +(red filter on left eye, blue filter on right eye) +

                  +
                  +
                  argg
                  +

                  anaglyph red/green gray +(red filter on left eye, green filter on right eye) +

                  +
                  +
                  arcg
                  +

                  anaglyph red/cyan gray +(red filter on left eye, cyan filter on right eye) +

                  +
                  +
                  arch
                  +

                  anaglyph red/cyan half colored +(red filter on left eye, cyan filter on right eye) +

                  +
                  +
                  arcc
                  +

                  anaglyph red/cyan color +(red filter on left eye, cyan filter on right eye) +

                  +
                  +
                  arcd
                  +

                  anaglyph red/cyan color optimized with the least squares projection of dubois +(red filter on left eye, cyan filter on right eye) +

                  +
                  +
                  agmg
                  +

                  anaglyph green/magenta gray +(green filter on left eye, magenta filter on right eye) +

                  +
                  +
                  agmh
                  +

                  anaglyph green/magenta half colored +(green filter on left eye, magenta filter on right eye) +

                  +
                  +
                  agmc
                  +

                  anaglyph green/magenta colored +(green filter on left eye, magenta filter on right eye) +

                  +
                  +
                  agmd
                  +

                  anaglyph green/magenta color optimized with the least squares projection of dubois +(green filter on left eye, magenta filter on right eye) +

                  +
                  +
                  aybg
                  +

                  anaglyph yellow/blue gray +(yellow filter on left eye, blue filter on right eye) +

                  +
                  +
                  aybh
                  +

                  anaglyph yellow/blue half colored +(yellow filter on left eye, blue filter on right eye) +

                  +
                  +
                  aybc
                  +

                  anaglyph yellow/blue colored +(yellow filter on left eye, blue filter on right eye) +

                  +
                  +
                  aybd
                  +

                  anaglyph yellow/blue color optimized with the least squares projection of dubois +(yellow filter on left eye, blue filter on right eye) +

                  +
                  +
                  irl
                  +

                  interleaved rows (left eye has top row, right eye starts on next row) +

                  +
                  +
                  irr
                  +

                  interleaved rows (right eye has top row, left eye starts on next row) +

                  +
                  +
                  ml
                  +

                  mono output (left eye only) +

                  +
                  +
                  mr
                  +

                  mono output (right eye only) +

                  +
                  + +

                  Default value is ‘arcd’. +

                  +
                  + + +

                  35.75.1 Examples

                  + +
                    +
                  • +Convert input video from side by side parallel to anaglyph yellow/blue dubois: +
                     
                    stereo3d=sbsl:aybd
                    +
                    + +
                  • +Convert input video from above bellow (left eye above, right eye below) to side by side crosseye. +
                     
                    stereo3d=abl:sbsr
                    +
                    +
                  + + +

                  35.76 spp

                  + +

                  Apply a simple postprocessing filter that compresses and decompresses the image +at several (or - in the case of ‘quality’ level 6 - all) shifts +and average the results. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  quality
                  +

                  Set quality. This option defines the number of levels for averaging. It accepts +an integer in the range 0-6. If set to 0, the filter will have no +effect. A value of 6 means the higher quality. For each increment of +that value the speed drops by a factor of approximately 2. Default value is +3. +

                  +
                  +
                  qp
                  +

                  Force a constant quantization parameter. If not set, the filter will use the QP +from the video stream (if available). +

                  +
                  +
                  mode
                  +

                  Set thresholding mode. Available modes are: +

                  +
                  +
                  hard
                  +

                  Set hard thresholding (default). +

                  +
                  soft
                  +

                  Set soft thresholding (better de-ringing effect, but likely blurrier). +

                  +
                  + +
                  +
                  use_bframe_qp
                  +

                  Enable the use of the QP from the B-Frames if set to 1. Using this +option may cause flicker since the B-Frames have often larger QP. Default is +0 (not enabled). +

                  +
                  + +

                  +

                  +

                  35.77 subtitles

                  + +

                  Draw subtitles on top of input video using the libass library. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libass. This filter also requires a build with libavcodec and +libavformat to convert the passed subtitles file to ASS (Advanced Substation +Alpha) subtitles format. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  filename, f
                  +

                  Set the filename of the subtitle file to read. It must be specified. +

                  +
                  +
                  original_size
                  +

                  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. +

                  +
                  +
                  charenc
                  +

                  Set subtitles input character encoding. subtitles filter only. Only +useful if not UTF-8. +

                  +
                  + +

                  If the first key is not specified, it is assumed that the first value +specifies the ‘filename’. +

                  +

                  For example, to render the file ‘sub.srt’ on top of the input +video, use the command: +

                   
                  subtitles=sub.srt
                  +
                  + +

                  which is equivalent to: +

                   
                  subtitles=filename=sub.srt
                  +
                  + + +

                  35.78 super2xsai

                  + +

                  Scale the input by 2x and smooth using the Super2xSaI (Scale and +Interpolate) pixel art scaling algorithm. +

                  +

                  Useful for enlarging pixel art images without reducing sharpness. +

                  + +

                  35.79 swapuv

                  +

                  Swap U & V plane. +

                  + +

                  35.80 telecine

                  + +

                  Apply telecine process to the video. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  first_field
                  +
                  +
                  top, t
                  +

                  top field first +

                  +
                  bottom, b
                  +

                  bottom field first +The default value is top. +

                  +
                  + +
                  +
                  pattern
                  +

                  A string of numbers representing the pulldown pattern you wish to apply. +The default value is 23. +

                  +
                  + +
                   
                  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
                  +
                  + + +

                  35.81 thumbnail

                  +

                  Select the most representative frame in a given sequence of consecutive frames. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  n
                  +

                  Set the frames batch size to analyze; in a set of n frames, the filter +will pick one of them, and then handle the next batch of n frames until +the end. Default is 100. +

                  +
                  + +

                  Since the filter keeps track of the whole frames sequence, a bigger n +value will result in a higher memory usage, so a high value is not recommended. +

                  + +

                  35.81.1 Examples

                  + +
                    +
                  • +Extract one picture each 50 frames: +
                     
                    thumbnail=50
                    +
                    + +
                  • +Complete example of a thumbnail creation with ffmpeg: +
                     
                    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
                    +
                    +
                  + + +

                  35.82 tile

                  + +

                  Tile several successive frames together. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  layout
                  +

                  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. +

                  +
                  +
                  nb_frames
                  +

                  Set the maximum number of frames to render in the given area. It must be less +than or equal to wxh. The default value is 0, meaning all +the area will be used. +

                  +
                  +
                  margin
                  +

                  Set the outer border margin in pixels. +

                  +
                  +
                  padding
                  +

                  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. +

                  +
                  +
                  color
                  +

                  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 color +is "black". +

                  +
                  + + +

                  35.82.1 Examples

                  + +
                    +
                  • +Produce 8x8 PNG tiles of all keyframes (‘-skip_frame nokey’) in a movie: +
                     
                    ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
                    +
                    +

                    The ‘-vsync 0’ is necessary to prevent ffmpeg from +duplicating each output frame to accomodate the originally detected frame +rate. +

                    +
                  • +Display 5 pictures in an area of 3x2 frames, +with 7 pixels between them, and 2 pixels of initial margin, using +mixed flat and named options: +
                     
                    tile=3x2:nb_frames=5:padding=7:margin=2
                    +
                    +
                  + + +

                  35.83 tinterlace

                  + +

                  Perform various types of temporal field interlacing. +

                  +

                  Frames are counted starting from 1, so the first input frame is +considered odd. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  mode
                  +

                  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. +

                  +

                  Available values are: +

                  +
                  +
                  merge, 0
                  +

                  Move odd frames into the upper field, even into the lower field, +generating a double height frame at half frame rate. +

                  +
                  +
                  drop_odd, 1
                  +

                  Only output even frames, odd frames are dropped, generating a frame with +unchanged height at half frame rate. +

                  +
                  +
                  drop_even, 2
                  +

                  Only output odd frames, even frames are dropped, generating a frame with +unchanged height at half frame rate. +

                  +
                  +
                  pad, 3
                  +

                  Expand each frame to full height, but pad alternate lines with black, +generating a frame with double height at the same input frame rate. +

                  +
                  +
                  interleave_top, 4
                  +

                  Interleave the upper field from odd frames with the lower field from +even frames, generating a frame with unchanged height at half frame rate. +

                  +
                  +
                  interleave_bottom, 5
                  +

                  Interleave the lower field from odd frames with the upper field from +even frames, generating a frame with unchanged height at half frame rate. +

                  +
                  +
                  interlacex2, 6
                  +

                  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. +

                  +
                  + +

                  Numeric values are deprecated but are accepted for backward +compatibility reasons. +

                  +

                  Default mode is merge. +

                  +
                  +
                  flags
                  +

                  Specify flags influencing the filter process. +

                  +

                  Available value for flags is: +

                  +
                  +
                  low_pass_filter, vlfp
                  +

                  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. +

                  +

                  Vertical low-pass filtering can only be enabled for ‘mode’ +interleave_top and interleave_bottom. +

                  +
                  +
                  +
                  +
                  + + +

                  35.84 transpose

                  + +

                  Transpose rows with columns in the input video and optionally flip it. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  dir
                  +

                  Specify the transposition direction. +

                  +

                  Can assume the following values: +

                  +
                  0, 4, cclock_flip
                  +

                  Rotate by 90 degrees counterclockwise and vertically flip (default), that is: +

                   
                  L.R     L.l
                  +. . ->  . .
                  +l.r     R.r
                  +
                  + +
                  +
                  1, 5, clock
                  +

                  Rotate by 90 degrees clockwise, that is: +

                   
                  L.R     l.L
                  +. . ->  . .
                  +l.r     r.R
                  +
                  + +
                  +
                  2, 6, cclock
                  +

                  Rotate by 90 degrees counterclockwise, that is: +

                   
                  L.R     R.r
                  +. . ->  . .
                  +l.r     L.l
                  +
                  + +
                  +
                  3, 7, clock_flip
                  +

                  Rotate by 90 degrees clockwise and vertically flip, that is: +

                   
                  L.R     r.R
                  +. . ->  . .
                  +l.r     l.L
                  +
                  +
                  +
                  + +

                  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 passthrough option should be used instead. +

                  +

                  Numerical values are deprecated, and should be dropped in favor of +symbolic constants. +

                  +
                  +
                  passthrough
                  +

                  Do not apply the transposition if the input geometry matches the one +specified by the specified value. It accepts the following values: +

                  +
                  none
                  +

                  Always apply transposition. +

                  +
                  portrait
                  +

                  Preserve portrait geometry (when height >= width). +

                  +
                  landscape
                  +

                  Preserve landscape geometry (when width >= height). +

                  +
                  + +

                  Default value is none. +

                  +
                  + +

                  For example to rotate by 90 degrees clockwise and preserve portrait +layout: +

                   
                  transpose=dir=1:passthrough=portrait
                  +
                  + +

                  The command above can also be specified as: +

                   
                  transpose=1:portrait
                  +
                  + + +

                  35.85 trim

                  +

                  Trim the input so that the output contains one continuous subpart of the input. +

                  +

                  This filter accepts the following options: +

                  +
                  start
                  +

                  Specify time of the start of the kept section, i.e. the frame with the +timestamp start will be the first frame in the output. +

                  +
                  +
                  end
                  +

                  Specify time of the first frame that will be dropped, i.e. the frame +immediately preceding the one with the timestamp end will be the last +frame in the output. +

                  +
                  +
                  start_pts
                  +

                  Same as start, except this option sets the start timestamp in timebase +units instead of seconds. +

                  +
                  +
                  end_pts
                  +

                  Same as end, except this option sets the end timestamp in timebase units +instead of seconds. +

                  +
                  +
                  duration
                  +

                  Specify maximum duration of the output. +

                  +
                  +
                  start_frame
                  +

                  Number of the first frame that should be passed to output. +

                  +
                  +
                  end_frame
                  +

                  Number of the first frame that should be dropped. +

                  +
                  + +

                  start’, ‘end’, ‘duration’ are expressed as time +duration specifications, check the "Time duration" section in the +ffmpeg-utils manual. +

                  +

                  Note that the first two sets of the start/end options and the ‘duration’ +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. +

                  +

                  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. +

                  +

                  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. +

                  +

                  Examples: +

                    +
                  • +drop everything except the second minute of input +
                     
                    ffmpeg -i INPUT -vf trim=60:120
                    +
                    + +
                  • +keep only the first second +
                     
                    ffmpeg -i INPUT -vf trim=duration=1
                    +
                    + +
                  + + + +

                  35.86 unsharp

                  + +

                  Sharpen or blur the input video. +

                  +

                  It accepts the following parameters: +

                  +
                  +
                  luma_msize_x, lx
                  +

                  Set the luma matrix horizontal size. It must be an odd integer between +3 and 63, default value is 5. +

                  +
                  +
                  luma_msize_y, ly
                  +

                  Set the luma matrix vertical size. It must be an odd integer between 3 +and 63, default value is 5. +

                  +
                  +
                  luma_amount, la
                  +

                  Set the luma effect strength. It can be a float number, reasonable +values lay between -1.5 and 1.5. +

                  +

                  Negative values will blur the input video, while positive values will +sharpen it, a value of zero will disable the effect. +

                  +

                  Default value is 1.0. +

                  +
                  +
                  chroma_msize_x, cx
                  +

                  Set the chroma matrix horizontal size. It must be an odd integer +between 3 and 63, default value is 5. +

                  +
                  +
                  chroma_msize_y, cy
                  +

                  Set the chroma matrix vertical size. It must be an odd integer +between 3 and 63, default value is 5. +

                  +
                  +
                  chroma_amount, ca
                  +

                  Set the chroma effect strength. It can be a float number, reasonable +values lay between -1.5 and 1.5. +

                  +

                  Negative values will blur the input video, while positive values will +sharpen it, a value of zero will disable the effect. +

                  +

                  Default value is 0.0. +

                  +
                  +
                  opencl
                  +

                  If set to 1, specify using OpenCL capabilities, only available if +FFmpeg was configured with --enable-opencl. Default value is 0. +

                  +
                  +
                  + +

                  All parameters are optional and default to the equivalent of the +string ’5:5:1.0:5:5:0.0’. +

                  + +

                  35.86.1 Examples

                  + +
                    +
                  • +Apply strong luma sharpen effect: +
                     
                    unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
                    +
                    + +
                  • +Apply strong blur of both luma and chroma parameters: +
                     
                    unsharp=7:7:-2:7:7:-2
                    +
                    +
                  + +

                  +

                  +

                  35.87 vidstabdetect

                  + +

                  Analyze video stabilization/deshaking. Perform pass 1 of 2, see +vidstabtransform for pass 2. +

                  +

                  This filter generates a file with relative translation and rotation +transform information about subsequent frames, which is then used by +the vidstabtransform filter. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libvidstab. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  result
                  +

                  Set the path to the file used to write the transforms information. +Default value is ‘transforms.trf’. +

                  +
                  +
                  shakiness
                  +

                  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. +

                  +
                  +
                  accuracy
                  +

                  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 9. +

                  +
                  +
                  stepsize
                  +

                  Set stepsize of the search process. The region around minimum is +scanned with 1 pixel resolution. Default value is 6. +

                  +
                  +
                  mincontrast
                  +

                  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. +

                  +
                  +
                  tripod
                  +

                  Set reference frame number for tripod mode. +

                  +

                  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. +

                  +

                  If set to 0, it is disabled. The frames are counted starting from 1. +

                  +
                  +
                  show
                  +

                  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. +

                  +
                  + + +

                  35.87.1 Examples

                  + +
                    +
                  • +Use default values: +
                     
                    vidstabdetect
                    +
                    + +
                  • +Analyze strongly shaky movie and put the results in file +‘mytransforms.trf’: +
                     
                    vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
                    +
                    + +
                  • +Visualize the result of internal transformations in the resulting +video: +
                     
                    vidstabdetect=show=1
                    +
                    + +
                  • +Analyze a video with medium shakiness using ffmpeg: +
                     
                    ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
                    +
                    +
                  + +

                  +

                  +

                  35.88 vidstabtransform

                  + +

                  Video stabilization/deshaking: pass 2 of 2, +see vidstabdetect for pass 1. +

                  +

                  Read a file with transform information for each frame and +apply/compensate them. Together with the vidstabdetect +filter this can be used to deshake videos. See also +http://public.hronopik.de/vid.stab. It is important to also use +the unsharp filter, see below. +

                  +

                  To enable compilation of this filter you need to configure FFmpeg with +--enable-libvidstab. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  input
                  +

                  path to the file used to read the transforms (default: ‘transforms.trf’) +

                  +
                  +
                  smoothing
                  +

                  number of frames (value*2 + 1) used for lowpass filtering the camera movements +(default: 10). 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). +

                  +
                  +
                  maxshift
                  +

                  maximal number of pixels to translate frames (default: -1 no limit) +

                  +
                  +
                  maxangle
                  +

                  maximal angle in radians (degree*PI/180) to rotate frames (default: -1 +no limit) +

                  +
                  +
                  crop
                  +

                  How to deal with borders that may be visible due to movement +compensation. Available values are: +

                  +
                  +
                  keep
                  +

                  keep image information from previous frame (default) +

                  +
                  black
                  +

                  fill the border black +

                  +
                  + +
                  +
                  invert
                  +
                  +
                  0
                  +

                  keep transforms normal (default) +

                  +
                  1
                  +

                  invert transforms +

                  +
                  + +
                  +
                  relative
                  +

                  consider transforms as +

                  +
                  0
                  +

                  absolute +

                  +
                  1
                  +

                  relative to previous frame (default) +

                  +
                  + +
                  +
                  zoom
                  +

                  percentage to zoom (default: 0) +

                  +
                  >0
                  +

                  zoom in +

                  +
                  <0
                  +

                  zoom out +

                  +
                  + +
                  +
                  optzoom
                  +

                  set optimal zooming to avoid borders +

                  +
                  0
                  +

                  disabled +

                  +
                  1
                  +

                  optimal static zoom value is determined (only very strong movements will lead to visible borders) (default) +

                  +
                  2
                  +

                  optimal adaptive zoom value is determined (no borders will be visible) +

                  +
                  +

                  Note that the value given at zoom is added to the one calculated +here. +

                  +
                  +
                  interpol
                  +

                  type of interpolation +

                  +

                  Available values are: +

                  +
                  no
                  +

                  no interpolation +

                  +
                  linear
                  +

                  linear only horizontal +

                  +
                  bilinear
                  +

                  linear in both directions (default) +

                  +
                  bicubic
                  +

                  cubic in both directions (slow) +

                  +
                  + +
                  +
                  tripod
                  +

                  virtual tripod mode means that the video is stabilized such that the +camera stays stationary. Use also tripod option of +vidstabdetect. +

                  +
                  0
                  +

                  off (default) +

                  +
                  1
                  +

                  virtual tripod mode: equivalent to relative=0:smoothing=0 +

                  +
                  + +
                  +
                  + + +

                  35.88.1 Examples

                  + +
                    +
                  • +typical call with default default values: + (note the unsharp filter which is always recommended) +
                     
                    ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
                    +
                    + +
                  • +zoom in a bit more and load transform data from a given file +
                     
                    vidstabtransform=zoom=5:input="mytransforms.trf"
                    +
                    + +
                  • +smoothen the video even more +
                     
                    vidstabtransform=smoothing=30
                    +
                    + +
                  + + +

                  35.89 vflip

                  + +

                  Flip the input video vertically. +

                  +

                  For example, to vertically flip a video with ffmpeg: +

                   
                  ffmpeg -i in.avi -vf "vflip" out.avi
                  +
                  + + +

                  35.90 vignette

                  + +

                  Make or reverse a natural vignetting effect. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  angle, a
                  +

                  Set lens angle expression as a number of radians. +

                  +

                  The value is clipped in the [0,PI/2] range. +

                  +

                  Default value: "PI/5" +

                  +
                  +
                  x0
                  +
                  y0
                  +

                  Set center coordinates expressions. Respectively "w/2" and "h/2" +by default. +

                  +
                  +
                  mode
                  +

                  Set forward/backward mode. +

                  +

                  Available modes are: +

                  +
                  forward
                  +

                  The larger the distance from the central point, the darker the image becomes. +

                  +
                  +
                  backward
                  +

                  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 ‘angle’ and other settings (yet). It can +also be used to create a burning effect. +

                  +
                  + +

                  Default value is ‘forward’. +

                  +
                  +
                  eval
                  +

                  Set evaluation mode for the expressions (‘angle’, ‘x0’, ‘y0’). +

                  +

                  It accepts the following values: +

                  +
                  init
                  +

                  Evaluate expressions only once during the filter initialization. +

                  +
                  +
                  frame
                  +

                  Evaluate expressions for each incoming frame. This is way slower than the +‘init’ mode since it requires all the scalers to be re-computed, but it +allows advanced dynamic expressions. +

                  +
                  + +

                  Default value is ‘init’. +

                  +
                  +
                  dither
                  +

                  Set dithering to reduce the circular banding effects. Default is 1 +(enabled). +

                  +
                  +
                  aspect
                  +

                  Set vignette aspect. This setting allows 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. +

                  +

                  Default is 1/1. +

                  +
                  + + +

                  35.90.1 Expressions

                  + +

                  The ‘alpha’, ‘x0’ and ‘y0’ expressions can contain the +following parameters. +

                  +
                  +
                  w
                  +
                  h
                  +

                  input width and height +

                  +
                  +
                  n
                  +

                  the number of input frame, starting from 0 +

                  +
                  +
                  pts
                  +

                  the PTS (Presentation TimeStamp) time of the filtered video frame, expressed in +TB units, NAN if undefined +

                  +
                  +
                  r
                  +

                  frame rate of the input video, NAN if the input frame rate is unknown +

                  +
                  +
                  t
                  +

                  the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in seconds, NAN if undefined +

                  +
                  +
                  tb
                  +

                  time base of the input video +

                  +
                  + + + +

                  35.90.2 Examples

                  + +
                    +
                  • +Apply simple strong vignetting effect: +
                     
                    vignette=PI/4
                    +
                    + +
                  • +Make a flickering vignetting: +
                     
                    vignette='PI/4+random(1)*PI/50':eval=frame
                    +
                    + +
                  + + +

                  35.91 w3fdif

                  + +

                  Deinterlace the input video ("w3fdif" stands for "Weston 3 Field +Deinterlacing Filter"). +

                  +

                  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. +

                  +

                  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: +

                  +
                  +
                  filter
                  +

                  Set the interlacing filter coefficients. Accepts one of the following values: +

                  +
                  +
                  simple
                  +

                  Simple filter coefficient set. +

                  +
                  complex
                  +

                  More-complex filter coefficient set. +

                  +
                  +

                  Default value is ‘complex’. +

                  +
                  +
                  deint
                  +

                  Specify which frames to deinterlace. Accept one of the following values: +

                  +
                  +
                  all
                  +

                  Deinterlace all frames, +

                  +
                  interlaced
                  +

                  Only deinterlace frames marked as interlaced. +

                  +
                  + +

                  Default value is ‘all’. +

                  +
                  + +

                  +

                  +

                  35.92 yadif

                  + +

                  Deinterlace the input video ("yadif" means "yet another deinterlacing +filter"). +

                  +

                  This filter accepts the following options: +

                  + +
                  +
                  mode
                  +

                  The interlacing mode to adopt, accepts one of the following values: +

                  +
                  +
                  0, send_frame
                  +

                  output 1 frame for each frame +

                  +
                  1, send_field
                  +

                  output 1 frame for each field +

                  +
                  2, send_frame_nospatial
                  +

                  like send_frame but skip spatial interlacing check +

                  +
                  3, send_field_nospatial
                  +

                  like send_field but skip spatial interlacing check +

                  +
                  + +

                  Default value is send_frame. +

                  +
                  +
                  parity
                  +

                  The picture field parity assumed for the input interlaced video, accepts one of +the following values: +

                  +
                  +
                  0, tff
                  +

                  assume top field first +

                  +
                  1, bff
                  +

                  assume bottom field first +

                  +
                  -1, auto
                  +

                  enable automatic detection +

                  +
                  + +

                  Default value is auto. +If interlacing is unknown or decoder does not export this information, +top field first will be assumed. +

                  +
                  +
                  deint
                  +

                  Specify which frames to deinterlace. Accept one of the following +values: +

                  +
                  +
                  0, all
                  +

                  deinterlace all frames +

                  +
                  1, interlaced
                  +

                  only deinterlace frames marked as interlaced +

                  +
                  + +

                  Default value is all. +

                  +
                  + + + +

                  36. Video Sources

                  + +

                  Below is a description of the currently available video sources. +

                  + +

                  36.1 buffer

                  + +

                  Buffer video frames, and make them available to the filter chain. +

                  +

                  This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/vsrc_buffer.h’. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  video_size
                  +

                  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. +

                  +
                  +
                  width
                  +

                  Input video width. +

                  +
                  +
                  height
                  +

                  Input video height. +

                  +
                  +
                  pix_fmt
                  +

                  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. +

                  +
                  +
                  time_base
                  +

                  Specify the timebase assumed by the timestamps of the buffered frames. +

                  +
                  +
                  frame_rate
                  +

                  Specify the frame rate expected for the video stream. +

                  +
                  +
                  pixel_aspect, sar
                  +

                  Specify the sample aspect ratio assumed by the video frames. +

                  +
                  +
                  sws_param
                  +

                  Specify the optional parameters to be used for the scale filter which +is automatically inserted when an input change is detected in the +input size or format. +

                  +
                  + +

                  For example: +

                   
                  buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
                  +
                  + +

                  will instruct the source to accept video frames with size 320x240 and +with format "yuv410p", assuming 1/24 as the timestamps timebase and +square pixels (1:1 sample aspect ratio). +Since the pixel format with name "yuv410p" corresponds to the number 6 +(check the enum AVPixelFormat definition in ‘libavutil/pixfmt.h’), +this example corresponds to: +

                   
                  buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
                  +
                  + +

                  Alternatively, the options can be specified as a flat string, but this +syntax is deprecated: +

                  +

                  width:height:pix_fmt:time_base.num:time_base.den:pixel_aspect.num:pixel_aspect.den[:sws_param] +

                  + +

                  36.2 cellauto

                  + +

                  Create a pattern generated by an elementary cellular automaton. +

                  +

                  The initial state of the cellular automaton can be defined through the +‘filename’, and ‘pattern’ options. If such options are +not specified an initial state is created randomly. +

                  +

                  At each new frame a new row in the video is filled with the result of +the cellular automaton next generation. The behavior when the whole +frame is filled is defined by the ‘scroll’ option. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  filename, f
                  +

                  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. +

                  +
                  +
                  pattern, p
                  +

                  Read the initial cellular automaton state, i.e. the starting row, from +the specified string. +

                  +

                  Each non-whitespace character in the string is considered an alive +cell, a newline will terminate the row, and further characters in the +string will be ignored. +

                  +
                  +
                  rate, r
                  +

                  Set the video rate, that is the number of frames generated per second. +Default is 25. +

                  +
                  +
                  random_fill_ratio, ratio
                  +

                  Set the random fill ratio for the initial cellular automaton row. It +is a floating point number value ranging from 0 to 1, defaults to +1/PHI. +

                  +

                  This option is ignored when a file or a pattern is specified. +

                  +
                  +
                  random_seed, seed
                  +

                  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. +

                  +
                  +
                  rule
                  +

                  Set the cellular automaton rule, it is a number ranging from 0 to 255. +Default value is 110. +

                  +
                  +
                  size, s
                  +

                  Set the size of the output video. For the syntax of this option, check +the "Video size" section in the ffmpeg-utils manual. +

                  +

                  If ‘filename’ or ‘pattern’ is specified, the size is set +by default to the width of the specified initial state row, and the +height is set to width * PHI. +

                  +

                  If ‘size’ is set, it must contain the width of the specified +pattern string, and the specified pattern will be centered in the +larger row. +

                  +

                  If a filename or a pattern string is not specified, the size value +defaults to "320x518" (used for a randomly generated initial state). +

                  +
                  +
                  scroll
                  +

                  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. +

                  +
                  +
                  start_full, full
                  +

                  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. +

                  +
                  +
                  stitch
                  +

                  If set to 1, stitch the left and right row edges together. +This is the default behavior, for disabling set the value to 0. +

                  +
                  + + +

                  36.2.1 Examples

                  + +
                    +
                  • +Read the initial state from ‘pattern’, and specify an output of +size 200x400. +
                     
                    cellauto=f=pattern:s=200x400
                    +
                    + +
                  • +Generate a random initial row with a width of 200 cells, with a fill +ratio of 2/3: +
                     
                    cellauto=ratio=2/3:s=200x200
                    +
                    + +
                  • +Create a pattern generated by rule 18 starting by a single alive cell +centered on an initial row with width 100: +
                     
                    cellauto=p=@:s=100x400:full=0:rule=18
                    +
                    + +
                  • +Specify a more elaborated initial pattern: +
                     
                    cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
                    +
                    + +
                  + + +

                  36.3 mandelbrot

                  + +

                  Generate a Mandelbrot set fractal, and progressively zoom towards the +point specified with start_x and start_y. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  end_pts
                  +

                  Set the terminal pts value. Default value is 400. +

                  +
                  +
                  end_scale
                  +

                  Set the terminal scale value. +Must be a floating point value. Default value is 0.3. +

                  +
                  +
                  inner
                  +

                  Set the inner coloring mode, that is the algorithm used to draw the +Mandelbrot fractal internal region. +

                  +

                  It shall assume one of the following values: +

                  +
                  black
                  +

                  Set black mode. +

                  +
                  convergence
                  +

                  Show time until convergence. +

                  +
                  mincol
                  +

                  Set color based on point closest to the origin of the iterations. +

                  +
                  period
                  +

                  Set period mode. +

                  +
                  + +

                  Default value is mincol. +

                  +
                  +
                  bailout
                  +

                  Set the bailout value. Default value is 10.0. +

                  +
                  +
                  maxiter
                  +

                  Set the maximum of iterations performed by the rendering +algorithm. Default value is 7189. +

                  +
                  +
                  outer
                  +

                  Set outer coloring mode. +It shall assume one of following values: +

                  +
                  iteration_count
                  +

                  Set iteration cound mode. +

                  +
                  normalized_iteration_count
                  +

                  set normalized iteration count mode. +

                  +
                  +

                  Default value is normalized_iteration_count. +

                  +
                  +
                  rate, r
                  +

                  Set frame rate, expressed as number of frames per second. Default +value is "25". +

                  +
                  +
                  size, s
                  +

                  Set frame size. For the syntax of this option, check the "Video +size" section in the ffmpeg-utils manual. Default value is "640x480". +

                  +
                  +
                  start_scale
                  +

                  Set the initial scale value. Default value is 3.0. +

                  +
                  +
                  start_x
                  +

                  Set the initial x position. Must be a floating point value between +-100 and 100. Default value is -0.743643887037158704752191506114774. +

                  +
                  +
                  start_y
                  +

                  Set the initial y position. Must be a floating point value between +-100 and 100. Default value is -0.131825904205311970493132056385139. +

                  +
                  + + +

                  36.4 mptestsrc

                  + +

                  Generate various test patterns, as generated by the MPlayer test filter. +

                  +

                  The size of the generated video is fixed, and is 256x256. +This source is useful in particular for testing encoding features. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  rate, r
                  +

                  Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +

                  +
                  +
                  duration, d
                  +

                  Set the video duration of the sourced video. The accepted syntax is: +

                   
                  [-]HH:MM:SS[.m...]
                  +[-]S+[.m...]
                  +
                  +

                  See also the function av_parse_time(). +

                  +

                  If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +

                  +
                  +
                  test, t
                  +
                  +

                  Set the number or the name of the test to perform. Supported tests are: +

                  +
                  dc_luma
                  +
                  dc_chroma
                  +
                  freq_luma
                  +
                  freq_chroma
                  +
                  amp_luma
                  +
                  amp_chroma
                  +
                  cbp
                  +
                  mv
                  +
                  ring1
                  +
                  ring2
                  +
                  all
                  +
                  + +

                  Default value is "all", which will cycle through the list of all tests. +

                  +
                  + +

                  For example the following: +

                   
                  testsrc=t=dc_luma
                  +
                  + +

                  will generate a "dc_luma" test pattern. +

                  + +

                  36.5 frei0r_src

                  + +

                  Provide a frei0r source. +

                  +

                  To enable compilation of this filter you need to install the frei0r +header and configure FFmpeg with --enable-frei0r. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  size
                  +

                  The size of the video to generate. For the syntax of this option, check the +"Video size" section in the ffmpeg-utils manual. +

                  +
                  +
                  framerate
                  +

                  Framerate of the generated video, may be a string of the form +num/den or a frame rate abbreviation. +

                  +
                  +
                  filter_name
                  +

                  The name to the frei0r source to load. For more information regarding frei0r and +how to set the parameters read the section frei0r in the description of +the video filters. +

                  +
                  +
                  filter_params
                  +

                  A ’|’-separated list of parameters to pass to the frei0r source. +

                  +
                  +
                  + +

                  For example, to generate a frei0r partik0l source with size 200x200 +and frame rate 10 which is overlayed on the overlay filter main input: +

                   
                  frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
                  +
                  + + +

                  36.6 life

                  + +

                  Generate a life pattern. +

                  +

                  This source is based on a generalization of John Conway’s life game. +

                  +

                  The sourced input represents a life grid, each pixel represents a cell +which can be in one of two possible states, alive or dead. Every cell +interacts with its eight neighbours, which are the cells that are +horizontally, vertically, or diagonally adjacent. +

                  +

                  At each interaction the grid evolves according to the adopted rule, +which specifies the number of neighbor alive cells which will make a +cell stay alive or born. The ‘rule’ option allows to specify +the rule to adopt. +

                  +

                  This source accepts the following options: +

                  +
                  +
                  filename, f
                  +

                  Set the file from which to read the initial grid state. In the file, +each non-whitespace character is considered an alive cell, and newline +is used to delimit the end of each row. +

                  +

                  If this option is not specified, the initial grid is generated +randomly. +

                  +
                  +
                  rate, r
                  +

                  Set the video rate, that is the number of frames generated per second. +Default is 25. +

                  +
                  +
                  random_fill_ratio, ratio
                  +

                  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. +

                  +
                  +
                  random_seed, seed
                  +

                  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. +

                  +
                  +
                  rule
                  +

                  Set the life rule. +

                  +

                  A rule can be specified with a code of the kind "SNS/BNB", +where NS and NB are sequences of numbers in the range 0-8, +NS specifies the number of alive neighbor cells which make a +live cell stay alive, and NB the number of alive neighbor cells +which make a dead cell to become alive (i.e. to "born"). +"s" and "b" can be used in place of "S" and "B", respectively. +

                  +

                  Alternatively a rule can be specified by an 18-bits integer. The 9 +high order bits are used to encode the next cell state if it is alive +for each number of neighbor alive cells, the low order bits specify +the rule for "borning" new cells. Higher order bits encode for an +higher number of neighbor cells. +For example the number 6153 = (12<<9)+9 specifies a stay alive +rule of 12 and a born rule of 9, which corresponds to "S23/B03". +

                  +

                  Default value is "S23/B3", which is the original Conway’s game of life +rule, and will keep a cell alive if it has 2 or 3 neighbor alive +cells, and will born a new cell if there are three alive cells around +a dead cell. +

                  +
                  +
                  size, s
                  +

                  Set the size of the output video. For the syntax of this option, check the +"Video size" section in the ffmpeg-utils manual. +

                  +

                  If ‘filename’ is specified, the size is set by default to the +same size of the input file. If ‘size’ is set, it must contain +the size specified in the input file, and the initial grid defined in +that file is centered in the larger resulting area. +

                  +

                  If a filename is not specified, the size value defaults to "320x240" +(used for a randomly generated initial grid). +

                  +
                  +
                  stitch
                  +

                  If set to 1, stitch the left and right grid edges together, and the +top and bottom edges also. Defaults to 1. +

                  +
                  +
                  mold
                  +

                  Set cell mold speed. If set, a dead cell will go from ‘death_color’ to +‘mold_color’ with a step of ‘mold’. ‘mold’ can have a +value from 0 to 255. +

                  +
                  +
                  life_color
                  +

                  Set the color of living (or new born) cells. +

                  +
                  +
                  death_color
                  +

                  Set the color of dead cells. If ‘mold’ is set, this is the first color +used to represent a dead cell. +

                  +
                  +
                  mold_color
                  +

                  Set mold color, for definitely dead and moldy cells. +

                  +

                  For the syntax of these 3 color options, check the "Color" section in the +ffmpeg-utils manual. +

                  +
                  + + +

                  36.6.1 Examples

                  + +
                    +
                  • +Read a grid from ‘pattern’, and center it on a grid of size +300x300 pixels: +
                     
                    life=f=pattern:s=300x300
                    +
                    + +
                  • +Generate a random grid of size 200x200, with a fill ratio of 2/3: +
                     
                    life=ratio=2/3:s=200x200
                    +
                    + +
                  • +Specify a custom rule for evolving a randomly generated grid: +
                     
                    life=rule=S14/B34
                    +
                    + +
                  • +Full example with slow death effect (mold) using ffplay: +
                     
                    ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
                    +
                    +
                  + +

                  + + + + + + +

                  +

                  36.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc

                  + +

                  The color source provides an uniformly colored input. +

                  +

                  The haldclutsrc source provides an identity Hald CLUT. See also +haldclut filter. +

                  +

                  The nullsrc source returns unprocessed video frames. It is +mainly useful to be employed in analysis / debugging tools, or as the +source for filters which ignore the input data. +

                  +

                  The rgbtestsrc source generates an RGB test pattern useful for +detecting RGB vs BGR issues. You should see a red, green and blue +stripe from top to bottom. +

                  +

                  The smptebars source generates a color bars pattern, based on +the SMPTE Engineering Guideline EG 1-1990. +

                  +

                  The smptehdbars source generates a color bars pattern, based on +the SMPTE RP 219-2002. +

                  +

                  The testsrc source generates a test video pattern, showing a +color pattern, a scrolling gradient and a timestamp. This is mainly +intended for testing purposes. +

                  +

                  The sources accept the following options: +

                  +
                  +
                  color, c
                  +

                  Specify the color of the source, only available in the color +source. For the syntax of this option, check the "Color" section in the +ffmpeg-utils manual. +

                  +
                  +
                  level
                  +

                  Specify the level of the Hald CLUT, only available in the haldclutsrc +source. A level of N generates a picture of N*N*N by N*N*N +pixels to be used as identity matrix for 3D lookup tables. Each component is +coded on a 1/(N*N) scale. +

                  +
                  +
                  size, s
                  +

                  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". +

                  +

                  This option is not available with the haldclutsrc filter. +

                  +
                  +
                  rate, r
                  +

                  Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +

                  +
                  +
                  sar
                  +

                  Set the sample aspect ratio of the sourced video. +

                  +
                  +
                  duration, d
                  +

                  Set the video duration of the sourced video. The accepted syntax is: +

                   
                  [-]HH[:MM[:SS[.m...]]]
                  +[-]S+[.m...]
                  +
                  +

                  See also the function av_parse_time(). +

                  +

                  If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +

                  +
                  +
                  decimals, n
                  +

                  Set the number of decimals to show in the timestamp, only available in the +testsrc source. +

                  +

                  The displayed timestamp value will correspond to the original +timestamp value multiplied by the power of 10 of the specified +value. Default value is 0. +

                  +
                  + +

                  For example the following: +

                   
                  testsrc=duration=5.3:size=qcif:rate=10
                  +
                  + +

                  will generate a video with a duration of 5.3 seconds, with size +176x144 and a frame rate of 10 frames per second. +

                  +

                  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. +

                   
                  color=c=red@0.2:s=qcif:r=10
                  +
                  + +

                  If the input content is to be ignored, nullsrc can be used. The +following command generates noise in the luminance plane by employing +the geq filter: +

                   
                  nullsrc=s=256x256, geq=random(1)*255:128:128
                  +
                  + + +

                  36.7.1 Commands

                  + +

                  The color source supports the following commands: +

                  +
                  +
                  c, color
                  +

                  Set the color of the created image. Accepts the same syntax of the +corresponding ‘color’ option. +

                  +
                  + + + +

                  37. Video Sinks

                  + +

                  Below is a description of the currently available video sinks. +

                  + +

                  37.1 buffersink

                  + +

                  Buffer video frames, and make them available to the end of the filter +graph. +

                  +

                  This sink is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’ +or the options system. +

                  +

                  It accepts a pointer to an AVBufferSinkContext structure, which +defines the incoming buffers’ formats, to be passed as the opaque +parameter to avfilter_init_filter for initialization. +

                  + +

                  37.2 nullsink

                  + +

                  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. +

                  + + +

                  38. Multimedia Filters

                  + +

                  Below is a description of the currently available multimedia filters. +

                  + +

                  38.1 avectorscope

                  + +

                  Convert input audio to a video output, representing the audio vector +scope. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  mode, m
                  +

                  Set the vectorscope mode. +

                  +

                  Available values are: +

                  +
                  lissajous
                  +

                  Lissajous rotated by 45 degrees. +

                  +
                  +
                  lissajous_xy
                  +

                  Same as above but not rotated. +

                  +
                  + +

                  Default value is ‘lissajous’. +

                  +
                  +
                  size, s
                  +

                  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 400x400. +

                  +
                  +
                  rate, r
                  +

                  Set the output frame rate. Default value is 25. +

                  +
                  +
                  rc
                  +
                  gc
                  +
                  bc
                  +

                  Specify the red, green and blue contrast. Default values are 40, 160 and 80. +Allowed range is [0, 255]. +

                  +
                  +
                  rf
                  +
                  gf
                  +
                  bf
                  +

                  Specify the red, green and blue fade. Default values are 15, 10 and 5. +Allowed range is [0, 255]. +

                  +
                  +
                  zoom
                  +

                  Set the zoom factor. Default value is 1. Allowed range is [1, 10]. +

                  +
                  + + +

                  38.1.1 Examples

                  + +
                    +
                  • +Complete example using ffplay: +
                     
                    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]'
                    +
                    +
                  + + +

                  38.2 concat

                  + +

                  Concatenate audio and video streams, joining them together one after the +other. +

                  +

                  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. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  n
                  +

                  Set the number of segments. Default is 2. +

                  +
                  +
                  v
                  +

                  Set the number of output video streams, that is also the number of video +streams in each segment. Default is 1. +

                  +
                  +
                  a
                  +

                  Set the number of output audio streams, that is also the number of video +streams in each segment. Default is 0. +

                  +
                  +
                  unsafe
                  +

                  Activate unsafe mode: do not fail if segments have a different format. +

                  +
                  +
                  + +

                  The filter has v+a outputs: first v video outputs, then +a audio outputs. +

                  +

                  There are nx(v+a) inputs: first the inputs for the first +segment, in the same order as the outputs, then the inputs for the second +segment, etc. +

                  +

                  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. +

                  +

                  For this filter to work correctly, all segments must start at timestamp 0. +

                  +

                  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. +

                  +

                  Different frame rates are acceptable but will result in variable frame rate +at output; be sure to configure the output file to handle it. +

                  + +

                  38.2.1 Examples

                  + +
                    +
                  • +Concatenate an opening, an episode and an ending, all in bilingual version +(video in stream 0, audio in streams 1 and 2): +
                     
                    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
                    +
                    + +
                  • +Concatenate two parts, handling audio and video separately, using the +(a)movie sources, and adjusting the resolution: +
                     
                    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]
                    +
                    +

                    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. +

                    +
                  + + +

                  38.3 ebur128

                  + +

                  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 M), Short-term loudness (S), +Integrated loudness (I) and Loudness Range (LRA). +

                  +

                  The filter also has a video output (see the video 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). +

                  +

                  More information about the Loudness Recommendation EBU R128 on +http://tech.ebu.ch/loudness. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  video
                  +

                  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 0. +

                  +
                  +
                  size
                  +

                  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 640x480. +

                  +
                  +
                  meter
                  +

                  Set the EBU scale meter. Default is 9. Common values are 9 and +18, respectively for EBU scale meter +9 and EBU scale meter +18. Any +other integer value between this range is allowed. +

                  +
                  +
                  metadata
                  +

                  Set metadata injection. If set to 1, 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 lavfi.r128.. +

                  +

                  Default is 0. +

                  +
                  +
                  framelog
                  +

                  Force the frame logging level. +

                  +

                  Available values are: +

                  +
                  info
                  +

                  information logging level +

                  +
                  verbose
                  +

                  verbose logging level +

                  +
                  + +

                  By default, the logging level is set to info. If the ‘video’ or +the ‘metadata’ options are set, it switches to verbose. +

                  +
                  + + +

                  38.3.1 Examples

                  + +
                    +
                  • +Real-time graph using ffplay, with a EBU scale meter +18: +
                     
                    ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
                    +
                    + +
                  • +Run an analysis with ffmpeg: +
                     
                    ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
                    +
                    +
                  + + +

                  38.4 interleave, ainterleave

                  + +

                  Temporally interleave frames from several inputs. +

                  +

                  interleave works with video inputs, ainterleave with audio. +

                  +

                  These filters read frames from several inputs and send the oldest +queued frame to the output. +

                  +

                  Input streams must have a well defined, monotonically increasing frame +timestamp values. +

                  +

                  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. +

                  +

                  For example consider the case when one input is a select filter +which always drop input frames. The interleave 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. +

                  +

                  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. +

                  +

                  These filters accept the following options: +

                  +
                  +
                  nb_inputs, n
                  +

                  Set the number of different inputs, it is 2 by default. +

                  +
                  + + +

                  38.4.1 Examples

                  + +
                    +
                  • +Interleave frames belonging to different streams using ffmpeg: +
                     
                    ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
                    +
                    + +
                  • +Add flickering blur effect: +
                     
                    select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
                    +
                    +
                  + + +

                  38.5 perms, aperms

                  + +

                  Set read/write permissions for the output frames. +

                  +

                  These filters are mainly aimed at developers to test direct path in the +following filter in the filtergraph. +

                  +

                  The filters accept the following options: +

                  +
                  +
                  mode
                  +

                  Select the permissions mode. +

                  +

                  It accepts the following values: +

                  +
                  none
                  +

                  Do nothing. This is the default. +

                  +
                  ro
                  +

                  Set all the output frames read-only. +

                  +
                  rw
                  +

                  Set all the output frames directly writable. +

                  +
                  toggle
                  +

                  Make the frame read-only if writable, and writable if read-only. +

                  +
                  random
                  +

                  Set each output frame read-only or writable randomly. +

                  +
                  + +
                  +
                  seed
                  +

                  Set the seed for the random mode, 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. +

                  +
                  + +

                  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 format or aformat filter before the +perms/aperms filter can avoid this problem. +

                  + +

                  38.6 select, aselect

                  + +

                  Select frames to pass in output. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  expr, e
                  +

                  Set expression, which is evaluated for each input frame. +

                  +

                  If the expression is evaluated to zero, the frame is discarded. +

                  +

                  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 +ceil(val)-1, assuming that the input index starts from 0. +

                  +

                  For example a value of 1.2 corresponds to the output with index +ceil(1.2)-1 = 2-1 = 1, that is the second output. +

                  +
                  +
                  outputs, n
                  +

                  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. +

                  +
                  + +

                  The expression can contain the following constants: +

                  +
                  +
                  n
                  +

                  the sequential number of the filtered frame, starting from 0 +

                  +
                  +
                  selected_n
                  +

                  the sequential number of the selected frame, starting from 0 +

                  +
                  +
                  prev_selected_n
                  +

                  the sequential number of the last selected frame, NAN if undefined +

                  +
                  +
                  TB
                  +

                  timebase of the input timestamps +

                  +
                  +
                  pts
                  +

                  the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in TB units, NAN if undefined +

                  +
                  +
                  t
                  +

                  the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in seconds, NAN if undefined +

                  +
                  +
                  prev_pts
                  +

                  the PTS of the previously filtered video frame, NAN if undefined +

                  +
                  +
                  prev_selected_pts
                  +

                  the PTS of the last previously filtered video frame, NAN if undefined +

                  +
                  +
                  prev_selected_t
                  +

                  the PTS of the last previously selected video frame, NAN if undefined +

                  +
                  +
                  start_pts
                  +

                  the PTS of the first video frame in the video, NAN if undefined +

                  +
                  +
                  start_t
                  +

                  the time of the first video frame in the video, NAN if undefined +

                  +
                  +
                  pict_type (video only)
                  +

                  the type of the filtered frame, can assume one of the following +values: +

                  +
                  I
                  +
                  P
                  +
                  B
                  +
                  S
                  +
                  SI
                  +
                  SP
                  +
                  BI
                  +
                  + +
                  +
                  interlace_type (video only)
                  +

                  the frame interlace type, can assume one of the following values: +

                  +
                  PROGRESSIVE
                  +

                  the frame is progressive (not interlaced) +

                  +
                  TOPFIRST
                  +

                  the frame is top-field-first +

                  +
                  BOTTOMFIRST
                  +

                  the frame is bottom-field-first +

                  +
                  + +
                  +
                  consumed_sample_n (audio only)
                  +

                  the number of selected samples before the current frame +

                  +
                  +
                  samples_n (audio only)
                  +

                  the number of samples in the current frame +

                  +
                  +
                  sample_rate (audio only)
                  +

                  the input sample rate +

                  +
                  +
                  key
                  +

                  1 if the filtered frame is a key-frame, 0 otherwise +

                  +
                  +
                  pos
                  +

                  the position in the file of the filtered frame, -1 if the information +is not available (e.g. for synthetic video) +

                  +
                  +
                  scene (video only)
                  +

                  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) +

                  +
                  +
                  + +

                  The default value of the select expression is "1". +

                  + +

                  38.6.1 Examples

                  + +
                    +
                  • +Select all frames in input: +
                     
                    select
                    +
                    + +

                    The example above is the same as: +

                     
                    select=1
                    +
                    + +
                  • +Skip all frames: +
                     
                    select=0
                    +
                    + +
                  • +Select only I-frames: +
                     
                    select='eq(pict_type\,I)'
                    +
                    + +
                  • +Select one frame every 100: +
                     
                    select='not(mod(n\,100))'
                    +
                    + +
                  • +Select only frames contained in the 10-20 time interval: +
                     
                    select=between(t\,10\,20)
                    +
                    + +
                  • +Select only I frames contained in the 10-20 time interval: +
                     
                    select=between(t\,10\,20)*eq(pict_type\,I)
                    +
                    + +
                  • +Select frames with a minimum distance of 10 seconds: +
                     
                    select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
                    +
                    + +
                  • +Use aselect to select only audio frames with samples number > 100: +
                     
                    aselect='gt(samples_n\,100)'
                    +
                    + +
                  • +Create a mosaic of the first scenes: +
                     
                    ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
                    +
                    + +

                    Comparing scene against a value between 0.3 and 0.5 is generally a sane +choice. +

                    +
                  • +Send even and odd frames to separate outputs, and compose them: +
                     
                    select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
                    +
                    +
                  + + +

                  38.7 sendcmd, asendcmd

                  + +

                  Send commands to filters in the filtergraph. +

                  +

                  These filters read commands to be sent to other filters in the +filtergraph. +

                  +

                  sendcmd must be inserted between two video filters, +asendcmd must be inserted between two audio filters, but apart +from that they act the same way. +

                  +

                  The specification of commands can be provided in the filter arguments +with the commands option, or in a file specified by the +filename option. +

                  +

                  These filters accept the following options: +

                  +
                  commands, c
                  +

                  Set the commands to be read and sent to the other filters. +

                  +
                  filename, f
                  +

                  Set the filename of the commands to be read and sent to the other +filters. +

                  +
                  + + +

                  38.7.1 Commands syntax

                  + +

                  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. +

                  +

                  An interval is specified by the following syntax: +

                   
                  START[-END] COMMANDS;
                  +
                  + +

                  The time interval is specified by the START and END times. +END is optional and defaults to the maximum time. +

                  +

                  The current frame time is considered within the specified interval if +it is included in the interval [START, END), that is when +the time is greater or equal to START and is lesser than +END. +

                  +

                  COMMANDS 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: +

                   
                  [FLAGS] TARGET COMMAND ARG
                  +
                  + +

                  FLAGS 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 "]". +

                  +

                  The following flags are recognized: +

                  +
                  enter
                  +

                  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. +

                  +
                  +
                  leave
                  +

                  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. +

                  +
                  + +

                  If FLAGS is not specified, a default value of [enter] is +assumed. +

                  +

                  TARGET specifies the target of the command, usually the name of +the filter class or a specific filter instance name. +

                  +

                  COMMAND specifies the name of the command for the target filter. +

                  +

                  ARG is optional and specifies the optional list of argument for +the given COMMAND. +

                  +

                  Between one interval specification and another, whitespaces, or +sequences of characters starting with # until the end of line, +are ignored and can be used to annotate comments. +

                  +

                  A simplified BNF description of the commands specification syntax +follows: +

                   
                  COMMAND_FLAG  ::= "enter" | "leave"
                  +COMMAND_FLAGS ::= COMMAND_FLAG [(+|"|")COMMAND_FLAG]
                  +COMMAND       ::= ["[" COMMAND_FLAGS "]"] TARGET COMMAND [ARG]
                  +COMMANDS      ::= COMMAND [,COMMANDS]
                  +INTERVAL      ::= START[-END] COMMANDS
                  +INTERVALS     ::= INTERVAL[;INTERVALS]
                  +
                  + + +

                  38.7.2 Examples

                  + +
                    +
                  • +Specify audio tempo change at second 4: +
                     
                    asendcmd=c='4.0 atempo tempo 1.5',atempo
                    +
                    + +
                  • +Specify a list of drawtext and hue commands in a file. +
                     
                    # 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)
                    +
                    + +

                    A filtergraph allowing to read and process the above command list +stored in a file ‘test.cmd’, can be specified with: +

                     
                    sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
                    +
                    +
                  + +

                  +

                  +

                  38.8 setpts, asetpts

                  + +

                  Change the PTS (presentation timestamp) of the input frames. +

                  +

                  setpts works on video frames, asetpts on audio frames. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  expr
                  +

                  The expression which is evaluated for each frame to construct its timestamp. +

                  +
                  +
                  + +

                  The expression is evaluated through the eval API and can contain the following +constants: +

                  +
                  +
                  FRAME_RATE
                  +

                  frame rate, only defined for constant frame-rate video +

                  +
                  +
                  PTS
                  +

                  the presentation timestamp in input +

                  +
                  +
                  N
                  +

                  the count of the input frame for video or the number of consumed samples, +not including the current frame for audio, starting from 0. +

                  +
                  +
                  NB_CONSUMED_SAMPLES
                  +

                  the number of consumed samples, not including the current frame (only +audio) +

                  +
                  +
                  NB_SAMPLES, S
                  +

                  the number of samples in the current frame (only audio) +

                  +
                  +
                  SAMPLE_RATE, SR
                  +

                  audio sample rate +

                  +
                  +
                  STARTPTS
                  +

                  the PTS of the first frame +

                  +
                  +
                  STARTT
                  +

                  the time in seconds of the first frame +

                  +
                  +
                  INTERLACED
                  +

                  tell if the current frame is interlaced +

                  +
                  +
                  T
                  +

                  the time in seconds of the current frame +

                  +
                  +
                  POS
                  +

                  original position in the file of the frame, or undefined if undefined +for the current frame +

                  +
                  +
                  PREV_INPTS
                  +

                  previous input PTS +

                  +
                  +
                  PREV_INT
                  +

                  previous input time in seconds +

                  +
                  +
                  PREV_OUTPTS
                  +

                  previous output PTS +

                  +
                  +
                  PREV_OUTT
                  +

                  previous output time in seconds +

                  +
                  +
                  RTCTIME
                  +

                  wallclock (RTC) time in microseconds. This is deprecated, use time(0) +instead. +

                  +
                  +
                  RTCSTART
                  +

                  wallclock (RTC) time at the start of the movie in microseconds +

                  +
                  +
                  TB
                  +

                  timebase of the input timestamps +

                  +
                  +
                  + + +

                  38.8.1 Examples

                  + +
                    +
                  • +Start counting PTS from zero +
                     
                    setpts=PTS-STARTPTS
                    +
                    + +
                  • +Apply fast motion effect: +
                     
                    setpts=0.5*PTS
                    +
                    + +
                  • +Apply slow motion effect: +
                     
                    setpts=2.0*PTS
                    +
                    + +
                  • +Set fixed rate of 25 frames per second: +
                     
                    setpts=N/(25*TB)
                    +
                    + +
                  • +Set fixed rate 25 fps with some jitter: +
                     
                    setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
                    +
                    + +
                  • +Apply an offset of 10 seconds to the input PTS: +
                     
                    setpts=PTS+10/TB
                    +
                    + +
                  • +Generate timestamps from a "live source" and rebase onto the current timebase: +
                     
                    setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
                    +
                    + +
                  • +Generate timestamps by counting samples: +
                     
                    asetpts=N/SR/TB
                    +
                    + +
                  + + +

                  38.9 settb, asettb

                  + +

                  Set the timebase to use for the output frames timestamps. +It is mainly useful for testing timebase configuration. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  expr, tb
                  +

                  The expression which is evaluated into the output timebase. +

                  +
                  +
                  + +

                  The value for ‘tb’ 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". +

                  + +

                  38.9.1 Examples

                  + +
                    +
                  • +Set the timebase to 1/25: +
                     
                    settb=expr=1/25
                    +
                    + +
                  • +Set the timebase to 1/10: +
                     
                    settb=expr=0.1
                    +
                    + +
                  • +Set the timebase to 1001/1000: +
                     
                    settb=1+0.001
                    +
                    + +
                  • +Set the timebase to 2*intb: +
                     
                    settb=2*intb
                    +
                    + +
                  • +Set the default timebase value: +
                     
                    settb=AVTB
                    +
                    +
                  + + +

                  38.10 showspectrum

                  + +

                  Convert input audio to a video output, representing the audio frequency +spectrum. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  size, s
                  +

                  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 +640x512. +

                  +
                  +
                  slide
                  +

                  Specify if the spectrum should slide along the window. Default value is +0. +

                  +
                  +
                  mode
                  +

                  Specify display mode. +

                  +

                  It accepts the following values: +

                  +
                  combined
                  +

                  all channels are displayed in the same row +

                  +
                  separate
                  +

                  all channels are displayed in separate rows +

                  +
                  + +

                  Default value is ‘combined’. +

                  +
                  +
                  color
                  +

                  Specify display color mode. +

                  +

                  It accepts the following values: +

                  +
                  channel
                  +

                  each channel is displayed in a separate color +

                  +
                  intensity
                  +

                  each channel is is displayed using the same color scheme +

                  +
                  + +

                  Default value is ‘channel’. +

                  +
                  +
                  scale
                  +

                  Specify scale used for calculating intensity color values. +

                  +

                  It accepts the following values: +

                  +
                  lin
                  +

                  linear +

                  +
                  sqrt
                  +

                  square root, default +

                  +
                  cbrt
                  +

                  cubic root +

                  +
                  log
                  +

                  logarithmic +

                  +
                  + +

                  Default value is ‘sqrt’. +

                  +
                  +
                  saturation
                  +

                  Set saturation modifier for displayed colors. Negative values provide +alternative color scheme. 0 is no saturation at all. +Saturation must be in [-10.0, 10.0] range. +Default value is 1. +

                  +
                  + +

                  The usage is very similar to the showwaves filter; see the examples in that +section. +

                  + +

                  38.10.1 Examples

                  + +
                    +
                  • +Large window with logarithmic color scaling: +
                     
                    showspectrum=s=1280x480:scale=log
                    +
                    + +
                  • +Complete example for a colored and sliding spectrum per channel using ffplay: +
                     
                    ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
                    +             [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
                    +
                    +
                  + + +

                  38.11 showwaves

                  + +

                  Convert input audio to a video output, representing the samples waves. +

                  +

                  The filter accepts the following options: +

                  +
                  +
                  size, s
                  +

                  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". +

                  +
                  +
                  mode
                  +

                  Set display mode. +

                  +

                  Available values are: +

                  +
                  point
                  +

                  Draw a point for each sample. +

                  +
                  +
                  line
                  +

                  Draw a vertical line for each sample. +

                  +
                  + +

                  Default value is point. +

                  +
                  +
                  n
                  +

                  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 rate +is not explicitly specified. +

                  +
                  +
                  rate, r
                  +

                  Set the (approximate) output frame rate. This is done by setting the +option n. Default value is "25". +

                  +
                  +
                  + + +

                  38.11.1 Examples

                  + +
                    +
                  • +Output the input file audio and the corresponding video representation +at the same time: +
                     
                    amovie=a.mp3,asplit[out0],showwaves[out1]
                    +
                    + +
                  • +Create a synthetic signal and show it with showwaves, forcing a +frame rate of 30 frames per second: +
                     
                    aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
                    +
                    +
                  + + +

                  38.12 split, asplit

                  + +

                  Split input into several identical outputs. +

                  +

                  asplit works with audio input, split with video. +

                  +

                  The filter accepts a single parameter which specifies the number of outputs. If +unspecified, it defaults to 2. +

                  + +

                  38.12.1 Examples

                  + +
                    +
                  • +Create two separate outputs from the same input: +
                     
                    [in] split [out0][out1]
                    +
                    + +
                  • +To create 3 or more outputs, you need to specify the number of +outputs, like in: +
                     
                    [in] asplit=3 [out0][out1][out2]
                    +
                    + +
                  • +Create two separate outputs from the same input, one cropped and +one padded: +
                     
                    [in] split [splitout1][splitout2];
                    +[splitout1] crop=100:100:0:0    [cropout];
                    +[splitout2] pad=200:200:100:100 [padout];
                    +
                    + +
                  • +Create 5 copies of the input audio with ffmpeg: +
                     
                    ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
                    +
                    +
                  + + +

                  38.13 zmq, azmq

                  + +

                  Receive commands sent through a libzmq client, and forward them to +filters in the filtergraph. +

                  +

                  zmq and azmq work as a pass-through filters. zmq +must be inserted between two video filters, azmq between two +audio filters. +

                  +

                  To enable these filters you need to install the libzmq library and +headers and configure FFmpeg with --enable-libzmq. +

                  +

                  For more information about libzmq see: +http://www.zeromq.org/ +

                  +

                  The zmq and azmq filters work as a libzmq server, which +receives messages sent through a network interface defined by the +‘bind_address’ option. +

                  +

                  The received message must be in the form: +

                   
                  TARGET COMMAND [ARG]
                  +
                  + +

                  TARGET specifies the target of the command, usually the name of +the filter class or a specific filter instance name. +

                  +

                  COMMAND specifies the name of the command for the target filter. +

                  +

                  ARG is optional and specifies the optional argument list for the +given COMMAND. +

                  +

                  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: +

                   
                  ERROR_CODE ERROR_REASON
                  +MESSAGE
                  +
                  + +

                  MESSAGE is optional. +

                  + +

                  38.13.1 Examples

                  + +

                  Look at ‘tools/zmqsend’ for an example of a zmq client which can +be used to send commands processed by these filters. +

                  +

                  Consider the following filtergraph generated by ffplay +

                   
                  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 "
                  +
                  + +

                  To change the color of the left side of the video, the following +command can be used: +

                   
                  echo Parsed_color_0 c yellow | tools/zmqsend
                  +
                  + +

                  To change the right side: +

                   
                  echo Parsed_color_1 c pink | tools/zmqsend
                  +
                  + + + +

                  39. Multimedia Sources

                  + +

                  Below is a description of the currently available multimedia sources. +

                  + +

                  39.1 amovie

                  + +

                  This is the same as movie source, except it selects an audio +stream by default. +

                  +

                  +

                  +

                  39.2 movie

                  + +

                  Read audio and/or video stream(s) from a movie container. +

                  +

                  This filter accepts the following options: +

                  +
                  +
                  filename
                  +

                  The name of the resource to read (not necessarily a file but also a device or a +stream accessed through some protocol). +

                  +
                  +
                  format_name, f
                  +

                  Specifies the format assumed for the movie to read, and can be either +the name of a container or an input device. If not specified the +format is guessed from movie_name or by probing. +

                  +
                  +
                  seek_point, sp
                  +

                  Specifies the seek point in seconds, the frames will be output +starting from this seek point, the parameter is evaluated with +av_strtod so the numerical value may be suffixed by an IS +postfix. Default value is "0". +

                  +
                  +
                  streams, s
                  +

                  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". +

                  +
                  +
                  stream_index, si
                  +

                  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. +

                  +
                  +
                  loop
                  +

                  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". +

                  +

                  Note that when the movie is looped the source timestamps are not +changed, so it will generate non monotonically increasing timestamps. +

                  +
                  + +

                  This filter allows to overlay a second video on top of main input of +a filtergraph as shown in this graph: +

                   
                  input -----------> deltapts0 --> overlay --> output
                  +                                    ^
                  +                                    |
                  +movie --> scale--> deltapts1 -------+
                  +
                  + + +

                  39.2.1 Examples

                  + +
                    +
                  • +Skip 3.2 seconds from the start of the avi file in.avi, and overlay it +on top of the input labelled as "in": +
                     
                    movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
                    +[in] setpts=PTS-STARTPTS [main];
                    +[main][over] overlay=16:16 [out]
                    +
                    + +
                  • +Read from a video4linux2 device, and overlay it on top of the input +labelled as "in": +
                     
                    movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
                    +[in] setpts=PTS-STARTPTS [main];
                    +[main][over] overlay=16:16 [out]
                    +
                    + +
                  • +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": +
                     
                    movie=dvd.vob:s=v:0+#0x81 [video] [audio]
                    +
                    +
                  + + + +

                  40. See Also

                  + +

                  ffprobe, +ffmpeg, ffplay, ffserver, +ffmpeg-utils, +ffmpeg-scaler, +ffmpeg-resampler, +ffmpeg-codecs, +ffmpeg-bitstream-filters, +ffmpeg-formats, +ffmpeg-devices, +ffmpeg-protocols, +ffmpeg-filters +

                  + + +

                  41. Authors

                  + +

                  The FFmpeg developers. +

                  +

                  For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org. +

                  +

                  Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree. +

                  + +
                  +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                  diff --git a/extern/ffmpeg/doc/ffprobe.html b/extern/ffmpeg/doc/ffprobe.html index 1e2cee2252..0a661bca18 100644 --- a/extern/ffmpeg/doc/ffprobe.html +++ b/extern/ffmpeg/doc/ffprobe.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : ffprobe - - - - + + - - - - + + - - +
                  -

                  1. Synopsis

                  -

                  The generic syntax is: +

                  ffprobe [options] [‘input_file’]

                  -
                   
                  ffprobe [options] [‘input_file’]
                  -
                  -

                  2. Description

                  @@ -235,42 +89,49 @@ ffprobe will show it. and consists of one or more sections of a form defined by the selected writer, which is specified by the ‘print_format’ option.

                  +

                  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 ‘sections’. +

                  Metadata tags stored in the container or in the streams are recognized -and printed in the corresponding "FORMAT" or "STREAM" section. +and printed in the corresponding "FORMAT", "STREAM" or "PROGRAM_STREAM" +section.

                  - -

                  3. Options

                  + +

                  3. Options

                  -

                  All the numerical options, if not specified otherwise, accept in input -a string representing a number, which may contain one of the -International System number postfixes, for example ’K’, ’M’, ’G’. -If ’i’ is appended after the postfix, powers of 2 are used instead of -powers of 10. The ’B’ postfix multiplies the value for 8, and can be -appended after another postfix or used alone. This allows using for -example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. +

                  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’. +

                  +

                  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.

                  Options which do not take arguments are boolean options, and set the corresponding value to true. They can be set to false by prefixing -with "no" the option name, for example using "-nofoo" in the -command line will set to false the boolean option with name "foo". +the option name with "no". For example using "-nofoo" +will set the boolean option with name "foo" to false.

                  3.1 Stream specifiers

                  Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers -are used to precisely specify which stream(s) does a given option belong to. +are used to precisely specify which stream(s) a given option belongs to.

                  A stream specifier is a string generally appended to the option name and -separated from it by a colon. E.g. -codec:a:1 ac3 option contains -a:1 stream specifer, which matches the second audio stream. Therefore it +separated from it by a colon. E.g. -codec:a:1 ac3 contains the +a:1 stream specifier, which matches the second audio stream. Therefore, it would select the ac3 codec for the second audio stream.

                  -

                  A stream specifier can match several stream, the option is then applied to all +

                  A stream specifier can match several streams, so that the option is applied to all of them. E.g. the stream specifier in -b:a 128k matches all audio streams.

                  -

                  An empty stream specifier matches all streams, for example -codec copy +

                  An empty stream specifier matches all streams. For example, -codec copy or -codec: copy would copy all the streams without reencoding.

                  Possible forms of stream specifiers are: @@ -280,29 +141,73 @@ or -codec: copy would copy all the streams without reencoding. thread count for the second stream to 4.

                  stream_type[:stream_index]
                  -

                  stream_type is one of: ’v’ for video, ’a’ for audio, ’s’ for subtitle, -’d’ for data and ’t’ for attachments. If stream_index is given, then -matches stream number stream_index of this type. Otherwise matches all +

                  stream_type is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle, +’d’ for data, and ’t’ for attachments. If stream_index is given, then it matches +stream number stream_index of this type. Otherwise, it matches all streams of this type.

                  p:program_id[:stream_index]
                  -

                  If stream_index is given, then matches stream number stream_index in -program with id program_id. Otherwise matches all streams in this program. +

                  If stream_index is given, then it matches the stream with number stream_index +in the program with the id program_id. Otherwise, it matches all streams in the +program. +

                  +
                  #stream_id
                  +

                  Matches the stream by a format-specific ID.

                  +

                  3.2 Generic options

                  -

                  These options are shared amongst the av* tools. +

                  These options are shared amongst the ff* tools.

                  -L

                  Show license.

                  -
                  -h, -?, -help, --help
                  -

                  Show help. +

                  -h, -?, -help, --help [arg]
                  +

                  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.

                  +

                  Possible values of arg are: +

                  +
                  long
                  +

                  Print advanced tool options in addition to the basic tool options. +

                  +
                  +
                  full
                  +

                  Print complete list of options, including shared and private options +for encoders, decoders, demuxers, muxers, filters, etc. +

                  +
                  +
                  decoder=decoder_name
                  +

                  Print detailed information about the decoder named decoder_name. Use the +‘-decoders’ option to get a list of all decoders. +

                  +
                  +
                  encoder=encoder_name
                  +

                  Print detailed information about the encoder named encoder_name. Use the +‘-encoders’ option to get a list of all encoders. +

                  +
                  +
                  demuxer=demuxer_name
                  +

                  Print detailed information about the demuxer named demuxer_name. Use the +‘-formats’ option to get a list of all demuxers and muxers. +

                  +
                  +
                  muxer=muxer_name
                  +

                  Print detailed information about the muxer named muxer_name. Use the +‘-formats’ option to get a list of all muxers and demuxers. +

                  +
                  +
                  filter=filter_name
                  +

                  Print detailed information about the filter name filter_name. Use the +‘-filters’ option to get a list of all filters. +

                  +
                  +
                  -version

                  Show version. @@ -311,42 +216,21 @@ program with id program_id. Otherwise matches all streams in this pro

                  -formats

                  Show available formats.

                  -

                  The fields preceding the format names have the following meanings: -

                  -
                  D
                  -

                  Decoding available -

                  -
                  E
                  -

                  Encoding available -

                  -
                  -
                  -codecs
                  -

                  Show available codecs. +

                  Show all codecs known to libavcodec. +

                  +

                  Note that the term ’codec’ is used throughout this documentation as a shortcut +for what is more correctly called a media bitstream format. +

                  +
                  +
                  -decoders
                  +

                  Show available decoders. +

                  +
                  +
                  -encoders
                  +

                  Show all available encoders.

                  -

                  The fields preceding the codec names have the following meanings: -

                  -
                  D
                  -

                  Decoding available -

                  -
                  E
                  -

                  Encoding available -

                  -
                  V/A/S
                  -

                  Video/audio/subtitle codec -

                  -
                  S
                  -

                  Codec supports slices -

                  -
                  D
                  -

                  Codec supports direct rendering -

                  -
                  T
                  -

                  Codec can handle input truncated at random locations instead of only at frame boundaries -

                  -
                  -
                  -bsfs

                  Show available bitstream filters. @@ -368,18 +252,52 @@ program with id program_id. Otherwise matches all streams in this pro

                  Show available sample formats.

                  -
                  -loglevel loglevel | -v loglevel
                  +
                  -layouts
                  +

                  Show channel names and standard channel layouts. +

                  +
                  +
                  -colors
                  +

                  Show recognized color names. +

                  +
                  +
                  -loglevel [repeat+]loglevel | -v [repeat+]loglevel

                  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. loglevel is a number or a string containing one of the following values:

                  quiet
                  +

                  Show nothing at all; be silent. +

                  panic
                  +

                  Only show fatal errors which could lead the process to crash, such as +and assert failure. This is not currently used for anything. +

                  fatal
                  +

                  Only show fatal errors. These are errors after which the process absolutely +cannot continue after. +

                  error
                  +

                  Show all errors, including ones which can be recovered from. +

                  warning
                  +

                  Show all warnings and errors. Any message related to possibly +incorrect or unexpected events will be shown. +

                  info
                  +

                  Show informative messages during processing. This is in addition to +warnings and errors. This is the default value. +

                  verbose
                  +

                  Same as info, except more verbose. +

                  debug
                  +

                  Show everything, including debugging information. +

                  By default the program logs to stderr, if coloring is supported by the @@ -398,10 +316,92 @@ directory. This file can be useful for bug reports. It also implies -loglevel verbose.

                  -

                  Note: setting the environment variable FFREPORT to any value has the -same effect. +

                  Setting the environment variable FFREPORT 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: +

                  +
                  file
                  +

                  set the file name to use for the report; %p is expanded to the name +of the program, %t is expanded to a timestamp, %% is expanded +to a plain % +

                  +
                  + +

                  Errors in parsing the environment variable are not fatal, and will not +appear in the report.

                  +
                  -cpuflags flags (global)
                  +

                  Allows setting and clearing cpu flags. This option is intended +for testing. Do not use it unless you know what you’re doing. +

                   
                  ffmpeg -cpuflags -sse+mmx ...
                  +ffmpeg -cpuflags mmx ...
                  +ffmpeg -cpuflags 0 ...
                  +
                  +

                  Possible flags for this option are: +

                  +
                  x86
                  +
                  +
                  mmx
                  +
                  mmxext
                  +
                  sse
                  +
                  sse2
                  +
                  sse2slow
                  +
                  sse3
                  +
                  sse3slow
                  +
                  ssse3
                  +
                  atom
                  +
                  sse4.1
                  +
                  sse4.2
                  +
                  avx
                  +
                  xop
                  +
                  fma4
                  +
                  3dnow
                  +
                  3dnowext
                  +
                  cmov
                  +
                  +
                  +
                  ARM
                  +
                  +
                  armv5te
                  +
                  armv6
                  +
                  armv6t2
                  +
                  vfp
                  +
                  vfpv3
                  +
                  neon
                  +
                  +
                  +
                  PowerPC
                  +
                  +
                  altivec
                  +
                  +
                  +
                  Specific Processors
                  +
                  +
                  pentium2
                  +
                  pentium3
                  +
                  pentium4
                  +
                  k6
                  +
                  k62
                  +
                  athlon
                  +
                  athlonxp
                  +
                  k8
                  +
                  +
                  +
                  + +
                  +
                  -opencl_options options (global)
                  +

                  Set OpenCL environment options. This option is only available when +FFmpeg has been compiled with --enable-opencl. +

                  +

                  options must be a list of key=value option pairs +separated by ’:’. See the “OpenCL Options” section in the +ffmpeg-utils manual for the list of supported options. +

                  @@ -428,14 +428,15 @@ muxer:

                   
                  ffmpeg -i input.flac -id3v2_version 3 out.mp3
                   
                  -

                  All codec AVOptions are obviously per-stream, so the chapter on stream -specifiers applies to them +

                  All codec AVOptions are per-stream, and thus a stream specifier +should be attached to them.

                  -

                  Note ‘-nooption’ syntax cannot be used for boolean AVOptions, -use ‘-option 0’/‘-option 1’. +

                  Note: the ‘-nooption’ syntax cannot be used for boolean +AVOptions, use ‘-option 0’/‘-option 1’.

                  -

                  Note2 old undocumented way of specifying per-stream AVOptions by prepending -v/a/s to the options name is now obsolete and will be removed soon. +

                  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.

                  3.4 Main options

                  @@ -468,7 +469,7 @@ are decimal. options "-unit -prefix -byte_binary_prefix -sexagesimal".

                  -
                  -print_format writer_name[=writer_options]
                  +
                  -of, -print_format writer_name[=writer_options]

                  Set the output printing format.

                  writer_name specifies the name of the writer, and @@ -482,6 +483,33 @@ options "-unit -prefix -byte_binary_prefix -sexagesimal". Writers section below.

                  +
                  -sections
                  +

                  Print sections structure and section information, and exit. The output +is not meant to be parsed by a machine. +

                  +
                  +
                  -select_streams stream_specifier
                  +

                  Select only the streams specified by stream_specifier. This +option affects only the options related to streams +(e.g. show_streams, show_packets, etc.). +

                  +

                  For example to show only audio streams, you can use the command: +

                   
                  ffprobe -show_streams -select_streams a INPUT
                  +
                  + +

                  To show only video packets belonging to the video stream with index 1: +

                   
                  ffprobe -show_packets -select_streams v:1 INPUT
                  +
                  + +
                  +
                  -show_data
                  +

                  Show payload data, as a hexadecimal and ASCII dump. Coupled with +‘-show_packets’, it will dump the packets’ data. Coupled with +‘-show_streams’, it will dump the codec extradata. +

                  +

                  The dump is printed as the "data" field. It may contain newlines. +

                  +
                  -show_error

                  Show information about the error found when trying to probe the input.

                  @@ -495,6 +523,61 @@ stream.

                  All the container format information is printed within a section with name "FORMAT".

                  +
                  +
                  -show_format_entry name
                  +

                  Like ‘-show_format’, 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. +

                  +

                  This option is deprecated, use show_entries instead. +

                  +
                  +
                  -show_entries section_entries
                  +

                  Set list of entries to show. +

                  +

                  Entries are specified according to the following +syntax. section_entries contains a list of section entries +separated by :. 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 ,. +

                  +

                  If section name is specified but is followed by no =, 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 = is specified but +the list of local entries is empty, then no entries will be shown for +that section. +

                  +

                  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. +

                  +

                  The formal syntax is given by: +

                   
                  LOCAL_SECTION_ENTRIES ::= SECTION_ENTRY_NAME[,LOCAL_SECTION_ENTRIES]
                  +SECTION_ENTRY         ::= SECTION_NAME[=[LOCAL_SECTION_ENTRIES]]
                  +SECTION_ENTRIES       ::= SECTION_ENTRY[:SECTION_ENTRIES]
                  +
                  + +

                  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: +

                   
                  packet=pts_time,duration_time,stream_index : stream=index,codec_type
                  +
                  + +

                  To show all the entries in the section "format", but only the codec +type in the section "stream", specify the argument: +

                   
                  format : stream=codec_type
                  +
                  + +

                  To show all the tags in the stream and format sections: +

                   
                  format_tags : format_tags
                  +
                  + +

                  To show only the title tag (if available) in the stream +sections: +

                   
                  stream_tags=title
                  +
                  +
                  -show_packets

                  Show information about each packet contained in the input multimedia @@ -519,6 +602,90 @@ multimedia stream.

                  Each media stream information is printed within a dedicated section with name "STREAM".

                  +
                  +
                  -show_programs
                  +

                  Show information about programs and their streams contained in the input +multimedia stream. +

                  +

                  Each media stream information is printed within a dedicated section +with name "PROGRAM_STREAM". +

                  +
                  +
                  -show_chapters
                  +

                  Show information about chapters stored in the format. +

                  +

                  Each chapter is printed within a dedicated section with name "CHAPTER". +

                  +
                  +
                  -count_frames
                  +

                  Count the number of frames per stream and report it in the +corresponding stream section. +

                  +
                  +
                  -count_packets
                  +

                  Count the number of packets per stream and report it in the +corresponding stream section. +

                  +
                  +
                  -read_intervals read_intervals
                  +
                  +

                  Read only the specified intervals. read_intervals must be a +sequence of interval specifications separated by ",". +ffprobe will seek to the interval starting point, and will +continue reading from that. +

                  +

                  Each interval is specified by two optional parts, separated by "%". +

                  +

                  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. +

                  +

                  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. +

                  +

                  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. +

                  +

                  The formal syntax is given by: +

                   
                  INTERVAL  ::= [START|+START_OFFSET][%[END|+END_OFFSET]]
                  +INTERVALS ::= INTERVAL[,INTERVALS]
                  +
                  + +

                  A few examples follow. +

                    +
                  • +Seek to time 10, read packets until 20 seconds after the found seek +point, then seek to position 01:30 (1 minute and thirty +seconds) and read packets until position 01:45. +
                     
                    10%+20,01:30%01:45
                    +
                    + +
                  • +Read only 42 packets after seeking to position 01:23: +
                     
                    01:23%+#42
                    +
                    + +
                  • +Read only the first 20 seconds from the start: +
                     
                    %+20
                    +
                    + +
                  • +Read from the start until position 02:30: +
                     
                    %02:30
                    +
                    +
                  +
                  -show_private_data, -private

                  Show private data, that is data depending on the format of the @@ -547,6 +714,11 @@ equivalent of setting both ‘-show_program_version’ and ‘-show_library_versions’ options.

                  +
                  -bitexact
                  +

                  Force bitexact output, useful to produce output which is not dependent +on the specific build. +

                  +
                  -i input_file

                  Read input_file.

                  @@ -559,8 +731,9 @@ equivalent of setting both ‘-show_program_version’ and

                  A writer defines the output format adopted by ffprobe, and will be used for printing all the parts of the output.

                  -

                  A writer may accept one or more arguments, which specify the options to -adopt. +

                  A writer may accept one or more arguments, which specify the options +to adopt. The options are specified as a list of key=value +pairs, separated by ":".

                  A description of the currently available writers follows.

                  @@ -576,12 +749,29 @@ keyN=valN [/SECTION]
                  -

                  Metadata tags are printed as a line in the corresponding FORMAT or -STREAM section, and are prefixed by the string "TAG:". +

                  Metadata tags are printed as a line in the corresponding FORMAT, STREAM or +PROGRAM_STREAM section, and are prefixed by the string "TAG:".

                  - -

                  4.2 compact

                  -

                  Compact format. +

                  A description of the accepted options follows. +

                  +
                  +
                  nokey, nk
                  +

                  If set to 1 specify not to print the key of each field. Default value +is 0. +

                  +
                  +
                  noprint_wrappers, nw
                  +

                  If set to 1 specify not to print the section header and footer. +Default value is 0. +

                  +
                  + + +

                  4.2 compact, csv

                  +

                  Compact and CSV format. +

                  +

                  The csv writer is equivalent to compact, but supports +different defaults.

                  Each section is printed on a single line. If no option is specifid, the output has the form: @@ -592,31 +782,30 @@ If no option is specifid, the output has the form: section. A metadata tag key, if printed, is prefixed by the string "tag:".

                  -

                  This writer accepts options as a list of key=value pairs, -separated by ":". -

                  The description of the accepted options follows.

                  item_sep, s

                  Specify the character to use for separating fields in the output line. -It must be a single printable character, it is "|" by default. +It must be a single printable character, it is "|" by default ("," for +the csv writer).

                  nokey, nk

                  If set to 1 specify not to print the key of each field. Its default -value is 0. +value is 0 (1 for the csv writer).

                  escape, e
                  -

                  Set the escape mode to use, default to "c". +

                  Set the escape mode to use, default to "c" ("csv" for the csv +writer).

                  It can assume one of the following values:

                  c
                  -

                  Perform C-like escaping. Strings containing a newline (’\n’) or -carriage return (’\r’), the escaping character (’\’) or the item -separator character SEP are escaped using C-like fashioned +

                  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 SEP are escaped using C-like fashioned escaping, so that a newline is converted to the sequence "\n", a carriage return to "\r", ’\’ to "\\" and the separator SEP is converted to "\SEP". @@ -633,25 +822,91 @@ containing a newline (’\n’), a carriage return (’\r’), a

                  +
                  +
                  print_section, p
                  +

                  Print the section name at the begin of each line if the value is +1, disable it with value set to 0. Default value is +1. +

                  - -

                  4.3 csv

                  -

                  CSV format. + +

                  4.3 flat

                  +

                  Flat format.

                  -

                  This writer is equivalent to -compact=item_sep=,:nokey=1:escape=csv. +

                  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 sep_char option).

                  +

                  The description of the accepted options follows. +

                  +
                  +
                  sep_char, s
                  +

                  Separator character used to separate the chapter, the section name, IDs and +potential tags in the printed field key. +

                  +

                  Default value is ’.’. +

                  +
                  +
                  hierarchical, h
                  +

                  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. +

                  +

                  Default value is 1. +

                  +
                  + + +

                  4.4 ini

                  +

                  INI format output. +

                  +

                  Print output in an INI based format. +

                  +

                  The following conventions are adopted: +

                  +
                    +
                  • +all key and values are UTF-8 +
                  • +’.’ is the subgroup separator +
                  • +newline, ’\t’, ’\f’, ’\b’ and the following characters are escaped +
                  • +’\’ is the escape character +
                  • +’#’ is the comment indicator +
                  • +’=’ is the key/value separator +
                  • +’:’ is not used but usually parsed as key/value separator +
                  + +

                  This writer accepts options as a list of key=value pairs, +separated by ":". +

                  +

                  The description of the accepted options follows. +

                  +
                  +
                  hierarchical, h
                  +

                  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. +

                  +

                  Default value is 1. +

                  +
                  + -

                  4.4 json

                  +

                  4.5 json

                  JSON based format.

                  Each section is printed using JSON notation.

                  -

                  This writer accepts options as a list of key=value pairs, -separated by ":". -

                  The description of the accepted options follows.

                  @@ -664,20 +919,21 @@ printed on a single line. Default value is 0.

                  For more information about JSON, see http://www.json.org/.

                  -

                  4.5 xml

                  +

                  4.6 xml

                  XML based format.

                  The XML output is described in the XML schema description file ‘ffprobe.xsd’ installed in the FFmpeg datadir.

                  +

                  An updated version of the schema can be retrieved at the url +http://www.ffmpeg.org/schema/ffprobe.xsd, which redirects to the +latest schema committed into the FFmpeg development source code tree. +

                  Note that the output issued will be compliant to the ‘ffprobe.xsd’ schema only when no special global output options (‘unit’, ‘prefix’, ‘byte_binary_prefix’, ‘sexagesimal’ etc.) are specified.

                  -

                  This writer accepts options as a list of key=value pairs, -separated by ":". -

                  The description of the accepted options follows.

                  @@ -704,1333 +960,50 @@ This option automatically sets ‘fully_qualified’ to 1.

                  ffprobe supports Timecode extraction:

                    -
                  • MPEG1/2 timecode is extracted from the GOP, and is available in the video +
                  • +MPEG1/2 timecode is extracted from the GOP, and is available in the video stream details (‘-show_streams’, see timecode). -
                  • MOV timecode is extracted from tmcd track, so is available in the tmcd +
                  • +MOV timecode is extracted from tmcd track, so is available in the tmcd stream metadata (‘-show_streams’, see TAG:timecode). -
                  • DV and GXF timecodes are available in format metadata +
                  • +DV, GXF and AVI timecodes are available in format metadata (‘-show_format’, see TAG:timecode).
                  - -

                  6. Decoders

                  + +

                  6. See Also

                  -

                  Decoders are configured elements in FFmpeg which allow the decoding of -multimedia streams. +

                  ffprobe-all, +ffmpeg, ffplay, ffserver, +ffmpeg-utils, +ffmpeg-scaler, +ffmpeg-resampler, +ffmpeg-codecs, +ffmpeg-bitstream-filters, +ffmpeg-formats, +ffmpeg-devices, +ffmpeg-protocols, +ffmpeg-filters

                  -

                  When you configure your FFmpeg build, all the supported native decoders -are enabled by default. Decoders requiring an external library must be enabled -manually via the corresponding --enable-lib option. You can list all -available decoders using the configure option --list-decoders. -

                  -

                  You can disable all the decoders with the configure option ---disable-decoders and selectively enable / disable single decoders -with the options --enable-decoder=DECODER / ---disable-decoder=DECODER. -

                  -

                  The option -codecs of the ff* tools will display the list of -enabled decoders. -

                  - - -

                  7. Video Decoders

                  - -

                  A description of some of the currently available video decoders -follows. -

                  - -

                  7.1 rawvideo

                  - -

                  Raw video decoder. -

                  -

                  This decoder decodes rawvideo streams. -

                  - -

                  7.1.1 Options

                  - -
                  -
                  top top_field_first
                  -

                  Specify the assumed field type of the input video. -

                  -
                  -1
                  -

                  the video is assumed to be progressive (default) -

                  -
                  0
                  -

                  bottom-field-first is assumed -

                  -
                  1
                  -

                  top-field-first is assumed -

                  -
                  - -
                  -
                  - - - -

                  8. Audio Decoders

                  - - -

                  8.1 ffwavesynth

                  - -

                  Internal wave synthetizer. -

                  -

                  This decoder generates wave patterns according to predefined sequences. Its -use is purely internal and the format of the data it accepts is not publicly -documented. -

                  - -

                  9. Demuxers

                  - -

                  Demuxers are configured elements in FFmpeg which allow to read the -multimedia streams from a particular type of file. -

                  -

                  When you configure your FFmpeg build, all the supported demuxers -are enabled by default. You can list all available ones using the -configure option "–list-demuxers". -

                  -

                  You can disable all the demuxers using the configure option -"–disable-demuxers", and selectively enable a single demuxer with -the option "–enable-demuxer=DEMUXER", or disable it -with the option "–disable-demuxer=DEMUXER". -

                  -

                  The option "-formats" of the ff* tools will display the list of -enabled demuxers. -

                  -

                  The description of some of the currently available demuxers follows. -

                  - -

                  9.1 image2

                  - -

                  Image file demuxer. -

                  -

                  This demuxer reads from a list of image files specified by a pattern. -

                  -

                  The pattern may contain the string "%d" or "%0Nd", which -specifies the position of the characters representing a sequential -number in each filename matched by the pattern. If the form -"%d0Nd" is used, the string representing the number in each -filename is 0-padded and N is the total number of 0-padded -digits representing the number. The literal character ’%’ can be -specified in the pattern with the string "%%". -

                  -

                  If the pattern contains "%d" or "%0Nd", the first filename of -the file list specified by the pattern must contain a number -inclusively contained between 0 and 4, all the following numbers must -be sequential. This limitation may be hopefully fixed. -

                  -

                  The pattern may contain a suffix which is used to automatically -determine the format of the images contained in the files. -

                  -

                  For example the pattern "img-%03d.bmp" will match a sequence of -filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., -‘img-010.bmp’, etc.; the pattern "i%%m%%g-%d.jpg" will match a -sequence of filenames of the form ‘i%m%g-1.jpg’, -‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, etc. -

                  -

                  The size, the pixel format, and the format of each image must be the -same for all the files in the sequence. -

                  -

                  The following example shows how to use ffmpeg for creating a -video from the images in the file sequence ‘img-001.jpeg’, -‘img-002.jpeg’, ..., assuming an input frame rate of 10 frames per -second: -

                   
                  ffmpeg -i 'img-%03d.jpeg' -r 10 out.mkv
                  -
                  - -

                  Note that the pattern must not necessarily contain "%d" or -"%0Nd", for example to convert a single image file -‘img.jpeg’ you can employ the command: -

                   
                  ffmpeg -i img.jpeg img.png
                  -
                  - - -

                  9.2 applehttp

                  - -

                  Apple HTTP Live Streaming demuxer. -

                  -

                  This demuxer presents all AVStreams from all variant streams. -The id field is set to the bitrate variant index number. By setting -the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), -the caller can decide which variant streams to actually receive. -The total bitrate of the variant that the stream belongs to is -available in a metadata key named "variant_bitrate". -

                  - -

                  9.3 sbg

                  - -

                  SBaGen script demuxer. -

                  -

                  This demuxer reads the script language used by SBaGen -http://uazu.net/sbagen/ to generate binaural beats sessions. A SBG -script looks like that: -

                   
                  -SE
                  -a: 300-2.5/3 440+4.5/0
                  -b: 300-2.5/0 440+4.5/3
                  -off: -
                  -NOW      == a
                  -+0:07:00 == b
                  -+0:14:00 == a
                  -+0:21:00 == b
                  -+0:30:00    off
                  -
                  - -

                  A SBG script can mix absolute and relative timestamps. If the script uses -either only absolute timestamps (including the script start time) or only -relative ones, then its layout is fixed, and the conversion is -straightforward. On the other hand, if the script mixes both kind of -timestamps, then the NOW reference for relative timestamps will be -taken from the current time of day at the time the script is read, and the -script layout will be frozen according to that reference. That means that if -the script is directly played, the actual times will match the absolute -timestamps up to the sound controller’s clock accuracy, but if the user -somehow pauses the playback or seeks, all times will be shifted accordingly. -

                  - -

                  10. Protocols

                  - -

                  Protocols are configured elements in FFmpeg which allow to access -resources which require the use of a particular protocol. -

                  -

                  When you configure your FFmpeg build, all the supported protocols are -enabled by default. You can list all available ones using the -configure option "–list-protocols". -

                  -

                  You can disable all the protocols using the configure option -"–disable-protocols", and selectively enable a protocol using the -option "–enable-protocol=PROTOCOL", or you can disable a -particular protocol using the option -"–disable-protocol=PROTOCOL". -

                  -

                  The option "-protocols" of the ff* tools will display the list of -supported protocols. -

                  -

                  A description of the currently available protocols follows. -

                  - -

                  10.1 applehttp

                  - -

                  Read Apple HTTP Live Streaming compliant segmented stream as -a uniform one. The M3U8 playlists describing the segments can be -remote HTTP resources or local files, accessed using the standard -file protocol. -HTTP is default, specific protocol can be declared by specifying -"+proto" after the applehttp URI scheme name, where proto -is either "file" or "http". -

                  -
                   
                  applehttp://host/path/to/remote/resource.m3u8
                  -applehttp+http://host/path/to/remote/resource.m3u8
                  -applehttp+file://path/to/local/resource.m3u8
                  -
                  - - -

                  10.2 concat

                  - -

                  Physical concatenation protocol. -

                  -

                  Allow to read and seek from many resource in sequence as if they were -a unique resource. -

                  -

                  A URL accepted by this protocol has the syntax: -

                   
                  concat:URL1|URL2|...|URLN
                  -
                  - -

                  where URL1, URL2, ..., URLN are the urls of the -resource to be concatenated, each one possibly specifying a distinct -protocol. -

                  -

                  For example to read a sequence of files ‘split1.mpeg’, -‘split2.mpeg’, ‘split3.mpeg’ with ffplay use the -command: -

                   
                  ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
                  -
                  -

                  Note that you may need to escape the character "|" which is special for -many shells. -

                  - -

                  10.3 file

                  - -

                  File access protocol. -

                  -

                  Allow to read from or read to a file. -

                  -

                  For example to read from a file ‘input.mpeg’ with ffmpeg -use the command: -

                   
                  ffmpeg -i file:input.mpeg output.mpeg
                  -
                  + +

                  7. Authors

                  -

                  The ff* tools default to the file protocol, that is a resource -specified with the name "FILE.mpeg" is interpreted as the URL -"file:FILE.mpeg". +

                  The FFmpeg developers.

                  - -

                  10.4 gopher

                  - -

                  Gopher protocol. +

                  For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org.

                  - -

                  10.5 http

                  - -

                  HTTP (Hyper Text Transfer Protocol). +

                  Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree.

                  - -

                  10.6 mmst

                  - -

                  MMS (Microsoft Media Server) protocol over TCP. -

                  - -

                  10.7 mmsh

                  - -

                  MMS (Microsoft Media Server) protocol over HTTP. -

                  -

                  The required syntax is: -

                   
                  mmsh://server[:port][/app][/playpath]
                  -
                  - - -

                  10.8 md5

                  -

                  MD5 output protocol. -

                  -

                  Computes the MD5 hash of the data to be written, and on close writes -this to the designated output or stdout if none is specified. It can -be used to test muxers without writing an actual file. -

                  -

                  Some examples follow. -

                   
                  # Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
                  -ffmpeg -i input.flv -f avi -y md5:output.avi.md5
                  -
                  -# Write the MD5 hash of the encoded AVI file to stdout.
                  -ffmpeg -i input.flv -f avi -y md5:
                  -
                  - -

                  Note that some formats (typically MOV) require the output protocol to -be seekable, so they will fail with the MD5 output protocol. -

                  - -

                  10.9 pipe

                  - -

                  UNIX pipe access protocol. -

                  -

                  Allow to read and write from UNIX pipes. -

                  -

                  The accepted syntax is: -

                   
                  pipe:[number]
                  -
                  - -

                  number is the number corresponding to the file descriptor of the -pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number -is not specified, by default the stdout file descriptor will be used -for writing, stdin for reading. -

                  -

                  For example to read from stdin with ffmpeg: -

                   
                  cat test.wav | ffmpeg -i pipe:0
                  -# ...this is the same as...
                  -cat test.wav | ffmpeg -i pipe:
                  -
                  - -

                  For writing to stdout with ffmpeg: -

                   
                  ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
                  -# ...this is the same as...
                  -ffmpeg -i test.wav -f avi pipe: | cat > test.avi
                  -
                  - -

                  Note that some formats (typically MOV), require the output protocol to -be seekable, so they will fail with the pipe output protocol. -

                  - -

                  10.10 rtmp

                  - -

                  Real-Time Messaging Protocol. -

                  -

                  The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia -content across a TCP/IP network. -

                  -

                  The required syntax is: -

                   
                  rtmp://server[:port][/app][/playpath]
                  -
                  - -

                  The accepted parameters are: -

                  -
                  server
                  -

                  The address of the RTMP server. -

                  -
                  -
                  port
                  -

                  The number of the TCP port to use (by default is 1935). -

                  -
                  -
                  app
                  -

                  It is the name of the application to access. It usually corresponds to -the path where the application is installed on the RTMP server -(e.g. ‘/ondemand/’, ‘/flash/live/’, etc.). -

                  -
                  -
                  playpath
                  -

                  It is the path or name of the resource to play with reference to the -application specified in app, may be prefixed by "mp4:". -

                  -
                  -
                  - -

                  For example to read with ffplay a multimedia resource named -"sample" from the application "vod" from an RTMP server "myserver": -

                   
                  ffplay rtmp://myserver/vod/sample
                  -
                  - - -

                  10.11 rtmp, rtmpe, rtmps, rtmpt, rtmpte

                  - -

                  Real-Time Messaging Protocol and its variants supported through -librtmp. -

                  -

                  Requires the presence of the librtmp headers and library during -configuration. You need to explicitly configure the build with -"–enable-librtmp". If enabled this will replace the native RTMP -protocol. -

                  -

                  This protocol provides most client functions and a few server -functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), -encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled -variants of these encrypted types (RTMPTE, RTMPTS). -

                  -

                  The required syntax is: -

                   
                  rtmp_proto://server[:port][/app][/playpath] options
                  -
                  - -

                  where rtmp_proto is one of the strings "rtmp", "rtmpt", "rtmpe", -"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and -server, port, app and playpath have the same -meaning as specified for the RTMP native protocol. -options contains a list of space-separated options of the form -key=val. -

                  -

                  See the librtmp manual page (man 3 librtmp) for more information. -

                  -

                  For example, to stream a file in real-time to an RTMP server using -ffmpeg: -

                   
                  ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
                  -
                  - -

                  To play the same stream using ffplay: -

                   
                  ffplay "rtmp://myserver/live/mystream live=1"
                  -
                  - - -

                  10.12 rtp

                  - -

                  Real-Time Protocol. -

                  - -

                  10.13 rtsp

                  - -

                  RTSP is not technically a protocol handler in libavformat, it is a demuxer -and muxer. The demuxer supports both normal RTSP (with data transferred -over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with -data transferred over RDT). -

                  -

                  The muxer can be used to send a stream using RTSP ANNOUNCE to a server -supporting it (currently Darwin Streaming Server and Mischa Spiegelmock’s -RTSP server). -

                  -

                  The required syntax for a RTSP url is: -

                   
                  rtsp://hostname[:port]/path
                  -
                  - -

                  The following options (set on the ffmpeg/ffplay command -line, or set in code via AVOptions or in avformat_open_input), -are supported: -

                  -

                  Flags for rtsp_transport: -

                  -
                  -
                  udp
                  -

                  Use UDP as lower transport protocol. -

                  -
                  -
                  tcp
                  -

                  Use TCP (interleaving within the RTSP control channel) as lower -transport protocol. -

                  -
                  -
                  udp_multicast
                  -

                  Use UDP multicast as lower transport protocol. -

                  -
                  -
                  http
                  -

                  Use HTTP tunneling as lower transport protocol, which is useful for -passing proxies. -

                  -
                  - -

                  Multiple lower transport protocols may be specified, in that case they are -tried one at a time (if the setup of one fails, the next one is tried). -For the muxer, only the tcp and udp options are supported. -

                  -

                  Flags for rtsp_flags: -

                  -
                  -
                  filter_src
                  -

                  Accept packets only from negotiated peer address and port. -

                  -
                  - -

                  When receiving data over UDP, the demuxer tries to reorder received packets -(since they may arrive out of order, or packets may get lost totally). In -order for this to be enabled, a maximum delay must be specified in the -max_delay field of AVFormatContext. -

                  -

                  When watching multi-bitrate Real-RTSP streams with ffplay, the -streams to display can be chosen with -vst n and --ast n for video and audio respectively, and can be switched -on the fly by pressing v and a. -

                  -

                  Example command lines: -

                  -

                  To watch a stream over UDP, with a max reordering delay of 0.5 seconds: -

                  -
                   
                  ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
                  -
                  - -

                  To watch a stream tunneled over HTTP: -

                  -
                   
                  ffplay -rtsp_transport http rtsp://server/video.mp4
                  -
                  - -

                  To send a stream in realtime to a RTSP server, for others to watch: -

                  -
                   
                  ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
                  -
                  - - -

                  10.14 sap

                  - -

                  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. -

                  - -

                  10.14.1 Muxer

                  - -

                  The syntax for a SAP url given to the muxer is: -

                   
                  sap://destination[:port][?options]
                  -
                  - -

                  The RTP packets are sent to destination on port port, -or to port 5004 if no port is specified. -options is a &-separated list. The following options -are supported: -

                  -
                  -
                  announce_addr=address
                  -

                  Specify the destination IP address for sending the announcements to. -If omitted, the announcements are sent to the commonly used SAP -announcement multicast address 224.2.127.254 (sap.mcast.net), or -ff0e::2:7ffe if destination is an IPv6 address. -

                  -
                  -
                  announce_port=port
                  -

                  Specify the port to send the announcements on, defaults to -9875 if not specified. -

                  -
                  -
                  ttl=ttl
                  -

                  Specify the time to live value for the announcements and RTP packets, -defaults to 255. -

                  -
                  -
                  same_port=0|1
                  -

                  If set to 1, send all RTP streams on the same port pair. If zero (the -default), all streams are sent on unique ports, with each stream on a -port 2 numbers higher than the previous. -VLC/Live555 requires this to be set to 1, to be able to receive the stream. -The RTP stack in libavformat for receiving requires all streams to be sent -on unique ports. -

                  -
                  - -

                  Example command lines follow. -

                  -

                  To broadcast a stream on the local subnet, for watching in VLC: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1
                  -
                  - -

                  Similarly, for watching in ffplay: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://224.0.0.255
                  -
                  - -

                  And for watching in ffplay, over IPv6: -

                  -
                   
                  ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]
                  -
                  - - -

                  10.14.2 Demuxer

                  - -

                  The syntax for a SAP url given to the demuxer is: -

                   
                  sap://[address][:port]
                  -
                  - -

                  address is the multicast address to listen for announcements on, -if omitted, the default 224.2.127.254 (sap.mcast.net) is used. port -is the port that is listened on, 9875 if omitted. -

                  -

                  The demuxers listens for announcements on the given address and port. -Once an announcement is received, it tries to receive that particular stream. -

                  -

                  Example command lines follow. -

                  -

                  To play back the first stream announced on the normal SAP multicast address: -

                  -
                   
                  ffplay sap://
                  -
                  - -

                  To play back the first stream announced on one the default IPv6 SAP multicast address: -

                  -
                   
                  ffplay sap://[ff0e::2:7ffe]
                  -
                  - - -

                  10.15 tcp

                  - -

                  Trasmission Control Protocol. -

                  -

                  The required syntax for a TCP url is: -

                   
                  tcp://hostname:port[?options]
                  -
                  - -
                  -
                  listen
                  -

                  Listen for an incoming connection -

                  -
                   
                  ffmpeg -i input -f format tcp://hostname:port?listen
                  -ffplay tcp://hostname:port
                  -
                  - -
                  -
                  - - -

                  10.16 udp

                  - -

                  User Datagram Protocol. -

                  -

                  The required syntax for a UDP url is: -

                   
                  udp://hostname:port[?options]
                  -
                  - -

                  options contains a list of &-seperated options of the form key=val. -Follow the list of supported options. -

                  -
                  -
                  buffer_size=size
                  -

                  set the UDP buffer size in bytes -

                  -
                  -
                  localport=port
                  -

                  override the local UDP port to bind with -

                  -
                  -
                  localaddr=addr
                  -

                  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. -

                  -
                  -
                  pkt_size=size
                  -

                  set the size in bytes of UDP packets -

                  -
                  -
                  reuse=1|0
                  -

                  explicitly allow or disallow reusing UDP sockets -

                  -
                  -
                  ttl=ttl
                  -

                  set the time to live value (for multicast only) -

                  -
                  -
                  connect=1|0
                  -

                  Initialize the UDP socket with connect(). In this case, the -destination address can’t be changed with ff_udp_set_remote_url later. -If the destination address isn’t known at the start, this option can -be specified in ff_udp_set_remote_url, too. -This allows finding out the source address for the packets with getsockname, -and makes writes return with AVERROR(ECONNREFUSED) if "destination -unreachable" is received. -For receiving, this gives the benefit of only receiving packets from -the specified peer address/port. -

                  -
                  - -

                  Some usage examples of the udp protocol with ffmpeg follow. -

                  -

                  To stream over UDP to a remote endpoint: -

                   
                  ffmpeg -i input -f format udp://hostname:port
                  -
                  - -

                  To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer: -

                   
                  ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
                  -
                  - -

                  To receive over UDP from a remote endpoint: -

                   
                  ffmpeg -i udp://[multicast-address]:port
                  -
                  - - -

                  11. Input Devices

                  - -

                  Input devices are configured elements in FFmpeg which allow to access -the data coming from a multimedia device attached to your system. -

                  -

                  When you configure your FFmpeg build, all the supported input devices -are enabled by default. You can list all available ones using the -configure option "–list-indevs". -

                  -

                  You can disable all the input devices using the configure option -"–disable-indevs", and selectively enable an input device using the -option "–enable-indev=INDEV", or you can disable a particular -input device using the option "–disable-indev=INDEV". -

                  -

                  The option "-formats" of the ff* tools will display the list of -supported input devices (amongst the demuxers). -

                  -

                  A description of the currently available input devices follows. -

                  - -

                  11.1 alsa

                  - -

                  ALSA (Advanced Linux Sound Architecture) input device. -

                  -

                  To enable this input device during configuration you need libasound -installed on your system. -

                  -

                  This device allows capturing from an ALSA device. The name of the -device to capture has to be an ALSA card identifier. -

                  -

                  An ALSA identifier has the syntax: -

                   
                  hw:CARD[,DEV[,SUBDEV]]
                  -
                  - -

                  where the DEV and SUBDEV components are optional. -

                  -

                  The three arguments (in order: CARD,DEV,SUBDEV) -specify card number or identifier, device number and subdevice number -(-1 means any). -

                  -

                  To see the list of cards currently recognized by your system check the -files ‘/proc/asound/cards’ and ‘/proc/asound/devices’. -

                  -

                  For example to capture with ffmpeg from an ALSA device with -card id 0, you may run the command: -

                   
                  ffmpeg -f alsa -i hw:0 alsaout.wav
                  -
                  - -

                  For more information see: -http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html -

                  - -

                  11.2 bktr

                  - -

                  BSD video input device. -

                  - -

                  11.3 dshow

                  - -

                  Windows DirectShow input device. -

                  -

                  DirectShow support is enabled when FFmpeg is built with mingw-w64. -Currently only audio and video devices are supported. -

                  -

                  Multiple devices may be opened as separate inputs, but they may also be -opened on the same input, which should improve synchronism between them. -

                  -

                  The input name should be in the format: -

                  -
                   
                  TYPE=NAME[:TYPE=NAME]
                  -
                  - -

                  where TYPE can be either audio or video, -and NAME is the device’s name. -

                  - -

                  11.3.1 Options

                  - -

                  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. -

                  -
                  -
                  video_size
                  -

                  Set the video size in the captured video. -

                  -
                  -
                  framerate
                  -

                  Set the framerate in the captured video. -

                  -
                  -
                  sample_rate
                  -

                  Set the sample rate (in Hz) of the captured audio. -

                  -
                  -
                  sample_size
                  -

                  Set the sample size (in bits) of the captured audio. -

                  -
                  -
                  channels
                  -

                  Set the number of channels in the captured audio. -

                  -
                  -
                  list_devices
                  -

                  If set to ‘true’, print a list of devices and exit. -

                  -
                  -
                  list_options
                  -

                  If set to ‘true’, print a list of selected device’s options -and exit. -

                  -
                  -
                  video_device_number
                  -

                  Set video device number for devices with same name (starts at 0, -defaults to 0). -

                  -
                  -
                  audio_device_number
                  -

                  Set audio device number for devices with same name (starts at 0, -defaults to 0). -

                  -
                  -
                  - - -

                  11.3.2 Examples

                  - -
                    -
                  • -Print the list of DirectShow supported devices and exit: -
                     
                    $ ffmpeg -list_devices true -f dshow -i dummy
                    -
                    - -
                  • -Open video device Camera: -
                     
                    $ ffmpeg -f dshow -i video="Camera"
                    -
                    - -
                  • -Open second video device with name Camera: -
                     
                    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
                    -
                    - -
                  • -Open video device Camera and audio device Microphone: -
                     
                    $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
                    -
                    - -
                  • -Print the list of supported options in selected device and exit: -
                     
                    $ ffmpeg -list_options true -f dshow -i video="Camera"
                    -
                    - -
                  - - -

                  11.4 dv1394

                  - -

                  Linux DV 1394 input device. -

                  - -

                  11.5 fbdev

                  - -

                  Linux framebuffer input device. -

                  -

                  The Linux framebuffer is a graphic hardware-independent abstraction -layer to show graphics on a computer monitor, typically on the -console. It is accessed through a file device node, usually -‘/dev/fb0’. -

                  -

                  For more detailed information read the file -Documentation/fb/framebuffer.txt included in the Linux source tree. -

                  -

                  To record from the framebuffer device ‘/dev/fb0’ with -ffmpeg: -

                   
                  ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
                  -
                  - -

                  You can take a single screenshot image with the command: -

                   
                  ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
                  -
                  - -

                  See also http://linux-fbdev.sourceforge.net/, and fbset(1). -

                  - -

                  11.6 jack

                  - -

                  JACK input device. -

                  -

                  To enable this input device during configuration you need libjack -installed on your system. -

                  -

                  A JACK input device creates one or more JACK writable clients, one for -each audio channel, with name client_name:input_N, where -client_name is the name provided by the application, and N -is a number which identifies the channel. -Each writable client will send the acquired data to the FFmpeg input -device. -

                  -

                  Once you have created one or more JACK readable clients, you need to -connect them to one or more JACK writable clients. -

                  -

                  To connect or disconnect JACK clients you can use the jack_connect -and jack_disconnect programs, or do it through a graphical interface, -for example with qjackctl. -

                  -

                  To list the JACK clients and their properties you can invoke the command -jack_lsp. -

                  -

                  Follows an example which shows how to capture a JACK readable client -with ffmpeg. -

                   
                  # Create a JACK writable client with name "ffmpeg".
                  -$ ffmpeg -f jack -i ffmpeg -y out.wav
                  -
                  -# Start the sample jack_metro readable client.
                  -$ jack_metro -b 120 -d 0.2 -f 4000
                  -
                  -# List the current JACK clients.
                  -$ jack_lsp -c
                  -system:capture_1
                  -system:capture_2
                  -system:playback_1
                  -system:playback_2
                  -ffmpeg:input_1
                  -metro:120_bpm
                  -
                  -# Connect metro to the ffmpeg writable client.
                  -$ jack_connect metro:120_bpm ffmpeg:input_1
                  -
                  - -

                  For more information read: -http://jackaudio.org/ -

                  - -

                  11.7 lavfi

                  - -

                  Libavfilter input virtual device. -

                  -

                  This input device reads data from the open output pads of a libavfilter -filtergraph. -

                  -

                  For each filtergraph open output, the input device will create a -corresponding stream which is mapped to the generated output. Currently -only video data is supported. The filtergraph is specified through the -option ‘graph’. -

                  - -

                  11.7.1 Options

                  - -
                  -
                  graph
                  -

                  Specify the filtergraph to use as input. Each video open output must be -labelled by a unique string of the form "outN", where N is a -number starting from 0 corresponding to the mapped input stream -generated by the device. -The first unlabelled output is automatically assigned to the "out0" -label, but all the others need to be specified explicitly. -

                  -

                  If not specified defaults to the filename specified for the input -device. -

                  -
                  - - -

                  11.7.2 Examples

                  - -
                    -
                  • -Create a color video stream and play it back with ffplay: -
                     
                    ffplay -f lavfi -graph "color=pink [out0]" dummy
                    -
                    - -
                  • -As the previous example, but use filename for specifying the graph -description, and omit the "out0" label: -
                     
                    ffplay -f lavfi color=pink
                    -
                    - -
                  • -Create three different video test filtered sources and play them: -
                     
                    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
                    -
                    - -
                  • -Read an audio stream from a file using the amovie source and play it -back with ffplay: -
                     
                    ffplay -f lavfi "amovie=test.wav"
                    -
                    - -
                  • -Read an audio stream and a video stream and play it back with -ffplay: -
                     
                    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
                    -
                    - -
                  - - -

                  11.8 libdc1394

                  - -

                  IIDC1394 input device, based on libdc1394 and libraw1394. -

                  - -

                  11.9 openal

                  - -

                  The OpenAL input device provides audio capture on all systems with a -working OpenAL 1.1 implementation. -

                  -

                  To enable this input device during configuration, you need OpenAL -headers and libraries installed on your system, and need to configure -FFmpeg with --enable-openal. -

                  -

                  OpenAL headers and libraries should be provided as part of your OpenAL -implementation, or as an additional download (an SDK). Depending on your -installation you may need to specify additional flags via the ---extra-cflags and --extra-ldflags for allowing the build -system to locate the OpenAL headers and libraries. -

                  -

                  An incomplete list of OpenAL implementations follows: -

                  -
                  -
                  Creative
                  -

                  The official Windows implementation, providing hardware acceleration -with supported devices and software fallback. -See http://openal.org/. -

                  -
                  OpenAL Soft
                  -

                  Portable, open source (LGPL) software implementation. Includes -backends for the most common sound APIs on the Windows, Linux, -Solaris, and BSD operating systems. -See http://kcat.strangesoft.net/openal.html. -

                  -
                  Apple
                  -

                  OpenAL is part of Core Audio, the official Mac OS X Audio interface. -See http://developer.apple.com/technologies/mac/audio-and-video.html -

                  -
                  - -

                  This device allows to capture from an audio input device handled -through OpenAL. -

                  -

                  You need to specify the name of the device to capture in the provided -filename. If the empty string is provided, the device will -automatically select the default device. You can get the list of the -supported devices by using the option list_devices. -

                  - -

                  11.9.1 Options

                  - -
                  -
                  channels
                  -

                  Set the number of channels in the captured audio. Only the values -‘1’ (monaural) and ‘2’ (stereo) are currently supported. -Defaults to ‘2’. -

                  -
                  -
                  sample_size
                  -

                  Set the sample size (in bits) of the captured audio. Only the values -‘8’ and ‘16’ are currently supported. Defaults to -‘16’. -

                  -
                  -
                  sample_rate
                  -

                  Set the sample rate (in Hz) of the captured audio. -Defaults to ‘44.1k’. -

                  -
                  -
                  list_devices
                  -

                  If set to ‘true’, print a list of devices and exit. -Defaults to ‘false’. -

                  -
                  -
                  - - -

                  11.9.2 Examples

                  - -

                  Print the list of OpenAL supported devices and exit: -

                   
                  $ ffmpeg -list_devices true -f openal -i dummy out.ogg
                  -
                  - -

                  Capture from the OpenAL device ‘DR-BT101 via PulseAudio’: -

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
                  -
                  - -

                  Capture from the default device (note the empty string ” as filename): -

                   
                  $ ffmpeg -f openal -i '' out.ogg
                  -
                  - -

                  Capture from two devices simultaneously, writing to two different files, -within the same ffmpeg command: -

                   
                  $ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
                  -
                  -

                  Note: not all OpenAL implementations support multiple simultaneous capture - -try the latest OpenAL Soft if the above does not work. -

                  - -

                  11.10 oss

                  - -

                  Open Sound System input device. -

                  -

                  The filename to provide to the input device is the device node -representing the OSS input device, and is usually set to -‘/dev/dsp’. -

                  -

                  For example to grab from ‘/dev/dsp’ using ffmpeg use the -command: -

                   
                  ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
                  -
                  - -

                  For more information about OSS see: -http://manuals.opensound.com/usersguide/dsp.html -

                  - -

                  11.11 pulse

                  - -

                  pulseaudio input device. -

                  -

                  To enable this input device during configuration you need libpulse-simple -installed in your system. -

                  -

                  The filename to provide to the input device is a source device or the -string "default" -

                  -

                  To list the pulse source devices and their properties you can invoke -the command pactl list sources. -

                  -
                   
                  ffmpeg -f pulse -i default /tmp/pulse.wav
                  -
                  - - -

                  11.11.1 server AVOption

                  - -

                  The syntax is: -

                   
                  -server server name
                  -
                  - -

                  Connects to a specific server. -

                  - -

                  11.11.2 name AVOption

                  - -

                  The syntax is: -

                   
                  -name application name
                  -
                  - -

                  Specify the application name pulse will use when showing active clients, -by default it is the LIBAVFORMAT_IDENT string -

                  - -

                  11.11.3 stream_name AVOption

                  - -

                  The syntax is: -

                   
                  -stream_name stream name
                  -
                  - -

                  Specify the stream name pulse will use when showing active streams, -by default it is "record" -

                  - -

                  11.11.4 sample_rate AVOption

                  - -

                  The syntax is: -

                   
                  -sample_rate samplerate
                  -
                  - -

                  Specify the samplerate in Hz, by default 48kHz is used. -

                  - -

                  11.11.5 channels AVOption

                  - -

                  The syntax is: -

                   
                  -channels N
                  -
                  - -

                  Specify the channels in use, by default 2 (stereo) is set. -

                  - -

                  11.11.6 frame_size AVOption

                  - -

                  The syntax is: -

                   
                  -frame_size bytes
                  -
                  - -

                  Specify the number of byte per frame, by default it is set to 1024. -

                  - -

                  11.11.7 fragment_size AVOption

                  - -

                  The syntax is: -

                   
                  -fragment_size bytes
                  -
                  - -

                  Specify the minimal buffering fragment in pulseaudio, it will affect the -audio latency. By default it is unset. -

                  - -

                  11.12 sndio

                  - -

                  sndio input device. -

                  -

                  To enable this input device during configuration you need libsndio -installed on your system. -

                  -

                  The filename to provide to the input device is the device node -representing the sndio input device, and is usually set to -‘/dev/audio0’. -

                  -

                  For example to grab from ‘/dev/audio0’ using ffmpeg use the -command: -

                   
                  ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
                  -
                  - - -

                  11.13 video4linux and video4linux2

                  - -

                  Video4Linux and Video4Linux2 input video devices. -

                  -

                  The name of the device to grab is a file device node, usually Linux -systems tend to automatically create such nodes when the device -(e.g. an USB webcam) is plugged into the system, and has a name of the -kind ‘/dev/videoN’, where N is a number associated to -the device. -

                  -

                  Video4Linux and Video4Linux2 devices only support a limited set of -widthxheight sizes and framerates. You can check which are -supported for example with the command dov4l for Video4Linux -devices and using -list_formats all for Video4Linux2 devices. -

                  -

                  If the size for the device is set to 0x0, the input device will -try to auto-detect the size to use. -Only for the video4linux2 device, if the frame rate is set to 0/0 the -input device will use the frame rate value already set in the driver. -

                  -

                  Video4Linux support is deprecated since Linux 2.6.30, and will be -dropped in later versions. -

                  -

                  Note that if FFmpeg is build with v4l-utils support ("–enable-libv4l2" -option), it will always be used. -

                  -

                  Follow some usage examples of the video4linux devices with the ff* -tools. -

                   
                  # Grab and show the input of a video4linux device, frame rate is set
                  -# to the default of 25/1.
                  -ffplay -s 320x240 -f video4linux /dev/video0
                  -
                  -# Grab and show the input of a video4linux2 device, auto-adjust size.
                  -ffplay -f video4linux2 /dev/video0
                  -
                  -# Grab and record the input of a video4linux2 device, auto-adjust size,
                  -# frame rate value defaults to 0/0 so it is read from the video4linux2
                  -# driver.
                  -ffmpeg -f video4linux2 -i /dev/video0 out.mpeg
                  -
                  - -

                  "v4l" and "v4l2" can be used as aliases for the respective "video4linux" and -"video4linux2". -

                  - -

                  11.14 vfwcap

                  - -

                  VfW (Video for Windows) capture input device. -

                  -

                  The filename passed as input is the capture driver number, ranging from -0 to 9. You may use "list" as filename to print a list of drivers. Any -other filename will be interpreted as device number 0. -

                  - -

                  11.15 x11grab

                  - -

                  X11 video input device. -

                  -

                  This device allows to capture a region of an X11 display. -

                  -

                  The filename passed as input has the syntax: -

                   
                  [hostname]:display_number.screen_number[+x_offset,y_offset]
                  -
                  - -

                  hostname:display_number.screen_number specifies the -X11 display name of the screen to grab from. hostname can be -omitted, and defaults to "localhost". The environment variable -DISPLAY contains the default display name. -

                  -

                  x_offset and y_offset specify the offsets of the grabbed -area with respect to the top-left border of the X11 screen. They -default to 0. -

                  -

                  Check the X11 documentation (e.g. man X) for more detailed information. -

                  -

                  Use the dpyinfo program for getting basic information about the -properties of your X11 display (e.g. grep for "name" or "dimensions"). -

                  -

                  For example to grab from ‘:0.0’ using ffmpeg: -

                   
                  ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpg
                  -
                  -# Grab at position 10,20.
                  -ffmpeg -f x11grab -r 25 -s cif -i :0.0+10,20 out.mpg
                  -
                  - - -

                  11.15.1 follow_mouse AVOption

                  - -

                  The syntax is: -

                   
                  -follow_mouse centered|PIXELS
                  -
                  - -

                  When it is specified with "centered", the grabbing region follows the mouse -pointer and keeps the pointer at the center of region; otherwise, the region -follows only when the mouse pointer reaches within PIXELS (greater than -zero) to the edge of region. -

                  -

                  For example: -

                   
                  ffmpeg -f x11grab -follow_mouse centered -r 25 -s cif -i :0.0 out.mpg
                  -
                  -# Follows only when the mouse pointer reaches within 100 pixels to edge
                  -ffmpeg -f x11grab -follow_mouse 100 -r 25 -s cif -i :0.0 out.mpg
                  -
                  - - -

                  11.15.2 show_region AVOption

                  - -

                  The syntax is: -

                   
                  -show_region 1
                  -
                  - -

                  If show_region AVOption is specified with 1, then the grabbing -region will be indicated on screen. With this option, it’s easy to know what is -being grabbed if only a portion of the screen is grabbed. -

                  -

                  For example: -

                   
                  ffmpeg -f x11grab -show_region 1 -r 25 -s cif -i :0.0+10,20 out.mpg
                  -
                  -# With follow_mouse
                  -ffmpeg -f x11grab -follow_mouse centered -show_region 1  -r 25 -s cif -i :0.0 out.mpg
                  -
                  - - - - -

                  - - - +
                  +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                  diff --git a/extern/ffmpeg/doc/general.html b/extern/ffmpeg/doc/general.html index 3b41062bc2..8ef37be79e 100644 --- a/extern/ffmpeg/doc/general.html +++ b/extern/ffmpeg/doc/general.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : General - - - - + + - - - - + + - - +
                  -
                  +

                  General Documentation

                  @@ -96,15 +37,20 @@ h3 {
                • 1. External libraries
                • 2. Supported File Formats, Codecs or Features
                    @@ -126,7 +72,8 @@ h3 {

                    FFmpeg can be hooked up with a number of external libraries to add support for more formats. None of them are used by default, their use has to be -explicitly requested by passing the appropriate flags to ‘./configure’. +explicitly requested by passing the appropriate flags to +./configure.

                    1.1 OpenJPEG

                    @@ -137,18 +84,23 @@ instructions. To enable using OpenJPEG in FFmpeg, pass --enable-libopenjp ‘./configure’.

                    - -

                    1.2 OpenCORE and VisualOn libraries

                    + +

                    1.2 OpenCORE, VisualOn, and Fraunhofer libraries

                    -

                    Spun off Google Android sources, OpenCore and VisualOn libraries provide -encoders for a number of audio codecs. +

                    Spun off Google Android sources, OpenCore, VisualOn and Fraunhofer +libraries provide encoders for a number of audio codecs.

                    -
                    +

                    OpenCORE and VisualOn libraries are under the Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0 for details), which is -incompatible with the LGPL version 2.1 and GPL version 2. You have to +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) to use it. +GPL components, GPL version 3) by passing --enable-version3 to configure in +order to use it. +

                    +

                    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 +--enable-nonfree to configure to use it.

                    1.2.1 OpenCORE AMR

                    @@ -179,6 +131,15 @@ Then pass --enable-libvo-aacenc to configure to enable it. instructions for installing the library. Then pass --enable-libvo-amrwbenc to configure to enable it.

                    + +

                    1.2.4 Fraunhofer AAC library

                    + +

                    FFmpeg can make use of the Fraunhofer AAC library for AAC encoding. +

                    +

                    Go to http://sourceforge.net/projects/opencore-amr/ and follow the +instructions for installing the library. +Then pass --enable-libfdk-aac to configure to enable it. +

                    1.3 LAME

                    @@ -188,17 +149,35 @@ Then pass --enable-libvo-amrwbenc to configure to enable it. instructions for installing the library. Then pass --enable-libmp3lame to configure to enable it.

                    - -

                    1.4 libvpx

                    + +

                    1.4 TwoLAME

                    -

                    FFmpeg can make use of the libvpx library for VP8 encoding. +

                    FFmpeg can make use of the TwoLAME library for MP2 encoding. +

                    +

                    Go to http://www.twolame.org/ and follow the +instructions for installing the library. +Then pass --enable-libtwolame to configure to enable it. +

                    + +

                    1.5 libvpx

                    + +

                    FFmpeg can make use of the libvpx library for VP8/VP9 encoding.

                    Go to http://www.webmproject.org/ and follow the instructions for installing the library. Then pass --enable-libvpx to configure to enable it.

                    + +

                    1.6 libwavpack

                    + +

                    FFmpeg can make use of the libwavpack library for WavPack encoding. +

                    +

                    Go to http://www.wavpack.com/ and follow the instructions for +installing the library. Then pass --enable-libwavpack to configure to +enable it. +

                    -

                    1.5 x264

                    +

                    1.7 x264

                    FFmpeg can make use of the x264 library for H.264 encoding.

                    @@ -206,12 +185,38 @@ enable it. instructions for installing the library. Then pass --enable-libx264 to configure to enable it.

                    -
                    +

                    x264 is under the GNU Public License Version 2 or later (see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html for details), you must upgrade FFmpeg’s license to GPL in order to use it.

                    + +

                    1.8 libilbc

                    +

                    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. +

                    +

                    Go to https://github.com/dekkers/libilbc and follow the instructions for +installing the library. Then pass --enable-libilbc to configure to +enable it. +

                    + +

                    1.9 libzvbi

                    + +

                    libzvbi is a VBI decoding library which can be used by FFmpeg to decode DVB +teletext pages and DVB teletext subtitles. +

                    +

                    Go to http://sourceforge.net/projects/zapping/ and follow the instructions for +installing the library. Then pass --enable-libzvbi to configure to +enable it. +

                    +
                    +

                    libzvbi is licensed under the GNU General Public License Version 2 or later +(see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html for details), +you must upgrade FFmpeg’s license to GPL in order to use it. +

                    2. Supported File Formats, Codecs or Features

                    @@ -233,11 +238,16 @@ library:
                • Audio IFF (AIFF)XX
                  American Laser Games MMXMultimedia format used in games like Mad Dog McCree.
                  3GPP AMRXX
                  Amazing Studio Packed Animation FileXMultimedia format used in game Heart Of Darkness.
                  Apple HTTP Live StreamingX
                  Artworx Data FormatX
                  ADPXAudio format used on the Nintendo Gamecube.
                  AFCXAudio format used on the Nintendo Gamecube.
                  ASFXX
                  ASTXXAudio format used on the Nintendo Wii.
                  AVIXX
                  AVISynthX
                  AviSynthX
                  AVRXAudio format used on Mac.
                  AVSXMultimedia format used by the Creature Shock game.
                  Beam Software SIFFXAudio and video format used in some games by Beam Software.
                  Bethesda Softworks VIDXUsed in some games from Bethesda Softworks.
                  BinkXMultimedia format used by many games.
                  Bitmap Brothers JVXUsed in Z and Z95 games.
                  Brute Force & IgnoranceXUsed in the game Flash Traffic: City of Angels.
                  BRSTMXAudio format used on the Nintendo Wii.
                  BWFXX
                  CRI ADXXXAudio-only format used in console video games.
                  Discworld II BMVX
                  Interplay C93XUsed in the game Cyberia from Interplay.
                  Delphine Software International CINXMultimedia format used by Delphine Software games.
                  CD+GXVideo format used by CD+G karaoke disks
                  Commodore CDXLXAmiga CD video format
                  Core Audio FormatXXApple Core Audio Format
                  CRC testing formatX
                  Creative VoiceXXCreated for the Sound Blaster Pro.
                  Electronic Arts cdataX
                  Electronic Arts MultimediaXUsed in various EA games; files have extensions like WVE and UV2.
                  Ensoniq Paris Audio FileX
                  FFM (FFserver live feed)XX
                  Flash (SWF)XX
                  Flash 9 (AVM2)XXOnly embedded audio is decoded.
                  G.723.1XX
                  G.729 BITXX
                  G.729 rawX
                  GIF AnimationX
                  GIF AnimationXX
                  GXFXXGeneral eXchange Format SMPTE 360M, used by Thomson Grass Valley playout servers.
                  iCEDraw FileX
                  ICOXMicrosoft Windows ICO
                  ICOXXMicrosoft Windows ICO
                  id Quake II CIN videoX
                  id RoQXXUsed in Quake III, Jedi Knight 2 and other computer games.
                  IEC61937 encapsulationXX
                  IFFXInterchange File Format
                  iLBCXX
                  Interplay MVEXFormat used in various Interplay computer games.
                  IV8XA format generated by IndigoVision 8000 video server.
                  IVF (On2)XXA format used by libvpx
                  IRCAMXX
                  LATMXX
                  LMLM4XUsed by Linux Media Labs MPEG-4 PCI boards
                  LOASXcontains LATM multiplexed AAC audio
                  LVFX
                  LXFXVR native stream format, used by Leitch/Harris’ video servers.
                  MatroskaXX
                  Matroska audioX
                  FFmpeg metadataXXMetadata in text format.
                  MAXIS XAXUsed in Sim City 3000; file extension .xa.
                  MD StudioX
                  Metal Gear Solid: The Twin SnakesX
                  Megalux FrameXUsed by Megalux Ultimate Paint
                  Mobotix .mxgX
                  Monkey’s AudioX
                  Motion Pixels MVIX
                  Material eXchange Format (MXF)XXSMPTE 377M, used by D-Cinema, broadcast industry.
                  Material eXchange Format (MXF), D-10 MappingXXSMPTE 386M, D-10/IMX Mapping.
                  NC camera feedXNC (AVIP NC4600) camera streams
                  NIST SPeech HEader REsourcesX
                  NTT TwinVQ (VQF)XNippon Telegraph and Telephone Corporation TwinVQ.
                  Nullsoft Streaming VideoX
                  NuppelVideoX
                  NUTXXNUT Open Container Format
                  OggXX
                  Playstation Portable PMPX
                  Portable Voice FormatX
                  TechnoTrend PVAXUsed by TechnoTrend DVB PCI boards.
                  QCPX
                  raw ADTS (AAC)XX
                  raw DiracXX
                  raw DNxHDXX
                  raw DTSXX
                  raw DTS-HDX
                  raw E-AC-3XX
                  raw FLACXX
                  raw GSMX
                  raw videoXX
                  raw id RoQX
                  raw ShortenX
                  raw TAKX
                  raw TrueHDXX
                  raw VC-1X
                  raw VC-1XX
                  raw PCM A-lawXX
                  raw PCM mu-lawXX
                  raw PCM signed 8 bitXX
                  REDCODE R3DXFile format used by RED Digital cameras, contains JPEG 2000 frames and PCM audio.
                  RealMediaXX
                  RedirectorX
                  RedSparkX
                  Renderware TeXture DictionaryX
                  RL2XAudio and video format used in some games by Entertainment Software Partners.
                  RPL/ARMovieX
                  Lego Mindstorms RSOXX
                  RSDX
                  RTMPXXOutput is performed by publishing stream to RTMP server
                  RTPXX
                  RTSPXX
                  SBGX
                  SDPX
                  Sega FILM/CPKXUsed in many Sega Saturn console games.
                  Silicon Graphics MovieX
                  Sierra SOLX.sol files used in Sierra Online games.
                  Sierra VMDXUsed in Sierra CD-ROM games.
                  SmackerXMultimedia format used by many games.
                  SMJPEGXXUsed in certain Loki game ports.
                  SmushXMultimedia format used in some LucasArts games.
                  Sony OpenMG (OMA)XXAudio format used in Sony Sonic Stage and Sony Vegas.
                  Sony PlayStation STRX
                  Sony Wave64 (W64)X
                  Sony Wave64 (W64)XX
                  SoX native formatXX
                  SUN AU formatXX
                  Text filesX
                  Tiertex Limited SEQXTiertex .seq files used in the DOS CD-ROM version of the game Flashback.
                  True AudioX
                  VC-1 test bitstreamXX
                  VivoX
                  WAVXX
                  WavPackX
                  WavPackXX
                  WebMXX
                  Windows Televison (WTV)XX
                  Wing Commander III movieXMultimedia format used in Origin’s Wing Commander III computer game.
                  - + + + @@ -437,9 +466,12 @@ following image formats are supported: - + + + +
                  NameEncodingDecodingComments
                  .Y.U.VXXone raw file per component
                  animated GIFXXOnly uncompressed GIFs are generated.
                  animated GIFXX
                  BMPXXMicrosoft BMP image
                  PIXXPIX is an image format used in the Argonaut BRender engine.
                  DPXXXDigital Picture Exchange
                  EXRXOpenEXR
                  JPEGXXProgressive JPEG is not supported.
                  JPEG 2000XX
                  JPEG-LSXX
                  PPMXXPortable PixelMap image
                  PTXXV.Flash PTX format
                  SGIXXSGI RGB image format
                  Sun RasterfileXSun RAS image format
                  Sun RasterfileXXSun RAS image format
                  TIFFXXYUV, JPEG and some extension is not supported yet.
                  Truevision TargaXXTarga (.TGA) image format
                  WebPXWebP image format
                  XBMXXX BitMap image format
                  XFaceXXX-Face image format
                  XWDXXX Window Dump image format
                  @@ -454,12 +486,12 @@ following image formats are supported:
                NameEncodingDecodingComments
                4X MovieXUsed in certain computer games.
                8088flex TMVX
                8SVX exponentialX
                8SVX fibonacciX
                A64 multicolorXCreates video suitable to be played on a commodore 64 (multicolor mode).
                Amazing Studio PAF VideoX
                American Laser Games MMXUsed in games like Mad Dog McCree.
                AMV VideoXXUsed in Chinese MP3 players.
                ANSI/ASCII artX
                Apple Intermediate CodecX
                Apple MJPEG-BX
                Apple ProResXX
                Apple QuickDrawXfourcc: qdrw
                Autodesk RLEXfourcc: AASC
                Avid 1:1 10-bit RGB PackerXXfourcc: AVrp
                AVS (Audio Video Standard) videoXVideo encoding used by the Creature Shock game.
                AYUVXXMicrosoft uncompressed packed 4:4:4:4
                Beam Software VBX
                Bethesda VID videoXUsed in some games from Bethesda Softworks.
                Bink VideoX
                C93 videoXCodec used in Cyberia game.
                CamStudioXfourcc: CSCD
                CD+GXVideo codec for CD+G karaoke disks
                CDXLXAmiga CD video codec
                Chinese AVS videoEXAVS1-P2, JiZhun profile, encoding through external library libxavs
                Delphine Software International CIN videoXCodec used in Delphine Software International games.
                Discworld II BMV VideoX
                Canopus Lossless CodecX
                CinepakX
                Cirrus Logic AccuPakXXfourcc: CLJR
                CPiA Video FormatX
                Creative YUV (CYUV)X
                DFAXCodec used in Chronomaster game.
                DiracEXsupported through external libdirac/libschroedinger libraries
                DiracEXsupported through external library libschroedinger
                Deluxe Paint AnimationX
                DNxHDXXaka SMPTE VC3
                Duck TrueMotion 1.0Xfourcc: DUCK
                Electronic Arts TQI videoX
                Escape 124X
                Escape 130X
                FFmpeg video codec #1XXexperimental lossless codec (fourcc: FFV1)
                FFmpeg video codec #1XXlossless codec (fourcc: FFV1)
                Flash Screen Video v1XXfourcc: FSV1
                Flash Screen Video v2XX
                Flash Video (FLV)XXSorenson H.263 used in Flash
                Forward UncompressedX
                FrapsX
                Go2WebinarXfourcc: G2M4
                H.261XX
                H.263 / H.263-1996XX
                H.263+ / H.263-1998 / H.263 version 2XX
                H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10EXencoding supported through external library libx264
                H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration)EX
                HuffYUVXX
                HuffYUV FFmpeg variantXX
                IBM UltimotionXfourcc: ULTI
                LCL (LossLess Codec Library) MSZHX
                LCL (LossLess Codec Library) ZLIBEE
                LOCOX
                LucasArts SmushXUsed in LucasArts games.
                lossless MJPEGXX
                Microsoft ATC ScreenXAlso known as Microsoft Screen 3.
                Microsoft Expression Encoder ScreenXAlso known as Microsoft Titanium Screen 2.
                Microsoft RLEX
                Microsoft Screen 1XAlso known as Windows Media Video V7 Screen.
                Microsoft Screen 2XAlso known as Windows Media Video V9 Screen.
                Microsoft Video 1X
                MimicXUsed in MSN Messenger Webcam streams.
                Miro VideoXLXfourcc: VIXL
                Motion Pixels videoX
                MPEG-1 videoXX
                MPEG-1/2 video XvMC (X-Video Motion Compensation)X
                MPEG-1/2 video (VDPAU acceleration)X
                MPEG-2 videoXX
                MPEG-4 part 2XXlibxvidcore can be used alternatively for encoding.
                MPEG-4 part 2 Microsoft variant version 1X
                On2 VP5Xfourcc: VP50
                On2 VP6Xfourcc: VP60,VP61,VP62
                VP8EXfourcc: VP80, encoding supported through external library libvpx
                planar RGBXfourcc: 8BPS
                VP9EXencoding supported through external library libvpx
                Pinnacle TARGA CineWave YUV16Xfourcc: Y216
                ProresXfourcc: apch,apcn,apcs,apco
                Q-team QPEGXfourccs: QPEG, Q1.0, Q1.1
                QuickTime 8BPS videoX
                RealVideo 4.0X
                Renderware TXD (TeXture Dictionary)XTexture dictionaries used by the Renderware Engine.
                RL2 videoXused in some games by Entertainment Software Partners
                SGI RLE 8-bitX
                Sierra VMD videoXUsed in Sierra VMD files.
                Silicon Graphics Motion Video Compressor 1 (MVC1)X
                Silicon Graphics Motion Video Compressor 2 (MVC2)X
                Smacker videoXVideo encoding used in Smacker.
                SMPTE VC-1X
                SnowXXexperimental wavelet codec (fourcc: SNOW)
                Sorenson Vector Quantizer 3Xfourcc: SVQ3
                Sunplus JPEG (SP5X)Xfourcc: SP5X
                TechSmith Screen Capture CodecXfourcc: TSCC
                TechSmith Screen Capture Codec 2Xfourcc: TSC2
                TheoraEXencoding supported through external library libtheora
                Tiertex Limited SEQ videoXCodec used in DOS CD-ROM FlashBack game.
                Ut VideoX
                Ut VideoXX
                v210 QuickTime uncompressed 4:2:2 10-bitXX
                v308 QuickTime uncompressed 4:4:4XX
                v408 QuickTime uncompressed 4:4:4:4XX
                v410 QuickTime uncompressed 4:4:4 10-bitXX
                VBLE Lossless CodecX
                VMware Screen Codec / VMware VideoXCodec used in videos captured by VMware.
                YAMAHA SMAFXX
                Psygnosis YOP VideoX
                yuv4XXlibquicktime uncompressed packed 4:2:0
                ZeroCodec Lossless VideoX
                ZLIBXXpart of LCL, encoder experimental
                Zip Motion Blocks VideoXXEncoder works only in PAL8.
                @@ -615,7 +663,8 @@ following image formats are supported: - + + @@ -639,15 +688,18 @@ following image formats are supported: + + + + - @@ -655,9 +707,10 @@ following image formats are supported: + - - + + @@ -672,26 +725,34 @@ following image formats are supported: + + + - + - + + - + + + + + @@ -718,22 +779,27 @@ following image formats are supported: + - + - + + + - + + +
                NameEncodingDecodingComments
                8SVX audioX
                8SVX exponentialX
                8SVX fibonacciX
                AAC+EXencoding supported through external library libaacplus
                AACEXencoding supported through external library libfaac and libvo-aacenc
                AC-3IXX
                ADPCM IMA WAVXX
                ADPCM IMA WestwoodX
                ADPCM ISS IMAXUsed in FunCom games.
                ADPCM IMA DialogicX
                ADPCM IMA Duck DK3XUsed in some Sega Saturn console games.
                ADPCM IMA Duck DK4XUsed in some Sega Saturn console games.
                ADPCM IMA RadicalX
                ADPCM MicrosoftXX
                ADPCM MS IMAXX
                ADPCM Nintendo Gamecube AFCX
                ADPCM Nintendo Gamecube DTKX
                ADPCM Nintendo Gamecube THPX
                ADPCM QT IMAXX
                ADPCM SEGA CRI ADXXXUsed in Sega Dreamcast games.
                ADPCM Shockwave FlashXX
                ADPCM SMJPEG IMAXUsed in certain Loki game ports.
                ADPCM Sound Blaster Pro 2-bitX
                ADPCM Sound Blaster Pro 2.6-bitX
                ADPCM Sound Blaster Pro 4-bitX
                ADPCM YamahaXX
                AMR-NBEXencoding supported through external library libopencore-amrnb
                AMR-WBEXencoding supported through external library libvo-amrwbenc
                Amazing Studio PAF AudioX
                Apple lossless audioXXQuickTime fourcc ’alac’
                Atrac 1X
                Atrac 3X
                ATRAC1X
                ATRAC3X
                Bink AudioXUsed in Bink and Smacker files in many games.
                CELTEdecoding supported through external library libcelt
                Delphine Software International CIN audioXCodec used in Delphine Software International games.
                DSP Group TrueSpeechX
                DV audioX
                Enhanced AC-3XX
                EVRC (Enhanced Variable Rate Codec)X
                FLAC (Free Lossless Audio Codec)XIX
                G.723.1XX
                G.729X
                GSMEXencoding supported through external library libgsm
                GSM Microsoft variantEXencoding supported through external library libgsm
                IAC (Indeo Audio Coder)X
                iLBC (Internet Low Bitrate Codec)EEencoding and decoding supported through external library libilbc
                IMC (Intel Music Coder)X
                MACE (Macintosh Audio Compression/Expansion) 3:1X
                MACE (Macintosh Audio Compression/Expansion) 6:1X
                MLP (Meridian Lossless Packing)XUsed in DVD-Audio discs.
                Monkey’s AudioXOnly versions 3.97-3.99 are supported.
                Monkey’s AudioX
                MP1 (MPEG audio layer 1)IX
                MP2 (MPEG audio layer 2)IXIX
                MP2 (MPEG audio layer 2)IXIXlibtwolame can be used alternatively for encoding.
                MP3 (MPEG audio layer 3)EIXencoding supported through external library LAME, ADU MP3 and MP3onMP4 also supported
                MPEG-4 Audio Lossless Coding (ALS)X
                Musepack SV7X
                Musepack SV8X
                Nellymoser AsaoXX
                OpusEEsupported through external library libopus
                PCM A-lawXX
                PCM mu-lawXX
                PCM 16-bit little-endian planarX
                PCM signed 8-bit planarXX
                PCM signed 16-bit big-endian planarXX
                PCM signed 16-bit little-endian planarXX
                PCM signed 24-bit little-endian planarXX
                PCM signed 32-bit little-endian planarXX
                PCM 32-bit floating point big-endianXX
                PCM 32-bit floating point little-endianXX
                PCM 64-bit floating point big-endianXX
                RealAudio 1.0 (14.4K)XXReal 14400 bit/s codec
                RealAudio 2.0 (28.8K)XReal 28800 bit/s codec
                RealAudio 3.0 (dnet)IXXReal low bitrate AC-3 codec
                RealAudio LosslessX
                RealAudio SIPR / ACELP.NETX
                ShortenX
                Sierra VMD audioXUsed in Sierra VMD files.
                Smacker audioX
                SMPTE 302M AES3 audioX
                SMPTE 302M AES3 audioXX
                SonicXXexperimental codec
                Sonic losslessXXexperimental codec
                SpeexEEsupported through external library libspeex
                True Audio (TTA)X
                TAK (Tom’s lossless Audio Kompressor)X
                True Audio (TTA)XX
                TrueHDXUsed in HD-DVD and Blu-Ray discs.
                TwinVQ (VQF flavor)X
                VIMAXUsed in LucasArts SMUSH animations.
                VorbisEXA native but very primitive encoder exists.
                WavPackX
                Voxware MetaSoundXimperfect and incomplete support
                WavPackXX
                Westwood Audio (SND1)X
                Windows Media Audio 1XX
                Windows Media Audio 2XX
                Windows Media Audio LosslessX
                Windows Media Audio ProX
                Windows Media Audio VoiceX
                @@ -750,35 +816,64 @@ performance on systems without hardware floating point support). - + + + - + + + + + + + + + + + + + +
                NameMuxingDemuxingEncodingDecoding
                SSA/ASSXXXX
                3GPP Timed TextXX
                AQTitleXX
                DVBXXXX
                DVB teletextXE
                DVDXXXX
                MicroDVDXX
                JACOsubXXX
                MicroDVDXXX
                MPL2XX
                MPsub (MPlayer)XX
                PGSX
                PJS (Phoenix)XX
                RealTextXX
                SAMIXX
                SSA/ASSXXXX
                SubRip (SRT)XXXX
                SubViewer v1XX
                SubViewerXX
                TED Talks captionsXX
                VobSub (IDX+SUB)XX
                VPlayerXX
                WebVTTXXX
                XSUBXX

                X means that the feature is supported.

                +

                E means that support is provided through an external library. +

                2.6 Network Protocols

                - + - + + + + + + + + + + +
                NameSupport
                Apple HTTP Live StreamingX
                fileX
                GopherX
                HLSX
                HTTPX
                MMSX
                HTTPSX
                MMSHX
                MMSTX
                pipeX
                RTMPX
                RTMPEX
                RTMPSX
                RTMPTX
                RTMPTEX
                RTMPTSX
                RTPX
                SCTPX
                TCPX
                TLSX
                UDPX

                X means that the protocol is supported.

                +

                E means that support is provided through an external library. +

                2.7 Input/Output Devices

                @@ -787,13 +882,18 @@ performance on systems without hardware floating point support).
              • NameInputOutput
                ALSAXX
                BKTRX
                cacaX
                DV1394X
                Lavfi virtual deviceX
                Linux framebufferX
                JACKX
                LIBCDIOX
                LIBDC1394X
                OpenALX
                OSSXX
                PulseaudioX
                Video4LinuxX
                Video4Linux2X
                SDLX
                Video4Linux2XX
                VfW captureX
                X11 grabbingX
                @@ -805,21 +905,13 @@ performance on systems without hardware floating point support). + - + - +
                Codec/formatReadWrite
                AVIXX
                DVXX
                GXFXX
                MOVX
                MOVXX
                MPEG1/2XX
                MXFX
                MXFXX
                - -

                - - - +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/git-howto.html b/extern/ffmpeg/doc/git-howto.html index ab71cb21ff..a3b0d80c21 100644 --- a/extern/ffmpeg/doc/git-howto.html +++ b/extern/ffmpeg/doc/git-howto.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : Using git to develop FFmpeg: - - - - + + - - - - + + - - +
                - @@ -174,6 +121,13 @@ Most distribution and operating system provide a package for it.

                This will put the FFmpeg sources into the directory <target> and let you push back your changes to the remote repository.

                +

                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 +

                +
                 
                git config --global core.autocrlf false
                +
                +

                2.3 Updating the source tree to the latest revision

                @@ -185,7 +139,7 @@ you push back your changes to the remote repository. can be remote. By default the master branch tracks the branch master in the remote origin.

                -
                +

                --rebase (see below) is recommended.

                @@ -350,11 +304,38 @@ git commit
                + +

                3. Git configuration

                + +

                In order to simplify a few workflows, it is advisable to configure both +your personal Git installation and your local FFmpeg repository. +

                + +

                3.1 Personal Git installation

                + +

                Add the following to your ‘~/.gitconfig’ to help git send-email +and git format-patch detect renames: +

                +
                 
                [diff]
                +        renames = copy
                +
                + + +

                3.2 Repository configuration

                + +

                In order to have git send-email automatically send patches +to the ffmpeg-devel mailing list, add the following stanza +to ‘/path/to/ffmpeg/repository/.git/config’: +

                +
                 
                [sendemail]
                +        to = ffmpeg-devel@ffmpeg.org
                +
                + -

                3. FFmpeg specific

                +

                4. FFmpeg specific

                -

                3.1 Reverting broken commits

                +

                4.1 Reverting broken commits

                 
                git reset <commit>
                 
                @@ -373,7 +354,7 @@ the current branch history.

                will replay local commits over the main repository allowing to edit, merge or remove some of them in the process.

                -
                +

                git reset, git commit --amend and git rebase rewrite history, so you should use them ONLY on your local or topic branches. The main repository will reject those changes. @@ -385,7 +366,7 @@ The main repository will reject those changes. faulty commit disappear from the history.

                -

                3.2 Pushing changes to remote trees

                +

                4.2 Pushing changes to remote trees

                 
                git push
                 
                @@ -408,7 +389,7 @@ Omitting <refspec> makes git push update all the r branches matching the local ones.

                -

                3.3 Finding a specific svn revision

                +

                4.3 Finding a specific svn revision

                Since version 1.7.1 git supports :/foo syntax for specifying commits based on a regular expression. see man gitrevisions @@ -431,19 +412,48 @@ This commit can be checked out with

                where $SHA1 is the commit hash from the git log output.

                + + +

                5. pre-push checklist

                + +

                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. +

                +

                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 +git log -p 1234567..987654. The git status command +may help in finding local changes that have been forgotten to be added. +

                +

                Next let the code pass through a full run of our testsuite. +

                +
                  +
                • make distclean +
                • /path/to/ffmpeg/configure +
                • make check +
                • if fate fails due to missing samples run make fate-rsync and retry +
                + +

                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). +

                +

                Also note that every single commit should pass the test suite, not just +the result of a series of patches. +

                +

                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. +

                -

                4. Server Issues

                +

                6. Server Issues

                Contact the project admins root@ffmpeg.org if you have technical problems with the GIT server. -

                -

                - - -
                +

                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/libavcodec.html b/extern/ffmpeg/doc/libavcodec.html new file mode 100644 index 0000000000..e9c57bf172 --- /dev/null +++ b/extern/ffmpeg/doc/libavcodec.html @@ -0,0 +1,78 @@ + + + + + +FFmpeg documentation : Libavcodec + + + + + + + + + + +
                +
                + + +

                Libavcodec Documentation

                + + +

                Table of Contents

                + + + +

                1. Description

                + +

                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. +

                +

                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. +

                + + +

                2. See Also

                + +

                ffmpeg, ffplay, ffprobe, ffserver, +ffmpeg-codecs, bitstream-filters, +libavutil +

                + + +

                3. Authors

                + +

                The FFmpeg developers. +

                +

                For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org. +

                +

                Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree. +

                + +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/libavdevice.html b/extern/ffmpeg/doc/libavdevice.html new file mode 100644 index 0000000000..03675bf208 --- /dev/null +++ b/extern/ffmpeg/doc/libavdevice.html @@ -0,0 +1,75 @@ + + + + + +FFmpeg documentation : Libavdevice + + + + + + + + + + +
                +
                + + +

                Libavdevice Documentation

                + + +

                Table of Contents

                + + + +

                1. Description

                + +

                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. +

                + + +

                2. See Also

                + +

                ffmpeg, ffplay, ffprobe, ffserver, +ffmpeg-devices, +libavutil, libavcodec, libavformat +

                + + +

                3. Authors

                + +

                The FFmpeg developers. +

                +

                For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org. +

                +

                Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree. +

                + +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/libavfilter.html b/extern/ffmpeg/doc/libavfilter.html index 2d5a2cf7ca..389070ab7e 100644 --- a/extern/ffmpeg/doc/libavfilter.html +++ b/extern/ffmpeg/doc/libavfilter.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : Libavfilter - - - - + + - - - - + + - - +
                -
                +

                Libavfilter Documentation

                @@ -93,3764 +34,41 @@ h3 {
                - -

                1. Introduction

                + +

                1. Description

                -

                Libavfilter is the filtering API of FFmpeg. It is the substitute of the -now deprecated ’vhooks’ and started as a Google Summer of Code project. +

                The libavfilter library provides a generic audio/video filtering +framework containing several filters, sources and sinks.

                -

                Audio filtering integration into the main FFmpeg repository is a work in -progress, so audio API and ABI should not be considered stable yet. -

                - -

                2. Tutorial

                - -

                In libavfilter, it is possible for filters to have multiple inputs and -multiple outputs. -To illustrate the sorts of things that are possible, we can -use a complex filter graph. For example, the following one: -

                -
                 
                input --> split --> fifo -----------------------> overlay --> output
                -            |                                        ^
                -            |                                        |
                -            +------> fifo --> crop --> vflip --------+
                -
                - -

                splits the stream in two streams, sends one stream through the crop filter -and the vflip filter before merging it back with the other stream by -overlaying it on top. You can use the following command to achieve this: -

                -
                 
                ffmpeg -i input -vf "[in] split [T1], fifo, [T2] overlay=0:H/2 [out]; [T1] fifo, crop=iw:ih/2:0:ih/2, vflip [T2]" output
                -
                - -

                The result will be that in output the top half of the video is mirrored -onto the bottom half. -

                -

                Video filters are loaded using the -vf option passed to -ffmpeg or to ffplay. Filters in the same linear -chain are separated by commas. In our example, split, fifo, -overlay are in one linear chain, and fifo, crop, vflip are in -another. The points where the linear chains join are labeled by names -enclosed in square brackets. In our example, that is [T1] and -[T2]. The magic labels [in] and [out] are the points -where video is input and output. -

                -

                Some filters take in input a list of parameters: they are specified -after the filter name and an equal sign, and are separated each other -by a semicolon. -

                -

                There exist so-called source filters that do not have a video -input, and we expect in the future some sink filters that will -not have video output. -

                - -

                3. graph2dot

                - -

                The ‘graph2dot’ program included in the FFmpeg ‘tools’ -directory can be used to parse a filter graph description and issue a -corresponding textual representation in the dot language. -

                -

                Invoke the command: -

                 
                graph2dot -h
                -
                - -

                to see how to use ‘graph2dot’. -

                -

                You can then pass the dot description to the ‘dot’ program (from -the graphviz suite of programs) and obtain a graphical representation -of the filter graph. -

                -

                For example the sequence of commands: -

                 
                echo GRAPH_DESCRIPTION | \
                -tools/graph2dot -o graph.tmp && \
                -dot -Tpng graph.tmp -o graph.png && \
                -display graph.png
                -
                - -

                can be used to create and display an image representing the graph -described by the GRAPH_DESCRIPTION string. -

                - -

                4. Filtergraph description

                - -

                A filtergraph is a directed graph of connected filters. It can contain -cycles, and there can be multiple links between a pair of -filters. Each link has one input pad on one side connecting it to one -filter from which it takes its input, and one output pad on the other -side connecting it to the one filter accepting its output. -

                -

                Each filter in a filtergraph is an instance of a filter class -registered in the application, which defines the features and the -number of input and output pads of the filter. -

                -

                A filter with no input pads is called a "source", a filter with no -output pads is called a "sink". -

                - -

                4.1 Filtergraph syntax

                - -

                A filtergraph can be represented using a textual representation, which -is recognized by the -vf option of the ff* -tools, and by the avfilter_graph_parse() function defined in -‘libavfilter/avfiltergraph.h’. -

                -

                A filterchain consists of a sequence of connected filters, each one -connected to the previous one in the sequence. A filterchain is -represented by a list of ","-separated filter descriptions. -

                -

                A filtergraph consists of a sequence of filterchains. A sequence of -filterchains is represented by a list of ";"-separated filterchain -descriptions. -

                -

                A filter is represented by a string of the form: -[in_link_1]...[in_link_N]filter_name=arguments[out_link_1]...[out_link_M] -

                -

                filter_name is the name of the filter class of which the -described filter is an instance of, and has to be the name of one of -the filter classes registered in the program. -The name of the filter class is optionally followed by a string -"=arguments". -

                -

                arguments is a string which contains the parameters used to -initialize the filter instance, and are described in the filter -descriptions below. -

                -

                The list of arguments can be quoted using the character "’" as initial -and ending mark, and the character ’\’ for escaping the characters -within the quoted text; otherwise the argument string is considered -terminated when the next special character (belonging to the set -"[]=;,") is encountered. -

                -

                The name and arguments of the filter are optionally preceded and -followed by a list of link labels. -A link label allows to name a link and associate it to a filter output -or input pad. The preceding labels in_link_1 -... in_link_N, are associated to the filter input pads, -the following labels out_link_1 ... out_link_M, are -associated to the output pads. -

                -

                When two link labels with the same name are found in the -filtergraph, a link between the corresponding input and output pad is -created. -

                -

                If an output pad is not labelled, it is linked by default to the first -unlabelled input pad of the next filter in the filterchain. -For example in the filterchain: -

                 
                nullsrc, split[L1], [L2]overlay, nullsink
                -
                -

                the split filter instance has two output pads, and the overlay filter -instance two input pads. The first output pad of split is labelled -"L1", the first input pad of overlay is labelled "L2", and the second -output pad of split is linked to the second input pad of overlay, -which are both unlabelled. -

                -

                In a complete filterchain all the unlabelled filter input and output -pads must be connected. A filtergraph is considered valid if all the -filter input and output pads of all the filterchains are connected. -

                -

                Follows a BNF description for the filtergraph syntax: -

                 
                NAME             ::= sequence of alphanumeric characters and '_'
                -LINKLABEL        ::= "[" NAME "]"
                -LINKLABELS       ::= LINKLABEL [LINKLABELS]
                -FILTER_ARGUMENTS ::= sequence of chars (eventually quoted)
                -FILTER           ::= [LINKNAMES] NAME ["=" ARGUMENTS] [LINKNAMES]
                -FILTERCHAIN      ::= FILTER [,FILTERCHAIN]
                -FILTERGRAPH      ::= FILTERCHAIN [;FILTERGRAPH]
                -
                - - - -

                5. Audio Filters

                - -

                When you configure your FFmpeg build, you can disable any of the -existing filters using --disable-filters. -The configure output will show the audio filters included in your -build. -

                -

                Below is a description of the currently available audio filters. -

                - -

                5.1 aconvert

                - -

                Convert the input audio format to the specified formats. -

                -

                The filter accepts a string of the form: -"sample_format:channel_layout:packing_format". -

                -

                sample_format specifies the sample format, and can be a string or -the corresponding numeric value defined in ‘libavutil/samplefmt.h’. -

                -

                channel_layout specifies the channel layout, and can be a string -or the corresponding number value defined in ‘libavutil/audioconvert.h’. -

                -

                packing_format specifies the type of packing in output, can be one -of "planar" or "packed", or the corresponding numeric values "0" or "1". -

                -

                The special parameter "auto", signifies that the filter will -automatically select the output format depending on the output filter. -

                -

                Some examples follow. -

                -
                  -
                • -Convert input to unsigned 8-bit, stereo, packed: -
                   
                  aconvert=u8:stereo:packed
                  -
                  - -
                • -Convert input to unsigned 8-bit, automatically select out channel layout -and packing format: -
                   
                  aconvert=u8:auto:auto
                  -
                  -
                - - -

                5.2 aformat

                - -

                Convert the input audio to one of the specified formats. The framework will -negotiate the most appropriate format to minimize conversions. -

                -

                The filter accepts three lists of formats, separated by ":", in the form: -"sample_formats:channel_layouts:packing_formats". -

                -

                Elements in each list are separated by "," which has to be escaped in the -filtergraph specification. -

                -

                The special parameter "all", in place of a list of elements, signifies all -supported formats. -

                -

                Some examples follow: -

                 
                aformat=u8\\,s16:mono:packed
                -
                -aformat=s16:mono\\,stereo:all
                -
                - - -

                5.3 amerge

                - -

                Merge two audio streams into a single multi-channel stream. -

                -

                This filter does not need any argument. -

                -

                If the channel layouts of the inputs are disjoint, and therefore compatible, -the channel layout of the output will be set accordingly and the channels -will be reordered as necessary. If the channel layouts of the inputs are not -disjoint, the output will have all the channels of the first input then all -the channels of the second input, in that order, and the channel layout of -the output will be the default value corresponding to the total number of -channels. -

                -

                For example, if the first input is in 2.1 (FL+FR+LF) and the second input -is FC+BL+BR, then the output will be in 5.1, with the channels in the -following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the -first input, b1 is the first channel of the second input). -

                -

                On the other hand, if both input are in stereo, the output channels will be -in the default order: a1, a2, b1, b2, and the channel layout will be -arbitrarily set to 4.0, which may or may not be the expected value. -

                -

                Both inputs must have the same sample rate, format and packing. -

                -

                If inputs do not have the same duration, the output will stop with the -shortest. -

                -

                Example: merge two mono files into a stereo stream: -

                 
                amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
                -
                - - -

                5.4 anull

                - -

                Pass the audio source unchanged to the output. -

                - -

                5.5 aresample

                - -

                Resample the input audio to the specified sample rate. -

                -

                The filter accepts exactly one parameter, the output sample rate. If not -specified then the filter will automatically convert between its input -and output sample rates. -

                -

                For example, to resample the input audio to 44100Hz: -

                 
                aresample=44100
                -
                - - -

                5.6 ashowinfo

                - -

                Show a line containing various information for each input audio frame. -The input audio is not modified. -

                -

                The shown line contains a sequence of key/value pairs of the form -key:value. -

                -

                A description of each shown parameter follows: -

                -
                -
                n
                -

                sequential number of the input frame, starting from 0 -

                -
                -
                pts
                -

                presentation TimeStamp of the input frame, expressed as a number of -time base units. The time base unit depends on the filter input pad, and -is usually 1/sample_rate. -

                -
                -
                pts_time
                -

                presentation TimeStamp of the input frame, expressed as a number of -seconds -

                -
                -
                pos
                -

                position of the frame in the input stream, -1 if this information in -unavailable and/or meaningless (for example in case of synthetic audio) -

                -
                -
                fmt
                -

                sample format name -

                -
                -
                chlayout
                -

                channel layout description -

                -
                -
                nb_samples
                -

                number of samples (per each channel) contained in the filtered frame -

                -
                -
                rate
                -

                sample rate for the audio frame -

                -
                -
                planar
                -

                if the packing format is planar, 0 if packed -

                -
                -
                checksum
                -

                Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame -

                -
                -
                plane_checksum
                -

                Adler-32 checksum (printed in hexadecimal) for each input frame plane, -expressed in the form "[c0 c1 c2 c3 c4 c5 -c6 c7]" -

                -
                - - -

                5.7 asplit

                - -

                Pass on the input audio to two outputs. Both outputs are identical to -the input audio. -

                -

                For example: -

                 
                [in] asplit[out0], showaudio[out1]
                -
                - -

                will create two separate outputs from the same input, one cropped and -one padded. -

                - -

                5.8 astreamsync

                - -

                Forward two audio streams and control the order the buffers are forwarded. -

                -

                The argument to the filter is an expression deciding which stream should be -forwarded next: if the result is negative, the first stream is forwarded; if -the result is positive or zero, the second stream is forwarded. It can use -the following variables: -

                -
                -
                b1 b2
                -

                number of buffers forwarded so far on each stream -

                -
                s1 s2
                -

                number of samples forwarded so far on each stream -

                -
                t1 t2
                -

                current timestamp of each stream -

                -
                - -

                The default value is t1-t2, which means to always forward the stream -that has a smaller timestamp. -

                -

                Example: stress-test amerge by randomly sending buffers on the wrong -input, while avoiding too much of a desynchronization: -

                 
                amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
                -[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
                -[a2] [b2] amerge
                -
                - - -

                5.9 earwax

                - -

                Make audio easier to listen to on headphones. -

                -

                This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio -so that when listened to on headphones the stereo image is moved from -inside your head (standard for headphones) to outside and in front of -the listener (standard for speakers). -

                -

                Ported from SoX. -

                - -

                5.10 pan

                - -

                Mix channels with specific gain levels. The filter accepts the output -channel layout followed by a set of channels definitions. -

                -

                This filter is also designed to remap efficiently the channels of an audio -stream. -

                -

                The filter accepts parameters of the form: -"l:outdef:outdef:..." -

                -
                -
                l
                -

                output channel layout or number of channels -

                -
                -
                outdef
                -

                output channel specification, of the form: -"out_name=[gain*]in_name[+[gain*]in_name...]" -

                -
                -
                out_name
                -

                output channel to define, either a channel name (FL, FR, etc.) or a channel -number (c0, c1, etc.) -

                -
                -
                gain
                -

                multiplicative coefficient for the channel, 1 leaving the volume unchanged -

                -
                -
                in_name
                -

                input channel to use, see out_name for details; it is not possible to mix -named and numbered input channels -

                -
                - -

                If the ‘=’ in a channel specification is replaced by ‘<’, then the gains for -that specification will be renormalized so that the total is 1, thus -avoiding clipping noise. -

                - -

                5.10.1 Mixing examples

                - -

                For example, if you want to down-mix from stereo to mono, but with a bigger -factor for the left channel: -

                 
                pan=1:c0=0.9*c0+0.1*c1
                -
                - -

                A customized down-mix to stereo that works automatically for 3-, 4-, 5- and -7-channels surround: -

                 
                pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
                -
                - -

                Note that ffmpeg integrates a default down-mix (and up-mix) system -that should be preferred (see "-ac" option) unless you have very specific -needs. -

                - -

                5.10.2 Remapping examples

                - -

                The channel remapping will be effective if, and only if: -

                -
                  -
                • gain coefficients are zeroes or ones, -
                • only one input per channel output, -
                • the number of output channels is supported by libswresample (16 at the - moment) -
                - -

                If all these conditions are satisfied, the filter will notify the user ("Pure -channel mapping detected"), and use an optimized and lossless method to do the -remapping. -

                -

                For example, if you have a 5.1 source and want a stereo audio stream by -dropping the extra channels: -

                 
                pan="stereo: c0=FL : c1=FR"
                -
                - -

                Given the same source, you can also switch front left and front right channels -and keep the input channel layout: -

                 
                pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
                -
                - -

                If the input is a stereo audio stream, you can mute the front left channel (and -still keep the stereo channel layout) with: -

                 
                pan="stereo:c1=c1"
                -
                - -

                Still with a stereo audio stream input, you can copy the right channel in both -front left and right: -

                 
                pan="stereo: c0=FR : c1=FR"
                -
                - - -

                5.11 silencedetect

                - -

                Detect silence in an audio stream. -

                -

                This filter logs a message when it detects that the input audio volume is less -or equal to a noise tolerance value for a duration greater or equal to the -minimum detected noise duration. -

                -

                The printed times and duration are expressed in seconds. -

                -
                -
                duration, d
                -

                Set silence duration until notification (default is 2 seconds). -

                -
                -
                noise, n
                -

                Set noise tolerance. Can be specified in dB (in case "dB" is appended to the -specified value) or amplitude ratio. Default is -60dB, or 0.001. -

                -
                - -

                Detect 5 seconds of silence with -50dB noise tolerance: -

                 
                silencedetect=n=-50dB:d=5
                -
                - -

                Complete example with ffmpeg to detect silence with 0.0001 noise -tolerance in ‘silence.mp3’: -

                 
                ffmpeg -f lavfi -i amovie=silence.mp3,silencedetect=noise=0.0001 -f null -
                -
                - - -

                5.12 volume

                - -

                Adjust the input audio volume. -

                -

                The filter accepts exactly one parameter vol, which expresses -how the audio volume will be increased or decreased. -

                -

                Output values are clipped to the maximum value. -

                -

                If vol is expressed as a decimal number, the output audio -volume is given by the relation: -

                 
                output_volume = vol * input_volume
                -
                - -

                If vol is expressed as a decimal number followed by the string -"dB", the value represents the requested change in decibels of the -input audio power, and the output audio volume is given by the -relation: -

                 
                output_volume = 10^(vol/20) * input_volume
                -
                - -

                Otherwise vol is considered an expression and its evaluated -value is used for computing the output audio volume according to the -first relation. -

                -

                Default value for vol is 1.0. -

                - -

                5.12.1 Examples

                - -
                  -
                • -Half the input audio volume: -
                   
                  volume=0.5
                  -
                  - -

                  The above example is equivalent to: -

                   
                  volume=1/2
                  -
                  - -
                • -Decrease input audio power by 12 decibels: -
                   
                  volume=-12dB
                  -
                  -
                - - - -

                6. Audio Sources

                - -

                Below is a description of the currently available audio sources. -

                - -

                6.1 abuffer

                - -

                Buffer audio frames, and make them available to the filter chain. -

                -

                This source is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/asrc_abuffer.h’. -

                -

                It accepts the following mandatory parameters: -sample_rate:sample_fmt:channel_layout:packing -

                -
                -
                sample_rate
                -

                The sample rate of the incoming audio buffers. -

                -
                -
                sample_fmt
                -

                The sample format of the incoming audio buffers. -Either a sample format name or its corresponging integer representation from -the enum AVSampleFormat in ‘libavutil/samplefmt.h’ -

                -
                -
                channel_layout
                -

                The channel layout of the incoming audio buffers. -Either a channel layout name from channel_layout_map in -‘libavutil/audioconvert.c’ or its corresponding integer representation -from the AV_CH_LAYOUT_* macros in ‘libavutil/audioconvert.h’ -

                -
                -
                packing
                -

                Either "packed" or "planar", or their integer representation: 0 or 1 -respectively. -

                -
                -
                - -

                For example: -

                 
                abuffer=44100:s16:stereo:planar
                -
                - -

                will instruct the source to accept planar 16bit signed stereo at 44100Hz. -Since the sample format with name "s16" corresponds to the number -1 and the "stereo" channel layout corresponds to the value 3, this is -equivalent to: -

                 
                abuffer=44100:1:3:1
                -
                - - -

                6.2 aevalsrc

                - -

                Generate an audio signal specified by an expression. -

                -

                This source accepts in input one or more expressions (one for each -channel), which are evaluated and used to generate a corresponding -audio signal. -

                -

                It accepts the syntax: exprs[::options]. -exprs is a list of expressions separated by ":", one for each -separate channel. The output channel layout depends on the number of -provided expressions, up to 8 channels are supported. -

                -

                options is an optional sequence of key=value pairs, -separated by ":". -

                -

                The description of the accepted options follows. -

                -
                -
                duration, d
                -

                Set the minimum duration of the sourced audio. See the function -av_parse_time() for the accepted format. -Note that the resulting duration may be greater than the specified -duration, as the generated audio is always cut at the end of a -complete frame. -

                -

                If not specified, or the expressed duration is negative, the audio is -supposed to be generated forever. -

                -
                -
                nb_samples, n
                -

                Set the number of samples per channel per each output frame, -default to 1024. -

                -
                -
                sample_rate, s
                -

                Specify the sample rate, default to 44100. -

                -
                - -

                Each expression in exprs can contain the following constants: -

                -
                -
                n
                -

                number of the evaluated sample, starting from 0 -

                -
                -
                t
                -

                time of the evaluated sample expressed in seconds, starting from 0 -

                -
                -
                s
                -

                sample rate -

                -
                -
                - - -

                6.2.1 Examples

                - -
                  -
                • -Generate silence: -
                   
                  aevalsrc=0
                  -
                  - -
                • - -Generate a sin signal with frequency of 440 Hz, set sample rate to -8000 Hz: -
                   
                  aevalsrc="sin(440*2*PI*t)::s=8000"
                  -
                  - -
                • -Generate white noise: -
                   
                  aevalsrc="-2+random(0)"
                  -
                  - -
                • -Generate an amplitude modulated signal: -
                   
                  aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
                  -
                  - -
                • -Generate 2.5 Hz binaural beats on a 360 Hz carrier: -
                   
                  aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) : 0.1*sin(2*PI*(360+2.5/2)*t)"
                  -
                  - -
                - - -

                6.3 amovie

                - -

                Read an audio stream from a movie container. -

                -

                It accepts the syntax: movie_name[:options] where -movie_name is the name of the resource to read (not necessarily -a file but also a device or a stream accessed through some protocol), -and options is an optional sequence of key=value -pairs, separated by ":". -

                -

                The description of the accepted options follows. -

                -
                -
                format_name, f
                -

                Specify the format assumed for the movie to read, and can be either -the name of a container or an input device. If not specified the -format is guessed from movie_name or by probing. -

                -
                -
                seek_point, sp
                -

                Specify the seek point in seconds, the frames will be output -starting from this seek point, the parameter is evaluated with -av_strtod so the numerical value may be suffixed by an IS -postfix. Default value is "0". -

                -
                -
                stream_index, si
                -

                Specify the index of the audio stream to read. If the value is -1, -the best suited audio stream will be automatically selected. Default -value is "-1". -

                -
                -
                - - -

                6.4 anullsrc

                - -

                Null audio source, return unprocessed audio frames. It is mainly useful -as a template and to be employed in analysis / debugging tools, or as -the source for filters which ignore the input data (for example the sox -synth filter). -

                -

                It accepts an optional sequence of key=value pairs, -separated by ":". -

                -

                The description of the accepted options follows. -

                -
                -
                sample_rate, s
                -

                Specify the sample rate, and defaults to 44100. -

                -
                -
                channel_layout, cl
                -
                -

                Specify the channel layout, and can be either an integer or a string -representing a channel layout. The default value of channel_layout -is "stereo". -

                -

                Check the channel_layout_map definition in -‘libavcodec/audioconvert.c’ for the mapping between strings and -channel layout values. -

                -
                -
                nb_samples, n
                -

                Set the number of samples per requested frames. -

                -
                -
                - -

                Follow some examples: -

                 
                #  set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
                -anullsrc=r=48000:cl=4
                -
                -# same as
                -anullsrc=r=48000:cl=mono
                -
                - - - -

                7. Audio Sinks

                - -

                Below is a description of the currently available audio sinks. -

                - -

                7.1 abuffersink

                - -

                Buffer audio frames, and make them available to the end of filter chain. -

                -

                This sink is mainly intended for programmatic use, in particular -through the interface defined in ‘libavfilter/buffersink.h’. -

                -

                It requires a pointer to an AVABufferSinkContext structure, which -defines the incoming buffers’ formats, to be passed as the opaque -parameter to avfilter_init_filter for initialization. -

                - -

                7.2 anullsink

                - -

                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. -

                - - -

                8. Video Filters

                - -

                When you configure your FFmpeg build, you can disable any of the -existing filters using --disable-filters. -The configure output will show the video filters included in your -build. -

                -

                Below is a description of the currently available video filters. -

                - -

                8.1 ass

                - -

                Draw ASS (Advanced Substation Alpha) subtitles on top of input video -using the libass library. -

                -

                To enable compilation of this filter you need to configure FFmpeg with ---enable-libass. -

                -

                This filter accepts in input the name of the ass file to render. -

                -

                For example, to render the file ‘sub.ass’ on top of the input -video, use the command: -

                 
                ass=sub.ass
                -
                - - -

                8.2 blackframe

                - -

                Detect frames that are (almost) completely black. Can be useful to -detect chapter transitions or commercials. Output lines consist of -the frame number of the detected frame, the percentage of blackness, -the position in the file if known or -1 and the timestamp in seconds. -

                -

                In order to display the output lines, you need to set the loglevel at -least to the AV_LOG_INFO value. -

                -

                The filter accepts the syntax: -

                 
                blackframe[=amount:[threshold]]
                -
                - -

                amount is the percentage of the pixels that have to be below the -threshold, and defaults to 98. -

                -

                threshold is the threshold below which a pixel value is -considered black, and defaults to 32. -

                - -

                8.3 boxblur

                - -

                Apply boxblur algorithm to the input video. -

                -

                This filter accepts the parameters: -luma_radius:luma_power:chroma_radius:chroma_power:alpha_radius:alpha_power -

                -

                Chroma and alpha parameters are optional, if not specified they default -to the corresponding values set for luma_radius and -luma_power. -

                -

                luma_radius, chroma_radius, and alpha_radius represent -the radius in pixels of the box used for blurring the corresponding -input plane. They are expressions, and can contain the following -constants: -

                -
                w, h
                -

                the input width and height in pixels -

                -
                -
                cw, ch
                -

                the input chroma image width and height in pixels -

                -
                -
                hsub, vsub
                -

                horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                -
                - -

                The radius must be a non-negative number, and must not be greater than -the value of the expression min(w,h)/2 for the luma and alpha planes, -and of min(cw,ch)/2 for the chroma planes. -

                -

                luma_power, chroma_power, and alpha_power represent -how many times the boxblur filter is applied to the corresponding -plane. -

                -

                Some examples follow: -

                -
                  -
                • -Apply a boxblur filter with luma, chroma, and alpha radius -set to 2: -
                   
                  boxblur=2:1
                  -
                  - -
                • -Set luma radius to 2, alpha and chroma radius to 0 -
                   
                  boxblur=2:1:0:0:0:0
                  -
                  - -
                • -Set luma and chroma radius to a fraction of the video dimension -
                   
                  boxblur=min(h\,w)/10:1:min(cw\,ch)/10:1
                  -
                  - -
                - - -

                8.4 copy

                - -

                Copy the input source unchanged to the output. Mainly useful for -testing purposes. -

                - -

                8.5 crop

                - -

                Crop the input video to out_w:out_h:x:y. -

                -

                The parameters are expressions containing the following constants: -

                -
                -
                x, y
                -

                the computed values for x and y. They are evaluated for -each new frame. -

                -
                -
                in_w, in_h
                -

                the input width and height -

                -
                -
                iw, ih
                -

                same as in_w and in_h -

                -
                -
                out_w, out_h
                -

                the output (cropped) width and height -

                -
                -
                ow, oh
                -

                same as out_w and out_h -

                -
                -
                a
                -

                same as iw / ih -

                -
                -
                sar
                -

                input sample aspect ratio -

                -
                -
                dar
                -

                input display aspect ratio, it is the same as (iw / ih) * sar -

                -
                -
                hsub, vsub
                -

                horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                -
                -
                n
                -

                the number of input frame, starting from 0 -

                -
                -
                pos
                -

                the position in the file of the input frame, NAN if unknown -

                -
                -
                t
                -

                timestamp expressed in seconds, NAN if the input timestamp is unknown -

                -
                -
                - -

                The out_w and out_h parameters specify the expressions for -the width and height of the output (cropped) video. They are -evaluated just at the configuration of the filter. -

                -

                The default value of out_w is "in_w", and the default value of -out_h is "in_h". -

                -

                The expression for out_w may depend on the value of out_h, -and the expression for out_h may depend on out_w, but they -cannot depend on x and y, as x and y are -evaluated after out_w and out_h. -

                -

                The x and y parameters specify the expressions for the -position of the top-left corner of the output (non-cropped) area. They -are evaluated for each frame. If the evaluated value is not valid, it -is approximated to the nearest valid value. -

                -

                The default value of x is "(in_w-out_w)/2", and the default -value for y is "(in_h-out_h)/2", which set the cropped area at -the center of the input image. -

                -

                The expression for x may depend on y, and the expression -for y may depend on x. -

                -

                Follow some examples: -

                 
                # crop the central input area with size 100x100
                -crop=100:100
                -
                -# crop the central input area with size 2/3 of the input video
                -"crop=2/3*in_w:2/3*in_h"
                -
                -# crop the input video central square
                -crop=in_h
                -
                -# delimit the rectangle with the top-left corner placed at position
                -# 100:100 and the right-bottom corner corresponding to the right-bottom
                -# corner of the input image.
                -crop=in_w-100:in_h-100:100:100
                -
                -# crop 10 pixels from the left and right borders, and 20 pixels from
                -# the top and bottom borders
                -"crop=in_w-2*10:in_h-2*20"
                -
                -# keep only the bottom right quarter of the input image
                -"crop=in_w/2:in_h/2:in_w/2:in_h/2"
                -
                -# crop height for getting Greek harmony
                -"crop=in_w:1/PHI*in_w"
                -
                -# trembling effect
                -"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)"
                -
                -# erratic camera effect depending on timestamp
                -"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"
                -
                -# set x depending on the value of y
                -"crop=in_w/2:in_h/2:y:10+10*sin(n/10)"
                -
                - - -

                8.6 cropdetect

                - -

                Auto-detect crop size. -

                -

                Calculate necessary cropping parameters and prints the recommended -parameters through the logging system. The detected dimensions -correspond to the non-black area of the input video. -

                -

                It accepts the syntax: -

                 
                cropdetect[=limit[:round[:reset]]]
                -
                - -
                -
                limit
                -

                Threshold, which can be optionally specified from nothing (0) to -everything (255), defaults to 24. -

                -
                -
                round
                -

                Value which the width/height should be divisible by, defaults to -16. The offset is automatically adjusted to center the video. Use 2 to -get only even dimensions (needed for 4:2:2 video). 16 is best when -encoding to most video codecs. -

                -
                -
                reset
                -

                Counter that determines after how many frames cropdetect will reset -the previously detected largest video area and start over to detect -the current optimal crop area. Defaults to 0. -

                -

                This can be useful when channel logos distort the video area. 0 -indicates never reset and return the largest area encountered during -playback. -

                -
                - - -

                8.7 delogo

                - -

                Suppress a TV station logo by a simple interpolation of the surrounding -pixels. Just set a rectangle covering the logo and watch it disappear -(and sometimes something even uglier appear - your mileage may vary). -

                -

                The filter accepts parameters as a string of the form -"x:y:w:h:band", or as a list of -key=value pairs, separated by ":". -

                -

                The description of the accepted parameters follows. -

                -
                -
                x, y
                -

                Specify the top left corner coordinates of the logo. They must be -specified. -

                -
                -
                w, h
                -

                Specify the width and height of the logo to clear. They must be -specified. -

                -
                -
                band, t
                -

                Specify the thickness of the fuzzy edge of the rectangle (added to -w and h). The default value is 4. -

                -
                -
                show
                -

                When set to 1, a green rectangle is drawn on the screen to simplify -finding the right x, y, w, h parameters, and -band is set to 4. The default value is 0. -

                -
                -
                - -

                Some examples follow. -

                -
                  -
                • -Set a rectangle covering the area with top left corner coordinates 0,0 -and size 100x77, setting a band of size 10: -
                   
                  delogo=0:0:100:77:10
                  -
                  - -
                • -As the previous example, but use named options: -
                   
                  delogo=x=0:y=0:w=100:h=77:band=10
                  -
                  - -
                - - -

                8.8 deshake

                - -

                Attempt to fix small changes in horizontal and/or vertical shift. This -filter helps remove camera shake from hand-holding a camera, bumping a -tripod, moving on a vehicle, etc. -

                -

                The filter accepts parameters as a string of the form -"x:y:w:h:rx:ry:edge:blocksize:contrast:search:filename" -

                -

                A description of the accepted parameters follows. -

                -
                -
                x, y, w, h
                -

                Specify a rectangular area where to limit the search for motion -vectors. -If desired the search for motion vectors can be limited to a -rectangular area of the frame defined by its top left corner, width -and height. These parameters have the same meaning as the drawbox -filter which can be used to visualise the position of the bounding -box. -

                -

                This is useful when simultaneous movement of subjects within the frame -might be confused for camera motion by the motion vector search. -

                -

                If any or all of x, y, w and h are set to -1 -then the full frame is used. This allows later options to be set -without specifying the bounding box for the motion vector search. -

                -

                Default - search the whole frame. -

                -
                -
                rx, ry
                -

                Specify the maximum extent of movement in x and y directions in the -range 0-64 pixels. Default 16. -

                -
                -
                edge
                -

                Specify how to generate pixels to fill blanks at the edge of the -frame. An integer from 0 to 3 as follows: -

                -
                0
                -

                Fill zeroes at blank locations -

                -
                1
                -

                Original image at blank locations -

                -
                2
                -

                Extruded edge value at blank locations -

                -
                3
                -

                Mirrored edge at blank locations -

                -
                - -

                The default setting is mirror edge at blank locations. -

                -
                -
                blocksize
                -

                Specify the blocksize to use for motion search. Range 4-128 pixels, -default 8. -

                -
                -
                contrast
                -

                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. -

                -
                -
                search
                -

                Specify the search strategy 0 = exhaustive search, 1 = less exhaustive -search. Default - exhaustive search. -

                -
                -
                filename
                -

                If set then a detailed log of the motion search is written to the -specified file. -

                -
                -
                - - -

                8.9 drawbox

                - -

                Draw a colored box on the input image. -

                -

                It accepts the syntax: -

                 
                drawbox=x:y:width:height:color
                -
                - -
                -
                x, y
                -

                Specify the top left corner coordinates of the box. Default to 0. -

                -
                -
                width, height
                -

                Specify the width and height of the box, if 0 they are interpreted as -the input width and height. Default to 0. -

                -
                -
                color
                -

                Specify the color of the box to write, it can be the name of a color -(case insensitive match) or a 0xRRGGBB[AA] sequence. -

                -
                - -

                Follow some examples: -

                 
                # draw a black box around the edge of the input image
                -drawbox
                -
                -# draw a box with color red and an opacity of 50%
                -drawbox=10:20:200:60:red@0.5"
                -
                - - -

                8.10 drawtext

                - -

                Draw text string or text from specified file on top of video using the -libfreetype library. -

                -

                To enable compilation of this filter you need to configure FFmpeg with ---enable-libfreetype. -

                -

                The filter also recognizes strftime() sequences in the provided text -and expands them accordingly. Check the documentation of strftime(). -

                -

                The filter accepts parameters as a list of key=value pairs, -separated by ":". -

                -

                The description of the accepted parameters follows. -

                -
                -
                fontfile
                -

                The font file to be used for drawing text. Path must be included. -This parameter is mandatory. -

                -
                -
                text
                -

                The text string to be drawn. The text must be a sequence of UTF-8 -encoded characters. -This parameter is mandatory if no file is specified with the parameter -textfile. -

                -
                -
                textfile
                -

                A text file containing text to be drawn. The text must be a sequence -of UTF-8 encoded characters. -

                -

                This parameter is mandatory if no text string is specified with the -parameter text. -

                -

                If both text and textfile are specified, an error is thrown. -

                -
                -
                x, y
                -

                The expressions which specify the offsets where text will be drawn -within the video frame. They are relative to the top/left border of the -output image. -

                -

                The default value of x and y is "0". -

                -

                See below for the list of accepted constants. -

                -
                -
                fontsize
                -

                The font size to be used for drawing text. -The default value of fontsize is 16. -

                -
                -
                fontcolor
                -

                The color to be used for drawing fonts. -Either a string (e.g. "red") or in 0xRRGGBB[AA] format -(e.g. "0xff000033"), possibly followed by an alpha specifier. -The default value of fontcolor is "black". -

                -
                -
                boxcolor
                -

                The color to be used for drawing box around text. -Either a string (e.g. "yellow") or in 0xRRGGBB[AA] format -(e.g. "0xff00ff"), possibly followed by an alpha specifier. -The default value of boxcolor is "white". -

                -
                -
                box
                -

                Used to draw a box around text using background color. -Value should be either 1 (enable) or 0 (disable). -The default value of box is 0. -

                -
                -
                shadowx, shadowy
                -

                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". -

                -
                -
                shadowcolor
                -

                The color to be used for drawing a shadow behind the drawn text. It -can be a color name (e.g. "yellow") or a string in the 0xRRGGBB[AA] -form (e.g. "0xff00ff"), possibly followed by an alpha specifier. -The default value of shadowcolor is "black". -

                -
                -
                ft_load_flags
                -

                Flags to be used for loading the fonts. -

                -

                The flags map the corresponding flags supported by libfreetype, and are -a combination of the following values: -

                -
                default
                -
                no_scale
                -
                no_hinting
                -
                render
                -
                no_bitmap
                -
                vertical_layout
                -
                force_autohint
                -
                crop_bitmap
                -
                pedantic
                -
                ignore_global_advance_width
                -
                no_recurse
                -
                ignore_transform
                -
                monochrome
                -
                linear_design
                -
                no_autohint
                -
                end table
                -
                - -

                Default value is "render". -

                -

                For more information consult the documentation for the FT_LOAD_* -libfreetype flags. -

                -
                -
                tabsize
                -

                The size in number of spaces to use for rendering the tab. -Default value is 4. -

                -
                - -

                The parameters for x and y are expressions containing the -following constants: -

                -
                -
                W, H
                -

                the input width and height -

                -
                -
                tw, text_w
                -

                the width of the rendered text -

                -
                -
                th, text_h
                -

                the height of the rendered text -

                -
                -
                lh, line_h
                -

                the height of each text line -

                -
                -
                sar
                -

                input sample aspect ratio -

                -
                -
                dar
                -

                input display aspect ratio, it is the same as (w / h) * sar -

                -
                -
                hsub, vsub
                -

                horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                -
                -
                max_glyph_w
                -

                maximum glyph width, that is the maximum width for all the glyphs -contained in the rendered text -

                -
                -
                max_glyph_h
                -

                maximum glyph height, that is the maximum height for all the glyphs -contained in the rendered text, it is equivalent to ascent - -descent. -

                -
                -
                max_glyph_a, ascent
                -
                -

                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. -

                -
                -
                max_glyph_d, descent
                -

                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. -

                -
                -
                n
                -

                the number of input frame, starting from 0 -

                -
                -
                t
                -

                timestamp expressed in seconds, NAN if the input timestamp is unknown -

                -
                -
                timecode
                -

                initial timecode representation in "hh:mm:ss[:;.]ff" format. It can be used -with or without text parameter. rate option must be specified. -Note that timecode options are not effective if FFmpeg is build with ---disable-avcodec. -

                -
                -
                r, rate
                -

                frame rate (timecode only) -

                -
                - -

                Some examples follow. -

                -
                  -
                • -Draw "Test Text" with font FreeSerif, using the default values for the -optional parameters. - -
                   
                  drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
                  -
                  - -
                • -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%. - -
                   
                  drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
                  -          x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
                  -
                  - -

                  Note that the double quotes are not necessary if spaces are not used -within the parameter list. -

                  -
                • -Show the text at the center of the video frame: -
                   
                  drawtext=fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
                  -
                  - -
                • -Show a text line sliding from right to left in the last row of the video -frame. The file ‘LONG_LINE’ is assumed to contain a single line -with no newlines. -
                   
                  drawtext=fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t
                  -
                  - -
                • -Show the content of file ‘CREDITS’ off the bottom of the frame and scroll up. -
                   
                  drawtext=fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
                  -
                  - -
                • -Draw a single green letter "g", at the center of the input video. -The glyph baseline is placed at half screen height. -
                   
                  drawtext=fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent
                  -
                  - -
                - -

                For more information about libfreetype, check: -http://www.freetype.org/. -

                - -

                8.11 fade

                - -

                Apply fade-in/out effect to input video. -

                -

                It accepts the parameters: -type:start_frame:nb_frames[:options] -

                -

                type specifies if the effect type, can be either "in" for -fade-in, or "out" for a fade-out effect. -

                -

                start_frame specifies the number of the start frame for starting -to apply the fade effect. -

                -

                nb_frames specifies the number of frames for which the fade -effect has to last. At the end of the fade-in effect the output video -will have the same intensity as the input video, at the end of the -fade-out transition the output video will be completely black. -

                -

                options is an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                -
                -
                type, t
                -

                See type. -

                -
                -
                start_frame, s
                -

                See start_frame. -

                -
                -
                nb_frames, n
                -

                See nb_frames. -

                -
                -
                alpha
                -

                If set to 1, fade only alpha channel, if one exists on the input. -Default value is 0. -

                -
                - -

                A few usage examples follow, usable too as test scenarios. -

                 
                # fade in first 30 frames of video
                -fade=in:0:30
                -
                -# fade out last 45 frames of a 200-frame video
                -fade=out:155:45
                -
                -# fade in first 25 frames and fade out last 25 frames of a 1000-frame video
                -fade=in:0:25, fade=out:975:25
                -
                -# make first 5 frames black, then fade in from frame 5-24
                -fade=in:5:20
                -
                -# fade in alpha over first 25 frames of video
                -fade=in:0:25:alpha=1
                -
                - - -

                8.12 fieldorder

                - -

                Transform the field order of the input video. -

                -

                It accepts one parameter which specifies the required field order that -the input interlaced video will be transformed to. The parameter can -assume one of the following values: -

                -
                -
                0 or bff
                -

                output bottom field first -

                -
                1 or tff
                -

                output top field first -

                -
                - -

                Default value is "tff". -

                -

                Transformation is achieved by shifting the picture content up or down -by one line, and filling the remaining line with appropriate picture content. -This method is consistent with most broadcast field order converters. -

                -

                If the input video is not flagged as being interlaced, or it is already -flagged as being of the required output field order then this filter does -not alter the incoming video. -

                -

                This filter is very useful when converting to or from PAL DV material, -which is bottom field first. -

                -

                For example: -

                 
                ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
                -
                - - -

                8.13 fifo

                - -

                Buffer input images and send them when they are requested. -

                -

                This filter is mainly useful when auto-inserted by the libavfilter -framework. -

                -

                The filter does not take parameters. -

                - -

                8.14 format

                - -

                Convert the input video to one of the specified pixel formats. -Libavfilter will try to pick one that is supported for the input to -the next filter. -

                -

                The filter accepts a list of pixel format names, separated by ":", -for example "yuv420p:monow:rgb24". -

                -

                Some examples follow: -

                 
                # convert the input video to the format "yuv420p"
                -format=yuv420p
                -
                -# convert the input video to any of the formats in the list
                -format=yuv420p:yuv444p:yuv410p
                -
                - -

                -

                -

                8.15 frei0r

                - -

                Apply a frei0r effect to the input video. -

                -

                To enable compilation of this filter you need to install the frei0r -header and configure FFmpeg with --enable-frei0r. -

                -

                The filter supports the syntax: -

                 
                filter_name[{:|=}param1:param2:...:paramN]
                -
                - -

                filter_name is the name to the frei0r effect to load. If the -environment variable FREI0R_PATH is defined, the frei0r effect -is searched in each one of the directories specified by the colon -separated list in FREIOR_PATH, otherwise in the standard frei0r -paths, which are in this order: ‘HOME/.frei0r-1/lib/’, -‘/usr/local/lib/frei0r-1/’, ‘/usr/lib/frei0r-1/’. -

                -

                param1, param2, ... , paramN specify the parameters -for the frei0r effect. -

                -

                A frei0r effect parameter can be a boolean (whose values are specified -with "y" and "n"), a double, a color (specified by the syntax -R/G/B, R, G, and B being float -numbers from 0.0 to 1.0) or by an av_parse_color() color -description), a position (specified by the syntax X/Y, -X and Y being float numbers) and a string. -

                -

                The number and kind of parameters depend on the loaded effect. If an -effect parameter is not specified the default value is set. -

                -

                Some examples follow: -

                 
                # apply the distort0r effect, set the first two double parameters
                -frei0r=distort0r:0.5:0.01
                -
                -# apply the colordistance effect, takes a color as first parameter
                -frei0r=colordistance:0.2/0.3/0.4
                -frei0r=colordistance:violet
                -frei0r=colordistance:0x112233
                -
                -# apply the perspective effect, specify the top left and top right
                -# image positions
                -frei0r=perspective:0.2/0.2:0.8/0.2
                -
                - -

                For more information see: -http://piksel.org/frei0r -

                - -

                8.16 gradfun

                - -

                Fix the banding artifacts that are sometimes introduced into nearly flat -regions by truncation to 8bit color depth. -Interpolate the gradients that should go where the bands are, and -dither them. -

                -

                This filter is designed for playback only. Do not use it prior to -lossy compression, because compression tends to lose the dither and -bring back the bands. -

                -

                The filter takes two optional parameters, separated by ’:’: -strength:radius -

                -

                strength is the maximum amount by which the filter will change -any one pixel. Also the threshold for detecting nearly flat -regions. Acceptable values range from .51 to 255, default value is -1.2, out-of-range values will be clipped to the valid range. -

                -

                radius is the neighborhood to fit the gradient to. A larger -radius makes for smoother gradients, but also prevents the filter from -modifying the pixels near detailed regions. Acceptable values are -8-32, default value is 16, out-of-range values will be clipped to the -valid range. -

                -
                 
                # default parameters
                -gradfun=1.2:16
                -
                -# omitting radius
                -gradfun=1.2
                -
                - - -

                8.17 hflip

                - -

                Flip the input video horizontally. -

                -

                For example to horizontally flip the input video with ffmpeg: -

                 
                ffmpeg -i in.avi -vf "hflip" out.avi
                -
                - - -

                8.18 hqdn3d

                - -

                High precision/quality 3d denoise filter. This filter aims to reduce -image noise producing smooth images and making still images really -still. It should enhance compressibility. -

                -

                It accepts the following optional parameters: -luma_spatial:chroma_spatial:luma_tmp:chroma_tmp -

                -
                -
                luma_spatial
                -

                a non-negative float number which specifies spatial luma strength, -defaults to 4.0 -

                -
                -
                chroma_spatial
                -

                a non-negative float number which specifies spatial chroma strength, -defaults to 3.0*luma_spatial/4.0 -

                -
                -
                luma_tmp
                -

                a float number which specifies luma temporal strength, defaults to -6.0*luma_spatial/4.0 -

                -
                -
                chroma_tmp
                -

                a float number which specifies chroma temporal strength, defaults to -luma_tmp*chroma_spatial/luma_spatial -

                -
                - - -

                8.19 lut, lutrgb, lutyuv

                - -

                Compute a look-up table for binding each pixel component input value -to an output value, and apply it to input video. -

                -

                lutyuv applies a lookup table to a YUV input video, lutrgb -to an RGB input video. -

                -

                These filters accept in input a ":"-separated list of options, which -specify the expressions used for computing the lookup table for the -corresponding pixel component values. -

                -

                The lut filter requires either YUV or RGB pixel formats in -input, and accepts the options: -

                -
                c0
                -

                first pixel component -

                -
                c1
                -

                second pixel component -

                -
                c2
                -

                third pixel component -

                -
                c3
                -

                fourth pixel component, corresponds to the alpha component -

                -
                - -

                The exact component associated to each option depends on the format in -input. -

                -

                The lutrgb filter requires RGB pixel formats in input, and -accepts the options: -

                -
                r
                -

                red component -

                -
                g
                -

                green component -

                -
                b
                -

                blue component -

                -
                a
                -

                alpha component -

                -
                - -

                The lutyuv filter requires YUV pixel formats in input, and -accepts the options: -

                -
                y
                -

                Y/luminance component -

                -
                u
                -

                U/Cb component -

                -
                v
                -

                V/Cr component -

                -
                a
                -

                alpha component -

                -
                - -

                The expressions can contain the following constants and functions: -

                -
                -
                w, h
                -

                the input width and height -

                -
                -
                val
                -

                input value for the pixel component -

                -
                -
                clipval
                -

                the input value clipped in the minval-maxval range -

                -
                -
                maxval
                -

                maximum value for the pixel component -

                -
                -
                minval
                -

                minimum value for the pixel component -

                -
                -
                negval
                -

                the negated value for the pixel component value clipped in the -minval-maxval range , it corresponds to the expression -"maxval-clipval+minval" -

                -
                -
                clip(val)
                -

                the computed value in val clipped in the -minval-maxval range -

                -
                -
                gammaval(gamma)
                -

                the computed gamma correction value of the pixel component value -clipped in the minval-maxval range, corresponds to the -expression -"pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval" -

                -
                -
                - -

                All expressions default to "val". -

                -

                Some examples follow: -

                 
                # negate input video
                -lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
                -lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
                -
                -# the above is the same as
                -lutrgb="r=negval:g=negval:b=negval"
                -lutyuv="y=negval:u=negval:v=negval"
                -
                -# negate luminance
                -lutyuv=y=negval
                -
                -# remove chroma components, turns the video into a graytone image
                -lutyuv="u=128:v=128"
                -
                -# apply a luma burning effect
                -lutyuv="y=2*val"
                -
                -# remove green and blue components
                -lutrgb="g=0:b=0"
                -
                -# set a constant alpha channel value on input
                -format=rgba,lutrgb=a="maxval-minval/2"
                -
                -# correct luminance gamma by a 0.5 factor
                -lutyuv=y=gammaval(0.5)
                -
                - - -

                8.20 mp

                - -

                Apply an MPlayer filter to the input video. -

                -

                This filter provides a wrapper around most of the filters of -MPlayer/MEncoder. -

                -

                This wrapper is considered experimental. Some of the wrapped filters -may not work properly and we may drop support for them, as they will -be implemented natively into FFmpeg. Thus you should avoid -depending on them when writing portable scripts. -

                -

                The filters accepts the parameters: -filter_name[:=]filter_params -

                -

                filter_name is the name of a supported MPlayer filter, -filter_params is a string containing the parameters accepted by -the named filter. -

                -

                The list of the currently supported filters follows: -

                -
                2xsai
                -
                decimate
                -
                denoise3d
                -
                detc
                -
                dint
                -
                divtc
                -
                down3dright
                -
                dsize
                -
                eq2
                -
                eq
                -
                field
                -
                fil
                -
                fixpts
                -
                framestep
                -
                fspp
                -
                geq
                -
                harddup
                -
                hqdn3d
                -
                hue
                -
                il
                -
                ilpack
                -
                ivtc
                -
                kerndeint
                -
                mcdeint
                -
                mirror
                -
                noise
                -
                ow
                -
                palette
                -
                perspective
                -
                phase
                -
                pp7
                -
                pullup
                -
                qp
                -
                rectangle
                -
                remove-logo
                -
                rotate
                -
                sab
                -
                screenshot
                -
                smartblur
                -
                softpulldown
                -
                softskip
                -
                spp
                -
                swapuv
                -
                telecine
                -
                tile
                -
                tinterlace
                -
                unsharp
                -
                uspp
                -
                yuvcsp
                -
                yvu9
                -
                - -

                The parameter syntax and behavior for the listed filters are the same -of the corresponding MPlayer filters. For detailed instructions check -the "VIDEO FILTERS" section in the MPlayer manual. -

                -

                Some examples follow: -

                 
                # remove a logo by interpolating the surrounding pixels
                -mp=delogo=200:200:80:20:1
                -
                -# adjust gamma, brightness, contrast
                -mp=eq2=1.0:2:0.5
                -
                -# tweak hue and saturation
                -mp=hue=100:-10
                -
                - -

                See also mplayer(1), http://www.mplayerhq.hu/. -

                - -

                8.21 negate

                - -

                Negate input video. -

                -

                This filter accepts an integer in input, if non-zero it negates the -alpha component (if available). The default value in input is 0. -

                - -

                8.22 noformat

                - -

                Force libavfilter not to use any of the specified pixel formats for the -input to the next filter. -

                -

                The filter accepts a list of pixel format names, separated by ":", -for example "yuv420p:monow:rgb24". -

                -

                Some examples follow: -

                 
                # force libavfilter to use a format different from "yuv420p" for the
                -# input to the vflip filter
                -noformat=yuv420p,vflip
                -
                -# convert the input video to any of the formats not contained in the list
                -noformat=yuv420p:yuv444p:yuv410p
                -
                - - -

                8.23 null

                - -

                Pass the video source unchanged to the output. -

                - -

                8.24 ocv

                - -

                Apply video transform using libopencv. -

                -

                To enable this filter install libopencv library and headers and -configure FFmpeg with --enable-libopencv. -

                -

                The filter takes the parameters: filter_name{:=}filter_params. -

                -

                filter_name is the name of the libopencv filter to apply. -

                -

                filter_params specifies the parameters to pass to the libopencv -filter. If not specified the default values are assumed. -

                -

                Refer to the official libopencv documentation for more precise -information: -http://opencv.willowgarage.com/documentation/c/image_filtering.html -

                -

                Follows the list of supported libopencv filters. -

                -

                -

                -

                8.24.1 dilate

                - -

                Dilate an image by using a specific structuring element. -This filter corresponds to the libopencv function cvDilate. -

                -

                It accepts the parameters: struct_el:nb_iterations. -

                -

                struct_el represents a structuring element, and has the syntax: -colsxrows+anchor_xxanchor_y/shape -

                -

                cols and rows represent the number of columns and rows of -the structuring element, anchor_x and anchor_y the anchor -point, and shape the shape for the structuring element, and -can be one of the values "rect", "cross", "ellipse", "custom". -

                -

                If the value for shape is "custom", it must be followed by a -string of the form "=filename". The file with name -filename is assumed to represent a binary image, with each -printable character corresponding to a bright pixel. When a custom -shape is used, cols and rows are ignored, the number -or columns and rows of the read file are assumed instead. -

                -

                The default value for struct_el is "3x3+0x0/rect". -

                -

                nb_iterations specifies the number of times the transform is -applied to the image, and defaults to 1. -

                -

                Follow some example: -

                 
                # use the default values
                -ocv=dilate
                -
                -# dilate using a structuring element with a 5x5 cross, iterate two times
                -ocv=dilate=5x5+2x2/cross:2
                -
                -# read the shape from the file diamond.shape, iterate two times
                -# the file diamond.shape may contain a pattern of characters like this:
                -#   *
                -#  ***
                -# *****
                -#  ***
                -#   *
                -# the specified cols and rows are ignored (but not the anchor point coordinates)
                -ocv=0x0+2x2/custom=diamond.shape:2
                -
                - - -

                8.24.2 erode

                - -

                Erode an image by using a specific structuring element. -This filter corresponds to the libopencv function cvErode. -

                -

                The filter accepts the parameters: struct_el:nb_iterations, -with the same syntax and semantics as the dilate filter. -

                - -

                8.24.3 smooth

                - -

                Smooth the input video. -

                -

                The filter takes the following parameters: -type:param1:param2:param3:param4. -

                -

                type is the type of smooth filter to apply, and can be one of -the following values: "blur", "blur_no_scale", "median", "gaussian", -"bilateral". The default value is "gaussian". -

                -

                param1, param2, param3, and param4 are -parameters whose meanings depend on smooth type. param1 and -param2 accept integer positive values or 0, param3 and -param4 accept float values. -

                -

                The default value for param1 is 3, the default value for the -other parameters is 0. -

                -

                These parameters correspond to the parameters assigned to the -libopencv function cvSmooth. -

                -

                -

                -

                8.25 overlay

                - -

                Overlay one video on top of another. -

                -

                It takes two inputs and one output, the first input is the "main" -video on which the second input is overlayed. -

                -

                It accepts the parameters: x:y[:options]. -

                -

                x is the x coordinate of the overlayed video on the main video, -y is the y coordinate. x and y are expressions containing -the following parameters: -

                -
                -
                main_w, main_h
                -

                main input width and height -

                -
                -
                W, H
                -

                same as main_w and main_h -

                -
                -
                overlay_w, overlay_h
                -

                overlay input width and height -

                -
                -
                w, h
                -

                same as overlay_w and overlay_h -

                -
                - -

                options is an optional list of key=value pairs, -separated by ":". -

                -

                The description of the accepted options follows. -

                -
                -
                rgb
                -

                If set to 1, force the filter to accept inputs in the RGB -color space. Default value is 0. -

                -
                - -

                Be aware that frames are taken from each input video in timestamp -order, hence, if their initial timestamps differ, it is a a good idea -to pass the two inputs through a setpts=PTS-STARTPTS filter to -have them begin in the same zero timestamp, as it does the example for -the movie filter. -

                -

                Follow some examples: -

                 
                # draw the overlay at 10 pixels from the bottom right
                -# corner of the main video.
                -overlay=main_w-overlay_w-10:main_h-overlay_h-10
                -
                -# insert a transparent PNG logo in the bottom left corner of the input
                -movie=logo.png [logo];
                -[in][logo] overlay=10:main_h-overlay_h-10 [out]
                -
                -# insert 2 different transparent PNG logos (second logo on bottom
                -# right corner):
                -movie=logo1.png [logo1];
                -movie=logo2.png [logo2];
                -[in][logo1]       overlay=10:H-h-10 [in+logo1];
                -[in+logo1][logo2] overlay=W-w-10:H-h-10 [out]
                -
                -# add a transparent color layer on top of the main video,
                -# WxH specifies the size of the main input to the overlay filter
                -color=red.3:WxH [over]; [in][over] overlay [out]
                -
                - -

                You can chain together more overlays but the efficiency of such -approach is yet to be tested. -

                - -

                8.26 pad

                - -

                Add paddings to the input image, and places the original input at the -given coordinates x, y. -

                -

                It accepts the following parameters: -width:height:x:y:color. -

                -

                The parameters width, height, x, and y are -expressions containing the following constants: -

                -
                -
                in_w, in_h
                -

                the input video width and height -

                -
                -
                iw, ih
                -

                same as in_w and in_h -

                -
                -
                out_w, out_h
                -

                the output width and height, that is the size of the padded area as -specified by the width and height expressions -

                -
                -
                ow, oh
                -

                same as out_w and out_h -

                -
                -
                x, y
                -

                x and y offsets as specified by the x and y -expressions, or NAN if not yet specified -

                -
                -
                a
                -

                same as iw / ih -

                -
                -
                sar
                -

                input sample aspect ratio -

                -
                -
                dar
                -

                input display aspect ratio, it is the same as (iw / ih) * sar -

                -
                -
                hsub, vsub
                -

                horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                -
                - -

                Follows the description of the accepted parameters. -

                -
                -
                width, height
                -
                -

                Specify the size of the output image with the paddings added. If the -value for width or height is 0, the corresponding input size -is used for the output. -

                -

                The width expression can reference the value set by the -height expression, and vice versa. -

                -

                The default value of width and height is 0. -

                -
                -
                x, y
                -
                -

                Specify the offsets where to place the input image in the padded area -with respect to the top/left border of the output image. -

                -

                The x expression can reference the value set by the y -expression, and vice versa. -

                -

                The default value of x and y is 0. -

                -
                -
                color
                -
                -

                Specify the color of the padded area, it can be the name of a color -(case insensitive match) or a 0xRRGGBB[AA] sequence. -

                -

                The default value of color is "black". -

                -
                -
                - -

                Some examples follow: -

                -
                 
                # Add paddings with color "violet" to the input video. Output video
                -# size is 640x480, the top-left corner of the input video is placed at
                -# column 0, row 40.
                -pad=640:480:0:40:violet
                -
                -# pad the input to get an output with dimensions increased bt 3/2,
                -# and put the input video at the center of the padded area
                -pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
                -
                -# pad the input to get a squared output with size equal to the maximum
                -# value between the input width and height, and put the input video at
                -# the center of the padded area
                -pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
                -
                -# pad the input to get a final w/h ratio of 16:9
                -pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
                -
                -# for anamorphic video, in order to set the output display aspect ratio,
                -# it is necessary to use sar in the expression, according to the relation:
                -# (ih * X / ih) * sar = output_dar
                -# X = output_dar / sar
                -pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
                -
                -# double output size and put the input video in the bottom-right
                -# corner of the output padded area
                -pad="2*iw:2*ih:ow-iw:oh-ih"
                -
                - - -

                8.27 pixdesctest

                - -

                Pixel format descriptor test filter, mainly useful for internal -testing. The output video should be equal to the input video. -

                -

                For example: -

                 
                format=monow, pixdesctest
                -
                - -

                can be used to test the monowhite pixel format descriptor definition. -

                - -

                8.28 scale

                - -

                Scale the input video to width:height[:interl={1|-1}] and/or convert the image format. -

                -

                The parameters width and height are expressions containing -the following constants: -

                -
                -
                in_w, in_h
                -

                the input width and height -

                -
                -
                iw, ih
                -

                same as in_w and in_h -

                -
                -
                out_w, out_h
                -

                the output (cropped) width and height -

                -
                -
                ow, oh
                -

                same as out_w and out_h -

                -
                -
                a
                -

                same as iw / ih -

                -
                -
                sar
                -

                input sample aspect ratio -

                -
                -
                dar
                -

                input display aspect ratio, it is the same as (iw / ih) * sar -

                -
                -
                hsub, vsub
                -

                horizontal and vertical chroma subsample values. For example for the -pixel format "yuv422p" hsub is 2 and vsub is 1. -

                -
                - -

                If the input image format is different from the format requested by -the next filter, the scale filter will convert the input to the -requested format. -

                -

                If the value for width or height is 0, the respective input -size is used for the output. -

                -

                If the value for width or height is -1, the scale filter will -use, for the respective output size, a value that maintains the aspect -ratio of the input image. -

                -

                The default value of width and height is 0. -

                -

                Valid values for the optional parameter interl are: -

                -
                -
                1
                -

                force interlaced aware scaling -

                -
                -
                -1
                -

                select interlaced aware scaling depending on whether the source frames -are flagged as interlaced or not -

                -
                - -

                Some examples follow: -

                 
                # scale the input video to a size of 200x100.
                -scale=200:100
                -
                -# scale the input to 2x
                -scale=2*iw:2*ih
                -# the above is the same as
                -scale=2*in_w:2*in_h
                -
                -# scale the input to half size
                -scale=iw/2:ih/2
                -
                -# increase the width, and set the height to the same size
                -scale=3/2*iw:ow
                -
                -# seek for Greek harmony
                -scale=iw:1/PHI*iw
                -scale=ih*PHI:ih
                -
                -# increase the height, and set the width to 3/2 of the height
                -scale=3/2*oh:3/5*ih
                -
                -# increase the size, but make the size a multiple of the chroma
                -scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
                -
                -# increase the width to a maximum of 500 pixels, keep the same input aspect ratio
                -scale='min(500\, iw*3/2):-1'
                -
                - - -

                8.29 select

                -

                Select frames to pass in output. -

                -

                It accepts in input an expression, which is evaluated for each input -frame. If the expression is evaluated to a non-zero value, the frame -is selected and passed to the output, otherwise it is discarded. -

                -

                The expression can contain the following constants: -

                -
                -
                n
                -

                the sequential number of the filtered frame, starting from 0 -

                -
                -
                selected_n
                -

                the sequential number of the selected frame, starting from 0 -

                -
                -
                prev_selected_n
                -

                the sequential number of the last selected frame, NAN if undefined -

                -
                -
                TB
                -

                timebase of the input timestamps -

                -
                -
                pts
                -

                the PTS (Presentation TimeStamp) of the filtered video frame, -expressed in TB units, NAN if undefined -

                -
                -
                t
                -

                the PTS (Presentation TimeStamp) of the filtered video frame, -expressed in seconds, NAN if undefined -

                -
                -
                prev_pts
                -

                the PTS of the previously filtered video frame, NAN if undefined -

                -
                -
                prev_selected_pts
                -

                the PTS of the last previously filtered video frame, NAN if undefined -

                -
                -
                prev_selected_t
                -

                the PTS of the last previously selected video frame, NAN if undefined -

                -
                -
                start_pts
                -

                the PTS of the first video frame in the video, NAN if undefined -

                -
                -
                start_t
                -

                the time of the first video frame in the video, NAN if undefined -

                -
                -
                pict_type
                -

                the type of the filtered frame, can assume one of the following -values: -

                -
                I
                -
                P
                -
                B
                -
                S
                -
                SI
                -
                SP
                -
                BI
                -
                - -
                -
                interlace_type
                -

                the frame interlace type, can assume one of the following values: -

                -
                PROGRESSIVE
                -

                the frame is progressive (not interlaced) -

                -
                TOPFIRST
                -

                the frame is top-field-first -

                -
                BOTTOMFIRST
                -

                the frame is bottom-field-first -

                -
                - -
                -
                key
                -

                1 if the filtered frame is a key-frame, 0 otherwise -

                -
                -
                pos
                -

                the position in the file of the filtered frame, -1 if the information -is not available (e.g. for synthetic video) -

                -
                - -

                The default value of the select expression is "1". -

                -

                Some examples follow: -

                -
                 
                # select all frames in input
                -select
                -
                -# the above is the same as:
                -select=1
                -
                -# skip all frames:
                -select=0
                -
                -# select only I-frames
                -select='eq(pict_type\,I)'
                -
                -# select one frame every 100
                -select='not(mod(n\,100))'
                -
                -# select only frames contained in the 10-20 time interval
                -select='gte(t\,10)*lte(t\,20)'
                -
                -# select only I frames contained in the 10-20 time interval
                -select='gte(t\,10)*lte(t\,20)*eq(pict_type\,I)'
                -
                -# select frames with a minimum distance of 10 seconds
                -select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
                -
                - -

                -

                -

                8.30 setdar

                - -

                Set the Display Aspect Ratio for the filter output video. -

                -

                This is done by changing the specified Sample (aka Pixel) Aspect -Ratio, according to the following equation: -DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR -

                -

                Keep in mind that this filter does not modify the pixel dimensions of -the video frame. Also the display aspect ratio set by this filter may -be changed by later filters in the filterchain, e.g. in case of -scaling or if another "setdar" or a "setsar" filter is applied. -

                -

                The filter accepts a parameter string which represents the wanted -display aspect ratio. -The parameter can be a floating point number string, or an expression -of the form num:den, where num and den are the -numerator and denominator of the aspect ratio. -If the parameter is not specified, it is assumed the value "0:1". -

                -

                For example to change the display aspect ratio to 16:9, specify: -

                 
                setdar=16:9
                -# the above is equivalent to
                -setdar=1.77777
                -
                - -

                See also the setsar filter documentation. -

                - -

                8.31 setpts

                - -

                Change the PTS (presentation timestamp) of the input video frames. -

                -

                Accept in input an expression evaluated through the eval API, which -can contain the following constants: -

                -
                -
                PTS
                -

                the presentation timestamp in input -

                -
                -
                N
                -

                the count of the input frame, starting from 0. -

                -
                -
                STARTPTS
                -

                the PTS of the first video frame -

                -
                -
                INTERLACED
                -

                tell if the current frame is interlaced -

                -
                -
                POS
                -

                original position in the file of the frame, or undefined if undefined -for the current frame -

                -
                -
                PREV_INPTS
                -

                previous input PTS -

                -
                -
                PREV_OUTPTS
                -

                previous output PTS -

                -
                -
                - -

                Some examples follow: -

                -
                 
                # start counting PTS from zero
                -setpts=PTS-STARTPTS
                -
                -# fast motion
                -setpts=0.5*PTS
                -
                -# slow motion
                -setpts=2.0*PTS
                -
                -# fixed rate 25 fps
                -setpts=N/(25*TB)
                -
                -# fixed rate 25 fps with some jitter
                -setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
                -
                - -

                -

                -

                8.32 setsar

                - -

                Set the Sample (aka Pixel) Aspect Ratio for the filter output video. -

                -

                Note that as a consequence of the application of this filter, the -output display aspect ratio will change according to the following -equation: -DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR -

                -

                Keep in mind that the sample aspect ratio set by this filter may be -changed by later filters in the filterchain, e.g. if another "setsar" -or a "setdar" filter is applied. -

                -

                The filter accepts a parameter string which represents the wanted -sample aspect ratio. -The parameter can be a floating point number string, or an expression -of the form num:den, where num and den are the -numerator and denominator of the aspect ratio. -If the parameter is not specified, it is assumed the value "0:1". -

                -

                For example to change the sample aspect ratio to 10:11, specify: -

                 
                setsar=10:11
                -
                - - -

                8.33 settb

                - -

                Set the timebase to use for the output frames timestamps. -It is mainly useful for testing timebase configuration. -

                -

                It accepts in input an arithmetic expression representing a rational. -The expression can contain the constants "AVTB" (the -default timebase), and "intb" (the input timebase). -

                -

                The default value for the input is "intb". -

                -

                Follow some examples. -

                -
                 
                # set the timebase to 1/25
                -settb=1/25
                -
                -# set the timebase to 1/10
                -settb=0.1
                -
                -#set the timebase to 1001/1000
                -settb=1+0.001
                -
                -#set the timebase to 2*intb
                -settb=2*intb
                -
                -#set the default timebase value
                -settb=AVTB
                -
                - - -

                8.34 showinfo

                - -

                Show a line containing various information for each input video frame. -The input video is not modified. -

                -

                The shown line contains a sequence of key/value pairs of the form -key:value. -

                -

                A description of each shown parameter follows: -

                -
                -
                n
                -

                sequential number of the input frame, starting from 0 -

                -
                -
                pts
                -

                Presentation TimeStamp of the input frame, expressed as a number of -time base units. The time base unit depends on the filter input pad. -

                -
                -
                pts_time
                -

                Presentation TimeStamp of the input frame, expressed as a number of -seconds -

                -
                -
                pos
                -

                position of the frame in the input stream, -1 if this information in -unavailable and/or meaningless (for example in case of synthetic video) -

                -
                -
                fmt
                -

                pixel format name -

                -
                -
                sar
                -

                sample aspect ratio of the input frame, expressed in the form -num/den -

                -
                -
                s
                -

                size of the input frame, expressed in the form -widthxheight -

                -
                -
                i
                -

                interlaced mode ("P" for "progressive", "T" for top field first, "B" -for bottom field first) -

                -
                -
                iskey
                -

                1 if the frame is a key frame, 0 otherwise -

                -
                -
                type
                -

                picture type of the input frame ("I" for an I-frame, "P" for a -P-frame, "B" for a B-frame, "?" for unknown type). -Check also the documentation of the AVPictureType enum and of -the av_get_picture_type_char function defined in -‘libavutil/avutil.h’. -

                -
                -
                checksum
                -

                Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame -

                -
                -
                plane_checksum
                -

                Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, -expressed in the form "[c0 c1 c2 c3]" -

                -
                - - -

                8.35 slicify

                - -

                Pass the images of input video on to next video filter as multiple -slices. -

                -
                 
                ffmpeg -i in.avi -vf "slicify=32" out.avi
                -
                - -

                The filter accepts the slice height as parameter. If the parameter is -not specified it will use the default value of 16. -

                -

                Adding this in the beginning of filter chains should make filtering -faster due to better use of the memory cache. -

                - -

                8.36 split

                - -

                Pass on the input video to two outputs. Both outputs are identical to -the input video. -

                -

                For example: -

                 
                [in] split [splitout1][splitout2];
                -[splitout1] crop=100:100:0:0    [cropout];
                -[splitout2] pad=200:200:100:100 [padout];
                -
                - -

                will create two separate outputs from the same input, one cropped and -one padded. -

                - -

                8.37 thumbnail

                -

                Select the most representative frame in a given sequence of consecutive frames. -

                -

                It accepts as argument the frames batch size to analyze (default N=100); -in a set of N frames, the filter will pick one of them, and then handle -the next batch of N frames until the end. -

                -

                Since the filter keeps track of the whole frames sequence, a bigger N -value will result in a higher memory usage, so a high value is not recommended. -

                -

                The following example extract one picture each 50 frames: -

                 
                thumbnail=50
                -
                - -

                Complete example of a thumbnail creation with ffmpeg: -

                 
                ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
                -
                - - -

                8.38 tinterlace

                - -

                Perform various types of temporal field interlacing. -

                -

                Frames are counted starting from 1, so the first input frame is -considered odd. -

                -

                This filter accepts a single parameter specifying the mode. Available -modes are: -

                -
                -
                0
                -

                Move odd frames into the upper field, even into the lower field, -generating a double height frame at half framerate. -

                -
                -
                1
                -

                Only output even frames, odd frames are dropped, generating a frame with -unchanged height at half framerate. -

                -
                -
                2
                -

                Only output odd frames, even frames are dropped, generating a frame with -unchanged height at half framerate. -

                -
                -
                3
                -

                Expand each frame to full height, but pad alternate lines with black, -generating a frame with double height at the same input framerate. -

                -
                -
                4
                -

                Interleave the upper field from odd frames with the lower field from -even frames, generating a frame with unchanged height at half framerate. -

                -
                -
                5
                -

                Interleave the lower field from odd frames with the upper field from -even frames, generating a frame with unchanged height at half framerate. -

                -
                - -

                Default mode is 0. -

                - -

                8.39 transpose

                - -

                Transpose rows with columns in the input video and optionally flip it. -

                -

                It accepts a parameter representing an integer, which can assume the -values: -

                -
                -
                0
                -

                Rotate by 90 degrees counterclockwise and vertically flip (default), that is: -

                 
                L.R     L.l
                -. . ->  . .
                -l.r     R.r
                -
                - -
                -
                1
                -

                Rotate by 90 degrees clockwise, that is: -

                 
                L.R     l.L
                -. . ->  . .
                -l.r     r.R
                -
                - -
                -
                2
                -

                Rotate by 90 degrees counterclockwise, that is: -

                 
                L.R     R.r
                -. . ->  . .
                -l.r     L.l
                -
                - -
                -
                3
                -

                Rotate by 90 degrees clockwise and vertically flip, that is: -

                 
                L.R     r.R
                -. . ->  . .
                -l.r     l.L
                -
                -
                -
                - - -

                8.40 unsharp

                - -

                Sharpen or blur the input video. -

                -

                It accepts the following parameters: -luma_msize_x:luma_msize_y:luma_amount:chroma_msize_x:chroma_msize_y:chroma_amount -

                -

                Negative values for the amount will blur the input video, while positive -values will sharpen. All parameters are optional and default to the -equivalent of the string ’5:5:1.0:5:5:0.0’. -

                -
                -
                luma_msize_x
                -

                Set the luma matrix horizontal size. It can be an integer between 3 -and 13, default value is 5. -

                -
                -
                luma_msize_y
                -

                Set the luma matrix vertical size. It can be an integer between 3 -and 13, default value is 5. -

                -
                -
                luma_amount
                -

                Set the luma effect strength. It can be a float number between -2.0 -and 5.0, default value is 1.0. -

                -
                -
                chroma_msize_x
                -

                Set the chroma matrix horizontal size. It can be an integer between 3 -and 13, default value is 5. -

                -
                -
                chroma_msize_y
                -

                Set the chroma matrix vertical size. It can be an integer between 3 -and 13, default value is 5. -

                -
                -
                chroma_amount
                -

                Set the chroma effect strength. It can be a float number between -2.0 -and 5.0, default value is 0.0. -

                -
                -
                - -
                 
                # Strong luma sharpen effect parameters
                -unsharp=7:7:2.5
                -
                -# Strong blur of both luma and chroma parameters
                -unsharp=7:7:-2:7:7:-2
                -
                -# Use the default values with ffmpeg
                -ffmpeg -i in.avi -vf "unsharp" out.mp4
                -
                - - -

                8.41 vflip

                - -

                Flip the input video vertically. -

                -
                 
                ffmpeg -i in.avi -vf "vflip" out.avi
                -
                - - -

                8.42 yadif

                - -

                Deinterlace the input video ("yadif" means "yet another deinterlacing -filter"). -

                -

                It accepts the optional parameters: mode:parity:auto. -

                -

                mode specifies the interlacing mode to adopt, accepts one of the -following values: -

                -
                -
                0
                -

                output 1 frame for each frame -

                -
                1
                -

                output 1 frame for each field -

                -
                2
                -

                like 0 but skips spatial interlacing check -

                -
                3
                -

                like 1 but skips spatial interlacing check -

                -
                - -

                Default value is 0. -

                -

                parity specifies the picture field parity assumed for the input -interlaced video, accepts one of the following values: -

                -
                -
                0
                -

                assume top field first -

                -
                1
                -

                assume bottom field first -

                -
                -1
                -

                enable automatic detection -

                -
                - -

                Default value is -1. -If interlacing is unknown or decoder does not export this information, -top field first will be assumed. -

                -

                auto specifies if deinterlacer should trust the interlaced flag -and only deinterlace frames marked as interlaced -

                -
                -
                0
                -

                deinterlace all frames -

                -
                1
                -

                only deinterlace frames marked as interlaced -

                -
                - -

                Default value is 0. -

                - - -

                9. Video Sources

                - -

                Below is a description of the currently available video sources. -

                - -

                9.1 buffer

                - -

                Buffer video frames, and make them available to the filter chain. -

                -

                This source is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/vsrc_buffer.h’. -

                -

                It accepts the following parameters: -width:height:pix_fmt_string:timebase_num:timebase_den:sample_aspect_ratio_num:sample_aspect_ratio.den:scale_params -

                -

                All the parameters but scale_params need to be explicitly -defined. -

                -

                Follows the list of the accepted parameters. -

                -
                -
                width, height
                -

                Specify the width and height of the buffered video frames. -

                -
                -
                pix_fmt_string
                -

                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. -

                -
                -
                timebase_num, timebase_den
                -

                Specify numerator and denomitor of the timebase assumed by the -timestamps of the buffered frames. -

                -
                -
                sample_aspect_ratio.num, sample_aspect_ratio.den
                -

                Specify numerator and denominator of the sample aspect ratio assumed -by the video frames. -

                -
                -
                scale_params
                -

                Specify the optional parameters to be used for the scale filter which -is automatically inserted when an input change is detected in the -input size or format. -

                -
                - -

                For example: -

                 
                buffer=320:240:yuv410p:1:24:1:1
                -
                - -

                will instruct the source to accept video frames with size 320x240 and -with format "yuv410p", assuming 1/24 as the timestamps timebase and -square pixels (1:1 sample aspect ratio). -Since the pixel format with name "yuv410p" corresponds to the number 6 -(check the enum PixelFormat definition in ‘libavutil/pixfmt.h’), -this example corresponds to: -

                 
                buffer=320:240:6:1:24:1:1
                -
                - - -

                9.2 cellauto

                - -

                Create a pattern generated by an elementary cellular automaton. -

                -

                The initial state of the cellular automaton can be defined through the -‘filename’, and ‘pattern’ options. If such options are -not specified an initial state is created randomly. -

                -

                At each new frame a new row in the video is filled with the result of -the cellular automaton next generation. The behavior when the whole -frame is filled is defined by the ‘scroll’ option. -

                -

                This source accepts a list of options in the form of -key=value pairs separated by ":". A description of the -accepted options follows. -

                -
                -
                filename, f
                -

                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. -

                -
                -
                pattern, p
                -

                Read the initial cellular automaton state, i.e. the starting row, from -the specified string. -

                -

                Each non-whitespace character in the string is considered an alive -cell, a newline will terminate the row, and further characters in the -string will be ignored. -

                -
                -
                rate, r
                -

                Set the video rate, that is the number of frames generated per second. -Default is 25. -

                -
                -
                random_fill_ratio, ratio
                -

                Set the random fill ratio for the initial cellular automaton row. It -is a floating point number value ranging from 0 to 1, defaults to -1/PHI. -

                -

                This option is ignored when a file or a pattern is specified. -

                -
                -
                random_seed, seed
                -

                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. -

                -
                -
                rule
                -

                Set the cellular automaton rule, it is a number ranging from 0 to 255. -Default value is 110. -

                -
                -
                size, s
                -

                Set the size of the output video. -

                -

                If ‘filename’ or ‘pattern’ is specified, the size is set -by default to the width of the specified initial state row, and the -height is set to width * PHI. -

                -

                If ‘size’ is set, it must contain the width of the specified -pattern string, and the specified pattern will be centered in the -larger row. -

                -

                If a filename or a pattern string is not specified, the size value -defaults to "320x518" (used for a randomly generated initial state). -

                -
                -
                scroll
                -

                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. -

                -
                -
                start_full, full
                -

                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. -

                -
                -
                stitch
                -

                If set to 1, stitch the left and right row edges together. -This is the default behavior, for disabling set the value to 0. -

                -
                - - -

                9.2.1 Examples

                - -
                  -
                • -Read the initial state from ‘pattern’, and specify an output of -size 200x400. -
                   
                  cellauto=f=pattern:s=200x400
                  -
                  - -
                • -Generate a random initial row with a width of 200 cells, with a fill -ratio of 2/3: -
                   
                  cellauto=ratio=2/3:s=200x200
                  -
                  - -
                • -Create a pattern generated by rule 18 starting by a single alive cell -centered on an initial row with width 100: -
                   
                  cellauto=p=@:s=100x400:full=0:rule=18
                  -
                  - -
                • -Specify a more elaborated initial pattern: -
                   
                  cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
                  -
                  - -
                - - -

                9.3 color

                - -

                Provide an uniformly colored input. -

                -

                It accepts the following parameters: -color:frame_size:frame_rate -

                -

                Follows the description of the accepted parameters. -

                -
                -
                color
                -

                Specify the color of the source. It can be the name of a color (case -insensitive match) or a 0xRRGGBB[AA] sequence, possibly followed by an -alpha specifier. The default value is "black". -

                -
                -
                frame_size
                -

                Specify the size of the sourced video, it may be a string of the form -widthxheight, or the name of a size abbreviation. The -default value is "320x240". -

                -
                -
                frame_rate
                -

                Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                -
                -
                - -

                For example the following graph description will generate a red source -with an opacity of 0.2, with size "qcif" and a frame rate of 10 -frames per second, which will be overlayed over the source connected -to the pad with identifier "in". -

                -
                 
                "color=red@0.2:qcif:10 [color]; [in][color] overlay [out]"
                -
                - - -

                9.4 movie

                - -

                Read a video stream from a movie container. -

                -

                It accepts the syntax: movie_name[:options] where -movie_name is the name of the resource to read (not necessarily -a file but also a device or a stream accessed through some protocol), -and options is an optional sequence of key=value -pairs, separated by ":". -

                -

                The description of the accepted options follows. -

                -
                -
                format_name, f
                -

                Specifies the format assumed for the movie to read, and can be either -the name of a container or an input device. If not specified the -format is guessed from movie_name or by probing. -

                -
                -
                seek_point, sp
                -

                Specifies the seek point in seconds, the frames will be output -starting from this seek point, the parameter is evaluated with -av_strtod so the numerical value may be suffixed by an IS -postfix. Default value is "0". -

                -
                -
                stream_index, si
                -

                Specifies the index of the video stream to read. If the value is -1, -the best suited video stream will be automatically selected. Default -value is "-1". -

                -
                -
                - -

                This filter allows to overlay a second video on top of main input of -a filtergraph as shown in this graph: -

                 
                input -----------> deltapts0 --> overlay --> output
                -                                    ^
                -                                    |
                -movie --> scale--> deltapts1 -------+
                -
                - -

                Some examples follow: -

                 
                # skip 3.2 seconds from the start of the avi file in.avi, and overlay it
                -# on top of the input labelled as "in".
                -movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [movie];
                -[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out]
                -
                -# read from a video4linux2 device, and overlay it on top of the input
                -# labelled as "in"
                -movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [movie];
                -[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out]
                -
                -
                - -

                9.5 mptestsrc

                + +

                2. See Also

                -

                Generate various test patterns, as generated by the MPlayer test filter. +

                ffmpeg, ffplay, ffprobe, ffserver, +ffmpeg-filters, +libavutil, libswscale, libswresample, +libavcodec, libavformat, libavdevice

                -

                The size of the generated video is fixed, and is 256x256. -This source is useful in particular for testing encoding features. -

                -

                This source accepts an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                -
                -
                rate, r
                -

                Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                -
                -
                duration, d
                -

                Set the video duration of the sourced video. The accepted syntax is: -

                 
                [-]HH[:MM[:SS[.m...]]]
                -[-]S+[.m...]
                -
                -

                See also the function av_parse_time(). -

                -

                If not specified, or the expressed duration is negative, the video is -supposed to be generated forever. -

                -
                -
                test, t
                -
                -

                Set the number or the name of the test to perform. Supported tests are: -

                -
                dc_luma
                -
                dc_chroma
                -
                freq_luma
                -
                freq_chroma
                -
                amp_luma
                -
                amp_chroma
                -
                cbp
                -
                mv
                -
                ring1
                -
                ring2
                -
                all
                -
                - -

                Default value is "all", which will cycle through the list of all tests. -

                -
                - -

                For example the following: -

                 
                testsrc=t=dc_luma
                -
                - -

                will generate a "dc_luma" test pattern. -

                - -

                9.6 frei0r_src

                - -

                Provide a frei0r source. -

                -

                To enable compilation of this filter you need to install the frei0r -header and configure FFmpeg with --enable-frei0r. -

                -

                The source supports the syntax: -

                 
                size:rate:src_name[{=|:}param1:param2:...:paramN]
                -
                - -

                size is the size of the video to generate, may be a string of the -form widthxheight or a frame size abbreviation. -rate is the rate of the video to generate, may be a string of -the form num/den or a frame rate abbreviation. -src_name is the name to the frei0r source to load. For more -information regarding frei0r and how to set the parameters read the -section frei0r in the description of the video filters. -

                -

                Some examples follow: -

                 
                # generate a frei0r partik0l source with size 200x200 and frame rate 10
                -# which is overlayed on the overlay filter main input
                -frei0r_src=200x200:10:partik0l=1234 [overlay]; [in][overlay] overlay
                -
                - - -

                9.7 life

                - -

                Generate a life pattern. -

                -

                This source is based on a generalization of John Conway’s life game. -

                -

                The sourced input represents a life grid, each pixel represents a cell -which can be in one of two possible states, alive or dead. Every cell -interacts with its eight neighbours, which are the cells that are -horizontally, vertically, or diagonally adjacent. -

                -

                At each interaction the grid evolves according to the adopted rule, -which specifies the number of neighbor alive cells which will make a -cell stay alive or born. The ‘rule’ option allows to specify -the rule to adopt. -

                -

                This source accepts a list of options in the form of -key=value pairs separated by ":". A description of the -accepted options follows. -

                -
                -
                filename, f
                -

                Set the file from which to read the initial grid state. In the file, -each non-whitespace character is considered an alive cell, and newline -is used to delimit the end of each row. -

                -

                If this option is not specified, the initial grid is generated -randomly. -

                -
                -
                rate, r
                -

                Set the video rate, that is the number of frames generated per second. -Default is 25. -

                -
                -
                random_fill_ratio, ratio
                -

                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. -

                -
                -
                random_seed, seed
                -

                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. -

                -
                -
                rule
                -

                Set the life rule. -

                -

                A rule can be specified with a code of the kind "SNS/BNB", -where NS and NB are sequences of numbers in the range 0-8, -NS specifies the number of alive neighbor cells which make a -live cell stay alive, and NB the number of alive neighbor cells -which make a dead cell to become alive (i.e. to "born"). -"s" and "b" can be used in place of "S" and "B", respectively. -

                -

                Alternatively a rule can be specified by an 18-bits integer. The 9 -high order bits are used to encode the next cell state if it is alive -for each number of neighbor alive cells, the low order bits specify -the rule for "borning" new cells. Higher order bits encode for an -higher number of neighbor cells. -For example the number 6153 = (12<<9)+9 specifies a stay alive -rule of 12 and a born rule of 9, which corresponds to "S23/B03". -

                -

                Default value is "S23/B3", which is the original Conway’s game of life -rule, and will keep a cell alive if it has 2 or 3 neighbor alive -cells, and will born a new cell if there are three alive cells around -a dead cell. -

                -
                -
                size, s
                -

                Set the size of the output video. -

                -

                If ‘filename’ is specified, the size is set by default to the -same size of the input file. If ‘size’ is set, it must contain -the size specified in the input file, and the initial grid defined in -that file is centered in the larger resulting area. -

                -

                If a filename is not specified, the size value defaults to "320x240" -(used for a randomly generated initial grid). -

                -
                -
                stitch
                -

                If set to 1, stitch the left and right grid edges together, and the -top and bottom edges also. Defaults to 1. -

                -
                -
                mold
                -

                Set cell mold speed. If set, a dead cell will go from ‘death_color’ to -‘mold_color’ with a step of ‘mold’. ‘mold’ can have a -value from 0 to 255. -

                -
                -
                life_color
                -

                Set the color of living (or new born) cells. -

                -
                -
                death_color
                -

                Set the color of dead cells. If ‘mold’ is set, this is the first color -used to represent a dead cell. -

                -
                -
                mold_color
                -

                Set mold color, for definitely dead and moldy cells. -

                -
                - - -

                9.7.1 Examples

                - -
                  -
                • -Read a grid from ‘pattern’, and center it on a grid of size -300x300 pixels: -
                   
                  life=f=pattern:s=300x300
                  -
                  - -
                • -Generate a random grid of size 200x200, with a fill ratio of 2/3: -
                   
                  life=ratio=2/3:s=200x200
                  -
                  - -
                • -Specify a custom rule for evolving a randomly generated grid: -
                   
                  life=rule=S14/B34
                  -
                  - -
                • -Full example with slow death effect (mold) using ffplay: -
                   
                  ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
                  -
                  -
                - - -

                9.8 nullsrc, rgbtestsrc, testsrc

                - -

                The nullsrc source returns unprocessed video frames. It is -mainly useful to be employed in analysis / debugging tools, or as the -source for filters which ignore the input data. -

                -

                The rgbtestsrc source generates an RGB test pattern useful for -detecting RGB vs BGR issues. You should see a red, green and blue -stripe from top to bottom. -

                -

                The testsrc source generates a test video pattern, showing a -color pattern, a scrolling gradient and a timestamp. This is mainly -intended for testing purposes. -

                -

                These sources accept an optional sequence of key=value pairs, -separated by ":". The description of the accepted options follows. -

                -
                -
                size, s
                -

                Specify the size of the sourced video, it may be a string of the form -widthxheight, or the name of a size abbreviation. The -default value is "320x240". -

                -
                -
                rate, r
                -

                Specify the frame rate of the sourced video, as the number of frames -generated per second. It has to be a string in the format -frame_rate_num/frame_rate_den, an integer number, a float -number or a valid video frame rate abbreviation. The default value is -"25". -

                -
                -
                sar
                -

                Set the sample aspect ratio of the sourced video. -

                -
                -
                duration, d
                -

                Set the video duration of the sourced video. The accepted syntax is: -

                 
                [-]HH[:MM[:SS[.m...]]]
                -[-]S+[.m...]
                -
                -

                See also the function av_parse_time(). -

                -

                If not specified, or the expressed duration is negative, the video is -supposed to be generated forever. -

                -
                -
                decimals, n
                -

                Set the number of decimals to show in the timestamp, only used in the -testsrc source. -

                -

                The displayed timestamp value will correspond to the original -timestamp value multiplied by the power of 10 of the specified -value. Default value is 0. -

                -
                - -

                For example the following: -

                 
                testsrc=duration=5.3:size=qcif:rate=10
                -
                - -

                will generate a video with a duration of 5.3 seconds, with size -176x144 and a frame rate of 10 frames per second. -

                -

                If the input content is to be ignored, nullsrc can be used. The -following command generates noise in the luminance plane by employing -the mp=geq filter: -

                 
                nullsrc=s=256x256, mp=geq=random(1)*255:128:128
                -
                - - -

                10. Video Sinks

                - -

                Below is a description of the currently available video sinks. -

                - -

                10.1 buffersink

                + +

                3. Authors

                -

                Buffer video frames, and make them available to the end of the filter -graph. +

                The FFmpeg developers.

                -

                This sink is mainly intended for a programmatic use, in particular -through the interface defined in ‘libavfilter/buffersink.h’. +

                For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org.

                -

                It does not require a string parameter in input, but you need to -specify a pointer to a list of supported pixel formats terminated by --1 in the opaque parameter provided to avfilter_init_filter -when initializing this sink. +

                Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree.

                - -

                10.2 nullsink

                -

                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. -

                - - -
                -

                - - -
                +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/libavformat.html b/extern/ffmpeg/doc/libavformat.html new file mode 100644 index 0000000000..763ffadfe4 --- /dev/null +++ b/extern/ffmpeg/doc/libavformat.html @@ -0,0 +1,78 @@ + + + + + +FFmpeg documentation : Libavformat + + + + + + + + + + +
                +
                + + +

                Libavformat Documentation

                + + +

                Table of Contents

                + + + +

                1. Description

                + +

                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. +

                +

                It also supports several input and output protocols to access a media +resource. +

                + + +

                2. See Also

                + +

                ffmpeg, ffplay, ffprobe, ffserver, +ffmpeg-formats, ffmpeg-protocols, +libavutil, libavcodec +

                + + +

                3. Authors

                + +

                The FFmpeg developers. +

                +

                For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org. +

                +

                Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree. +

                + +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/libavutil.html b/extern/ffmpeg/doc/libavutil.html new file mode 100644 index 0000000000..50691393fb --- /dev/null +++ b/extern/ffmpeg/doc/libavutil.html @@ -0,0 +1,75 @@ + + + + + +FFmpeg documentation : Libavutil + + + + + + + + + + +
                +
                + + +

                Libavutil Documentation

                + + +

                Table of Contents

                + + + +

                1. Description

                + +

                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). +

                + + +

                2. See Also

                + +

                ffmpeg, ffplay, ffprobe, ffserver, +ffmpeg-utils +

                + + +

                3. Authors

                + +

                The FFmpeg developers. +

                +

                For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org. +

                +

                Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree. +

                + +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/libswresample.html b/extern/ffmpeg/doc/libswresample.html new file mode 100644 index 0000000000..a0a56bd53b --- /dev/null +++ b/extern/ffmpeg/doc/libswresample.html @@ -0,0 +1,100 @@ + + + + + +FFmpeg documentation : Libswresample + + + + + + + + + + +
                +
                + + +

                Libswresample Documentation

                + + +

                Table of Contents

                + + + +

                1. Description

                + +

                The libswresample library performs highly optimized audio resampling, +rematrixing and sample format conversion operations. +

                +

                Specifically, this library performs the following conversions: +

                +
                  +
                • +Resampling: 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. + +
                • +Format conversion: 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"). + +
                • +Rematrixing: 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. +
                + +

                Various other audio conversions (e.g. stretching and padding) are +enabled through dedicated options. +

                + + +

                2. See Also

                + +

                ffmpeg, ffplay, ffprobe, ffserver, +ffmpeg-resampler, +libavutil +

                + + +

                3. Authors

                + +

                The FFmpeg developers. +

                +

                For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org. +

                +

                Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree. +

                + +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/libswscale.html b/extern/ffmpeg/doc/libswscale.html new file mode 100644 index 0000000000..53cdb4ab38 --- /dev/null +++ b/extern/ffmpeg/doc/libswscale.html @@ -0,0 +1,93 @@ + + + + + +FFmpeg documentation : Libswscale + + + + + + + + + + +
                +
                + + +

                Libswscale Documentation

                + + +

                Table of Contents

                + + + +

                1. Description

                + +

                The libswscale library performs highly optimized image scaling and +colorspace and pixel format conversion operations. +

                +

                Specifically, this library performs the following conversions: +

                +
                  +
                • +Rescaling: is the process of changing the video size. Several +rescaling options and algorithms are available. This is usually a +lossy process. + +
                • +Pixel format conversion: 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"). + +

                  This is usually a lossy process in case the source and destination +colorspaces differ. +

                + + + +

                2. See Also

                + +

                ffmpeg, ffplay, ffprobe, ffserver, +ffmpeg-scaler, +libavutil +

                + + +

                3. Authors

                + +

                The FFmpeg developers. +

                +

                For details about the authorship, see the Git history of the project +(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command +git log in the FFmpeg source directory, or browsing the +online repository at http://source.ffmpeg.org. +

                +

                Maintainers for the specific components are listed in the file +‘MAINTAINERS’ in the source code tree. +

                + +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/nut.html b/extern/ffmpeg/doc/nut.html new file mode 100644 index 0000000000..ac0d385e6a --- /dev/null +++ b/extern/ffmpeg/doc/nut.html @@ -0,0 +1,183 @@ + + + + + +FFmpeg documentation : NUT: + + + + + + + + + + +
                +
                + + +

                NUT

                + + +

                Table of Contents

                + + + +

                1. Description

                +

                NUT is a low overhead generic container format. It stores audio, video, +subtitle and user-defined streams in a simple, yet efficient, way. +

                +

                It was created by a group of FFmpeg and MPlayer developers in 2003 +and was finalized in 2008. +

                +

                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. +

                + +

                2. Container-specific codec tags

                + + +

                2.1 Generic raw YUVA formats

                + +

                Since many exotic planar YUVA pixel formats are not considered by +the AVI/QuickTime FourCC lists, the following scheme is adopted for +representing them. +

                +

                The first two bytes can contain the values: +Y1 = only Y +Y2 = Y+A +Y3 = YUV +Y4 = YUVA +

                +

                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. +

                +

                The fourth byte is the number of bits used (8, 16, ...). +

                +

                If the order of bytes is inverted, that means that each component has +to be read big-endian. +

                + +

                2.2 Raw Audio

                + + + + + + +
                ALAWA-LAW
                ULAWMU-LAW
                P<type><interleaving><bits>little-endian PCM
                <bits><interleaving><type>Pbig-endian PCM
                + +

                <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 +

                +
                 
                PFD[32]   would for example be signed 32 bit little-endian IEEE float
                +
                + + +

                2.3 Subtitles

                + + + + + + +
                UTF8Raw UTF-8
                SSA[0]SubStation Alpha
                DVDSDVD subtitles
                DVBSDVB subtitles
                + + +

                2.4 Raw Data

                + + + +
                UTF8Raw UTF-8
                + + +

                2.5 Codecs

                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                3IV1non-compliant MPEG-4 generated by old 3ivx
                ASV1Asus Video
                ASV2Asus Video 2
                CVIDCinepak
                CYUVCreative YUV
                DIVXnon-compliant MPEG-4 generated by old DivX
                DUCKTruemotion 1
                FFV1FFmpeg video 1
                FFVHFFmpeg Huffyuv
                H261ITU H.261
                H262ITU H.262
                H263ITU H.263
                H264ITU H.264
                HFYUHuffyuv
                I263Intel H.263
                IV31Indeo 3.1
                IV32Indeo 3.2
                IV50Indeo 5.0
                LJPGITU JPEG (lossless)
                MJLSITU JPEG-LS
                MJPGITU JPEG
                MPG4MS MPEG-4v1 (not ISO MPEG-4)
                MP42MS MPEG-4v2
                MP43MS MPEG-4v3
                MP4VISO MPEG-4 Part 2 Video (from old encoders)
                mpg1ISO MPEG-1 Video
                mpg2ISO MPEG-2 Video
                MRLEMS RLE
                MSVCMS Video 1
                RT21Indeo 2.1
                RV10RealVideo 1.0
                RV20RealVideo 2.0
                RV30RealVideo 3.0
                RV40RealVideo 4.0
                SNOWFFmpeg Snow
                SVQ1Sorenson Video 1
                SVQ3Sorenson Video 3
                theoXiph Theora
                TM20Truemotion 2.0
                UMP4non-compliant MPEG-4 generated by UB Video MPEG-4
                VCR1ATI VCR1
                VP30VP 3.0
                VP31VP 3.1
                VP50VP 5.0
                VP60VP 6.0
                VP61VP 6.1
                VP62VP 6.2
                VP70VP 7.0
                WMV1MS WMV7
                WMV2MS WMV8
                WMV3MS WMV9
                WV1Fnon-compliant MPEG-4 generated by ?
                WVC1VC-1
                XVIDnon-compliant MPEG-4 generated by old Xvid
                XVIXnon-compliant MPEG-4 generated by old Xvid with interlacing bug
                + +
                +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                diff --git a/extern/ffmpeg/doc/platform.html b/extern/ffmpeg/doc/platform.html index bba58bb74d..02e05e2886 100644 --- a/extern/ffmpeg/doc/platform.html +++ b/extern/ffmpeg/doc/platform.html @@ -1,6 +1,6 @@ - + - + -FFmpeg documentation : : +FFmpeg documentation : Platform Specific Information: - - - - + + - - - - + + - - +
                - @@ -136,12 +76,12 @@ to configure.

                1.1 BSD

                BSD make will not build FFmpeg, you need to install and use GNU Make -(‘gmake’). +(gmake).

                1.2 (Open)Solaris

                -

                GNU Make is required to build FFmpeg, so you have to invoke (‘gmake’), +

                GNU Make is required to build FFmpeg, so you have to invoke (gmake), standard Solaris Make will not work. When building with a non-c99 front-end (gcc, generic suncc) add either --extra-libs=/usr/lib/values-xpg6.o or --extra-libs=/usr/lib/64/values-xpg6.o to the configure options @@ -190,31 +130,16 @@ or MacPorts can easily provide it.

                4. Windows

                To get help and instructions for building FFmpeg under Windows, check out -the FFmpeg Windows Help Forum at -http://ffmpeg.arrozcru.org/. +the FFmpeg Windows Help Forum at http://ffmpeg.zeranoe.com/forum/.

                - -

                4.1 Native Windows compilation

                + +

                4.1 Native Windows compilation using MinGW or MinGW-w64

                -

                FFmpeg can be built to run natively on Windows using the MinGW tools. Install -the latest versions of MSYS and MinGW from http://www.mingw.org/. -You can find detailed installation instructions in the download -section and the FAQ. -

                -

                FFmpeg does not build out-of-the-box with the packages the automated MinGW -installer provides. It also requires coreutils to be installed and many other -packages updated to the latest version. The minimum version for some packages -are listed below: -

                -
                  -
                • bash 3.1 -
                • msys-make 3.81-2 (note: not mingw32-make) -
                • w32api 3.13 -
                • mingw-runtime 3.15 -
                - -

                FFmpeg automatically passes -fno-common to the compiler to work around -a GCC bug (see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216). +

                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 +http://www.mingw.org/ or http://mingw-w64.sourceforge.net/. +You can find detailed installation instructions in the download section and +the FAQ.

                Notes:

                @@ -222,14 +147,11 @@ a GCC bug (see http:
              • Building natively using MSYS can be sped up by disabling implicit rules in the Makefile by calling make -r instead of plain make. This speed up is close to non-existent for normal one-off builds and is only -noticeable when running make for a second time (for example in +noticeable when running make for a second time (for example during make install).
              • In order to compile FFplay, you must have the MinGW development library -of SDL. -Edit the ‘bin/sdl-config’ script so that it points to the correct prefix -where SDL was installed. Verify that ‘sdl-config’ can be launched from -the MSYS command line. +of SDL and pkg-config installed.
              • By using ./configure --enable-shared when configuring FFmpeg, you can build the FFmpeg libraries (e.g. libavutil, libavcodec, @@ -237,146 +159,105 @@ libavformat) as DLLs.
              • - -

                4.2 Microsoft Visual C++ compatibility

                + +

                4.2 Microsoft Visual C++ or Intel C++ Compiler for Windows

                -

                As stated in the FAQ, FFmpeg will not compile under MSVC++. However, if you -want to use the libav* libraries in your own applications, you can still -compile those applications using MSVC++. But the libav* libraries you link -to must be built with MinGW. However, you will not be able to debug -inside the libav* libraries, since MSVC++ does not recognize the debug -symbols generated by GCC. -We strongly recommend you to move over from MSVC++ to MinGW tools. +

                FFmpeg can be built with MSVC or ICL using a C99-to-C89 conversion utility and +wrapper. For ICL, only the wrapper is used, since ICL supports C99.

                -

                This description of how to use the FFmpeg libraries with MSVC++ is based on -Microsoft Visual C++ 2005 Express Edition. If you have a different version, -you might have to modify the procedures slightly. +

                You will need the following prerequisites:

                - -

                4.2.1 Using static libraries

                + -

                Assuming you have just built and installed FFmpeg in ‘/usr/local’. +

                To set up a proper environment in MSYS, you need to run msys.bat from +the Visual Studio or Intel Compiler command prompt.

                -
                  -
                1. Create a new console application ("File / New / Project") and then -select "Win32 Console Application". On the appropriate page of the -Application Wizard, uncheck the "Precompiled headers" option. - -
                2. Write the source code for your application, or, for testing, just -copy the code from an existing sample application into the source file -that MSVC++ has already created for you. For example, you can copy -‘libavformat/output-example.c’ from the FFmpeg distribution. - -
                3. Open the "Project / Properties" dialog box. In the "Configuration" -combo box, select "All Configurations" so that the changes you make will -affect both debug and release builds. In the tree view on the left hand -side, select "C/C++ / General", then edit the "Additional Include -Directories" setting to contain the path where the FFmpeg includes were -installed (i.e. ‘c:\msys\1.0\local\include’). -Do not add MinGW’s include directory here, or the include files will -conflict with MSVC’s. - -
                4. Still in the "Project / Properties" dialog box, select -"Linker / General" from the tree view and edit the -"Additional Library Directories" setting to contain the ‘lib’ -directory where FFmpeg was installed (i.e. ‘c:\msys\1.0\local\lib’), -the directory where MinGW libs are installed (i.e. ‘c:\mingw\lib’), -and the directory where MinGW’s GCC libs are installed -(i.e. ‘C:\mingw\lib\gcc\mingw32\4.2.1-sjlj’). Then select -"Linker / Input" from the tree view, and add the files ‘libavformat.a’, -‘libavcodec.a’, ‘libavutil.a’, ‘libmingwex.a’, -‘libgcc.a’, and any other libraries you used (i.e. ‘libz.a’) -to the end of "Additional Dependencies". - -
                5. Now, select "C/C++ / Code Generation" from the tree view. Select -"Debug" in the "Configuration" combo box. Make sure that "Runtime -Library" is set to "Multi-threaded Debug DLL". Then, select "Release" in -the "Configuration" combo box and make sure that "Runtime Library" is -set to "Multi-threaded DLL". - -
                6. Click "OK" to close the "Project / Properties" dialog box. - -
                7. MSVC++ lacks some C99 header files that are fundamental for FFmpeg. -Get msinttypes from http://code.google.com/p/msinttypes/downloads/list -and install it in MSVC++’s include directory -(i.e. ‘C:\Program Files\Microsoft Visual Studio 8\VC\include’). - -
                8. MSVC++ also does not understand the inline keyword used by -FFmpeg, so you must add this line before #includeing libav*: -
                   
                  #define inline _inline
                  -
                  - -
                9. Build your application, everything should work. - -
                - - -

                4.2.2 Using shared libraries

                - -

                This is how to create DLL and LIB files that are compatible with MSVC++: +

                Place makedef, c99wrap.exe, c99conv.exe, and yasm.exe +somewhere in your PATH.

                -
                  -
                1. Add a call to ‘vcvars32.bat’ (which sets up the environment -variables for the Visual C++ tools) as the first line of ‘msys.bat’. -The standard location for ‘vcvars32.bat’ is -‘C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat’, -and the standard location for ‘msys.bat’ is ‘C:\msys\1.0\msys.bat’. -If this corresponds to your setup, add the following line as the first line -of ‘msys.bat’: - -
                   
                  call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"
                  -
                  - -

                  Alternatively, you may start the ‘Visual Studio 2005 Command Prompt’, -and run ‘c:\msys\1.0\msys.bat’ from there. +

                  Next, make sure inttypes.h and any other headers and libs you want to use +are located in a spot that the compiler can see. Do so by modifying the LIB +and INCLUDE environment variables to include the Windows paths to +these directories. Alternatively, you can try and use the +--extra-cflags/--extra-ldflags configure options.

                  -
                2. Within the MSYS shell, run lib.exe. If you get a help message -from ‘Microsoft (R) Library Manager’, this means your environment -variables are set up correctly, the ‘Microsoft (R) Library Manager’ -is on the path and will be used by FFmpeg to create -MSVC++-compatible import libraries. +

                  Finally, run: +

                  +
                   
                  For MSVC:
                  +./configure --toolchain=msvc
                   
                  -
                3. Build FFmpeg with +For ICL: +./configure --toolchain=icl -
                   
                  ./configure --enable-shared
                   make
                   make install
                   
                  -

                  Your install path (‘/usr/local/’ by default) should now have the -necessary DLL and LIB files under the ‘bin’ directory. +

                  If you wish to compile shared libraries, add --enable-shared 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.

                  +

                  Notes: +

                  +
                    +
                  • It is possible that coreutils’ link.exe conflicts with MSVC’s linker. +You can find out by running which link to see which link.exe you +are using. If it is located at /bin/link.exe, then you have the wrong one +in your PATH. Either move or remove that copy, or make sure MSVC’s +link.exe takes precedence in your PATH over coreutils’. + +
                  • 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 +zlib.lib with MSVC. Regardless of which method you use, you must still +follow step 3, or compilation will fail. +
                      +
                    1. Grab the zlib sources. +
                    2. Edit win32/Makefile.msc so that it uses -MT instead of -MD, since +this is how FFmpeg is built as well. +
                    3. Edit zconf.h and remove its inclusion of unistd.h. This gets +erroneously included when building FFmpeg. +
                    4. Run nmake -f win32/Makefile.msc. +
                    5. Move zlib.lib, zconf.h, and zlib.h to somewhere MSVC +can see.
                    -

                    Alternatively, build the libraries with a cross compiler, according to -the instructions below in Cross compilation for Windows with Linux. +

                  • FFmpeg has been tested with the following on i686 and x86_64: +
                      +
                    • Visual Studio 2010 Pro and Express +
                    • Visual Studio 2012 Pro and Express +
                    • Intel Composer XE 2013 +
                    +

                    Anything else is not officially supported.

                    -

                    To use those files with MSVC++, do the same as you would do with -the static libraries, as described above. But in Step 4, -you should only need to add the directory where the LIB files are installed -(i.e. ‘c:\msys\usr\local\bin’). This is not a typo, the LIB files are -installed in the ‘bin’ directory. And instead of adding the static -libraries (‘libxxx.a’ files) you should add the MSVC import libraries -(‘avcodec.lib’, ‘avformat.lib’, and -‘avutil.lib’). Note that you should not use the GCC import -libraries (‘libxxx.dll.a’ files), as these will give you undefined -reference errors. There should be no need for ‘libmingwex.a’, -‘libgcc.a’, and ‘wsock32.lib’, nor any other external library -statically linked into the DLLs. +

                  + + +

                  4.2.1 Linking to FFmpeg with Microsoft Visual C++

                  + +

                  If you plan to link with MSVC-built static libraries, you will need +to make sure you have Runtime Library set to +Multi-threaded (/MT) in your project’s settings.

                  -

                  FFmpeg headers do not declare global data for Windows DLLs through the usual -dllexport/dllimport interface. Such data will be exported properly while -building, but to use them in your MSVC++ code you will have to edit the -appropriate headers and mark the data as dllimport. For example, in -libavutil/pixdesc.h you should have: -

                   
                  extern __declspec(dllimport) const AVPixFmtDescriptor av_pix_fmt_descriptors[];
                  +

                  You will need to define inline to something MSVC understands: +

                   
                  #define inline __inline
                   
                  -

                  Note that using import libraries created by dlltool requires -the linker optimization option to be set to -"References: Keep Unreferenced Data (/OPT:NOREF)", otherwise -the resulting binaries will fail during runtime. This isn’t -required when using import libraries generated by lib.exe. +

                  Also note, that as stated in Microsoft Visual C++, you will need +an MSVC-compatible inttypes.h. +

                  +

                  If you plan on using import libraries created by dlltool, you must +set References to No (/OPT:NOREF) under the linker optimization +settings, otherwise the resulting binaries will fail during runtime. +This is not required when using import libraries generated by lib.exe. This issue is reported upstream at http://sourceware.org/bugzilla/show_bug.cgi?id=12633.

                  @@ -384,26 +265,23 @@ This issue is reported upstream at (which is enabled by default in Release mode), follow these steps:

                    -
                  1. Open ‘Visual Studio 2005 Command Prompt’. +
                  2. Open the Visual Studio Command Prompt.

                    Alternatively, in a normal command line prompt, call ‘vcvars32.bat’ which sets up the environment variables for the Visual C++ tools -(the standard location for this file is -‘C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat’). +(the standard location for this file is something like +‘C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat’).

                  3. Enter the ‘bin’ directory where the created LIB and DLL files are stored. -
                  4. Generate new import libraries with ‘lib.exe’: +
                  5. Generate new import libraries with lib.exe: -
                     
                    lib /machine:i386 /def:..\lib\avcodec-53.def  /out:avcodec.lib
                    -lib /machine:i386 /def:..\lib\avdevice-53.def /out:avdevice.lib
                    -lib /machine:i386 /def:..\lib\avfilter-2.def  /out:avfilter.lib
                    -lib /machine:i386 /def:..\lib\avformat-53.def /out:avformat.lib
                    -lib /machine:i386 /def:..\lib\avutil-51.def   /out:avutil.lib
                    -lib /machine:i386 /def:..\lib\swscale-2.def   /out:swscale.lib
                    +
                     
                    lib /machine:i386 /def:..\lib\foo-version.def  /out:foo.lib
                     
                    +

                    Replace foo-version and foo with the respective library names. +

                    @@ -432,21 +310,8 @@ following "Devel" ones:

                     
                    binutils, gcc4-core, make, git, mingw-runtime, texi2html
                     
                    -

                    And the following "Utils" one: -

                     
                    diffutils
                    -
                    - -

                    Then run -

                    -
                     
                    ./configure
                    -
                    - -

                    to make a static build. -

                    -

                    The current gcc4-core package is buggy and needs this flag to build -shared libraries: -

                    -
                     
                    ./configure --enable-shared --disable-static --extra-cflags=-fno-reorder-functions
                    +

                    In order to run FATE you will also need the following "Utils" packages: +

                     
                    bc, diffutils
                     

                    If you want to build FFmpeg with additional libraries, download Cygwin @@ -457,16 +322,12 @@ shared libraries:

                    These library packages are only available from Cygwin Ports:

                    -
                     
                    yasm, libSDL-devel, libdirac-devel, libfaac-devel, libaacplus-devel, libgsm-devel,
                    -libmp3lame-devel, libschroedinger1.0-devel, speex-devel, libtheora-devel,
                    -libxvidcore-devel
                    +
                     
                    yasm, libSDL-devel, libfaac-devel, libaacplus-devel, libgsm-devel, libmp3lame-devel,
                    +libschroedinger1.0-devel, speex-devel, libtheora-devel, libxvidcore-devel
                     
                    -

                    The recommendation for libnut and x264 is to build them from source by -yourself, as they evolve too quickly for Cygwin Ports to be up to date. -

                    -

                    Cygwin 1.7.x has IPv6 support. You can add IPv6 to Cygwin 1.5.x by means -of the libgetaddrinfo-devel package, available at Cygwin Ports. +

                    The recommendation for x264 is to build it from source, as it evolves too +quickly for Cygwin Ports to be up to date.

                    4.5 Crosscompilation for Windows under Cygwin

                    @@ -488,14 +349,67 @@ of the libgetaddrinfo-devel package, available at Cygwin Ports.

                     
                    ./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
                     
                    - + +

                    5. Plan 9

                    + +

                    The native Plan 9 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.

                    - - - +
                      +
                    • GNU awk, grep, make, and sed + +

                      Working packages of these tools can be found at +ports2plan9. +They can be installed with 9front’s pkg +utility by setting pkgpath to +http://ports2plan9.googlecode.com/files/. +

                      +
                    • Missing/broken head and printf commands + +

                      Replacements adequate for building FFmpeg can be found in the +compat/plan9 directory. Place these somewhere they will be +found by the shell. These are not full implementations of the +commands and are not suitable for general use. +

                      +
                    • Missing C99 stdint.h and inttypes.h + +

                      Replacement headers are available from +http://code.google.com/p/plan9front/issues/detail?id=152. +

                      +
                    • Missing or non-standard library functions + +

                      Some functions in the C library are missing or incomplete. The +gcc-apelibs-1207 package from +ports2plan9 +includes an updated C library, but installing the full package gives +unusable executables. Instead, keep the files from gccbin.tgz +under /386/lib/gnu. From the libc.a archive in the +gcc-apelibs-1207 package, extract the following object files and +turn them into a library: +

                      +
                        +
                      • strerror.o +
                      • strtoll.o +
                      • snprintf.o +
                      • vsnprintf.o +
                      • vfprintf.o +
                      • _IO_getc.o +
                      • _IO_putc.o +
                      + +

                      Use the --extra-libs option of configure to inform the +build system of this library. +

                      +
                    • FPU exceptions enabled by default + +

                      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. +

                      +
                    + +
                    +This document was generated by Kyle Schwarz on January 21, 2014 using texi2html 1.82.
                    diff --git a/extern/ffmpeg/include/inttypes.h b/extern/ffmpeg/include/inttypes.h deleted file mode 100644 index 25542771f5..0000000000 --- a/extern/ffmpeg/include/inttypes.h +++ /dev/null @@ -1,305 +0,0 @@ -// ISO C9x compliant inttypes.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006 Alexander Chemeris -// -// 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. -// -// 3. The name of the author may 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. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_INTTYPES_H_ // [ -#define _MSC_INTTYPES_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include "stdint.h" - -// 7.8 Format conversion of integer types - -typedef struct { - intmax_t quot; - intmax_t rem; -} imaxdiv_t; - -// 7.8.1 Macros for format specifiers - -#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 - -// The fprintf macros for signed integers are: -#define PRId8 "d" -#define PRIi8 "i" -#define PRIdLEAST8 "d" -#define PRIiLEAST8 "i" -#define PRIdFAST8 "d" -#define PRIiFAST8 "i" - -#define PRId16 "hd" -#define PRIi16 "hi" -#define PRIdLEAST16 "hd" -#define PRIiLEAST16 "hi" -#define PRIdFAST16 "hd" -#define PRIiFAST16 "hi" - -#define PRId32 "I32d" -#define PRIi32 "I32i" -#define PRIdLEAST32 "I32d" -#define PRIiLEAST32 "I32i" -#define PRIdFAST32 "I32d" -#define PRIiFAST32 "I32i" - -#define PRId64 "I64d" -#define PRIi64 "I64i" -#define PRIdLEAST64 "I64d" -#define PRIiLEAST64 "I64i" -#define PRIdFAST64 "I64d" -#define PRIiFAST64 "I64i" - -#define PRIdMAX "I64d" -#define PRIiMAX "I64i" - -#define PRIdPTR "Id" -#define PRIiPTR "Ii" - -// The fprintf macros for unsigned integers are: -#define PRIo8 "o" -#define PRIu8 "u" -#define PRIx8 "x" -#define PRIX8 "X" -#define PRIoLEAST8 "o" -#define PRIuLEAST8 "u" -#define PRIxLEAST8 "x" -#define PRIXLEAST8 "X" -#define PRIoFAST8 "o" -#define PRIuFAST8 "u" -#define PRIxFAST8 "x" -#define PRIXFAST8 "X" - -#define PRIo16 "ho" -#define PRIu16 "hu" -#define PRIx16 "hx" -#define PRIX16 "hX" -#define PRIoLEAST16 "ho" -#define PRIuLEAST16 "hu" -#define PRIxLEAST16 "hx" -#define PRIXLEAST16 "hX" -#define PRIoFAST16 "ho" -#define PRIuFAST16 "hu" -#define PRIxFAST16 "hx" -#define PRIXFAST16 "hX" - -#define PRIo32 "I32o" -#define PRIu32 "I32u" -#define PRIx32 "I32x" -#define PRIX32 "I32X" -#define PRIoLEAST32 "I32o" -#define PRIuLEAST32 "I32u" -#define PRIxLEAST32 "I32x" -#define PRIXLEAST32 "I32X" -#define PRIoFAST32 "I32o" -#define PRIuFAST32 "I32u" -#define PRIxFAST32 "I32x" -#define PRIXFAST32 "I32X" - -#define PRIo64 "I64o" -#define PRIu64 "I64u" -#define PRIx64 "I64x" -#define PRIX64 "I64X" -#define PRIoLEAST64 "I64o" -#define PRIuLEAST64 "I64u" -#define PRIxLEAST64 "I64x" -#define PRIXLEAST64 "I64X" -#define PRIoFAST64 "I64o" -#define PRIuFAST64 "I64u" -#define PRIxFAST64 "I64x" -#define PRIXFAST64 "I64X" - -#define PRIoMAX "I64o" -#define PRIuMAX "I64u" -#define PRIxMAX "I64x" -#define PRIXMAX "I64X" - -#define PRIoPTR "Io" -#define PRIuPTR "Iu" -#define PRIxPTR "Ix" -#define PRIXPTR "IX" - -// The fscanf macros for signed integers are: -#define SCNd8 "d" -#define SCNi8 "i" -#define SCNdLEAST8 "d" -#define SCNiLEAST8 "i" -#define SCNdFAST8 "d" -#define SCNiFAST8 "i" - -#define SCNd16 "hd" -#define SCNi16 "hi" -#define SCNdLEAST16 "hd" -#define SCNiLEAST16 "hi" -#define SCNdFAST16 "hd" -#define SCNiFAST16 "hi" - -#define SCNd32 "ld" -#define SCNi32 "li" -#define SCNdLEAST32 "ld" -#define SCNiLEAST32 "li" -#define SCNdFAST32 "ld" -#define SCNiFAST32 "li" - -#define SCNd64 "I64d" -#define SCNi64 "I64i" -#define SCNdLEAST64 "I64d" -#define SCNiLEAST64 "I64i" -#define SCNdFAST64 "I64d" -#define SCNiFAST64 "I64i" - -#define SCNdMAX "I64d" -#define SCNiMAX "I64i" - -#ifdef _WIN64 // [ -# define SCNdPTR "I64d" -# define SCNiPTR "I64i" -#else // _WIN64 ][ -# define SCNdPTR "ld" -# define SCNiPTR "li" -#endif // _WIN64 ] - -// The fscanf macros for unsigned integers are: -#define SCNo8 "o" -#define SCNu8 "u" -#define SCNx8 "x" -#define SCNX8 "X" -#define SCNoLEAST8 "o" -#define SCNuLEAST8 "u" -#define SCNxLEAST8 "x" -#define SCNXLEAST8 "X" -#define SCNoFAST8 "o" -#define SCNuFAST8 "u" -#define SCNxFAST8 "x" -#define SCNXFAST8 "X" - -#define SCNo16 "ho" -#define SCNu16 "hu" -#define SCNx16 "hx" -#define SCNX16 "hX" -#define SCNoLEAST16 "ho" -#define SCNuLEAST16 "hu" -#define SCNxLEAST16 "hx" -#define SCNXLEAST16 "hX" -#define SCNoFAST16 "ho" -#define SCNuFAST16 "hu" -#define SCNxFAST16 "hx" -#define SCNXFAST16 "hX" - -#define SCNo32 "lo" -#define SCNu32 "lu" -#define SCNx32 "lx" -#define SCNX32 "lX" -#define SCNoLEAST32 "lo" -#define SCNuLEAST32 "lu" -#define SCNxLEAST32 "lx" -#define SCNXLEAST32 "lX" -#define SCNoFAST32 "lo" -#define SCNuFAST32 "lu" -#define SCNxFAST32 "lx" -#define SCNXFAST32 "lX" - -#define SCNo64 "I64o" -#define SCNu64 "I64u" -#define SCNx64 "I64x" -#define SCNX64 "I64X" -#define SCNoLEAST64 "I64o" -#define SCNuLEAST64 "I64u" -#define SCNxLEAST64 "I64x" -#define SCNXLEAST64 "I64X" -#define SCNoFAST64 "I64o" -#define SCNuFAST64 "I64u" -#define SCNxFAST64 "I64x" -#define SCNXFAST64 "I64X" - -#define SCNoMAX "I64o" -#define SCNuMAX "I64u" -#define SCNxMAX "I64x" -#define SCNXMAX "I64X" - -#ifdef _WIN64 // [ -# define SCNoPTR "I64o" -# define SCNuPTR "I64u" -# define SCNxPTR "I64x" -# define SCNXPTR "I64X" -#else // _WIN64 ][ -# define SCNoPTR "lo" -# define SCNuPTR "lu" -# define SCNxPTR "lx" -# define SCNXPTR "lX" -#endif // _WIN64 ] - -#endif // __STDC_FORMAT_MACROS ] - -// 7.8.2 Functions for greatest-width integer types - -// 7.8.2.1 The imaxabs function -#define imaxabs _abs64 - -// 7.8.2.2 The imaxdiv function - -// This is modified version of div() function from Microsoft's div.c found -// in %MSVC.NET%\crt\src\div.c -#ifdef STATIC_IMAXDIV // [ -static -#else // STATIC_IMAXDIV ][ -_inline -#endif // STATIC_IMAXDIV ] -imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) -{ - imaxdiv_t result; - - result.quot = numer / denom; - result.rem = numer % denom; - - if (numer < 0 && result.rem > 0) { - // did division wrong; must fix up - ++result.quot; - result.rem -= denom; - } - - return result; -} - -// 7.8.2.3 The strtoimax and strtoumax functions -#define strtoimax _strtoi64 -#define strtoumax _strtoui64 - -// 7.8.2.4 The wcstoimax and wcstoumax functions -#define wcstoimax _wcstoi64 -#define wcstoumax _wcstoui64 - - -#endif // _MSC_INTTYPES_H_ ] diff --git a/extern/ffmpeg/include/libavcodec/avcodec.h b/extern/ffmpeg/include/libavcodec/avcodec.h index 62e90be012..fe64b38986 100644 --- a/extern/ffmpeg/include/libavcodec/avcodec.h +++ b/extern/ffmpeg/include/libavcodec/avcodec.h @@ -23,19 +23,25 @@ /** * @file - * external API header + * @ingroup libavc + * Libavcodec external API header */ #include #include "libavutil/samplefmt.h" +#include "libavutil/attributes.h" #include "libavutil/avutil.h" +#include "libavutil/buffer.h" #include "libavutil/cpu.h" +#include "libavutil/channel_layout.h" #include "libavutil/dict.h" +#include "libavutil/frame.h" #include "libavutil/log.h" #include "libavutil/pixfmt.h" #include "libavutil/rational.h" -#include "libavcodec/version.h" +#include "version.h" + /** * @defgroup libavc Encoding/Decoding Library * @{ @@ -67,6 +73,15 @@ * */ +/** + * @defgroup lavc_core Core functions/structures. + * @ingroup libavc + * + * Basic definitions, functions for querying libavcodec capabilities, + * allocating core structures, etc. + * @{ + */ + /** * Identify the syntax and semantics of the bitstream. @@ -79,434 +94,483 @@ * If you add a codec ID to this list, add it so that * 1. no value of a existing codec ID changes (that would break ABI), * 2. Give it a value which when taken as ASCII is recognized uniquely by a human as this specific codec. - * This ensures that 2 forks can independantly add CodecIDs without producing conflicts. + * This ensures that 2 forks can independently add AVCodecIDs without producing conflicts. + * + * After adding new codec IDs, do not forget to add an entry to the codec + * descriptor list and bump libavcodec minor version. */ -enum CodecID { - CODEC_ID_NONE, +enum AVCodecID { + AV_CODEC_ID_NONE, /* video codecs */ - CODEC_ID_MPEG1VIDEO, - CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding - CODEC_ID_MPEG2VIDEO_XVMC, - CODEC_ID_H261, - CODEC_ID_H263, - CODEC_ID_RV10, - CODEC_ID_RV20, - CODEC_ID_MJPEG, - CODEC_ID_MJPEGB, - CODEC_ID_LJPEG, - CODEC_ID_SP5X, - CODEC_ID_JPEGLS, - CODEC_ID_MPEG4, - CODEC_ID_RAWVIDEO, - CODEC_ID_MSMPEG4V1, - CODEC_ID_MSMPEG4V2, - CODEC_ID_MSMPEG4V3, - CODEC_ID_WMV1, - CODEC_ID_WMV2, - CODEC_ID_H263P, - CODEC_ID_H263I, - CODEC_ID_FLV1, - CODEC_ID_SVQ1, - CODEC_ID_SVQ3, - CODEC_ID_DVVIDEO, - CODEC_ID_HUFFYUV, - CODEC_ID_CYUV, - CODEC_ID_H264, - CODEC_ID_INDEO3, - CODEC_ID_VP3, - CODEC_ID_THEORA, - CODEC_ID_ASV1, - CODEC_ID_ASV2, - CODEC_ID_FFV1, - CODEC_ID_4XM, - CODEC_ID_VCR1, - CODEC_ID_CLJR, - CODEC_ID_MDEC, - CODEC_ID_ROQ, - CODEC_ID_INTERPLAY_VIDEO, - CODEC_ID_XAN_WC3, - CODEC_ID_XAN_WC4, - CODEC_ID_RPZA, - CODEC_ID_CINEPAK, - CODEC_ID_WS_VQA, - CODEC_ID_MSRLE, - CODEC_ID_MSVIDEO1, - CODEC_ID_IDCIN, - CODEC_ID_8BPS, - CODEC_ID_SMC, - CODEC_ID_FLIC, - CODEC_ID_TRUEMOTION1, - CODEC_ID_VMDVIDEO, - CODEC_ID_MSZH, - CODEC_ID_ZLIB, - CODEC_ID_QTRLE, - CODEC_ID_SNOW, - CODEC_ID_TSCC, - CODEC_ID_ULTI, - CODEC_ID_QDRAW, - CODEC_ID_VIXL, - CODEC_ID_QPEG, - CODEC_ID_PNG, - CODEC_ID_PPM, - CODEC_ID_PBM, - CODEC_ID_PGM, - CODEC_ID_PGMYUV, - CODEC_ID_PAM, - CODEC_ID_FFVHUFF, - CODEC_ID_RV30, - CODEC_ID_RV40, - CODEC_ID_VC1, - CODEC_ID_WMV3, - CODEC_ID_LOCO, - CODEC_ID_WNV1, - CODEC_ID_AASC, - CODEC_ID_INDEO2, - CODEC_ID_FRAPS, - CODEC_ID_TRUEMOTION2, - CODEC_ID_BMP, - CODEC_ID_CSCD, - CODEC_ID_MMVIDEO, - CODEC_ID_ZMBV, - CODEC_ID_AVS, - CODEC_ID_SMACKVIDEO, - CODEC_ID_NUV, - CODEC_ID_KMVC, - CODEC_ID_FLASHSV, - CODEC_ID_CAVS, - CODEC_ID_JPEG2000, - CODEC_ID_VMNC, - CODEC_ID_VP5, - CODEC_ID_VP6, - CODEC_ID_VP6F, - CODEC_ID_TARGA, - CODEC_ID_DSICINVIDEO, - CODEC_ID_TIERTEXSEQVIDEO, - CODEC_ID_TIFF, - CODEC_ID_GIF, -#if LIBAVCODEC_VERSION_MAJOR == 53 - CODEC_ID_FFH264, -#endif - CODEC_ID_DXA, - CODEC_ID_DNXHD, - CODEC_ID_THP, - CODEC_ID_SGI, - CODEC_ID_C93, - CODEC_ID_BETHSOFTVID, - CODEC_ID_PTX, - CODEC_ID_TXD, - CODEC_ID_VP6A, - CODEC_ID_AMV, - CODEC_ID_VB, - CODEC_ID_PCX, - CODEC_ID_SUNRAST, - CODEC_ID_INDEO4, - CODEC_ID_INDEO5, - CODEC_ID_MIMIC, - CODEC_ID_RL2, -#if LIBAVCODEC_VERSION_MAJOR == 53 - CODEC_ID_8SVX_EXP, - CODEC_ID_8SVX_FIB, -#endif - CODEC_ID_ESCAPE124, - CODEC_ID_DIRAC, - CODEC_ID_BFI, - CODEC_ID_CMV, - CODEC_ID_MOTIONPIXELS, - CODEC_ID_TGV, - CODEC_ID_TGQ, - CODEC_ID_TQI, - CODEC_ID_AURA, - CODEC_ID_AURA2, - CODEC_ID_V210X, - CODEC_ID_TMV, - CODEC_ID_V210, - CODEC_ID_DPX, - CODEC_ID_MAD, - CODEC_ID_FRWU, - CODEC_ID_FLASHSV2, - CODEC_ID_CDGRAPHICS, - CODEC_ID_R210, - CODEC_ID_ANM, - CODEC_ID_BINKVIDEO, - CODEC_ID_IFF_ILBM, - CODEC_ID_IFF_BYTERUN1, - CODEC_ID_KGV1, - CODEC_ID_YOP, - CODEC_ID_VP8, - CODEC_ID_PICTOR, - CODEC_ID_ANSI, - CODEC_ID_A64_MULTI, - CODEC_ID_A64_MULTI5, - CODEC_ID_R10K, - CODEC_ID_MXPEG, - CODEC_ID_LAGARITH, - CODEC_ID_PRORES, - CODEC_ID_JV, - CODEC_ID_DFA, - CODEC_ID_WMV3IMAGE, - CODEC_ID_VC1IMAGE, -#if LIBAVCODEC_VERSION_MAJOR == 53 - CODEC_ID_G723_1_DEPRECATED, - CODEC_ID_G729_DEPRECATED, -#endif - CODEC_ID_UTVIDEO_DEPRECATED, - CODEC_ID_BMV_VIDEO, - CODEC_ID_VBLE, - CODEC_ID_DXTORY, - CODEC_ID_V410, - CODEC_ID_XWD, - CODEC_ID_Y41P = MKBETAG('Y','4','1','P'), - CODEC_ID_UTVIDEO = 0x800, - CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'), - CODEC_ID_AVRP = MKBETAG('A','V','R','P'), + AV_CODEC_ID_MPEG1VIDEO, + AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding + AV_CODEC_ID_MPEG2VIDEO_XVMC, + AV_CODEC_ID_H261, + AV_CODEC_ID_H263, + AV_CODEC_ID_RV10, + AV_CODEC_ID_RV20, + AV_CODEC_ID_MJPEG, + AV_CODEC_ID_MJPEGB, + AV_CODEC_ID_LJPEG, + AV_CODEC_ID_SP5X, + AV_CODEC_ID_JPEGLS, + AV_CODEC_ID_MPEG4, + AV_CODEC_ID_RAWVIDEO, + AV_CODEC_ID_MSMPEG4V1, + AV_CODEC_ID_MSMPEG4V2, + AV_CODEC_ID_MSMPEG4V3, + AV_CODEC_ID_WMV1, + AV_CODEC_ID_WMV2, + AV_CODEC_ID_H263P, + AV_CODEC_ID_H263I, + AV_CODEC_ID_FLV1, + AV_CODEC_ID_SVQ1, + AV_CODEC_ID_SVQ3, + AV_CODEC_ID_DVVIDEO, + AV_CODEC_ID_HUFFYUV, + AV_CODEC_ID_CYUV, + AV_CODEC_ID_H264, + AV_CODEC_ID_INDEO3, + AV_CODEC_ID_VP3, + AV_CODEC_ID_THEORA, + AV_CODEC_ID_ASV1, + AV_CODEC_ID_ASV2, + AV_CODEC_ID_FFV1, + AV_CODEC_ID_4XM, + AV_CODEC_ID_VCR1, + AV_CODEC_ID_CLJR, + AV_CODEC_ID_MDEC, + AV_CODEC_ID_ROQ, + AV_CODEC_ID_INTERPLAY_VIDEO, + AV_CODEC_ID_XAN_WC3, + AV_CODEC_ID_XAN_WC4, + AV_CODEC_ID_RPZA, + AV_CODEC_ID_CINEPAK, + AV_CODEC_ID_WS_VQA, + AV_CODEC_ID_MSRLE, + AV_CODEC_ID_MSVIDEO1, + AV_CODEC_ID_IDCIN, + AV_CODEC_ID_8BPS, + AV_CODEC_ID_SMC, + AV_CODEC_ID_FLIC, + AV_CODEC_ID_TRUEMOTION1, + AV_CODEC_ID_VMDVIDEO, + AV_CODEC_ID_MSZH, + AV_CODEC_ID_ZLIB, + AV_CODEC_ID_QTRLE, + AV_CODEC_ID_TSCC, + AV_CODEC_ID_ULTI, + AV_CODEC_ID_QDRAW, + AV_CODEC_ID_VIXL, + AV_CODEC_ID_QPEG, + AV_CODEC_ID_PNG, + AV_CODEC_ID_PPM, + AV_CODEC_ID_PBM, + AV_CODEC_ID_PGM, + AV_CODEC_ID_PGMYUV, + AV_CODEC_ID_PAM, + AV_CODEC_ID_FFVHUFF, + AV_CODEC_ID_RV30, + AV_CODEC_ID_RV40, + AV_CODEC_ID_VC1, + AV_CODEC_ID_WMV3, + AV_CODEC_ID_LOCO, + AV_CODEC_ID_WNV1, + AV_CODEC_ID_AASC, + AV_CODEC_ID_INDEO2, + AV_CODEC_ID_FRAPS, + AV_CODEC_ID_TRUEMOTION2, + AV_CODEC_ID_BMP, + AV_CODEC_ID_CSCD, + AV_CODEC_ID_MMVIDEO, + AV_CODEC_ID_ZMBV, + AV_CODEC_ID_AVS, + AV_CODEC_ID_SMACKVIDEO, + AV_CODEC_ID_NUV, + AV_CODEC_ID_KMVC, + AV_CODEC_ID_FLASHSV, + AV_CODEC_ID_CAVS, + AV_CODEC_ID_JPEG2000, + AV_CODEC_ID_VMNC, + AV_CODEC_ID_VP5, + AV_CODEC_ID_VP6, + AV_CODEC_ID_VP6F, + AV_CODEC_ID_TARGA, + AV_CODEC_ID_DSICINVIDEO, + AV_CODEC_ID_TIERTEXSEQVIDEO, + AV_CODEC_ID_TIFF, + AV_CODEC_ID_GIF, + AV_CODEC_ID_DXA, + AV_CODEC_ID_DNXHD, + AV_CODEC_ID_THP, + AV_CODEC_ID_SGI, + AV_CODEC_ID_C93, + AV_CODEC_ID_BETHSOFTVID, + AV_CODEC_ID_PTX, + AV_CODEC_ID_TXD, + AV_CODEC_ID_VP6A, + AV_CODEC_ID_AMV, + AV_CODEC_ID_VB, + AV_CODEC_ID_PCX, + AV_CODEC_ID_SUNRAST, + AV_CODEC_ID_INDEO4, + AV_CODEC_ID_INDEO5, + AV_CODEC_ID_MIMIC, + AV_CODEC_ID_RL2, + AV_CODEC_ID_ESCAPE124, + AV_CODEC_ID_DIRAC, + AV_CODEC_ID_BFI, + AV_CODEC_ID_CMV, + AV_CODEC_ID_MOTIONPIXELS, + AV_CODEC_ID_TGV, + AV_CODEC_ID_TGQ, + AV_CODEC_ID_TQI, + AV_CODEC_ID_AURA, + AV_CODEC_ID_AURA2, + AV_CODEC_ID_V210X, + AV_CODEC_ID_TMV, + AV_CODEC_ID_V210, + AV_CODEC_ID_DPX, + AV_CODEC_ID_MAD, + AV_CODEC_ID_FRWU, + AV_CODEC_ID_FLASHSV2, + AV_CODEC_ID_CDGRAPHICS, + AV_CODEC_ID_R210, + AV_CODEC_ID_ANM, + AV_CODEC_ID_BINKVIDEO, + AV_CODEC_ID_IFF_ILBM, + AV_CODEC_ID_IFF_BYTERUN1, + AV_CODEC_ID_KGV1, + AV_CODEC_ID_YOP, + AV_CODEC_ID_VP8, + AV_CODEC_ID_PICTOR, + AV_CODEC_ID_ANSI, + AV_CODEC_ID_A64_MULTI, + AV_CODEC_ID_A64_MULTI5, + AV_CODEC_ID_R10K, + AV_CODEC_ID_MXPEG, + AV_CODEC_ID_LAGARITH, + AV_CODEC_ID_PRORES, + AV_CODEC_ID_JV, + AV_CODEC_ID_DFA, + AV_CODEC_ID_WMV3IMAGE, + AV_CODEC_ID_VC1IMAGE, + AV_CODEC_ID_UTVIDEO, + AV_CODEC_ID_BMV_VIDEO, + AV_CODEC_ID_VBLE, + AV_CODEC_ID_DXTORY, + AV_CODEC_ID_V410, + AV_CODEC_ID_XWD, + AV_CODEC_ID_CDXL, + AV_CODEC_ID_XBM, + AV_CODEC_ID_ZEROCODEC, + AV_CODEC_ID_MSS1, + AV_CODEC_ID_MSA1, + AV_CODEC_ID_TSCC2, + AV_CODEC_ID_MTS2, + AV_CODEC_ID_CLLC, + AV_CODEC_ID_MSS2, + AV_CODEC_ID_VP9, + AV_CODEC_ID_AIC, + AV_CODEC_ID_ESCAPE130_DEPRECATED, + AV_CODEC_ID_G2M_DEPRECATED, + AV_CODEC_ID_WEBP_DEPRECATED, - CODEC_ID_G2M = MKBETAG( 0 ,'G','2','M'), - CODEC_ID_V308 = MKBETAG('V','3','0','8'), - CODEC_ID_YUV4 = MKBETAG('Y','U','V','4'), + AV_CODEC_ID_BRENDER_PIX= MKBETAG('B','P','I','X'), + AV_CODEC_ID_Y41P = MKBETAG('Y','4','1','P'), + AV_CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'), + AV_CODEC_ID_EXR = MKBETAG('0','E','X','R'), + AV_CODEC_ID_AVRP = MKBETAG('A','V','R','P'), + + AV_CODEC_ID_012V = MKBETAG('0','1','2','V'), + AV_CODEC_ID_G2M = MKBETAG( 0 ,'G','2','M'), + AV_CODEC_ID_AVUI = MKBETAG('A','V','U','I'), + AV_CODEC_ID_AYUV = MKBETAG('A','Y','U','V'), + AV_CODEC_ID_TARGA_Y216 = MKBETAG('T','2','1','6'), + AV_CODEC_ID_V308 = MKBETAG('V','3','0','8'), + AV_CODEC_ID_V408 = MKBETAG('V','4','0','8'), + AV_CODEC_ID_YUV4 = MKBETAG('Y','U','V','4'), + AV_CODEC_ID_SANM = MKBETAG('S','A','N','M'), + AV_CODEC_ID_PAF_VIDEO = MKBETAG('P','A','F','V'), + AV_CODEC_ID_AVRN = MKBETAG('A','V','R','n'), + AV_CODEC_ID_CPIA = MKBETAG('C','P','I','A'), + AV_CODEC_ID_XFACE = MKBETAG('X','F','A','C'), + AV_CODEC_ID_SGIRLE = MKBETAG('S','G','I','R'), + AV_CODEC_ID_MVC1 = MKBETAG('M','V','C','1'), + AV_CODEC_ID_MVC2 = MKBETAG('M','V','C','2'), + 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" */ - CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs - CODEC_ID_PCM_S16LE = 0x10000, - CODEC_ID_PCM_S16BE, - CODEC_ID_PCM_U16LE, - CODEC_ID_PCM_U16BE, - CODEC_ID_PCM_S8, - CODEC_ID_PCM_U8, - CODEC_ID_PCM_MULAW, - CODEC_ID_PCM_ALAW, - CODEC_ID_PCM_S32LE, - CODEC_ID_PCM_S32BE, - CODEC_ID_PCM_U32LE, - CODEC_ID_PCM_U32BE, - CODEC_ID_PCM_S24LE, - CODEC_ID_PCM_S24BE, - CODEC_ID_PCM_U24LE, - CODEC_ID_PCM_U24BE, - CODEC_ID_PCM_S24DAUD, - CODEC_ID_PCM_ZORK, - CODEC_ID_PCM_S16LE_PLANAR, - CODEC_ID_PCM_DVD, - CODEC_ID_PCM_F32BE, - CODEC_ID_PCM_F32LE, - CODEC_ID_PCM_F64BE, - CODEC_ID_PCM_F64LE, - CODEC_ID_PCM_BLURAY, - CODEC_ID_PCM_LXF, - CODEC_ID_S302M, - CODEC_ID_PCM_S8_PLANAR, + AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs + AV_CODEC_ID_PCM_S16LE = 0x10000, + AV_CODEC_ID_PCM_S16BE, + AV_CODEC_ID_PCM_U16LE, + AV_CODEC_ID_PCM_U16BE, + AV_CODEC_ID_PCM_S8, + AV_CODEC_ID_PCM_U8, + AV_CODEC_ID_PCM_MULAW, + AV_CODEC_ID_PCM_ALAW, + AV_CODEC_ID_PCM_S32LE, + AV_CODEC_ID_PCM_S32BE, + AV_CODEC_ID_PCM_U32LE, + AV_CODEC_ID_PCM_U32BE, + AV_CODEC_ID_PCM_S24LE, + AV_CODEC_ID_PCM_S24BE, + AV_CODEC_ID_PCM_U24LE, + AV_CODEC_ID_PCM_U24BE, + AV_CODEC_ID_PCM_S24DAUD, + AV_CODEC_ID_PCM_ZORK, + AV_CODEC_ID_PCM_S16LE_PLANAR, + AV_CODEC_ID_PCM_DVD, + AV_CODEC_ID_PCM_F32BE, + AV_CODEC_ID_PCM_F32LE, + AV_CODEC_ID_PCM_F64BE, + AV_CODEC_ID_PCM_F64LE, + AV_CODEC_ID_PCM_BLURAY, + 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), /* various ADPCM codecs */ - CODEC_ID_ADPCM_IMA_QT = 0x11000, - CODEC_ID_ADPCM_IMA_WAV, - CODEC_ID_ADPCM_IMA_DK3, - CODEC_ID_ADPCM_IMA_DK4, - CODEC_ID_ADPCM_IMA_WS, - CODEC_ID_ADPCM_IMA_SMJPEG, - CODEC_ID_ADPCM_MS, - CODEC_ID_ADPCM_4XM, - CODEC_ID_ADPCM_XA, - CODEC_ID_ADPCM_ADX, - CODEC_ID_ADPCM_EA, - CODEC_ID_ADPCM_G726, - CODEC_ID_ADPCM_CT, - CODEC_ID_ADPCM_SWF, - CODEC_ID_ADPCM_YAMAHA, - CODEC_ID_ADPCM_SBPRO_4, - CODEC_ID_ADPCM_SBPRO_3, - CODEC_ID_ADPCM_SBPRO_2, - CODEC_ID_ADPCM_THP, - CODEC_ID_ADPCM_IMA_AMV, - CODEC_ID_ADPCM_EA_R1, - CODEC_ID_ADPCM_EA_R3, - CODEC_ID_ADPCM_EA_R2, - CODEC_ID_ADPCM_IMA_EA_SEAD, - CODEC_ID_ADPCM_IMA_EA_EACS, - CODEC_ID_ADPCM_EA_XAS, - CODEC_ID_ADPCM_EA_MAXIS_XA, - CODEC_ID_ADPCM_IMA_ISS, - CODEC_ID_ADPCM_G722, - CODEC_ID_ADPCM_IMA_APC, + AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, + AV_CODEC_ID_ADPCM_IMA_WAV, + AV_CODEC_ID_ADPCM_IMA_DK3, + AV_CODEC_ID_ADPCM_IMA_DK4, + AV_CODEC_ID_ADPCM_IMA_WS, + AV_CODEC_ID_ADPCM_IMA_SMJPEG, + AV_CODEC_ID_ADPCM_MS, + AV_CODEC_ID_ADPCM_4XM, + AV_CODEC_ID_ADPCM_XA, + AV_CODEC_ID_ADPCM_ADX, + AV_CODEC_ID_ADPCM_EA, + AV_CODEC_ID_ADPCM_G726, + AV_CODEC_ID_ADPCM_CT, + AV_CODEC_ID_ADPCM_SWF, + AV_CODEC_ID_ADPCM_YAMAHA, + AV_CODEC_ID_ADPCM_SBPRO_4, + AV_CODEC_ID_ADPCM_SBPRO_3, + AV_CODEC_ID_ADPCM_SBPRO_2, + AV_CODEC_ID_ADPCM_THP, + AV_CODEC_ID_ADPCM_IMA_AMV, + AV_CODEC_ID_ADPCM_EA_R1, + AV_CODEC_ID_ADPCM_EA_R3, + AV_CODEC_ID_ADPCM_EA_R2, + AV_CODEC_ID_ADPCM_IMA_EA_SEAD, + AV_CODEC_ID_ADPCM_IMA_EA_EACS, + AV_CODEC_ID_ADPCM_EA_XAS, + AV_CODEC_ID_ADPCM_EA_MAXIS_XA, + AV_CODEC_ID_ADPCM_IMA_ISS, + AV_CODEC_ID_ADPCM_G722, + AV_CODEC_ID_ADPCM_IMA_APC, + AV_CODEC_ID_VIMA = MKBETAG('V','I','M','A'), + AV_CODEC_ID_ADPCM_AFC = MKBETAG('A','F','C',' '), + 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 */ - CODEC_ID_AMR_NB = 0x12000, - CODEC_ID_AMR_WB, + AV_CODEC_ID_AMR_NB = 0x12000, + AV_CODEC_ID_AMR_WB, /* RealAudio codecs*/ - CODEC_ID_RA_144 = 0x13000, - CODEC_ID_RA_288, + AV_CODEC_ID_RA_144 = 0x13000, + AV_CODEC_ID_RA_288, /* various DPCM codecs */ - CODEC_ID_ROQ_DPCM = 0x14000, - CODEC_ID_INTERPLAY_DPCM, - CODEC_ID_XAN_DPCM, - CODEC_ID_SOL_DPCM, + AV_CODEC_ID_ROQ_DPCM = 0x14000, + AV_CODEC_ID_INTERPLAY_DPCM, + AV_CODEC_ID_XAN_DPCM, + AV_CODEC_ID_SOL_DPCM, /* audio codecs */ - CODEC_ID_MP2 = 0x15000, - CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 - CODEC_ID_AAC, - CODEC_ID_AC3, - CODEC_ID_DTS, - CODEC_ID_VORBIS, - CODEC_ID_DVAUDIO, - CODEC_ID_WMAV1, - CODEC_ID_WMAV2, - CODEC_ID_MACE3, - CODEC_ID_MACE6, - CODEC_ID_VMDAUDIO, -#if LIBAVCODEC_VERSION_MAJOR == 53 - CODEC_ID_SONIC, - CODEC_ID_SONIC_LS, + AV_CODEC_ID_MP2 = 0x15000, + AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 + AV_CODEC_ID_AAC, + AV_CODEC_ID_AC3, + AV_CODEC_ID_DTS, + AV_CODEC_ID_VORBIS, + AV_CODEC_ID_DVAUDIO, + AV_CODEC_ID_WMAV1, + AV_CODEC_ID_WMAV2, + AV_CODEC_ID_MACE3, + AV_CODEC_ID_MACE6, + AV_CODEC_ID_VMDAUDIO, + AV_CODEC_ID_FLAC, + AV_CODEC_ID_MP3ADU, + AV_CODEC_ID_MP3ON4, + AV_CODEC_ID_SHORTEN, + AV_CODEC_ID_ALAC, + AV_CODEC_ID_WESTWOOD_SND1, + AV_CODEC_ID_GSM, ///< as in Berlin toast format + AV_CODEC_ID_QDM2, + AV_CODEC_ID_COOK, + AV_CODEC_ID_TRUESPEECH, + AV_CODEC_ID_TTA, + AV_CODEC_ID_SMACKAUDIO, + AV_CODEC_ID_QCELP, + AV_CODEC_ID_WAVPACK, + AV_CODEC_ID_DSICINAUDIO, + AV_CODEC_ID_IMC, + AV_CODEC_ID_MUSEPACK7, + 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 - CODEC_ID_FLAC, - CODEC_ID_MP3ADU, - CODEC_ID_MP3ON4, - CODEC_ID_SHORTEN, - CODEC_ID_ALAC, - CODEC_ID_WESTWOOD_SND1, - CODEC_ID_GSM, ///< as in Berlin toast format - CODEC_ID_QDM2, - CODEC_ID_COOK, - CODEC_ID_TRUESPEECH, - CODEC_ID_TTA, - CODEC_ID_SMACKAUDIO, - CODEC_ID_QCELP, - CODEC_ID_WAVPACK, - CODEC_ID_DSICINAUDIO, - CODEC_ID_IMC, - CODEC_ID_MUSEPACK7, - CODEC_ID_MLP, - CODEC_ID_GSM_MS, /* as found in WAV */ - CODEC_ID_ATRAC3, - CODEC_ID_VOXWARE, - CODEC_ID_APE, - CODEC_ID_NELLYMOSER, - CODEC_ID_MUSEPACK8, - CODEC_ID_SPEEX, - CODEC_ID_WMAVOICE, - CODEC_ID_WMAPRO, - CODEC_ID_WMALOSSLESS, - CODEC_ID_ATRAC3P, - CODEC_ID_EAC3, - CODEC_ID_SIPR, - CODEC_ID_MP1, - CODEC_ID_TWINVQ, - CODEC_ID_TRUEHD, - CODEC_ID_MP4ALS, - CODEC_ID_ATRAC1, - CODEC_ID_BINKAUDIO_RDFT, - CODEC_ID_BINKAUDIO_DCT, - CODEC_ID_AAC_LATM, - CODEC_ID_QDMC, - CODEC_ID_CELT, -#if LIBAVCODEC_VERSION_MAJOR > 53 - CODEC_ID_G723_1_DEPRECATED, - CODEC_ID_G729_DEPRECATED, - CODEC_ID_8SVX_EXP, - CODEC_ID_8SVX_FIB, -#endif - CODEC_ID_BMV_AUDIO, - CODEC_ID_G729 = 0x15800, - CODEC_ID_G723_1= 0x15801, - CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'), - CODEC_ID_8SVX_RAW = MKBETAG('8','S','V','X'), + AV_CODEC_ID_APE, + AV_CODEC_ID_NELLYMOSER, + AV_CODEC_ID_MUSEPACK8, + AV_CODEC_ID_SPEEX, + AV_CODEC_ID_WMAVOICE, + AV_CODEC_ID_WMAPRO, + AV_CODEC_ID_WMALOSSLESS, + AV_CODEC_ID_ATRAC3P, + AV_CODEC_ID_EAC3, + AV_CODEC_ID_SIPR, + AV_CODEC_ID_MP1, + AV_CODEC_ID_TWINVQ, + AV_CODEC_ID_TRUEHD, + AV_CODEC_ID_MP4ALS, + AV_CODEC_ID_ATRAC1, + AV_CODEC_ID_BINKAUDIO_RDFT, + AV_CODEC_ID_BINKAUDIO_DCT, + AV_CODEC_ID_AAC_LATM, + AV_CODEC_ID_QDMC, + AV_CODEC_ID_CELT, + AV_CODEC_ID_G723_1, + AV_CODEC_ID_G729, + AV_CODEC_ID_8SVX_EXP, + AV_CODEC_ID_8SVX_FIB, + AV_CODEC_ID_BMV_AUDIO, + AV_CODEC_ID_RALF, + AV_CODEC_ID_IAC, + AV_CODEC_ID_ILBC, + 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_PAF_AUDIO = MKBETAG('P','A','F','A'), + AV_CODEC_ID_OPUS = MKBETAG('O','P','U','S'), + AV_CODEC_ID_TAK = MKBETAG('t','B','a','K'), + AV_CODEC_ID_EVRC = MKBETAG('s','e','v','c'), + AV_CODEC_ID_SMV = MKBETAG('s','s','m','v'), /* subtitle codecs */ - CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - CODEC_ID_DVD_SUBTITLE = 0x17000, - CODEC_ID_DVB_SUBTITLE, - CODEC_ID_TEXT, ///< raw UTF-8 text - CODEC_ID_XSUB, - CODEC_ID_SSA, - CODEC_ID_MOV_TEXT, - CODEC_ID_HDMV_PGS_SUBTITLE, - CODEC_ID_DVB_TELETEXT, - CODEC_ID_SRT, - CODEC_ID_MICRODVD = MKBETAG('m','D','V','D'), + AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. + AV_CODEC_ID_DVD_SUBTITLE = 0x17000, + AV_CODEC_ID_DVB_SUBTITLE, + AV_CODEC_ID_TEXT, ///< raw UTF-8 text + AV_CODEC_ID_XSUB, + AV_CODEC_ID_SSA, + AV_CODEC_ID_MOV_TEXT, + AV_CODEC_ID_HDMV_PGS_SUBTITLE, + AV_CODEC_ID_DVB_TELETEXT, + AV_CODEC_ID_SRT, + AV_CODEC_ID_MICRODVD = MKBETAG('m','D','V','D'), + AV_CODEC_ID_EIA_608 = MKBETAG('c','6','0','8'), + AV_CODEC_ID_JACOSUB = MKBETAG('J','S','U','B'), + AV_CODEC_ID_SAMI = MKBETAG('S','A','M','I'), + AV_CODEC_ID_REALTEXT = MKBETAG('R','T','X','T'), + AV_CODEC_ID_SUBVIEWER1 = MKBETAG('S','b','V','1'), + AV_CODEC_ID_SUBVIEWER = MKBETAG('S','u','b','V'), + AV_CODEC_ID_SUBRIP = MKBETAG('S','R','i','p'), + AV_CODEC_ID_WEBVTT = MKBETAG('W','V','T','T'), + AV_CODEC_ID_MPL2 = MKBETAG('M','P','L','2'), + AV_CODEC_ID_VPLAYER = MKBETAG('V','P','l','r'), + AV_CODEC_ID_PJS = MKBETAG('P','h','J','S'), + AV_CODEC_ID_ASS = MKBETAG('A','S','S',' '), ///< ASS as defined in Matroska /* other specific kind of codecs (generally used for attachments) */ - CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. - CODEC_ID_TTF = 0x18000, - CODEC_ID_BINTEXT = MKBETAG('B','T','X','T'), - CODEC_ID_XBIN = MKBETAG('X','B','I','N'), - CODEC_ID_IDF = MKBETAG( 0 ,'I','D','F'), + AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. + AV_CODEC_ID_TTF = 0x18000, + AV_CODEC_ID_BINTEXT = MKBETAG('B','T','X','T'), + AV_CODEC_ID_XBIN = MKBETAG('X','B','I','N'), + AV_CODEC_ID_IDF = MKBETAG( 0 ,'I','D','F'), + 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'), - CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it - CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS + AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it + + AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS * stream (only used by libavformat) */ - CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems + AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems * stream (only used by libavformat) */ - CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. + AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. + +#if FF_API_CODEC_ID +#include "old_codec_ids.h" +#endif }; -#if FF_API_OLD_SAMPLE_FMT -#define SampleFormat AVSampleFormat - -#define SAMPLE_FMT_NONE AV_SAMPLE_FMT_NONE -#define SAMPLE_FMT_U8 AV_SAMPLE_FMT_U8 -#define SAMPLE_FMT_S16 AV_SAMPLE_FMT_S16 -#define SAMPLE_FMT_S32 AV_SAMPLE_FMT_S32 -#define SAMPLE_FMT_FLT AV_SAMPLE_FMT_FLT -#define SAMPLE_FMT_DBL AV_SAMPLE_FMT_DBL -#define SAMPLE_FMT_NB AV_SAMPLE_FMT_NB -#endif - -#if FF_API_OLD_AUDIOCONVERT -#include "libavutil/audioconvert.h" - -/* Audio channel masks */ -#define CH_FRONT_LEFT AV_CH_FRONT_LEFT -#define CH_FRONT_RIGHT AV_CH_FRONT_RIGHT -#define CH_FRONT_CENTER AV_CH_FRONT_CENTER -#define CH_LOW_FREQUENCY AV_CH_LOW_FREQUENCY -#define CH_BACK_LEFT AV_CH_BACK_LEFT -#define CH_BACK_RIGHT AV_CH_BACK_RIGHT -#define CH_FRONT_LEFT_OF_CENTER AV_CH_FRONT_LEFT_OF_CENTER -#define CH_FRONT_RIGHT_OF_CENTER AV_CH_FRONT_RIGHT_OF_CENTER -#define CH_BACK_CENTER AV_CH_BACK_CENTER -#define CH_SIDE_LEFT AV_CH_SIDE_LEFT -#define CH_SIDE_RIGHT AV_CH_SIDE_RIGHT -#define CH_TOP_CENTER AV_CH_TOP_CENTER -#define CH_TOP_FRONT_LEFT AV_CH_TOP_FRONT_LEFT -#define CH_TOP_FRONT_CENTER AV_CH_TOP_FRONT_CENTER -#define CH_TOP_FRONT_RIGHT AV_CH_TOP_FRONT_RIGHT -#define CH_TOP_BACK_LEFT AV_CH_TOP_BACK_LEFT -#define CH_TOP_BACK_CENTER AV_CH_TOP_BACK_CENTER -#define CH_TOP_BACK_RIGHT AV_CH_TOP_BACK_RIGHT -#define CH_STEREO_LEFT AV_CH_STEREO_LEFT -#define CH_STEREO_RIGHT AV_CH_STEREO_RIGHT - -/** Channel mask value used for AVCodecContext.request_channel_layout - to indicate that the user requests the channel order of the decoder output - to be the native codec channel order. */ -#define CH_LAYOUT_NATIVE AV_CH_LAYOUT_NATIVE - -/* Audio channel convenience macros */ -#define CH_LAYOUT_MONO AV_CH_LAYOUT_MONO -#define CH_LAYOUT_STEREO AV_CH_LAYOUT_STEREO -#define CH_LAYOUT_2_1 AV_CH_LAYOUT_2_1 -#define CH_LAYOUT_SURROUND AV_CH_LAYOUT_SURROUND -#define CH_LAYOUT_4POINT0 AV_CH_LAYOUT_4POINT0 -#define CH_LAYOUT_2_2 AV_CH_LAYOUT_2_2 -#define CH_LAYOUT_QUAD AV_CH_LAYOUT_QUAD -#define CH_LAYOUT_5POINT0 AV_CH_LAYOUT_5POINT0 -#define CH_LAYOUT_5POINT1 AV_CH_LAYOUT_5POINT1 -#define CH_LAYOUT_5POINT0_BACK AV_CH_LAYOUT_5POINT0_BACK -#define CH_LAYOUT_5POINT1_BACK AV_CH_LAYOUT_5POINT1_BACK -#define CH_LAYOUT_7POINT0 AV_CH_LAYOUT_7POINT0 -#define CH_LAYOUT_7POINT1 AV_CH_LAYOUT_7POINT1 -#define CH_LAYOUT_7POINT1_WIDE AV_CH_LAYOUT_7POINT1_WIDE -#define CH_LAYOUT_STEREO_DOWNMIX AV_CH_LAYOUT_STEREO_DOWNMIX -#endif - -#if FF_API_OLD_DECODE_AUDIO -/* in bytes */ -#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio -#endif +/** + * This struct describes the properties of a single codec described by an + * AVCodecID. + * @see avcodec_get_descriptor() + */ +typedef struct AVCodecDescriptor { + enum AVCodecID id; + enum AVMediaType type; + /** + * Name of the codec described by this descriptor. It is non-empty and + * unique for each codec descriptor. It should contain alphanumeric + * characters and '_' only. + */ + const char *name; + /** + * A more descriptive name for this codec. May be NULL. + */ + const char *long_name; + /** + * Codec properties, a combination of AV_CODEC_PROP_* flags. + */ + int props; +} AVCodecDescriptor; /** + * Codec uses only intra compression. + * Video codecs only. + */ +#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) +/** + * Codec supports lossy compression. Audio and video codecs only. + * @note a codec may support both lossy and lossless + * compression modes + */ +#define AV_CODEC_PROP_LOSSY (1 << 1) +/** + * Codec supports lossless compression. Audio and video codecs only. + */ +#define AV_CODEC_PROP_LOSSLESS (1 << 2) +/** + * Subtitle codec is bitmap based + * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. + */ +#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) +/** + * Subtitle codec is text based. + * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. + */ +#define AV_CODEC_PROP_TEXT_SUB (1 << 17) + +/** + * @ingroup lavc_decoding * Required number of additionally allocated bytes at the end of the input bitstream for decoding. * This is mainly needed because some optimized bitstream readers read * 32 or 64 bit at once and could read over the end.
                    @@ -516,6 +580,7 @@ enum CodecID { #define FF_INPUT_BUFFER_PADDING_SIZE 16 /** + * @ingroup lavc_encoding * minimum encoding buffer size * Used to avoid some checks during header writing. */ @@ -523,6 +588,7 @@ enum CodecID { /** + * @ingroup lavc_encoding * motion estimation type. */ enum Motion_Est_ID { @@ -534,58 +600,42 @@ enum Motion_Est_ID { ME_X1, ///< reserved for experiments ME_HEX, ///< hexagon based search ME_UMH, ///< uneven multi-hexagon search - ME_ITER, ///< iterative search ME_TESA, ///< transformed exhaustive search algorithm + ME_ITER=50, ///< iterative search }; +/** + * @ingroup lavc_decoding + */ enum AVDiscard{ /* We leave some space between them for extensions (drop some * keyframes for intra-only or drop just some bidir frames). */ - AVDISCARD_NONE =-16, ///< discard nothing - AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi - AVDISCARD_NONREF = 8, ///< discard all non reference - AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - AVDISCARD_ALL = 48, ///< discard all + AVDISCARD_NONE =-16, ///< discard nothing + AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi + AVDISCARD_NONREF = 8, ///< discard all non reference + AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames + AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes + AVDISCARD_ALL = 48, ///< discard all }; enum AVColorPrimaries{ - AVCOL_PRI_BT709 =1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B - AVCOL_PRI_UNSPECIFIED=2, - AVCOL_PRI_BT470M =4, - AVCOL_PRI_BT470BG =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - 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_NB , ///< Not part of ABI + AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B + AVCOL_PRI_UNSPECIFIED = 2, + AVCOL_PRI_BT470M = 4, + AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + 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_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 -}; - -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_YCGCO =8, - AVCOL_SPC_NB , ///< Not part of ABI -}; - -enum AVColorRange{ - AVCOL_RANGE_UNSPECIFIED=0, - AVCOL_RANGE_MPEG =1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges - AVCOL_RANGE_JPEG =2, ///< the normal 2^n-1 "JPEG" YUV ranges - AVCOL_RANGE_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_SMPTE240M = 7, + AVCOL_TRC_NB , ///< Not part of ABI }; /** @@ -594,30 +644,16 @@ enum AVColorRange{ * X X 5 6 X 0 is undefined/unknown position */ enum AVChromaLocation{ - AVCHROMA_LOC_UNSPECIFIED=0, - AVCHROMA_LOC_LEFT =1, ///< mpeg2/4, h264 default - AVCHROMA_LOC_CENTER =2, ///< mpeg1, jpeg, h263 - AVCHROMA_LOC_TOPLEFT =3, ///< DV - AVCHROMA_LOC_TOP =4, - AVCHROMA_LOC_BOTTOMLEFT =5, - AVCHROMA_LOC_BOTTOM =6, - AVCHROMA_LOC_NB , ///< Not part of ABI + AVCHROMA_LOC_UNSPECIFIED = 0, + AVCHROMA_LOC_LEFT = 1, ///< mpeg2/4, h264 default + AVCHROMA_LOC_CENTER = 2, ///< mpeg1, jpeg, h263 + AVCHROMA_LOC_TOPLEFT = 3, ///< DV + AVCHROMA_LOC_TOP = 4, + AVCHROMA_LOC_BOTTOMLEFT = 5, + AVCHROMA_LOC_BOTTOM = 6, + AVCHROMA_LOC_NB , ///< Not part of ABI }; -#if FF_API_FLAC_GLOBAL_OPTS -/** - * LPC analysis type - */ -enum AVLPCType { - AV_LPC_TYPE_DEFAULT = -1, ///< use the codec default LPC type - AV_LPC_TYPE_NONE = 0, ///< do not use LPC prediction or use all zero coefficients - AV_LPC_TYPE_FIXED = 1, ///< fixed LPC coefficients - AV_LPC_TYPE_LEVINSON = 2, ///< Levinson-Durbin recursion - AV_LPC_TYPE_CHOLESKY = 3, ///< Cholesky factorization - AV_LPC_TYPE_NB , ///< Not part of ABI -}; -#endif - enum AVAudioServiceType { AV_AUDIO_SERVICE_TYPE_MAIN = 0, AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, @@ -631,6 +667,9 @@ enum AVAudioServiceType { AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI }; +/** + * @ingroup lavc_encoding + */ typedef struct RcOverride{ int start_frame; int end_frame; @@ -645,6 +684,11 @@ typedef struct RcOverride{ Note: Not everything is supported yet. */ +/** + * Allow decoders to produce frames with data planes that are not aligned + * to CPU requirements (e.g. due to cropping). + */ +#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_QPEL 0x0010 ///< Use qpel MC. @@ -670,60 +714,17 @@ typedef struct RcOverride{ #define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT). /* Fx : Flag for h263+ extra options */ #define CODEC_FLAG_AC_PRED 0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction -#define CODEC_FLAG_CBP_RD 0x04000000 ///< Use rate distortion optimization for cbp. -#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon. #define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter #define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation #define CODEC_FLAG_CLOSED_GOP 0x80000000 #define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks. -#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< Strictly enforce GOP size. #define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< Skip bitstream encoding. #define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< Place global headers at every keyframe instead of in extradata. -#define CODEC_FLAG2_SKIP_RD 0x00004000 ///< RD optimal MB level residual skipping +#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. DEPRECATED!!!! +#define CODEC_FLAG2_IGNORE_CROP 0x00010000 ///< Discard cropping information from SPS. + #define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries. #define CODEC_FLAG2_SHOW_ALL 0x00400000 ///< Show all frames before the first keyframe -/** - * @defgroup deprecated_flags Deprecated codec flags - * Use corresponding private codec options instead. - * @{ - */ -#if FF_API_MPEGVIDEO_GLOBAL_OPTS -#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC -#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H.263 alternative inter VLC -#define CODEC_FLAG_PART 0x0080 ///< Use data partitioning. -#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< Use alternate scan. -#define CODEC_FLAG_H263P_UMV 0x02000000 ///< unlimited motion vector -#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000 -#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data. -#define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< Use MPEG-2 intra VLC table. -#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. -#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< Use MPEG-2 nonlinear quantizer. -#endif -#if FF_API_MJPEG_GLOBAL_OPTS -#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< Use external Huffman table (for MJPEG). -#endif -#if FF_API_X264_GLOBAL_OPTS -#define CODEC_FLAG2_BPYRAMID 0x00000010 ///< H.264 allow B-frames to be used as references. -#define CODEC_FLAG2_WPRED 0x00000020 ///< H.264 weighted biprediction for B-frames -#define CODEC_FLAG2_MIXED_REFS 0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock -#define CODEC_FLAG2_8X8DCT 0x00000080 ///< H.264 high profile 8x8 transform -#define CODEC_FLAG2_FASTPSKIP 0x00000100 ///< H.264 fast pskip -#define CODEC_FLAG2_AUD 0x00000200 ///< H.264 access unit delimiters -#define CODEC_FLAG2_BRDO 0x00000400 ///< B-frame rate-distortion optimization -#define CODEC_FLAG2_MBTREE 0x00040000 ///< Use macroblock tree ratecontrol (x264 only) -#define CODEC_FLAG2_PSY 0x00080000 ///< Use psycho visual optimizations. -#define CODEC_FLAG2_SSIM 0x00100000 ///< Compute SSIM during encoding, error[] values are undefined. -#define CODEC_FLAG2_INTRA_REFRESH 0x00200000 ///< Use periodic insertion of intra blocks instead of keyframes. -#endif -#if FF_API_SNOW_GLOBAL_OPTS -#define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC). -#endif -#if FF_API_LAME_GLOBAL_OPTS -#define CODEC_FLAG2_BIT_RESERVOIR 0x00020000 ///< Use a bit reservoir when encoding if possible -#endif -/** - * @} - */ /* Unsupported options : * Syntax Arithmetic coding (SAC) @@ -739,10 +740,6 @@ typedef struct RcOverride{ * assume the buffer was allocated by avcodec_default_get_buffer. */ #define CODEC_CAP_DR1 0x0002 -#if FF_API_PARSE_FRAME -/* If 'parse_only' field is true, then avcodec_parse_frame() can be used. */ -#define CODEC_CAP_PARSE_ONLY 0x0004 -#endif #define CODEC_CAP_TRUNCATED 0x0008 /* Codec can export data for HW decoding (XvMC). */ #define CODEC_CAP_HWACCEL 0x0010 @@ -775,10 +772,12 @@ typedef struct RcOverride{ * 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 @@ -826,6 +825,10 @@ typedef struct RcOverride{ * Audio encoder supports receiving a different number of samples in each call. */ #define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000 +/** + * Codec is intra only. + */ +#define CODEC_CAP_INTRA_ONLY 0x40000000 /** * Codec is lossless. */ @@ -889,34 +892,158 @@ typedef struct AVPanScan{ #define FF_QSCALE_TYPE_H264 2 #define FF_QSCALE_TYPE_VP56 3 +#if FF_API_GET_BUFFER #define FF_BUFFER_TYPE_INTERNAL 1 #define FF_BUFFER_TYPE_USER 2 ///< direct rendering buffers (image is (de)allocated by user) #define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared. #define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything. -#if FF_API_OLD_FF_PICT_TYPES -/* DEPRECATED, directly use the AV_PICTURE_TYPE_* enum values */ -#define FF_I_TYPE AV_PICTURE_TYPE_I ///< Intra -#define FF_P_TYPE AV_PICTURE_TYPE_P ///< Predicted -#define FF_B_TYPE AV_PICTURE_TYPE_B ///< Bi-dir predicted -#define FF_S_TYPE AV_PICTURE_TYPE_S ///< S(GMC)-VOP MPEG4 -#define FF_SI_TYPE AV_PICTURE_TYPE_SI ///< Switching Intra -#define FF_SP_TYPE AV_PICTURE_TYPE_SP ///< Switching Predicted -#define FF_BI_TYPE AV_PICTURE_TYPE_BI -#endif - #define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore). #define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer. #define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content. #define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update). +#endif +/** + * The decoder will keep a reference to the frame and may reuse it later. + */ +#define AV_GET_BUFFER_FLAG_REF (1 << 0) + +/** + * @defgroup lavc_packet AVPacket + * + * Types and functions for working with AVPacket. + * @{ + */ enum AVPacketSideDataType { AV_PKT_DATA_PALETTE, AV_PKT_DATA_NEW_EXTRADATA, + + /** + * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: + * @code + * u32le param_flags + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) + * s32le channel_count + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) + * u64le channel_layout + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) + * s32le sample_rate + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) + * s32le width + * s32le height + * @endcode + */ AV_PKT_DATA_PARAM_CHANGE, + + /** + * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of + * structures with info about macroblocks relevant to splitting the + * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). + * That is, it does not necessarily contain info about all macroblocks, + * as long as the distance between macroblocks in the info is smaller + * than the target payload size. + * Each MB info structure is 12 bytes, and is laid out as follows: + * @code + * u32le bit offset from the start of the packet + * u8 current quantizer at the start of the macroblock + * u8 GOB number + * u16le macroblock address within the GOB + * u8 horizontal MV predictor + * u8 vertical MV predictor + * u8 horizontal MV predictor for block number 3 + * u8 vertical MV predictor for block number 3 + * @endcode + */ + AV_PKT_DATA_H263_MB_INFO, + + /** + * Recommmends skipping the specified number of samples + * @code + * u32le number of samples to skip from start of this packet + * u32le number of samples to skip from end of this packet + * u8 reason for start skip + * u8 reason for end skip (0=padding silence, 1=convergence) + * @endcode + */ + AV_PKT_DATA_SKIP_SAMPLES=70, + + /** + * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that + * the packet may contain "dual mono" audio specific to Japanese DTV + * and if it is true, recommends only the selected channel to be used. + * @code + * u8 selected channels (0=mail/left, 1=sub/right, 2=both) + * @endcode + */ + AV_PKT_DATA_JP_DUALMONO, + + /** + * 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. + */ + AV_PKT_DATA_STRINGS_METADATA, + + /** + * Subtitle event position + * @code + * u32le x1 + * u32le y1 + * u32le x2 + * u32le y2 + * @endcode + */ + AV_PKT_DATA_SUBTITLE_POSITION, + + /** + * Data found in BlockAdditional element of matroska container. There is + * no end marker for the data, so it is required to rely on the side data + * size to recognize the end. 8 byte id (as found in BlockAddId) followed + * by data. + */ + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + + /** + * The optional first identifier line of a WebVTT cue. + */ + AV_PKT_DATA_WEBVTT_IDENTIFIER, + + /** + * The optional settings (rendering instructions) that immediately + * follow the timestamp specifier of a WebVTT cue. + */ + AV_PKT_DATA_WEBVTT_SETTINGS, }; +/** + * This structure stores compressed data. It is typically exported by demuxers + * and then passed as input to decoders, or received as output from encoders and + * then passed to muxers. + * + * For video, it should typically contain one compressed frame. For audio it may + * contain several compressed frames. + * + * AVPacket is one of the few structs in FFmpeg, whose size is a part of public + * ABI. Thus it may be allocated on stack and no new fields can be added to it + * without libavcodec and libavformat major bump. + * + * The semantics of data ownership depends on the buf or destruct (deprecated) + * fields. If either is set, the packet data is dynamically allocated and is + * valid indefinitely until av_free_packet() is called (which in turn calls + * av_buffer_unref()/the destruct callback to free the data). If neither is set, + * the packet data is typically backed by some static buffer somewhere and is + * only valid for a limited time (e.g. until the next read call when demuxing). + * + * The side data is always allocated with av_malloc() and is freed in + * av_free_packet(). + */ typedef struct AVPacket { + /** + * A reference to the reference-counted buffer where the packet data is + * stored. + * May be NULL, then the packet data is not reference-counted. + */ + AVBufferRef *buf; /** * Presentation timestamp in AVStream->time_base units; the time at which * the decompressed packet will be presented to the user. @@ -956,8 +1083,12 @@ typedef struct AVPacket { * Equals next_pts - this_pts in presentation order. */ int duration; +#if FF_API_DESTRUCT_PACKET + attribute_deprecated void (*destruct)(struct AVPacket *); + attribute_deprecated void *priv; +#endif int64_t pos; ///< byte position in stream, -1 if unknown /** @@ -982,381 +1113,15 @@ typedef struct AVPacket { #define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe #define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted -/** - * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: - * u32le param_flags - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) - * s32le channel_count - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) - * u64le channel_layout - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) - * s32le sample_rate - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) - * s32le width - * s32le height - */ - enum AVSideDataParamChangeFlags { AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, }; - /** - * Audio Video Frame. - * New fields can be added to the end of AVFRAME with minor version - * bumps. Similarly fields that are marked as to be only accessed by - * av_opt_ptr() can be reordered. This allows 2 forks to add fields - * without breaking compatibility with each other. - * Removal, reordering and changes in the remaining cases require - * a major version bump. - * sizeof(AVFrame) must not be used outside libavcodec. + * @} */ -typedef struct AVFrame { -#if FF_API_DATA_POINTERS -#define AV_NUM_DATA_POINTERS 4 -#else -#define AV_NUM_DATA_POINTERS 8 -#endif - /** - * pointer to the picture/channel planes. - * This might be different from the first allocated byte - * - encoding: Set by user - * - decoding: set by AVCodecContext.get_buffer() - */ - uint8_t *data[AV_NUM_DATA_POINTERS]; - - /** - * Size, in bytes, of the data for each picture/channel plane. - * - * For audio, only linesize[0] may be set. For planar audio, each channel - * plane must be the same size. - * - * - encoding: Set by user (video only) - * - decoding: set by AVCodecContext.get_buffer() - */ - int linesize[AV_NUM_DATA_POINTERS]; - - /** - * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer. - * This isn't used by libavcodec unless the default get/release_buffer() is used. - * - encoding: - * - decoding: - */ - uint8_t *base[AV_NUM_DATA_POINTERS]; - /** - * 1 -> keyframe, 0-> not - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int key_frame; - - /** - * Picture type of the frame, see ?_TYPE below. - * - encoding: Set by libavcodec. for coded_picture (and set by user for input). - * - decoding: Set by libavcodec. - */ - enum AVPictureType pict_type; - - /** - * presentation timestamp in time_base units (time when frame should be shown to user) - * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed. - * - encoding: MUST be set by user. - * - decoding: Set by libavcodec. - */ - int64_t pts; - - /** - * picture number in bitstream order - * - encoding: set by - * - decoding: Set by libavcodec. - */ - int coded_picture_number; - /** - * picture number in display order - * - encoding: set by - * - decoding: Set by libavcodec. - */ - int display_picture_number; - - /** - * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) - * - encoding: Set by libavcodec. for coded_picture (and set by user for input). - * - decoding: Set by libavcodec. - */ - int quality; - -#if FF_API_AVFRAME_AGE - /** - * @deprecated unused - */ - attribute_deprecated int age; -#endif - - /** - * is this picture used as reference - * The values for this are the same as the MpegEncContext.picture_structure - * variable, that is 1->top field, 2->bottom field, 3->frame/both fields. - * Set to 4 for delayed, non-reference frames. - * - encoding: unused - * - decoding: Set by libavcodec. (before get_buffer() call)). - */ - int reference; - - /** - * QP table - * - encoding: unused - * - decoding: Set by libavcodec. - */ - int8_t *qscale_table; - /** - * QP store stride - * - encoding: unused - * - decoding: Set by libavcodec. - */ - int qstride; - - /** - * mbskip_table[mb]>=1 if MB didn't change - * stride= mb_width = (width+15)>>4 - * - encoding: unused - * - decoding: Set by libavcodec. - */ - uint8_t *mbskip_table; - - /** - * motion vector table - * @code - * example: - * int mv_sample_log2= 4 - motion_subsample_log2; - * int mb_width= (width+15)>>4; - * int mv_stride= (mb_width << mv_sample_log2) + 1; - * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y]; - * @endcode - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int16_t (*motion_val[2])[2]; - - /** - * macroblock type table - * mb_type_base + mb_width + 2 - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - uint32_t *mb_type; - - /** - * log2 of the size of the block which a single vector in motion_val represents: - * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) - * - encoding: unused - * - decoding: Set by libavcodec. - */ - uint8_t motion_subsample_log2; - - /** - * for some private data of the user - * - encoding: unused - * - decoding: Set by user. - */ - void *opaque; - - /** - * error - * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR. - * - decoding: unused - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - - /** - * type of the buffer (to keep track of who has to deallocate data[*]) - * - encoding: Set by the one who allocates it. - * - decoding: Set by the one who allocates it. - * Note: User allocated (direct rendering) & internal buffers cannot coexist currently. - */ - int type; - - /** - * When decoding, this signals how much the picture must be delayed. - * extra_delay = repeat_pict / (2*fps) - * - encoding: unused - * - decoding: Set by libavcodec. - */ - int repeat_pict; - - /** - * - */ - int qscale_type; - - /** - * The content of the picture is interlaced. - * - encoding: Set by user. - * - decoding: Set by libavcodec. (default 0) - */ - int interlaced_frame; - - /** - * If the content is interlaced, is top field displayed first. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int top_field_first; - - /** - * Pan scan. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVPanScan *pan_scan; - - /** - * Tell user application that palette has changed from previous frame. - * - encoding: ??? (no palette-enabled encoder yet) - * - decoding: Set by libavcodec. (default 0). - */ - int palette_has_changed; - - /** - * codec suggestion on buffer type if != 0 - * - encoding: unused - * - decoding: Set by libavcodec. (before get_buffer() call)). - */ - int buffer_hints; - - /** - * DCT coefficients - * - encoding: unused - * - decoding: Set by libavcodec. - */ - short *dct_coeff; - - /** - * motion reference frame index - * the order in which these are stored can depend on the codec. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int8_t *ref_index[2]; - - /** - * reordered opaque 64bit (generally an integer or a double precision float - * PTS but can be anything). - * The user sets AVCodecContext.reordered_opaque to represent the input at - * that time, - * the decoder reorders values as needed and sets AVFrame.reordered_opaque - * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque - * @deprecated in favor of pkt_pts - * - encoding: unused - * - decoding: Read by user. - */ - int64_t reordered_opaque; - - /** - * hardware accelerator private data (FFmpeg-allocated) - * - encoding: unused - * - decoding: Set by libavcodec - */ - void *hwaccel_picture_private; - - /** - * reordered pts from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_pts; - - /** - * dts from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_dts; - - /** - * the AVCodecContext which ff_thread_get_buffer() was last called on - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - struct AVCodecContext *owner; - - /** - * used by multithreading to store frame-specific info - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - void *thread_opaque; - - /** - * number of audio samples (per channel) described by this frame - * - encoding: unused - * - decoding: Set by libavcodec - */ - int nb_samples; - - /** - * pointers to the data planes/channels. - * - * For video, this should simply point to data[]. - * - * For planar audio, each channel has a separate data pointer, and - * linesize[0] contains the size of each channel buffer. - * For packed audio, there is just one data pointer, and linesize[0] - * contains the total size of the buffer for all channels. - * - * Note: Both data and extended_data will always be set by get_buffer(), - * but for planar audio with more channels that can fit in data, - * extended_data must be used by the decoder in order to access all - * channels. - * - * encoding: unused - * decoding: set by AVCodecContext.get_buffer() - */ - uint8_t **extended_data; - - /** - * sample aspect ratio for the video frame, 0/1 if unknown\unspecified - * - encoding: unused - * - decoding: Read by user. - */ - AVRational sample_aspect_ratio; - - /** - * width and height of the video frame - * - encoding: unused - * - decoding: Read by user. - */ - int width, height; - - /** - * format of the frame, -1 if unknown or unset - * Values correspond to enum PixelFormat for video frames, - * enum AVSampleFormat for audio) - * - encoding: unused - * - decoding: Read by user. - */ - int format; - - /** - * frame timestamp estimated using various heuristics, in stream time base - * Code outside libavcodec should access this field using: - * av_opt_ptr(avcodec_get_frame_class(), frame, "best_effort_timestamp"); - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int64_t best_effort_timestamp; - - /** - * reordered pos from the last AVPacket that has been input into the decoder - * Code outside libavcodec should access this field using: - * av_opt_ptr(avcodec_get_frame_class(), frame, "pkt_pos"); - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_pos; - -} AVFrame; struct AVCodecInternal; @@ -1384,6 +1149,53 @@ typedef struct AVCodecContext { * - set by avcodec_alloc_context3 */ const AVClass *av_class; + int log_level_offset; + + enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ + const struct AVCodec *codec; + char codec_name[32]; + enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ + + /** + * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * A demuxer should set this to what is stored in the field used to identify the codec. + * If there are multiple such fields in a container then the demuxer should choose the one + * which maximizes the information about the used codec. + * If the codec tag field in a container is larger than 32 bits then the demuxer should + * remap the longer ID to 32 bits with a table or other structure. Alternatively a new + * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated + * first. + * - encoding: Set by user, if not then the default based on codec_id will be used. + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + */ + unsigned int codec_tag; + + /** + * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * - encoding: unused + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + */ + unsigned int stream_codec_tag; + + void *priv_data; + + /** + * Private context used for internal data. + * + * Unlike priv_data, this is not codec-specific. It is used in general + * libavcodec functions. + */ + struct AVCodecInternal *internal; + + /** + * Private data of the user, can be used to carry app specific stuff. + * - encoding: Set by user. + * - decoding: Set by user. + */ + void *opaque; + /** * the average bitrate * - encoding: Set by user; unused for constant quantizer encoding. @@ -1399,6 +1211,21 @@ typedef struct AVCodecContext { */ int bit_rate_tolerance; + /** + * Global quality for codecs which cannot change it per frame. + * This should be proportional to MPEG-1/2/4 qscale. + * - encoding: Set by user. + * - decoding: unused + */ + int global_quality; + + /** + * - encoding: Set by user. + * - decoding: unused + */ + int compression_level; +#define FF_COMPRESSION_DEFAULT -1 + /** * CODEC_FLAG_*. * - encoding: Set by user. @@ -1407,23 +1234,11 @@ typedef struct AVCodecContext { int flags; /** - * Some codecs need additional format info. It is stored here. - * If any muxer uses this then ALL demuxers/parsers AND encoders for the - * specific codec MUST set it correctly otherwise stream copy breaks. - * In general use of this field by muxers is not recommended. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. (FIXME: Is this OK?) + * CODEC_FLAG2_* + * - encoding: Set by user. + * - decoding: Set by user. */ - int sub_id; - - /** - * Motion estimation algorithm used for video coding. - * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), - * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific] - * - encoding: MUST be set by user. - * - decoding: unused - */ - int me_method; + int flags2; /** * some codecs need / can use extradata like Huffman tables. @@ -1431,7 +1246,7 @@ typedef struct AVCodecContext { * rv10: additional flags * mpeg4: global headers (they can be in the bitstream or here) * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger - * than extradata_size to avoid prolems if it is read with the bitstream reader. + * than extradata_size to avoid problems if it is read with the bitstream reader. * The bytewise contents of extradata must not depend on the architecture or CPU endianness. * - encoding: Set/allocated/freed by libavcodec. * - decoding: Set/allocated/freed by user. @@ -1449,16 +1264,65 @@ typedef struct AVCodecContext { */ AVRational time_base; + /** + * For some codecs, the time base is closer to the field rate than the frame rate. + * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration + * if no telecine is used ... + * + * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. + */ + int ticks_per_frame; + + /** + * Codec delay. + * + * Encoding: Number of frames delay there will be from the encoder input to + * the decoder output. (we assume the decoder matches the spec) + * Decoding: Number of frames delay in addition to what a standard decoder + * as specified in the spec would produce. + * + * Video: + * Number of frames the decoded output will be delayed relative to the + * encoded input. + * + * Audio: + * For encoding, this is the number of "priming" samples added to the + * beginning of the stream. The decoded output will be delayed by this + * many samples relative to the input to the encoder. Note that this + * field is purely informational and does not directly affect the pts + * output by the encoder, which should always be based on the actual + * presentation time, including any delay. + * For decoding, this is the number of samples the decoder needs to + * output before the decoder's output is valid. When seeking, you should + * start decoding this many samples prior to your desired seek point. + * + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + */ + int delay; + + /* video only */ /** * picture width / height. * - encoding: MUST be set by user. - * - decoding: Set by libavcodec. - * Note: For compatibility it is possible to set this instead of - * coded_width/height before decoding. + * - decoding: May be set by the user before opening the decoder if known e.g. + * from the container. Some decoders will require the dimensions + * to be set by the caller. During decoding, the decoder may + * overwrite those values as required. */ int width, height; + /** + * Bitstream width / height, may be different from width/height e.g. when + * the decoded frame is cropped before being output or lowres is enabled. + * - encoding: unused + * - decoding: May be set by the user before opening the decoder if known + * e.g. from the container. During decoding, the decoder may + * overwrite those values as required. + */ + int coded_width, coded_height; + #define FF_ASPECT_EXTENDED 15 /** @@ -1469,13 +1333,22 @@ typedef struct AVCodecContext { int gop_size; /** - * Pixel format, see PIX_FMT_xxx. + * Pixel format, see AV_PIX_FMT_xxx. * May be set by the demuxer if known from headers. - * May be overriden by the decoder if it knows better. + * May be overridden by the decoder if it knows better. * - encoding: Set by user. * - decoding: Set by user if known, overridden by libavcodec if known */ - enum PixelFormat pix_fmt; + enum AVPixelFormat pix_fmt; + + /** + * Motion estimation algorithm used for video coding. + * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), + * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific] + * - encoding: MUST be set by user. + * - decoding: unused + */ + int me_method; /** * If non NULL, 'draw_horiz_band' is called by the libavcodec @@ -1504,58 +1377,16 @@ typedef struct AVCodecContext { const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], int y, int type, int height); - /* audio only */ - int sample_rate; ///< samples per second - int channels; ///< number of audio channels - /** - * audio sample format - * - encoding: Set by user. - * - decoding: Set by libavcodec. + * callback to negotiate the pixelFormat + * @param fmt is the list of formats which are supported by the codec, + * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. + * The first is always the native one. + * @return the chosen format + * - encoding: unused + * - decoding: Set by user, if not set the native format will be chosen. */ - enum AVSampleFormat sample_fmt; ///< sample format - - /* The following data should not be initialized. */ - /** - * Samples per packet, initialized when calling 'init'. - */ - int frame_size; - int frame_number; ///< audio or video frame number - - /** - * Encoding: Number of frames delay there will be from the encoder input to - * the decoder output. (we assume the decoder matches the spec) - * Decoding: Number of frames delay in addition to what a standard decoder - * as specified in the spec would produce. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int delay; - - /* - encoding parameters */ - float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - float qblur; ///< amount of qscale smoothing over time (0.0-1.0) - - /** - * minimum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmin; - - /** - * maximum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmax; - - /** - * maximum quantizer difference between frames - * - encoding: Set by user. - * - decoding: unused - */ - int max_qdiff; + enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); /** * maximum number of B-frames between non-B-frames @@ -1580,126 +1411,6 @@ typedef struct AVCodecContext { int b_frame_strategy; - struct AVCodec *codec; - - void *priv_data; - - int rtp_payload_size; /* The size of the RTP payload: the coder will */ - /* do its best to deliver a chunk with size */ - /* below rtp_payload_size, the chunk will start */ - /* with a start code on some codecs like H.263. */ - /* This doesn't take account of any particular */ - /* headers inside the transmitted RTP payload. */ - - - /* The RTP callback: This function is called */ - /* every time the encoder has a packet to send. */ - /* It depends on the encoder if the data starts */ - /* with a Start Code (it should). H.263 does. */ - /* mb_nb contains the number of macroblocks */ - /* encoded in the RTP payload. */ - void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); - - /* statistics, used for 2-pass encoding */ - int mv_bits; - int header_bits; - int i_tex_bits; - int p_tex_bits; - int i_count; - int p_count; - int skip_count; - int misc_bits; - - /** - * number of bits used for the previously encoded frame - * - encoding: Set by libavcodec. - * - decoding: unused - */ - int frame_bits; - - /** - * Private data of the user, can be used to carry app specific stuff. - * - encoding: Set by user. - * - decoding: Set by user. - */ - void *opaque; - - char codec_name[32]; - enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ - enum CodecID codec_id; /* see CODEC_ID_xxx */ - - /** - * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * A demuxer should set this to what is stored in the field used to identify the codec. - * If there are multiple such fields in a container then the demuxer should choose the one - * which maximizes the information about the used codec. - * If the codec tag field in a container is larger than 32 bits then the demuxer should - * remap the longer ID to 32 bits with a table or other structure. Alternatively a new - * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated - * first. - * - encoding: Set by user, if not then the default based on codec_id will be used. - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int codec_tag; - - /** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user - */ - int workaround_bugs; -#define FF_BUG_AUTODETECT 1 ///< autodetection -#define FF_BUG_OLD_MSMPEG4 2 -#define FF_BUG_XVID_ILACE 4 -#define FF_BUG_UMP4 8 -#define FF_BUG_NO_PADDING 16 -#define FF_BUG_AMV 32 -#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default. -#define FF_BUG_QPEL_CHROMA 64 -#define FF_BUG_STD_QPEL 128 -#define FF_BUG_QPEL_CHROMA2 256 -#define FF_BUG_DIRECT_BLOCKSIZE 512 -#define FF_BUG_EDGE 1024 -#define FF_BUG_HPEL_CHROMA 2048 -#define FF_BUG_DC_CLIP 4096 -#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. -#define FF_BUG_TRUNCATED 16384 -//#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%. - - /** - * luma single coefficient elimination threshold - * - encoding: Set by user. - * - decoding: unused - */ - int luma_elim_threshold; - - /** - * chroma single coeff elimination threshold - * - encoding: Set by user. - * - decoding: unused - */ - int chroma_elim_threshold; - - /** - * strictly follow the standard (MPEG4, ...). - * - encoding: Set by user. - * - decoding: Set by user. - * Setting this to STRICT or higher means the encoder and decoder will - * generally do stupid things, whereas setting it to unofficial or lower - * will mean the encoder might produce output that is not supported by all - * spec-compliant decoders. Decoders don't differentiate between normal, - * unofficial and experimental (that is, they always try to decode things - * when they can) unless they are explicitly asked to behave stupidly - * (=strictly conform to the specs) - */ - int strict_std_compliance; -#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. -#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. -#define FF_COMPLIANCE_NORMAL 0 -#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. - /** * qscale offset between IP and B-frames * - encoding: Set by user. @@ -1707,89 +1418,6 @@ typedef struct AVCodecContext { */ float b_quant_offset; -#if FF_API_ER - /** - * 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. - */ - attribute_deprecated int error_recognition; -#define FF_ER_CAREFUL 1 -#define FF_ER_COMPLIANT 2 -#define FF_ER_AGGRESSIVE 3 -#define FF_ER_VERY_AGGRESSIVE 4 -#define FF_ER_EXPLODE 5 -#endif /* FF_API_ER */ - - /** - * Called at the beginning of each frame to get a buffer for it. - * - * The function will set AVFrame.data[], AVFrame.linesize[]. - * AVFrame.extended_data[] must also be set, but it should be the same as - * AVFrame.data[] except for planar audio with more channels than can fit - * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as - * many data pointers as it can hold. - * - * if CODEC_CAP_DR1 is not set then get_buffer() must call - * avcodec_default_get_buffer() instead of providing buffers allocated by - * some other means. - * - * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't - * need it. avcodec_default_get_buffer() aligns the output buffer properly, - * but if get_buffer() is overridden then alignment considerations should - * be taken into account. - * - * @see avcodec_default_get_buffer() - * - * Video: - * - * If pic.reference is set then the frame will be read later by libavcodec. - * 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. - * - * If frame multithreading is used and thread_safe_callbacks is set, - * it may be called from a different thread, but not from more than one at - * once. Does not need to be reentrant. - * - * @see release_buffer(), reget_buffer() - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * Decoders cannot use the buffer after returning from - * avcodec_decode_audio4(), so they will not call release_buffer(), as it - * is assumed to be released immediately upon return. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); - - /** - * Called to release buffers which were allocated with get_buffer. - * A released buffer can be reused in get_buffer(). - * pic.data[*] must be set to NULL. - * May be called from a different thread if frame multithreading is used, - * but not by more than one thread at once, so does not need to be reentrant. - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); - /** * Size of the frame reordering buffer in the decoder. * For MPEG-2 it is 1 IPB or 0 low delay IP. @@ -1798,22 +1426,6 @@ typedef struct AVCodecContext { */ int has_b_frames; - /** - * number of bytes per packet if constant and known or 0 - * Used by some WAV based audio codecs. - */ - int block_align; - -#if FF_API_PARSE_FRAME - /** - * If true, only parsing is done. The frame data is returned. - * Only MPEG audio decoders support this now. - * - encoding: unused - * - decoding: Set by user - */ - attribute_deprecated int parse_only; -#endif - /** * 0-> h263 quant 1-> mpeg quant * - encoding: Set by user. @@ -1821,69 +1433,6 @@ typedef struct AVCodecContext { */ int mpeg_quant; - /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. - * - decoding: unused - */ - char *stats_out; - - /** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - char *stats_in; - - /** - * ratecontrol qmin qmax limiting method - * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax. - * - encoding: Set by user. - * - decoding: unused - */ - float rc_qsquish; - - float rc_qmod_amp; - int rc_qmod_freq; - - /** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - RcOverride *rc_override; - int rc_override_count; - - /** - * rate control equation - * - encoding: Set by user - * - decoding: unused - */ - const char *rc_eq; - - /** - * maximum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int rc_max_rate; - - /** - * minimum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int rc_min_rate; - - /** - * decoder bitstream buffer size - * - encoding: Set by user. - * - decoding: unused - */ - int rc_buffer_size; - float rc_buffer_aggressivity; - /** * qscale factor between P and I-frames * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset). @@ -1900,27 +1449,6 @@ typedef struct AVCodecContext { */ float i_quant_offset; - /** - * initial complexity for pass1 ratecontrol - * - encoding: Set by user. - * - decoding: unused - */ - float rc_initial_cplx; - - /** - * DCT algorithm, see FF_DCT_* below - * - encoding: Set by user. - * - decoding: unused - */ - int dct_algo; -#define FF_DCT_AUTO 0 -#define FF_DCT_FASTINT 1 -#define FF_DCT_INT 2 -#define FF_DCT_MMX 3 -#define FF_DCT_MLIB 4 -#define FF_DCT_ALTIVEC 5 -#define FF_DCT_FAAN 6 - /** * luminance masking (0-> disabled) * - encoding: Set by user. @@ -1956,77 +1484,12 @@ typedef struct AVCodecContext { */ float dark_masking; - /** - * IDCT algorithm, see FF_IDCT_* below. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int idct_algo; -#define FF_IDCT_AUTO 0 -#define FF_IDCT_INT 1 -#define FF_IDCT_SIMPLE 2 -#define FF_IDCT_SIMPLEMMX 3 -#define FF_IDCT_LIBMPEG2MMX 4 -#define FF_IDCT_PS2 5 -#define FF_IDCT_MLIB 6 -#define FF_IDCT_ARM 7 -#define FF_IDCT_ALTIVEC 8 -#define FF_IDCT_SH4 9 -#define FF_IDCT_SIMPLEARM 10 -#define FF_IDCT_H264 11 -#define FF_IDCT_VP3 12 -#define FF_IDCT_IPP 13 -#define FF_IDCT_XVIDMMX 14 -#define FF_IDCT_CAVS 15 -#define FF_IDCT_SIMPLEARMV5TE 16 -#define FF_IDCT_SIMPLEARMV6 17 -#define FF_IDCT_SIMPLEVIS 18 -#define FF_IDCT_WMV2 19 -#define FF_IDCT_FAAN 20 -#define FF_IDCT_EA 21 -#define FF_IDCT_SIMPLENEON 22 -#define FF_IDCT_SIMPLEALPHA 23 -#define FF_IDCT_BINK 24 - /** * slice count * - encoding: Set by libavcodec. * - decoding: Set by user (or 0). */ int slice_count; - /** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. - * - decoding: Set/allocated by user (or NULL). - */ - int *slice_offset; - - /** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. - */ - int error_concealment; -#define FF_EC_GUESS_MVS 1 -#define FF_EC_DEBLOCK 2 - - /** - * dsp_mask could be add used to disable unwanted CPU features - * CPU features (i.e. MMX, SSE. ...) - * - * With the FORCE flag you may instead enable given CPU features. - * (Dangerous: Usable in case of misdetection, improper usage however will - * result into program crash.) - */ - unsigned dsp_mask; - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. - */ - int bits_per_coded_sample; - /** * prediction method (needed for huffyuv) * - encoding: Set by user. @@ -2037,6 +1500,13 @@ typedef struct AVCodecContext { #define FF_PRED_PLANE 1 #define FF_PRED_MEDIAN 2 + /** + * slice offsets in the frame in bytes + * - encoding: Set/allocated by libavcodec. + * - decoding: Set/allocated by user (or NULL). + */ + int *slice_offset; + /** * sample aspect ratio (0 if unknown) * That is the width of a pixel divided by the height of the pixel. @@ -2046,54 +1516,6 @@ typedef struct AVCodecContext { */ AVRational sample_aspect_ratio; - /** - * the picture in the bitstream - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - AVFrame *coded_frame; - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug; -#define FF_DEBUG_PICT_INFO 1 -#define FF_DEBUG_RC 2 -#define FF_DEBUG_BITSTREAM 4 -#define FF_DEBUG_MB_TYPE 8 -#define FF_DEBUG_QP 16 -#define FF_DEBUG_MV 32 -#define FF_DEBUG_DCT_COEFF 0x00000040 -#define FF_DEBUG_SKIP 0x00000080 -#define FF_DEBUG_STARTCODE 0x00000100 -#define FF_DEBUG_PTS 0x00000200 -#define FF_DEBUG_ER 0x00000400 -#define FF_DEBUG_MMCO 0x00000800 -#define FF_DEBUG_BUGS 0x00001000 -#define FF_DEBUG_VIS_QP 0x00002000 -#define FF_DEBUG_VIS_MB_TYPE 0x00004000 -#define FF_DEBUG_BUFFERS 0x00008000 -#define FF_DEBUG_THREADS 0x00010000 - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug_mv; -#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames -#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames -#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames - - /** - * error - * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. - * - decoding: unused - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - /** * motion estimation comparison function * - encoding: Set by user. @@ -2177,17 +1599,6 @@ typedef struct AVCodecContext { */ int me_subpel_quality; - /** - * callback to negotiate the pixelFormat - * @param fmt is the list of formats which are supported by the codec, - * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. - * The first is always the native one. - * @return the chosen format - * - encoding: unused - * - decoding: Set by user, if not set the native format will be chosen. - */ - enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt); - /** * DTG active format information (additional aspect ratio * information only used in DVB MPEG-2 transport streams) @@ -2229,65 +1640,6 @@ typedef struct AVCodecContext { */ int inter_quant_bias; - /** - * color table ID - * - encoding: unused - * - decoding: Which clrtable should be used for 8bit RGB images. - * Tables have to be stored somewhere. FIXME - */ - int color_table_id; - -#if FF_API_INTERNAL_CONTEXT - /** - * internal_buffer count - * Don't touch, used by libavcodec default_get_buffer(). - * @deprecated this field was moved to an internal context - */ - attribute_deprecated int internal_buffer_count; - - /** - * internal_buffers - * Don't touch, used by libavcodec default_get_buffer(). - * @deprecated this field was moved to an internal context - */ - attribute_deprecated void *internal_buffer; -#endif - - /** - * Global quality for codecs which cannot change it per frame. - * This should be proportional to MPEG-1/2/4 qscale. - * - encoding: Set by user. - * - decoding: unused - */ - int global_quality; - -#define FF_CODER_TYPE_VLC 0 -#define FF_CODER_TYPE_AC 1 -#define FF_CODER_TYPE_RAW 2 -#define FF_CODER_TYPE_RLE 3 -#define FF_CODER_TYPE_DEFLATE 4 - /** - * coder type - * - encoding: Set by user. - * - decoding: unused - */ - int coder_type; - - /** - * context model - * - encoding: Set by user. - * - decoding: unused - */ - int context_model; -#if 0 - /** - * - * - encoding: unused - * - decoding: Set by user. - */ - uint8_t * (*realloc)(struct AVCodecContext *s, uint8_t *buf, int buf_size); -#endif - /** * slice flags * - encoding: unused @@ -2329,14 +1681,6 @@ typedef struct AVCodecContext { */ uint16_t *inter_matrix; - /** - * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * - encoding: unused - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int stream_codec_tag; - /** * scene change detection threshold * 0 is default, larger means fewer detected scene changes. @@ -2345,6 +1689,585 @@ typedef struct AVCodecContext { */ int scenechange_threshold; + /** + * noise reduction strength + * - encoding: Set by user. + * - decoding: unused + */ + int noise_reduction; + + /** + * Motion estimation threshold below which no motion estimation is + * performed, but instead the user specified motion vectors are used. + * + * - encoding: Set by user. + * - decoding: unused + */ + int me_threshold; + + /** + * Macroblock threshold below which the user specified macroblock types will be used. + * - encoding: Set by user. + * - decoding: unused + */ + int mb_threshold; + + /** + * precision of the intra DC coefficient - 8 + * - encoding: Set by user. + * - decoding: unused + */ + int intra_dc_precision; + + /** + * Number of macroblock rows at the top which are skipped. + * - encoding: unused + * - decoding: Set by user. + */ + int skip_top; + + /** + * Number of macroblock rows at the bottom which are skipped. + * - encoding: unused + * - decoding: Set by user. + */ + int skip_bottom; + + /** + * Border processing masking, raises the quantizer for mbs on the borders + * of the picture. + * - encoding: Set by user. + * - decoding: unused + */ + float border_masking; + + /** + * minimum MB lagrange multipler + * - encoding: Set by user. + * - decoding: unused + */ + int mb_lmin; + + /** + * maximum MB lagrange multipler + * - encoding: Set by user. + * - decoding: unused + */ + int mb_lmax; + + /** + * + * - encoding: Set by user. + * - decoding: unused + */ + int me_penalty_compensation; + + /** + * + * - encoding: Set by user. + * - decoding: unused + */ + int bidir_refine; + + /** + * + * - encoding: Set by user. + * - decoding: unused + */ + int brd_scale; + + /** + * minimum GOP size + * - encoding: Set by user. + * - decoding: unused + */ + int keyint_min; + + /** + * number of reference frames + * - encoding: Set by user. + * - decoding: Set by lavc. + */ + int refs; + + /** + * chroma qp offset from luma + * - encoding: Set by user. + * - decoding: unused + */ + int chromaoffset; + + /** + * Multiplied by qscale for each frame and added to scene_change_score. + * - encoding: Set by user. + * - decoding: unused + */ + int scenechange_factor; + + /** + * + * Note: Value depends upon the compare function used for fullpel ME. + * - encoding: Set by user. + * - decoding: unused + */ + int mv0_threshold; + + /** + * Adjust sensitivity of b_frame_strategy 1. + * - encoding: Set by user. + * - decoding: unused + */ + int b_sensitivity; + + /** + * Chromaticity coordinates of the source primaries. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorPrimaries color_primaries; + + /** + * Color Transfer Characteristic. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorTransferCharacteristic color_trc; + + /** + * YUV colorspace type. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorSpace colorspace; + + /** + * MPEG vs JPEG YUV range. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorRange color_range; + + /** + * This defines the location of chroma samples. + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVChromaLocation chroma_sample_location; + + /** + * Number of slices. + * Indicates number of picture subdivisions. Used for parallelized + * decoding. + * - encoding: Set by user + * - decoding: unused + */ + int slices; + + /** Field order + * - encoding: set by libavcodec + * - decoding: Set by user. + */ + enum AVFieldOrder field_order; + + /* audio only */ + int sample_rate; ///< samples per second + int channels; ///< number of audio channels + + /** + * audio sample format + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + enum AVSampleFormat sample_fmt; ///< sample format + + /* The following data should not be initialized. */ + /** + * Number of samples per channel in an audio frame. + * + * - encoding: set by libavcodec in avcodec_open2(). 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, then the + * frame size is not restricted. + * - decoding: may be set by some decoders to indicate constant frame size + */ + int frame_size; + + /** + * Frame counter, set by libavcodec. + * + * - decoding: total number of frames returned from the decoder so far. + * - encoding: total number of frames passed to the encoder so far. + * + * @note the counter is not incremented if encoding/decoding resulted in + * an error. + */ + int frame_number; + + /** + * number of bytes per packet if constant and known or 0 + * Used by some WAV based audio codecs. + */ + int block_align; + + /** + * Audio cutoff bandwidth (0 means "automatic") + * - encoding: Set by user. + * - decoding: unused + */ + int cutoff; + +#if FF_API_REQUEST_CHANNELS + /** + * Decoder should decode to this many channels if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. + * @deprecated Deprecated in favor of request_channel_layout. + */ + attribute_deprecated int request_channels; +#endif + + /** + * Audio channel layout. + * - encoding: set by user. + * - decoding: set by user, may be overwritten by libavcodec. + */ + uint64_t channel_layout; + + /** + * Request decoder to use this channel layout if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. + */ + uint64_t request_channel_layout; + + /** + * Type of service that the audio stream conveys. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + enum AVAudioServiceType audio_service_type; + + /** + * desired sample format + * - encoding: Not used. + * - decoding: Set by user. + * Decoder will decode to this format if it can. + */ + enum AVSampleFormat request_sample_fmt; + +#if FF_API_GET_BUFFER + /** + * Called at the beginning of each frame to get a buffer for it. + * + * The function will set AVFrame.data[], AVFrame.linesize[]. + * AVFrame.extended_data[] must also be set, but it should be the same as + * AVFrame.data[] except for planar audio with more channels than can fit + * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as + * many data pointers as it can hold. + * + * if CODEC_CAP_DR1 is not set then get_buffer() must call + * avcodec_default_get_buffer() instead of providing buffers allocated by + * some other means. + * + * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't + * need it. avcodec_default_get_buffer() aligns the output buffer properly, + * but if get_buffer() is overridden then alignment considerations should + * be taken into account. + * + * @see avcodec_default_get_buffer() + * + * Video: + * + * If pic.reference is set then the frame will be read later by libavcodec. + * 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. + * + * If frame multithreading is used and thread_safe_callbacks is set, + * it may be called from a different thread, but not from more than one at + * once. Does not need to be reentrant. + * + * @see release_buffer(), reget_buffer() + * @see avcodec_align_dimensions2() + * + * Audio: + * + * Decoders request a buffer of a particular size by setting + * AVFrame.nb_samples prior to calling get_buffer(). The decoder may, + * however, utilize only part of the buffer by setting AVFrame.nb_samples + * to a smaller value in the output frame. + * + * Decoders cannot use the buffer after returning from + * avcodec_decode_audio4(), so they will not call release_buffer(), as it + * is assumed to be released immediately upon return. In some rare cases, + * a decoder may need to call get_buffer() more than once in a single + * call to avcodec_decode_audio4(). In that case, when get_buffer() is + * called again after it has already been called once, the previously + * acquired buffer is assumed to be released at that time and may not be + * reused by the decoder. + * + * As a convenience, av_samples_get_buffer_size() and + * av_samples_fill_arrays() in libavutil may be used by custom get_buffer() + * functions to find the required data size and to fill data pointers and + * linesize. In AVFrame.linesize, only linesize[0] may be set for audio + * since all planes must be the same size. + * + * @see av_samples_get_buffer_size(), av_samples_fill_arrays() + * + * - encoding: unused + * - decoding: Set by libavcodec, user can override. + * + * @deprecated use get_buffer2() + */ + attribute_deprecated + int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); + + /** + * Called to release buffers which were allocated with get_buffer. + * A released buffer can be reused in get_buffer(). + * pic.data[*] must be set to NULL. + * May be called from a different thread if frame multithreading is used, + * but not by more than one thread at once, so does not need to be reentrant. + * - encoding: unused + * - decoding: Set by libavcodec, user can override. + * + * @deprecated custom freeing callbacks should be set from get_buffer2() + */ + attribute_deprecated + void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); + + /** + * Called at the beginning of a frame to get cr buffer for it. + * Buffer type (size, hints) must be the same. libavcodec won't check it. + * libavcodec will pass previous buffer in pic, function should return + * same buffer or new buffer with old frame "painted" into it. + * If pic.data[0] == NULL must behave like get_buffer(). + * if CODEC_CAP_DR1 is not set then reget_buffer() must call + * avcodec_default_reget_buffer() instead of providing buffers allocated by + * some other means. + * - encoding: unused + * - decoding: Set by libavcodec, user can override. + */ + attribute_deprecated + int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic); +#endif + + /** + * This callback is called at the beginning of each frame to get data + * buffer(s) for it. There may be one contiguous buffer for all the data or + * there may be a buffer per each data plane or anything in between. What + * this means is, you may set however many entries in buf[] you feel necessary. + * Each buffer must be reference-counted using the AVBuffer API (see description + * of buf[] below). + * + * The following fields will be set in the frame before this callback is + * called: + * - format + * - width, height (video only) + * - sample_rate, channel_layout, nb_samples (audio only) + * Their values may differ from the corresponding values in + * AVCodecContext. This callback must use the frame values, not the codec + * context values, to calculate the required buffer size. + * + * This callback must fill the following fields in the frame: + * - data[] + * - linesize[] + * - extended_data: + * * if the data is planar audio with more than 8 channels, then this + * callback must allocate and fill extended_data to contain all pointers + * to all data planes. data[] must hold as many pointers as it can. + * extended_data must be allocated with av_malloc() and will be freed in + * av_frame_unref(). + * * otherwise exended_data must point to data + * - buf[] must contain one or more pointers to AVBufferRef structures. Each of + * the frame's data and extended_data pointers must be contained in these. That + * is, one AVBufferRef for each allocated chunk of memory, not necessarily one + * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), + * and av_buffer_ref(). + * - extended_buf and nb_extended_buf must be allocated with av_malloc() by + * this callback and filled with the extra buffers if there are more + * buffers than buf[] can hold. extended_buf will be freed in + * av_frame_unref(). + * + * If CODEC_CAP_DR1 is not set then get_buffer2() must call + * avcodec_default_get_buffer2() instead of providing buffers allocated by + * some other means. + * + * Each data plane must be aligned to the maximum required by the target + * CPU. + * + * @see avcodec_default_get_buffer2() + * + * Video: + * + * 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. + * + * 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. + * + * @see avcodec_align_dimensions2() + * + * Audio: + * + * Decoders request a buffer of a particular size by setting + * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, + * however, utilize only part of the buffer by setting AVFrame.nb_samples + * to a smaller value in the output frame. + * + * As a convenience, av_samples_get_buffer_size() and + * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() + * functions to find the required data size and to fill data pointers and + * linesize. In AVFrame.linesize, only linesize[0] may be set for audio + * since all planes must be the same size. + * + * @see av_samples_get_buffer_size(), av_samples_fill_arrays() + * + * - encoding: unused + * - decoding: Set by libavcodec, user can override. + */ + int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); + + /** + * If non-zero, the decoded audio and video frames returned from + * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted + * and are valid indefinitely. The caller must free them with + * av_frame_unref() when they are not needed anymore. + * Otherwise, the decoded frames must not be freed by the caller and are + * only valid until the next decode call. + * + * - encoding: unused + * - decoding: set by the caller before avcodec_open2(). + */ + int refcounted_frames; + + /* - encoding parameters */ + float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) + float qblur; ///< amount of qscale smoothing over time (0.0-1.0) + + /** + * minimum quantizer + * - encoding: Set by user. + * - decoding: unused + */ + int qmin; + + /** + * maximum quantizer + * - encoding: Set by user. + * - decoding: unused + */ + int qmax; + + /** + * maximum quantizer difference between frames + * - encoding: Set by user. + * - decoding: unused + */ + int max_qdiff; + + /** + * ratecontrol qmin qmax limiting method + * 0-> clipping, 1-> use a nice continuous function to limit qscale wthin qmin/qmax. + * - encoding: Set by user. + * - decoding: unused + */ + float rc_qsquish; + + float rc_qmod_amp; + int rc_qmod_freq; + + /** + * decoder bitstream buffer size + * - encoding: Set by user. + * - decoding: unused + */ + int rc_buffer_size; + + /** + * ratecontrol override, see RcOverride + * - encoding: Allocated/set/freed by user. + * - decoding: unused + */ + int rc_override_count; + RcOverride *rc_override; + + /** + * rate control equation + * - encoding: Set by user + * - decoding: unused + */ + const char *rc_eq; + + /** + * maximum bitrate + * - encoding: Set by user. + * - decoding: unused + */ + int rc_max_rate; + + /** + * minimum bitrate + * - encoding: Set by user. + * - decoding: unused + */ + int rc_min_rate; + + float rc_buffer_aggressivity; + + /** + * initial complexity for pass1 ratecontrol + * - encoding: Set by user. + * - decoding: unused + */ + float rc_initial_cplx; + + /** + * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. + * - encoding: Set by user. + * - decoding: unused. + */ + float rc_max_available_vbv_use; + + /** + * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. + * - encoding: Set by user. + * - decoding: unused. + */ + float rc_min_vbv_overflow_use; + + /** + * Number of bits which should be loaded into the rc buffer before decoding starts. + * - encoding: Set by user. + * - decoding: unused + */ + int rc_initial_buffer_occupancy; + +#define FF_CODER_TYPE_VLC 0 +#define FF_CODER_TYPE_AC 1 +#define FF_CODER_TYPE_RAW 2 +#define FF_CODER_TYPE_RLE 3 +#define FF_CODER_TYPE_DEFLATE 4 + /** + * coder type + * - encoding: Set by user. + * - decoding: unused + */ + int coder_type; + + /** + * context model + * - encoding: Set by user. + * - decoding: unused + */ + int context_model; + /** * minimum Lagrange multipler * - encoding: Set by user. @@ -2359,83 +2282,310 @@ typedef struct AVCodecContext { */ int lmax; -#if FF_API_PALETTE_CONTROL /** - * palette control structure - * - encoding: ??? (no palette-enabled encoder yet) - * - decoding: Set by user. - */ - struct AVPaletteControl *palctrl; -#endif - - /** - * noise reduction strength + * frame skip threshold * - encoding: Set by user. * - decoding: unused */ - int noise_reduction; + int frame_skip_threshold; /** - * Called at the beginning of a frame to get cr buffer for it. - * Buffer type (size, hints) must be the same. libavcodec won't check it. - * libavcodec will pass previous buffer in pic, function should return - * same buffer or new buffer with old frame "painted" into it. - * If pic.data[0] == NULL must behave like get_buffer(). - * if CODEC_CAP_DR1 is not set then reget_buffer() must call - * avcodec_default_reget_buffer() instead of providing buffers allocated by - * some other means. - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic); - - /** - * Number of bits which should be loaded into the rc buffer before decoding starts. + * frame skip factor * - encoding: Set by user. * - decoding: unused */ - int rc_initial_buffer_occupancy; + int frame_skip_factor; /** - * + * frame skip exponent * - encoding: Set by user. * - decoding: unused */ - int inter_threshold; + int frame_skip_exp; /** - * CODEC_FLAG2_* + * frame skip comparison function + * - encoding: Set by user. + * - decoding: unused + */ + int frame_skip_cmp; + + /** + * trellis RD quantization + * - encoding: Set by user. + * - decoding: unused + */ + int trellis; + + /** + * - encoding: Set by user. + * - decoding: unused + */ + int min_prediction_order; + + /** + * - encoding: Set by user. + * - decoding: unused + */ + int max_prediction_order; + + /** + * GOP timecode frame start number + * - encoding: Set by user, in non drop frame format + * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset) + */ + int64_t timecode_frame_start; + + /* The RTP callback: This function is called */ + /* every time the encoder has a packet to send. */ + /* It depends on the encoder if the data starts */ + /* with a Start Code (it should). H.263 does. */ + /* mb_nb contains the number of macroblocks */ + /* encoded in the RTP payload. */ + void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); + + int rtp_payload_size; /* The size of the RTP payload: the coder will */ + /* do its best to deliver a chunk with size */ + /* below rtp_payload_size, the chunk will start */ + /* with a start code on some codecs like H.263. */ + /* This doesn't take account of any particular */ + /* headers inside the transmitted RTP payload. */ + + /* statistics, used for 2-pass encoding */ + int mv_bits; + int header_bits; + int i_tex_bits; + int p_tex_bits; + int i_count; + int p_count; + int skip_count; + int misc_bits; + + /** + * number of bits used for the previously encoded frame + * - encoding: Set by libavcodec. + * - decoding: unused + */ + int frame_bits; + + /** + * pass1 encoding statistics output buffer + * - encoding: Set by libavcodec. + * - decoding: unused + */ + char *stats_out; + + /** + * pass2 encoding statistics input buffer + * Concatenated stuff from stats_out of pass1 should be placed here. + * - encoding: Allocated/set/freed by user. + * - decoding: unused + */ + char *stats_in; + + /** + * Work around bugs in encoders which sometimes cannot be detected automatically. + * - encoding: Set by user + * - decoding: Set by user + */ + int workaround_bugs; +#define FF_BUG_AUTODETECT 1 ///< autodetection +#define FF_BUG_OLD_MSMPEG4 2 +#define FF_BUG_XVID_ILACE 4 +#define FF_BUG_UMP4 8 +#define FF_BUG_NO_PADDING 16 +#define FF_BUG_AMV 32 +#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default. +#define FF_BUG_QPEL_CHROMA 64 +#define FF_BUG_STD_QPEL 128 +#define FF_BUG_QPEL_CHROMA2 256 +#define FF_BUG_DIRECT_BLOCKSIZE 512 +#define FF_BUG_EDGE 1024 +#define FF_BUG_HPEL_CHROMA 2048 +#define FF_BUG_DC_CLIP 4096 +#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. +#define FF_BUG_TRUNCATED 16384 + + /** + * strictly follow the standard (MPEG4, ...). * - encoding: Set by user. * - decoding: Set by user. + * Setting this to STRICT or higher means the encoder and decoder will + * generally do stupid things, whereas setting it to unofficial or lower + * will mean the encoder might produce output that is not supported by all + * spec-compliant decoders. Decoders don't differentiate between normal, + * unofficial and experimental (that is, they always try to decode things + * when they can) unless they are explicitly asked to behave stupidly + * (=strictly conform to the specs) */ - int flags2; + int strict_std_compliance; +#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. +#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. +#define FF_COMPLIANCE_NORMAL 0 +#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions +#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. /** - * Simulates errors in the bitstream to test error concealment. - * - encoding: Set by user. - * - decoding: unused - */ - int error_rate; - -#if FF_API_ANTIALIAS_ALGO - /** - * MP3 antialias algorithm, see FF_AA_* below. + * error concealment flags * - encoding: unused * - decoding: Set by user. */ - attribute_deprecated int antialias_algo; -#define FF_AA_AUTO 0 -#define FF_AA_FASTINT 1 //not implemented yet -#define FF_AA_INT 2 -#define FF_AA_FLOAT 3 -#endif + int error_concealment; +#define FF_EC_GUESS_MVS 1 +#define FF_EC_DEBLOCK 2 /** - * quantizer noise shaping + * debug + * - encoding: Set by user. + * - decoding: Set by user. + */ + int debug; +#define FF_DEBUG_PICT_INFO 1 +#define FF_DEBUG_RC 2 +#define FF_DEBUG_BITSTREAM 4 +#define FF_DEBUG_MB_TYPE 8 +#define FF_DEBUG_QP 16 +#define FF_DEBUG_MV 32 +#define FF_DEBUG_DCT_COEFF 0x00000040 +#define FF_DEBUG_SKIP 0x00000080 +#define FF_DEBUG_STARTCODE 0x00000100 +#define FF_DEBUG_PTS 0x00000200 +#define FF_DEBUG_ER 0x00000400 +#define FF_DEBUG_MMCO 0x00000800 +#define FF_DEBUG_BUGS 0x00001000 +#define FF_DEBUG_VIS_QP 0x00002000 +#define FF_DEBUG_VIS_MB_TYPE 0x00004000 +#define FF_DEBUG_BUFFERS 0x00008000 +#define FF_DEBUG_THREADS 0x00010000 + + /** + * debug + * - encoding: Set by user. + * - decoding: Set by user. + */ + int debug_mv; +#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames +#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames +#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames + + /** + * Error recognition; may misdetect some more or less valid parts as errors. + * - encoding: unused + * - decoding: Set by user. + */ + int err_recognition; +#define AV_EF_CRCCHECK (1<<0) ///< verify embedded CRCs +#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) ///< 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 + + + /** + * opaque 64bit number (generally a PTS) that will be reordered and + * output in AVFrame.reordered_opaque + * @deprecated in favor of pkt_pts + * - encoding: unused + * - decoding: Set by user. + */ + int64_t reordered_opaque; + + /** + * Hardware accelerator in use + * - encoding: unused. + * - decoding: Set by libavcodec + */ + struct AVHWAccel *hwaccel; + + /** + * Hardware accelerator context. + * For some hardware accelerators, a global context needs to be + * provided by the user. In that case, this holds display-dependent + * data FFmpeg cannot instantiate itself. Please refer to the + * FFmpeg HW accelerator documentation to know how to fill this + * is. e.g. for VA API, this is a struct vaapi_context. + * - encoding: unused + * - decoding: Set by user + */ + void *hwaccel_context; + + /** + * error + * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. + * - decoding: unused + */ + uint64_t error[AV_NUM_DATA_POINTERS]; + + /** + * DCT algorithm, see FF_DCT_* below * - encoding: Set by user. * - decoding: unused */ - int quantizer_noise_shaping; + int dct_algo; +#define FF_DCT_AUTO 0 +#define FF_DCT_FASTINT 1 +#define FF_DCT_INT 2 +#define FF_DCT_MMX 3 +#define FF_DCT_ALTIVEC 5 +#define FF_DCT_FAAN 6 + + /** + * IDCT algorithm, see FF_IDCT_* below. + * - encoding: Set by user. + * - decoding: Set by user. + */ + int idct_algo; +#define FF_IDCT_AUTO 0 +#define FF_IDCT_INT 1 +#define FF_IDCT_SIMPLE 2 +#define FF_IDCT_SIMPLEMMX 3 +#define FF_IDCT_ARM 7 +#define FF_IDCT_ALTIVEC 8 +#define FF_IDCT_SH4 9 +#define FF_IDCT_SIMPLEARM 10 +#define FF_IDCT_IPP 13 +#define FF_IDCT_XVIDMMX 14 +#define FF_IDCT_SIMPLEARMV5TE 16 +#define FF_IDCT_SIMPLEARMV6 17 +#define FF_IDCT_SIMPLEVIS 18 +#define FF_IDCT_FAAN 20 +#define FF_IDCT_SIMPLENEON 22 +#define FF_IDCT_SIMPLEALPHA 23 + + /** + * bits per sample/pixel from the demuxer (needed for huffyuv). + * - encoding: Set by libavcodec. + * - decoding: Set by user. + */ + int bits_per_coded_sample; + + /** + * Bits per sample/pixel of internal libavcodec pixel/sample format. + * - encoding: set by user. + * - decoding: set by libavcodec. + */ + int bits_per_raw_sample; + +#if FF_API_LOWRES + /** + * low resolution decoding, 1-> 1/2 size, 2->1/4 size + * - encoding: unused + * - decoding: Set by user. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_lowres(avctx) + */ + int lowres; +#endif + + /** + * the picture in the bitstream + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + */ + AVFrame *coded_frame; /** * thread count @@ -2445,6 +2595,35 @@ typedef struct AVCodecContext { */ int thread_count; + /** + * Which multithreading methods to use. + * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, + * so clients which cannot provide future frames should not use it. + * + * - encoding: Set by user, otherwise the default is used. + * - decoding: Set by user, otherwise the default is used. + */ + int thread_type; +#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once +#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once + + /** + * Which multithreading methods are in use by the codec. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + */ + int active_thread_type; + + /** + * Set by the client if its custom get_buffer() callback can be called + * synchronously from another thread, which allows faster multithreaded decoding. + * draw_horiz_band() will be called from other threads regardless of this setting. + * Ignored if the default get_buffer() is used. + * - encoding: Set by user. + * - decoding: Set by user. + */ + int thread_safe_callbacks; + /** * The codec may call this to execute several independent things. * It will return only after finishing all tasks. @@ -2456,6 +2635,26 @@ typedef struct AVCodecContext { */ int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); + /** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. + * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. + * @param c context passed also to func + * @param count the number of things to execute + * @param arg2 argument passed unchanged to func + * @param ret return values of executed functions, must have space for "count" values. May be NULL. + * @param func function that will be called count times, with jobnr from 0 to count-1. + * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no + * two instances of func executing at the same time will have the same threadnr. + * @return always 0 currently, but code should handle a future improvement where when any call to func + * returns < 0 no further calls to func may be done and < 0 is returned. + * - encoding: Set by libavcodec, user can override. + * - decoding: Set by libavcodec, user can override. + */ + int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); + /** * thread opaque * Can be used by execute() to store some per AVCodecContext stuff. @@ -2464,29 +2663,6 @@ typedef struct AVCodecContext { */ void *thread_opaque; - /** - * Motion estimation threshold below which no motion estimation is - * performed, but instead the user specified motion vectors are used. - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_threshold; - - /** - * Macroblock threshold below which the user specified macroblock types will be used. - * - encoding: Set by user. - * - decoding: unused - */ - int mb_threshold; - - /** - * precision of the intra DC coefficient - 8 - * - encoding: Set by user. - * - decoding: unused - */ - int intra_dc_precision; - /** * noise vs. sse weight for the nsse comparsion function * - encoding: Set by user. @@ -2494,20 +2670,6 @@ typedef struct AVCodecContext { */ int nsse_weight; - /** - * Number of macroblock rows at the top which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_top; - - /** - * Number of macroblock rows at the bottom which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_bottom; - /** * profile * - encoding: Set by user. @@ -2521,6 +2683,12 @@ typedef struct AVCodecContext { #define FF_PROFILE_AAC_LOW 1 #define FF_PROFILE_AAC_SSR 2 #define FF_PROFILE_AAC_LTP 3 +#define FF_PROFILE_AAC_HE 4 +#define FF_PROFILE_AAC_HE_V2 28 +#define FF_PROFILE_AAC_LD 22 +#define FF_PROFILE_AAC_ELD 38 +#define FF_PROFILE_MPEG2_AAC_LOW 128 +#define FF_PROFILE_MPEG2_AAC_HE 131 #define FF_PROFILE_DTS 20 #define FF_PROFILE_DTS_ES 30 @@ -2574,6 +2742,12 @@ typedef struct AVCodecContext { #define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 #define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 +#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 0 +#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 1 +#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 2 +#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 +#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 + /** * level * - encoding: Set by user. @@ -2583,540 +2757,26 @@ typedef struct AVCodecContext { #define FF_LEVEL_UNKNOWN -99 /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - */ - int lowres; - - /** - * Bitstream width / height, may be different from width/height if lowres enabled. - * - encoding: unused - * - decoding: Set by user before init if known. Codec should override / dynamically change if needed. - */ - int coded_width, coded_height; - - /** - * frame skip threshold - * - encoding: Set by user. - * - decoding: unused - */ - int frame_skip_threshold; - - /** - * frame skip factor - * - encoding: Set by user. - * - decoding: unused - */ - int frame_skip_factor; - - /** - * frame skip exponent - * - encoding: Set by user. - * - decoding: unused - */ - int frame_skip_exp; - - /** - * frame skip comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int frame_skip_cmp; - - /** - * Border processing masking, raises the quantizer for mbs on the borders - * of the picture. - * - encoding: Set by user. - * - decoding: unused - */ - float border_masking; - - /** - * minimum MB lagrange multipler - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmin; - - /** - * maximum MB lagrange multipler - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmax; - - /** - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_penalty_compensation; - - /** - * + * Skip loop filtering for selected frames. * - encoding: unused * - decoding: Set by user. */ enum AVDiscard skip_loop_filter; /** - * + * Skip IDCT/dequantization for selected frames. * - encoding: unused * - decoding: Set by user. */ enum AVDiscard skip_idct; /** - * + * Skip decoding for selected frames. * - encoding: unused * - decoding: Set by user. */ enum AVDiscard skip_frame; - /** - * - * - encoding: Set by user. - * - decoding: unused - */ - int bidir_refine; - - /** - * - * - encoding: Set by user. - * - decoding: unused - */ - int brd_scale; - -#if FF_API_X264_GLOBAL_OPTS - /** - * constant rate factor - quality-based VBR - values ~correspond to qps - * - encoding: Set by user. - * - decoding: unused - * @deprecated use 'crf' libx264 private option - */ - attribute_deprecated float crf; - - /** - * constant quantization parameter rate control method - * - encoding: Set by user. - * - decoding: unused - * @deprecated use 'cqp' libx264 private option - */ - attribute_deprecated int cqp; -#endif - - /** - * minimum GOP size - * - encoding: Set by user. - * - decoding: unused - */ - int keyint_min; - - /** - * number of reference frames - * - encoding: Set by user. - * - decoding: Set by lavc. - */ - int refs; - - /** - * chroma qp offset from luma - * - encoding: Set by user. - * - decoding: unused - */ - int chromaoffset; - -#if FF_API_X264_GLOBAL_OPTS - /** - * Influence how often B-frames are used. - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int bframebias; -#endif - - /** - * trellis RD quantization - * - encoding: Set by user. - * - decoding: unused - */ - int trellis; - -#if FF_API_X264_GLOBAL_OPTS - /** - * Reduce fluctuations in qp (before curve compression). - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated float complexityblur; - - /** - * in-loop deblocking filter alphac0 parameter - * alpha is in the range -6...6 - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int deblockalpha; - - /** - * in-loop deblocking filter beta parameter - * beta is in the range -6...6 - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int deblockbeta; - - /** - * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4 - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int partitions; -#define X264_PART_I4X4 0x001 /* Analyze i4x4 */ -#define X264_PART_I8X8 0x002 /* Analyze i8x8 (requires 8x8 transform) */ -#define X264_PART_P8X8 0x010 /* Analyze p16x8, p8x16 and p8x8 */ -#define X264_PART_P4X4 0x020 /* Analyze p8x4, p4x8, p4x4 */ -#define X264_PART_B8X8 0x100 /* Analyze b16x8, b8x16 and b8x8 */ - - /** - * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto) - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int directpred; -#endif - - /** - * Audio cutoff bandwidth (0 means "automatic") - * - encoding: Set by user. - * - decoding: unused - */ - int cutoff; - - /** - * Multiplied by qscale for each frame and added to scene_change_score. - * - encoding: Set by user. - * - decoding: unused - */ - int scenechange_factor; - - /** - * - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused - */ - int mv0_threshold; - - /** - * Adjust sensitivity of b_frame_strategy 1. - * - encoding: Set by user. - * - decoding: unused - */ - int b_sensitivity; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int compression_level; -#define FF_COMPRESSION_DEFAULT -1 - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int min_prediction_order; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int max_prediction_order; - -#if FF_API_FLAC_GLOBAL_OPTS - /** - * @name FLAC options - * @deprecated Use FLAC encoder private options instead. - * @{ - */ - - /** - * LPC coefficient precision - used by FLAC encoder - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int lpc_coeff_precision; - - /** - * search method for selecting prediction order - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int prediction_order_method; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int min_partition_order; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int max_partition_order; - /** - * @} - */ -#endif - - /** - * GOP timecode frame start number - * - encoding: Set by user, in non drop frame format - * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset) - */ - int64_t timecode_frame_start; - -#if FF_API_REQUEST_CHANNELS - /** - * Decoder should decode to this many channels if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - * @deprecated Deprecated in favor of request_channel_layout. - */ - int request_channels; -#endif - -#if FF_API_DRC_SCALE - /** - * Percentage of dynamic range compression to be applied by the decoder. - * The default value is 1.0, corresponding to full compression. - * - encoding: unused - * - decoding: Set by user. - * @deprecated use AC3 decoder private option instead. - */ - attribute_deprecated float drc_scale; -#endif - - /** - * opaque 64bit number (generally a PTS) that will be reordered and - * output in AVFrame.reordered_opaque - * @deprecated in favor of pkt_pts - * - encoding: unused - * - decoding: Set by user. - */ - int64_t reordered_opaque; - - /** - * Bits per sample/pixel of internal libavcodec pixel/sample format. - * - encoding: set by user. - * - decoding: set by libavcodec. - */ - int bits_per_raw_sample; - - /** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by user, may be overwritten by libavcodec. - */ - uint64_t channel_layout; - - /** - * Request decoder to use this channel layout if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - */ - uint64_t request_channel_layout; - - /** - * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_max_available_vbv_use; - - /** - * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_min_vbv_overflow_use; - - /** - * Hardware accelerator in use - * - encoding: unused. - * - decoding: Set by libavcodec - */ - struct AVHWAccel *hwaccel; - - /** - * For some codecs, the time base is closer to the field rate than the frame rate. - * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration - * if no telecine is used ... - * - * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. - */ - int ticks_per_frame; - - /** - * Hardware accelerator context. - * For some hardware accelerators, a global context needs to be - * provided by the user. In that case, this holds display-dependent - * data FFmpeg cannot instantiate itself. Please refer to the - * FFmpeg HW accelerator documentation to know how to fill this - * is. e.g. for VA API, this is a struct vaapi_context. - * - encoding: unused - * - decoding: Set by user - */ - void *hwaccel_context; - - /** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorPrimaries color_primaries; - - /** - * Color Transfer Characteristic. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - /** - * This defines the location of chroma samples. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVChromaLocation chroma_sample_location; - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. - * @param c context passed also to func - * @param count the number of things to execute - * @param arg2 argument passed unchanged to func - * @param ret return values of executed functions, must have space for "count" values. May be NULL. - * @param func function that will be called count times, with jobnr from 0 to count-1. - * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no - * two instances of func executing at the same time will have the same threadnr. - * @return always 0 currently, but code should handle a future improvement where when any call to func - * returns < 0 no further calls to func may be done and < 0 is returned. - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - 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_X264_GLOBAL_OPTS - /** - * explicit P-frame weighted prediction analysis method - * 0: off - * 1: fast blind weighting (one reference duplicate with -1 offset) - * 2: smart weighting (full fade detection analysis) - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated int weighted_p_pred; - - /** - * AQ mode - * 0: Disabled - * 1: Variance AQ (complexity mask) - * 2: Auto-variance AQ (experimental) - * - encoding: Set by user - * - decoding: unused - */ - attribute_deprecated int aq_mode; - - /** - * AQ strength - * Reduces blocking and blurring in flat and textured areas. - * - encoding: Set by user - * - decoding: unused - */ - attribute_deprecated float aq_strength; - - /** - * PSY RD - * Strength of psychovisual optimization - * - encoding: Set by user - * - decoding: unused - */ - attribute_deprecated float psy_rd; - - /** - * PSY trellis - * Strength of psychovisual optimization - * - encoding: Set by user - * - decoding: unused - */ - attribute_deprecated float psy_trellis; - - /** - * RC lookahead - * Number of frames for frametype and ratecontrol lookahead - * - encoding: Set by user - * - decoding: unused - */ - attribute_deprecated int rc_lookahead; - - /** - * Constant rate factor maximum - * With CRF encoding mode and VBV restrictions enabled, prevents quality from being worse - * than crf_max, even if doing so would violate VBV restrictions. - * - encoding: Set by user. - * - decoding: unused - */ - attribute_deprecated float crf_max; -#endif - - int log_level_offset; - -#if FF_API_FLAC_GLOBAL_OPTS - /** - * Determine which LPC analysis algorithm to use. - * - encoding: Set by user - * - decoding: unused - */ - attribute_deprecated enum AVLPCType lpc_type; - - /** - * Number of passes to use for Cholesky factorization during LPC analysis - * - encoding: Set by user - * - decoding: unused - */ - attribute_deprecated int lpc_passes; -#endif - - /** - * Number of slices. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user - * - decoding: unused - */ - int slices; - /** * Header containing style information for text subtitles. * For SUBTITLE_ASS subtitle type, it should contain the whole ASS @@ -3128,6 +2788,13 @@ typedef struct AVCodecContext { uint8_t *subtitle_header; int subtitle_header_size; + /** + * Simulates errors in the bitstream to test error concealment. + * - encoding: Set by user. + * - decoding: unused + */ + int error_rate; + /** * Current packet as passed into the decoder, to avoid having * to pass the packet into every function. Currently only valid @@ -3137,48 +2804,6 @@ typedef struct AVCodecContext { */ AVPacket *pkt; -#if FF_API_INTERNAL_CONTEXT - /** - * Whether this is a copy of the context which had init() called on it. - * This is used by multithreading - shared tables and picture pointers - * should be freed from the original context only. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - * - * @deprecated this field has been moved to an internal context - */ - attribute_deprecated int is_copy; -#endif - - /** - * Which multithreading methods to use. - * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, - * so clients which cannot provide future frames should not use it. - * - * - encoding: Set by user, otherwise the default is used. - * - decoding: Set by user, otherwise the default is used. - */ - int thread_type; -#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once -#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once - - /** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int active_thread_type; - - /** - * Set by the client if its custom get_buffer() callback can be called - * from another thread, which allows faster multithreaded decoding. - * draw_horiz_band() will be called from other threads regardless of this setting. - * Ignored if the default get_buffer() is used. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int thread_safe_callbacks; - /** * VBV delay coded in the last frame (in periods of a 27 MHz clock). * Used for compliant TS muxing. @@ -3188,48 +2813,33 @@ typedef struct AVCodecContext { uint64_t vbv_delay; /** - * Type of service that the audio stream conveys. - * - encoding: Set by user. - * - decoding: Set by libavcodec. + * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_pkt_timebase(avctx) + * - encoding unused. + * - decoding set by user. */ - enum AVAudioServiceType audio_service_type; + AVRational pkt_timebase; /** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. + * AVCodecDescriptor + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_codec_descriptor(avctx) + * - encoding: unused. + * - decoding: set by libavcodec. */ - enum AVSampleFormat request_sample_fmt; + const AVCodecDescriptor *codec_descriptor; +#if !FF_API_LOWRES /** - * Error recognition; may misdetect some more or less valid parts as errors. + * low resolution decoding, 1-> 1/2 size, 2->1/4 size * - encoding: unused * - decoding: Set by user. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_lowres(avctx) */ - int err_recognition; -#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_CAREFUL (1<<16) -#define AV_EF_COMPLIANT (1<<17) -#define AV_EF_AGGRESSIVE (1<<18) - - /** - * Private context used for internal data. - * - * Unlike priv_data, this is not codec-specific. It is used in general - * libavcodec functions. - */ - struct AVCodecInternal *internal; - - /** Field order - * - encoding: set by libavcodec - * - decoding: Set by libavcodec - */ - enum AVFieldOrder field_order; + int lowres; +#endif /** * Current statistics for PTS correction. @@ -3241,8 +2851,59 @@ typedef struct AVCodecContext { int64_t pts_correction_last_pts; /// PTS of the last frame int64_t pts_correction_last_dts; /// DTS of the last frame + /** + * Character encoding of the input subtitles file. + * - decoding: set by user + * - encoding: unused + */ + char *sub_charenc; + + /** + * Subtitles character encoding mode. Formats or codecs might be adjusting + * this setting (if they are doing the conversion themselves for instance). + * - decoding: set by libavcodec + * - encoding: unused + */ + int sub_charenc_mode; +#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) +#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; } AVCodecContext; +AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); +void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); + +const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); +void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); + +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); + /** * AVProfile. */ @@ -3253,6 +2914,8 @@ typedef struct AVProfile { typedef struct AVCodecDefault AVCodecDefault; +struct AVSubtitle; + /** * AVCodec. */ @@ -3264,38 +2927,38 @@ typedef struct AVCodec { * This is the primary way to find a codec from the user perspective. */ const char *name; - enum AVMediaType type; - enum CodecID id; - int priv_data_size; - int (*init)(AVCodecContext *); - int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data); - int (*close)(AVCodecContext *); - int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt); - /** - * Codec capabilities. - * see CODEC_CAP_* - */ - int capabilities; - struct AVCodec *next; - /** - * Flush buffers. - * Will be called when seeking - */ - void (*flush)(AVCodecContext *); - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum PixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 /** * Descriptive name for the codec, meant to be more human readable than name. * You should use the NULL_IF_CONFIG_SMALL() macro to define it. */ const char *long_name; + enum AVMediaType type; + enum AVCodecID id; + /** + * Codec capabilities. + * see CODEC_CAP_* + */ + int capabilities; + const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} + const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 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} + /***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavcodec and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + */ + int priv_data_size; + struct AVCodec *next; /** * @name Frame-level threading support functions * @{ @@ -3326,6 +2989,9 @@ typedef struct AVCodec { */ void (*init_static_data)(struct AVCodec *codec); + int (*init)(AVCodecContext *); + int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size, + const struct AVSubtitle *sub); /** * Encode data to an AVPacket. * @@ -3338,8 +3004,17 @@ typedef struct AVCodec { */ int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr); + int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt); + int (*close)(AVCodecContext *); + /** + * Flush buffers. + * Will be called when seeking + */ + void (*flush)(AVCodecContext *); } AVCodec; +int av_codec_get_max_lowres(const AVCodec *codec); + /** * AVHWAccel. */ @@ -3361,16 +3036,16 @@ typedef struct AVHWAccel { /** * Codec implemented by the hardware accelerator. * - * See CODEC_ID_xxx + * See AV_CODEC_ID_xxx */ - enum CodecID id; + enum AVCodecID id; /** * Supported pixel format. * * Only hardware accelerated formats are supported here. */ - enum PixelFormat pix_fmt; + enum AVPixelFormat pix_fmt; /** * Hardware accelerated codec capabilities. @@ -3431,39 +3106,26 @@ typedef struct AVHWAccel { } AVHWAccel; /** - * four components are given, that's all. - * the last component is alpha + * @defgroup lavc_picture AVPicture + * + * Functions for working with AVPicture + * @{ + */ + +/** + * Picture data structure. + * + * Up to four components can be stored into it, the last component is + * alpha. */ typedef struct AVPicture { - uint8_t *data[AV_NUM_DATA_POINTERS]; + uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line } AVPicture; -#define AVPALETTE_SIZE 1024 -#define AVPALETTE_COUNT 256 -#if FF_API_PALETTE_CONTROL /** - * AVPaletteControl - * This structure defines a method for communicating palette changes - * between and demuxer and a decoder. - * - * @deprecated Use AVPacket to send palette changes instead. - * This is totally broken. + * @} */ -typedef struct AVPaletteControl { - - /* Demuxer sets this to 1 to indicate the palette has changed; - * decoder resets to 0. */ - int palette_changed; - - /* 4-byte ARGB palette entries, stored in native byte order; note that - * the individual palette components should be on a 8-bit scale; if - * the palette data comes from an IBM VGA native format, the component - * data is probably 6 bits in size and needs to be scaled. */ - unsigned int palette[AVPALETTE_COUNT]; - -} AVPaletteControl attribute_deprecated; -#endif enum AVSubtitleType { SUBTITLE_NONE, @@ -3483,6 +3145,8 @@ enum AVSubtitleType { SUBTITLE_ASS, }; +#define AV_SUBTITLE_FLAG_FORCED 0x00000001 + typedef struct AVSubtitleRect { int x; ///< top left corner of pict, undefined when pict is not set int y; ///< top left corner of pict, undefined when pict is not set @@ -3501,10 +3165,12 @@ typedef struct AVSubtitleRect { /** * 0 terminated ASS/SSA compatible event line. - * The pressentation of this is unaffected by the other values in this + * The presentation of this is unaffected by the other values in this * struct. */ char *ass; + + int flags; } AVSubtitleRect; typedef struct AVSubtitle { @@ -3516,397 +3182,12 @@ typedef struct AVSubtitle { int64_t pts; ///< Same as packet pts, in AV_TIME_BASE } AVSubtitle; -/* packet functions */ - -/** - * @deprecated use NULL instead - */ -attribute_deprecated void av_destruct_packet_nofree(AVPacket *pkt); - -/** - * Default packet destructor. - */ -void av_destruct_packet(AVPacket *pkt); - -/** - * Initialize optional fields of a packet with default values. - * - * @param pkt packet - */ -void av_init_packet(AVPacket *pkt); - -/** - * Allocate the payload of a packet and initialize its fields with - * default values. - * - * @param pkt packet - * @param size wanted payload size - * @return 0 if OK, AVERROR_xxx otherwise - */ -int av_new_packet(AVPacket *pkt, int size); - -/** - * Reduce packet size, correctly zeroing padding - * - * @param pkt packet - * @param size new size - */ -void av_shrink_packet(AVPacket *pkt, int size); - -/** - * Increase packet size, correctly zeroing padding - * - * @param pkt packet - * @param grow_by number of bytes by which to increase the size of the packet - */ -int av_grow_packet(AVPacket *pkt, int grow_by); - -/** - * @warning This is a hack - the packet memory allocation stuff is broken. The - * packet is allocated if it was not really allocated. - */ -int av_dup_packet(AVPacket *pkt); - -/** - * Free a packet. - * - * @param pkt packet to free - */ -void av_free_packet(AVPacket *pkt); - -/** - * Allocate new information of a packet. - * - * @param pkt packet - * @param type side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - int size); - -/** - * Get side information from packet. - * - * @param pkt packet - * @param type desired side information type - * @param size pointer for side information size to store (optional) - * @return pointer to data if present or NULL otherwise - */ -uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - int *size); - -int av_packet_merge_side_data(AVPacket *pkt); - -int av_packet_split_side_data(AVPacket *pkt); - - -/* resample.c */ - -struct ReSampleContext; -struct AVResampleContext; - -typedef struct ReSampleContext ReSampleContext; - -/** - * Initialize audio resampling context. - * - * @param output_channels number of output channels - * @param input_channels number of input channels - * @param output_rate output sample rate - * @param input_rate input sample rate - * @param sample_fmt_out requested output sample format - * @param sample_fmt_in input sample format - * @param filter_length length of each FIR filter in the filterbank relative to the cutoff frequency - * @param log2_phase_count log2 of the number of entries in the polyphase filterbank - * @param linear if 1 then the used FIR filter will be linearly interpolated - between the 2 closest, if 0 the closest will be used - * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate - * @return allocated ReSampleContext, NULL if error occurred - */ -ReSampleContext *av_audio_resample_init(int output_channels, int input_channels, - int output_rate, int input_rate, - enum AVSampleFormat sample_fmt_out, - enum AVSampleFormat sample_fmt_in, - int filter_length, int log2_phase_count, - int linear, double cutoff); - -int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); - -/** - * Free resample context. - * - * @param s a non-NULL pointer to a resample context previously - * created with av_audio_resample_init() - */ -void audio_resample_close(ReSampleContext *s); - - -/** - * Initialize an audio resampler. - * Note, if either rate is not an integer then simply scale both rates up so they are. - * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq - * @param log2_phase_count log2 of the number of entries in the polyphase filterbank - * @param linear If 1 then the used FIR filter will be linearly interpolated - between the 2 closest, if 0 the closest will be used - * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate - */ -struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff); - -/** - * Resample an array of samples using a previously configured context. - * @param src an array of unconsumed samples - * @param consumed the number of samples of src which have been consumed are returned here - * @param src_size the number of unconsumed samples available - * @param dst_size the amount of space in samples available in dst - * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. - * @return the number of samples written in dst or -1 if an error occurred - */ -int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx); - - -/** - * Compensate samplerate/timestamp drift. The compensation is done by changing - * the resampler parameters, so no audible clicks or similar distortions occur - * @param compensation_distance distance in output samples over which the compensation should be performed - * @param sample_delta number of output samples which should be output less - * - * example: av_resample_compensate(c, 10, 500) - * here instead of 510 samples only 500 samples would be output - * - * note, due to rounding the actual compensation might be slightly different, - * especially if the compensation_distance is large and the in_rate used during init is small - */ -void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance); -void av_resample_close(struct AVResampleContext *c); - -/** - * Allocate memory for a picture. Call avpicture_free() to free it. - * - * @see avpicture_fill() - * - * @param picture the picture to be filled in - * @param pix_fmt the format of the picture - * @param width the width of the picture - * @param height the height of the picture - * @return zero if successful, a negative value if not - */ -int avpicture_alloc(AVPicture *picture, enum PixelFormat pix_fmt, int width, int height); - -/** - * Free a picture previously allocated by avpicture_alloc(). - * The data buffer used by the AVPicture is freed, but the AVPicture structure - * itself is not. - * - * @param picture the AVPicture to be freed - */ -void avpicture_free(AVPicture *picture); - -/** - * Fill in the AVPicture fields. - * The fields of the given AVPicture are filled in by using the 'ptr' address - * which points to the image data buffer. Depending on the specified picture - * format, one or multiple image data pointers and line sizes will be set. - * If a planar format is specified, several pointers will be set pointing to - * the different picture planes and the line sizes of the different planes - * will be stored in the lines_sizes array. - * Call with ptr == NULL to get the required size for the ptr buffer. - * - * To allocate the buffer and fill in the AVPicture fields in one call, - * use avpicture_alloc(). - * - * @param picture AVPicture whose fields are to be filled in - * @param ptr Buffer which will contain or contains the actual image data - * @param pix_fmt The format in which the picture data is stored. - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @return size of the image data in bytes - */ -int avpicture_fill(AVPicture *picture, uint8_t *ptr, - enum PixelFormat pix_fmt, int width, int height); - -/** - * Copy pixel data from an AVPicture into a buffer. - * The data is stored compactly, without any gaps for alignment or padding - * which may be applied by avpicture_fill(). - * - * @see avpicture_get_size() - * - * @param[in] src AVPicture containing image data - * @param[in] pix_fmt The format in which the picture data is stored. - * @param[in] width the width of the image in pixels. - * @param[in] height the height of the image in pixels. - * @param[out] dest A buffer into which picture data will be copied. - * @param[in] dest_size The size of 'dest'. - * @return The number of bytes written to dest, or a negative value (error code) on error. - */ -int avpicture_layout(const AVPicture* src, enum PixelFormat pix_fmt, int width, int height, - unsigned char *dest, int dest_size); - -/** - * Calculate the size in bytes that a picture of the given width and height - * would occupy if stored in the given picture format. - * Note that this returns the size of a compact representation as generated - * by avpicture_layout(), which can be smaller than the size required for e.g. - * avpicture_fill(). - * - * @param pix_fmt the given picture format - * @param width the width of the image - * @param height the height of the image - * @return Image data size in bytes or -1 on error (e.g. too large dimensions). - */ -int avpicture_get_size(enum PixelFormat pix_fmt, int width, int height); -void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *v_shift); - -/** - * Get the name of a codec. - * @return a static string identifying the codec; never NULL - */ -const char *avcodec_get_name(enum CodecID id); - -#if FF_API_GET_PIX_FMT_NAME -/** - * Return the short name for a pixel format. - * - * \see av_get_pix_fmt(), av_get_pix_fmt_string(). - * @deprecated Deprecated in favor of av_get_pix_fmt_name(). - */ -attribute_deprecated -const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt); -#endif - -void avcodec_set_dimensions(AVCodecContext *s, int width, int height); - -/** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be - * found. - */ -unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat pix_fmt); - -/** - * Put a string representing the codec tag codec_tag in buf. - * - * @param buf_size size in bytes of buf - * @return the length of the string that would have been generated if - * enough space had been available, excluding the trailing null - */ -size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); - -#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ -#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ -#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ -#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ -#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ -#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * avcodec_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -int avcodec_get_pix_fmt_loss(enum PixelFormat dst_pix_fmt, enum PixelFormat src_pix_fmt, - int has_alpha); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format. When converting from one pixel format to another, information loss - * may occur. For example, when converting from RGB24 to GRAY, the color - * information will be lost. Similarly, other losses occur when converting from - * some formats to other formats. avcodec_find_best_pix_fmt() searches which of - * the given pixel formats should be used to suffer the least amount of loss. - * The pixel formats from which it chooses one, are determined by the - * pix_fmt_mask parameter. - * - * Note, only the first 64 pixel formats will fit in pix_fmt_mask. - * - * @code - * src_pix_fmt = PIX_FMT_YUV420P; - * pix_fmt_mask = (1 << PIX_FMT_YUV422P) | (1 << PIX_FMT_RGB24); - * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss); - * @endcode - * - * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @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 PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format and a selection of two destination pixel formats. When converting from - * one pixel format to another, information loss may occur. For example, when converting - * from RGB24 to GRAY, the color information will be lost. Similarly, other losses occur when - * converting from some formats to other formats. avcodec_find_best_pix_fmt2() selects which of - * the given pixel formats should be used to suffer the least amount of loss. - * - * If one of the destination formats is PIX_FMT_NONE the other pixel format (if valid) will be - * returned. - * - * @code - * src_pix_fmt = PIX_FMT_YUV420P; - * dst_pix_fmt1= PIX_FMT_RGB24; - * dst_pix_fmt2= PIX_FMT_GRAY8; - * dst_pix_fmt3= PIX_FMT_RGB8; - * loss= FF_LOSS_CHROMA; // don't care about chroma loss, so chroma loss will be ignored. - * dst_pix_fmt = avcodec_find_best_pix_fmt2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, alpha, &loss); - * dst_pix_fmt = avcodec_find_best_pix_fmt2(dst_pix_fmt, dst_pix_fmt3, src_pix_fmt, alpha, &loss); - * @endcode - * - * @param[in] dst_pix_fmt1 One of the two destination pixel formats to choose from - * @param[in] dst_pix_fmt2 The other of the two destination pixel formats to choose from - * @param[in] src_pix_fmt Source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @param[in, out] loss_ptr Combination of loss flags. In: selects which of the losses to ignore, i.e. - * NULL or value of zero means we care about all losses. Out: the loss - * that occurs when converting from src to selected dst pixel format. - * @return The best pixel format to convert to or -1 if none was found. - */ -enum PixelFormat avcodec_find_best_pix_fmt2(enum PixelFormat dst_pix_fmt1, enum PixelFormat dst_pix_fmt2, - enum PixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -#if FF_API_GET_ALPHA_INFO -#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */ -#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */ - -/** - * Tell if an image really has transparent alpha values. - * @return ored mask of FF_ALPHA_xxx constants - */ -attribute_deprecated -int img_get_alpha_info(const AVPicture *src, - enum PixelFormat pix_fmt, int width, int height); -#endif - -/* deinterlace a picture */ -/* deinterlace - if not supported return -1 */ -int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, - enum PixelFormat pix_fmt, int width, int height); - -/* external high level API */ - /** * If c is NULL, returns the first registered codec, * if c is non-NULL, returns the next registered codec after c, * or NULL if c is the last one. */ -AVCodec *av_codec_next(AVCodec *c); +AVCodec *av_codec_next(const AVCodec *c); /** * Return the LIBAVCODEC_VERSION_INT constant. @@ -3923,15 +3204,6 @@ const char *avcodec_configuration(void); */ const char *avcodec_license(void); -#if FF_API_AVCODEC_INIT -/** - * @deprecated this function is called automatically from avcodec_register() - * and avcodec_register_all(), there is no need to call it manually - */ -attribute_deprecated -void avcodec_init(void); -#endif - /** * Register the codec codec and initialize libavcodec. * @@ -3943,73 +3215,17 @@ void avcodec_init(void); void avcodec_register(AVCodec *codec); /** - * Find a registered encoder with a matching codec ID. + * Register all the codecs, parsers and bitstream filters which were enabled at + * configuration time. If you do not call this function you can select exactly + * which formats you want to support, by using the individual registration + * functions. * - * @param id CodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. + * @see avcodec_register + * @see av_register_codec_parser + * @see av_register_bitstream_filter */ -AVCodec *avcodec_find_encoder(enum CodecID id); +void avcodec_register_all(void); -/** - * Find a registered encoder with the specified name. - * - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder_by_name(const char *name); - -/** - * Find a registered decoder with a matching codec ID. - * - * @param id CodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder(enum CodecID id); - -/** - * Find a registered decoder with the specified name. - * - * @param name name of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder_by_name(const char *name); -void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); - -/** - * Return a name for the specified profile, if available. - * - * @param codec the codec that is searched for the given profile - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - */ -const char *av_get_profile_name(const AVCodec *codec, int profile); - -#if FF_API_ALLOC_CONTEXT -/** - * 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 - -/** - * Set the fields of the given AVCodecContext to default values corresponding - * to the given codec (defaults may be codec-dependent). - * - * Do not call this function if a non-NULL codec has been passed - * to avcodec_alloc_context3() that allocated this AVCodecContext. - * If codec is non-NULL, it is illegal to call avcodec_open2() with a - * different codec on this AVCodecContext. - */ -int avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec); #if FF_API_ALLOC_CONTEXT /** @@ -4028,20 +3244,73 @@ AVCodecContext *avcodec_alloc_context(void); * 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 simply calling av_free(). + * resulting struct can be deallocated by calling avcodec_close() on it followed + * by av_free(). * * @param codec if non-NULL, allocate private data and initialize defaults * for the given codec. It is illegal to then call avcodec_open2() * with a different codec. + * If NULL, then the codec-specific defaults won't be initialized, + * which may result in suboptimal default settings (this is + * important mainly for encoders, e.g. libx264). * * @return An AVCodecContext filled with default values or NULL on failure. * @see avcodec_get_context_defaults */ -AVCodecContext *avcodec_alloc_context3(AVCodec *codec); +AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); + +/** + * Set the fields of the given AVCodecContext to default values corresponding + * to the given codec (defaults may be codec-dependent). + * + * Do not call this function if a non-NULL codec has been passed + * to avcodec_alloc_context3() that allocated this AVCodecContext. + * If codec is non-NULL, it is illegal to call avcodec_open2() with a + * different codec on this AVCodecContext. + */ +int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); + +/** + * Get the AVClass for AVCodecContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + */ +const AVClass *avcodec_get_class(void); + +/** + * Get the AVClass for AVFrame. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + */ +const AVClass *avcodec_get_frame_class(void); + +/** + * Get the AVClass for AVSubtitleRect. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + */ +const AVClass *avcodec_get_subtitle_rect_class(void); /** * Copy the settings of the source AVCodecContext into the destination @@ -4050,75 +3319,39 @@ AVCodecContext *avcodec_alloc_context3(AVCodec *codec); * 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); -/** - * Set the fields of the given AVFrame to default values. - * - * @param pic The AVFrame of which the fields should be set to default values. - */ -void avcodec_get_frame_defaults(AVFrame *pic); - /** * Allocate an AVFrame and set its fields to default values. The resulting - * struct can be deallocated by simply calling av_free(). + * struct must be freed using avcodec_free_frame(). * * @return An AVFrame filled with default values or NULL on failure. * @see avcodec_get_frame_defaults */ AVFrame *avcodec_alloc_frame(void); -int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic); -void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); -int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic); - /** - * 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. + * Set the fields of the given AVFrame to default values. * - * @return Required padding in pixels. + * @param frame The AVFrame of which the fields should be set to default values. */ -unsigned avcodec_get_edge_width(void); +void avcodec_get_frame_defaults(AVFrame *frame); + /** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you do not use any horizontal - * padding. + * Free the frame and any dynamically allocated objects in it, + * e.g. extended_data. * - * 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); -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you also ensure that all - * line sizes are a multiple of the respective linesize_align[i]. + * @param frame frame to be freed. The pointer will be set to NULL. * - * 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. + * @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_align_dimensions2(AVCodecContext *s, int *width, int *height, - int linesize_align[AV_NUM_DATA_POINTERS]); - -enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt); - -#if FF_API_THREAD_INIT -/** - * @deprecated Set s->thread_count before calling avcodec_open2() instead of calling this. - */ -attribute_deprecated -int avcodec_thread_init(AVCodecContext *s, int thread_count); -#endif - -int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); -int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); -//FIXME func typedef +void avcodec_free_frame(AVFrame **frame); #if FF_API_AVCODEC_OPEN /** @@ -4133,7 +3366,7 @@ int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, * * @code * avcodec_register_all(); - * codec = avcodec_find_decoder(CODEC_ID_H264); + * codec = avcodec_find_decoder(AV_CODEC_ID_H264); * if (!codec) * exit(1); * @@ -4167,7 +3400,7 @@ int avcodec_open(AVCodecContext *avctx, AVCodec *codec); * @code * avcodec_register_all(); * av_dict_set(&opts, "b", "2.5M", 0); - * codec = avcodec_find_decoder(CODEC_ID_H264); + * codec = avcodec_find_decoder(AV_CODEC_ID_H264); * if (!codec) * exit(1); * @@ -4178,6 +3411,11 @@ int avcodec_open(AVCodecContext *avctx, AVCodec *codec); * @endcode * * @param avctx The context to initialize. + * @param codec The codec to open this context for. If a non-NULL codec has been + * previously passed to avcodec_alloc_context3() or + * avcodec_get_context_defaults3() for this context, then this + * parameter MUST be either NULL or equal to the previously passed + * codec. * @param options A dictionary filled with AVCodecContext and codec-private options. * On return this object will be filled with options that were not found. * @@ -4185,7 +3423,311 @@ int avcodec_open(AVCodecContext *avctx, AVCodec *codec); * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), * av_dict_set(), av_opt_find(). */ -int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options); +int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); + +/** + * Close a given AVCodecContext and free all the data associated with it + * (but not the AVCodecContext itself). + * + * Calling this function on an AVCodecContext that hasn't been opened will free + * the codec-specific data allocated in avcodec_alloc_context3() / + * avcodec_get_context_defaults3() with a non-NULL codec. Subsequent calls will + * do nothing. + */ +int avcodec_close(AVCodecContext *avctx); + +/** + * Free all allocated data in the given subtitle struct. + * + * @param sub AVSubtitle to free. + */ +void avsubtitle_free(AVSubtitle *sub); + +/** + * @} + */ + +/** + * @addtogroup lavc_packet + * @{ + */ + +#if FF_API_DESTRUCT_PACKET +/** + * Default packet destructor. + * @deprecated use the AVBuffer API instead + */ +attribute_deprecated +void av_destruct_packet(AVPacket *pkt); +#endif + +/** + * Initialize optional fields of a packet with default values. + * + * Note, this does not touch the data and size members, which have to be + * initialized separately. + * + * @param pkt packet + */ +void av_init_packet(AVPacket *pkt); + +/** + * Allocate the payload of a packet and initialize its fields with + * default values. + * + * @param pkt packet + * @param size wanted payload size + * @return 0 if OK, AVERROR_xxx otherwise + */ +int av_new_packet(AVPacket *pkt, int size); + +/** + * Reduce packet size, correctly zeroing padding + * + * @param pkt packet + * @param size new size + */ +void av_shrink_packet(AVPacket *pkt, int size); + +/** + * Increase packet size, correctly zeroing padding + * + * @param pkt packet + * @param grow_by number of bytes by which to increase the size of the packet + */ +int av_grow_packet(AVPacket *pkt, int grow_by); + +/** + * Initialize a reference-counted packet from av_malloc()ed data. + * + * @param pkt packet to be initialized. This function will set the data, size, + * buf and destruct fields, all others are left untouched. + * @param data Data allocated by av_malloc() to be used as packet data. If this + * function returns successfully, the data is owned by the underlying AVBuffer. + * The caller may not access the data through other means. + * @param size size of data in bytes, without the padding. I.e. the full buffer + * size is assumed to be size + FF_INPUT_BUFFER_PADDING_SIZE. + * + * @return 0 on success, a negative AVERROR on error + */ +int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); + +/** + * @warning This is a hack - the packet memory allocation stuff is broken. The + * packet is allocated if it was not really allocated. + */ +int av_dup_packet(AVPacket *pkt); + +/** + * Copy packet, including contents + * + * @return 0 on success, negative AVERROR on fail + */ +int av_copy_packet(AVPacket *dst, AVPacket *src); + +/** + * Copy packet side data + * + * @return 0 on success, negative AVERROR on fail + */ +int av_copy_packet_side_data(AVPacket *dst, AVPacket *src); + +/** + * Free a packet. + * + * @param pkt packet to free + */ +void av_free_packet(AVPacket *pkt); + +/** + * Allocate new information of a packet. + * + * @param pkt packet + * @param type side information type + * @param size side information size + * @return pointer to fresh allocated data or NULL otherwise + */ +uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, + int size); + +/** + * Shrink the already allocated side data buffer + * + * @param pkt packet + * @param type side information type + * @param size new side information size + * @return 0 on success, < 0 on failure + */ +int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, + int size); + +/** + * Get side information from packet. + * + * @param pkt packet + * @param type desired side information type + * @param size pointer for side information size to store (optional) + * @return pointer to data if present or NULL otherwise + */ +uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, + int *size); + +int av_packet_merge_side_data(AVPacket *pkt); + +int av_packet_split_side_data(AVPacket *pkt); + + +/** + * 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); + +/** + * @} + */ + +/** + * @addtogroup lavc_decoding + * @{ + */ + +/** + * Find a registered decoder with a matching codec ID. + * + * @param id AVCodecID of the requested decoder + * @return A decoder if one was found, NULL otherwise. + */ +AVCodec *avcodec_find_decoder(enum AVCodecID id); + +/** + * Find a registered decoder with the specified name. + * + * @param name name of the requested decoder + * @return A decoder if one was found, NULL otherwise. + */ +AVCodec *avcodec_find_decoder_by_name(const char *name); + +#if FF_API_GET_BUFFER +attribute_deprecated int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic); +attribute_deprecated void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); +attribute_deprecated int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic); +#endif + +/** + * The default callback for AVCodecContext.get_buffer2(). It is made public so + * it can be called by custom get_buffer2() implementations for decoders without + * CODEC_CAP_DR1 set. + */ +int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); + +/** + * 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. + */ +unsigned avcodec_get_edge_width(void); + +/** + * Modify width and height values so that they will result in a memory + * buffer that is acceptable for the codec if you do not use any horizontal + * 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); + +/** + * Modify width and height values so that they will result in a memory + * buffer that is acceptable for the codec if you also ensure that all + * 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]); + +/** + * Converts AVChromaLocation to swscale x/y chroma position. + * + * The positions represent the chroma (0,0) position in a coordinates system + * with luma (0,0) representing the origin and luma(1,1) representing 256,256 + * + * @param xpos horizontal chroma sample position + * @param ypos vertical chroma sample position + */ +int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); + +/** + * Converts swscale x/y chroma position to AVChromaLocation. + * + * The positions represent the chroma (0,0) position in a coordinates system + * with luma (0,0) representing the origin and luma(1,1) representing 256,256 + * + * @param xpos horizontal chroma sample position + * @param ypos vertical chroma sample position + */ +enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); #if FF_API_OLD_DECODE_AUDIO /** @@ -4251,28 +3793,43 @@ attribute_deprecated int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *s * 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. - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer(). The - * decoder may, however, only utilize part of the buffer by - * setting AVFrame.nb_samples to a smaller value in the - * output frame. + * The decoder will allocate a buffer for the decoded frame by + * calling the AVCodecContext.get_buffer2() callback. + * When AVCodecContext.refcounted_frames is set to 1, the frame is + * reference counted and the returned reference belongs to the + * caller. The caller must release the frame using av_frame_unref() + * when the frame is no longer needed. The caller may safely write + * 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 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. @@ -4281,7 +3838,7 @@ attribute_deprecated int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *s * AVPacket is returned. */ int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, AVPacket *avpkt); + int *got_frame_ptr, const AVPacket *avpkt); /** * Decode the video frame of size avpkt->size from avpkt->data into picture. @@ -4295,27 +3852,26 @@ int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, * @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. * * @param avctx the codec context * @param[out] picture The AVFrame in which the decoded video frame will be stored. - * Use avcodec_alloc_frame to get an AVFrame, the codec will - * allocate memory for the actual bitmap. - * with default get/release_buffer(), the decoder frees/reuses the bitmap as it sees fit. - * with overridden get/release_buffer() (needs CODEC_CAP_DR1) the user decides into what buffer the decoder - * decodes and the decoder tells the user once it does not need the data anymore, - * the user app can at this point free/reuse/keep the memory as it sees fit. + * Use av_frame_alloc() to get an AVFrame. The codec will + * allocate memory for the actual bitmap by calling the + * AVCodecContext.get_buffer2() callback. + * When AVCodecContext.refcounted_frames is set to 1, the frame is + * reference counted and the returned reference belongs to the + * caller. The caller must release the frame using av_frame_unref() + * when the frame is no longer needed. The caller may safely write + * 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 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 @@ -4338,6 +3894,14 @@ int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, * 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. @@ -4349,172 +3913,17 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, AVPacket *avpkt); /** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. + * @defgroup lavc_parsing Frame parsing + * @{ */ -void avsubtitle_free(AVSubtitle *sub); -#if FF_API_OLD_ENCODE_AUDIO -/** - * Encode an audio frame from samples into buf. - * - * @deprecated Use avcodec_encode_audio2 instead. - * - * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. - * However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user - * will know how much space is needed because it depends on the value passed - * in buf_size as described below. In that case a lower value can be used. - * - * @param avctx the codec context - * @param[out] buf the output buffer - * @param[in] buf_size the output buffer size - * @param[in] samples the input buffer containing the samples - * The number of samples read from this buffer is frame_size*channels, - * both of which are defined in avctx. - * For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of - * samples read from samples is equal to: - * buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id)) - * This also implies that av_get_bits_per_sample() must not return 0 for these - * codecs. - * @return On error a negative value is returned, on success zero or the number - * of bytes used to encode the data read from the input buffer. - */ -int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx, - uint8_t *buf, int buf_size, - const short *samples); -#endif +enum AVPictureStructure { + AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown + AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field + AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field + AV_PICTURE_STRUCTURE_FRAME, //< coded as frame +}; -/** - * Encode a frame of audio. - * - * Takes input samples from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay, split, and combine input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. All other AVPacket fields - * will be reset by the encoder using av_init_packet(). If - * avpkt->data is NULL, the encoder will allocate it. - * The encoder will set avpkt->size to the size of the - * output packet. - * @param[in] frame AVFrame containing the raw audio data to be encoded. - * May be NULL when flushing an encoder that has the - * CODEC_CAP_DELAY capability set. - * There are 2 codec capabilities that affect the allowed - * values of frame->nb_samples. - * If CODEC_CAP_SMALL_LAST_FRAME is set, then only the final - * frame may be smaller than avctx->frame_size, and all other - * frames must be equal to avctx->frame_size. - * If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If neither is set, frame->nb_samples must be equal to - * avctx->frame_size for all frames. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - */ -int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); - -/** - * Fill audio frame data and linesize. - * AVFrame extended_data channel pointers are allocated if necessary for - * planar audio. - * - * @param frame the AVFrame - * frame->nb_samples must be set prior to calling the - * function. This function fills in frame->data, - * frame->extended_data, frame->linesize[0]. - * @param nb_channels channel count - * @param sample_fmt sample format - * @param buf buffer to use for frame data - * @param buf_size size of buffer - * @param align plane size sample alignment - * @return 0 on success, negative error code on failure - */ -int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, - enum AVSampleFormat sample_fmt, const uint8_t *buf, - int buf_size, int align); - -/** - * Encode a video frame from pict into buf. - * The input picture should be - * stored using a specific format, namely avctx.pix_fmt. - * - * @param avctx the codec context - * @param[out] buf the output buffer for the bitstream of encoded frame - * @param[in] buf_size the size of the output buffer in bytes - * @param[in] pict the input picture to encode - * @return On error a negative value is returned, on success zero or the number - * of bytes used from the output buffer. - */ -int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVFrame *pict); -int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub); - -int avcodec_close(AVCodecContext *avctx); - -/** - * Register all the codecs, parsers and bitstream filters which were enabled at - * configuration time. If you do not call this function you can select exactly - * which formats you want to support, by using the individual registration - * functions. - * - * @see avcodec_register - * @see av_register_codec_parser - * @see av_register_bitstream_filter - */ -void avcodec_register_all(void); - -/** - * Flush buffers, should be called when seeking or when switching to a different stream. - */ -void avcodec_flush_buffers(AVCodecContext *avctx); - -void avcodec_default_free_buffers(AVCodecContext *s); - -/* misc useful functions */ - -#if FF_API_OLD_FF_PICT_TYPES -/** - * Return a single letter to describe the given picture type pict_type. - * - * @param[in] pict_type the picture type - * @return A single character representing the picture type. - * @deprecated Use av_get_picture_type_char() instead. - */ -attribute_deprecated -char av_get_pict_type_char(int pict_type); -#endif - -/** - * Return codec bits per sample. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_bits_per_sample(enum CodecID codec_id); - -#if FF_API_OLD_SAMPLE_FMT -/** - * @deprecated Use av_get_bytes_per_sample() instead. - */ -attribute_deprecated -int av_get_bits_per_sample_format(enum AVSampleFormat sample_fmt); -#endif - -/* frame parsing */ typedef struct AVCodecParserContext { void *priv_data; struct AVCodecParser *parser; @@ -4553,6 +3962,7 @@ typedef struct AVCodecParserContext { #define PARSER_FLAG_ONCE 0x0002 /// Set if the parser has a valid file offset #define PARSER_FLAG_FETCHED_OFFSET 0x0004 +#define PARSER_FLAG_USE_CODEC_TS 0x1000 int64_t offset; ///< byte offset from starting packet start int64_t cur_frame_end[AV_PARSER_PTS_NB]; @@ -4641,6 +4051,33 @@ typedef struct AVCodecParserContext { * Previous frame byte position. */ int64_t last_pos; + + /** + * Duration of the current frame. + * For audio, this is in units of 1 / AVCodecContext.sample_rate. + * For all other types, this is in units of AVCodecContext.time_base. + */ + int duration; + + enum AVFieldOrder field_order; + + /** + * Indicate whether a picture is coded as a frame, top field or bottom field. + * + * For example, H.264 field_pic_flag equal to 0 corresponds to + * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag + * equal to 1 and bottom_field_flag equal to 0 corresponds to + * 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 { @@ -4696,12 +4133,639 @@ int av_parser_parse2(AVCodecParserContext *s, int64_t pts, int64_t dts, int64_t pos); +/** + * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed + * @deprecated use AVBitStreamFilter + */ int av_parser_change(AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe); void av_parser_close(AVCodecParserContext *s); +/** + * @} + * @} + */ + +/** + * @addtogroup lavc_encoding + * @{ + */ + +/** + * Find a registered encoder with a matching codec ID. + * + * @param id AVCodecID of the requested encoder + * @return An encoder if one was found, NULL otherwise. + */ +AVCodec *avcodec_find_encoder(enum AVCodecID id); + +/** + * Find a registered encoder with the specified name. + * + * @param name name of the requested encoder + * @return An encoder if one was found, NULL otherwise. + */ +AVCodec *avcodec_find_encoder_by_name(const char *name); + +#if FF_API_OLD_ENCODE_AUDIO +/** + * Encode an audio frame from samples into buf. + * + * @deprecated Use avcodec_encode_audio2 instead. + * + * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. + * However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user + * will know how much space is needed because it depends on the value passed + * in buf_size as described below. In that case a lower value can be used. + * + * @param avctx the codec context + * @param[out] buf the output buffer + * @param[in] buf_size the output buffer size + * @param[in] samples the input buffer containing the samples + * The number of samples read from this buffer is frame_size*channels, + * both of which are defined in avctx. + * For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of + * samples read from samples is equal to: + * buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id)) + * This also implies that av_get_bits_per_sample() must not return 0 for these + * codecs. + * @return On error a negative value is returned, on success zero or the number + * of bytes used to encode the data read from the input buffer. + */ +int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx, + uint8_t *buf, int buf_size, + const short *samples); +#endif + +/** + * Encode a frame of audio. + * + * Takes input samples from frame and writes the next output packet, if + * available, to avpkt. The output packet does not necessarily contain data for + * the most recent frame, as encoders can delay, split, and combine input frames + * internally as needed. + * + * @param avctx codec context + * @param avpkt output AVPacket. + * The user can supply an output buffer by setting + * avpkt->data and avpkt->size prior to calling the + * function, but if the size of the user-provided data is not + * large enough, encoding will fail. If avpkt->data and + * avpkt->size are set, avpkt->destruct must also be set. All + * other AVPacket fields will be reset by the encoder using + * av_init_packet(). If avpkt->data is NULL, the encoder will + * allocate it. The encoder will set avpkt->size to the size + * of the output packet. + * + * If this function fails or produces no output, avpkt will be + * freed using av_free_packet() (i.e. avpkt->destruct will be + * called to free the user supplied buffer). + * @param[in] frame AVFrame containing the raw audio data to be encoded. + * May be NULL when flushing an encoder that has the + * CODEC_CAP_DELAY capability set. + * If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame + * can have any number of samples. + * If it is not set, frame->nb_samples must be equal to + * avctx->frame_size for all frames except the last. + * The final frame may be smaller than avctx->frame_size. + * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the + * output packet is non-empty, and to 0 if it is + * empty. If the function returns an error, the + * packet can be assumed to be invalid, and the + * value of got_packet_ptr is undefined and should + * not be used. + * @return 0 on success, negative error code on failure + */ +int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, + const AVFrame *frame, int *got_packet_ptr); + +#if FF_API_OLD_ENCODE_VIDEO +/** + * @deprecated use avcodec_encode_video2() instead. + * + * Encode a video frame from pict into buf. + * The input picture should be + * stored using a specific format, namely avctx.pix_fmt. + * + * @param avctx the codec context + * @param[out] buf the output buffer for the bitstream of encoded frame + * @param[in] buf_size the size of the output buffer in bytes + * @param[in] pict the input picture to encode + * @return On error a negative value is returned, on success zero or the number + * of bytes used from the output buffer. + */ +attribute_deprecated +int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, + const AVFrame *pict); +#endif + +/** + * Encode a frame of video. + * + * Takes input raw video data from frame and writes the next output packet, if + * available, to avpkt. The output packet does not necessarily contain data for + * the most recent frame, as encoders can delay and reorder input frames + * internally as needed. + * + * @param avctx codec context + * @param avpkt output AVPacket. + * The user can supply an output buffer by setting + * avpkt->data and avpkt->size prior to calling the + * function, but if the size of the user-provided data is not + * large enough, encoding will fail. All other AVPacket fields + * will be reset by the encoder using av_init_packet(). If + * avpkt->data is NULL, the encoder will allocate it. + * The encoder will set avpkt->size to the size of the + * output packet. The returned data (if any) belongs to the + * caller, he is responsible for freeing it. + * + * If this function fails or produces no output, avpkt will be + * freed using av_free_packet() (i.e. avpkt->destruct will be + * called to free the user supplied buffer). + * @param[in] frame AVFrame containing the raw video data to be encoded. + * May be NULL when flushing an encoder that has the + * CODEC_CAP_DELAY capability set. + * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the + * output packet is non-empty, and to 0 if it is + * empty. If the function returns an error, the + * packet can be assumed to be invalid, and the + * value of got_packet_ptr is undefined and should + * not be used. + * @return 0 on success, negative error code on failure + */ +int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, + const AVFrame *frame, int *got_packet_ptr); + +int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, + const AVSubtitle *sub); + + +/** + * @} + */ + +#if FF_API_AVCODEC_RESAMPLE +/** + * @defgroup lavc_resample Audio resampling + * @ingroup libavc + * @deprecated use libswresample instead + * + * @{ + */ +struct ReSampleContext; +struct AVResampleContext; + +typedef struct ReSampleContext ReSampleContext; + +/** + * Initialize audio resampling context. + * + * @param output_channels number of output channels + * @param input_channels number of input channels + * @param output_rate output sample rate + * @param input_rate input sample rate + * @param sample_fmt_out requested output sample format + * @param sample_fmt_in input sample format + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff frequency + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear if 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + * @return allocated ReSampleContext, NULL if error occurred + */ +attribute_deprecated +ReSampleContext *av_audio_resample_init(int output_channels, int input_channels, + int output_rate, int input_rate, + enum AVSampleFormat sample_fmt_out, + enum AVSampleFormat sample_fmt_in, + int filter_length, int log2_phase_count, + int linear, double cutoff); + +attribute_deprecated +int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); + +/** + * Free resample context. + * + * @param s a non-NULL pointer to a resample context previously + * created with av_audio_resample_init() + */ +attribute_deprecated +void audio_resample_close(ReSampleContext *s); + + +/** + * Initialize an audio resampler. + * Note, if either rate is not an integer then simply scale both rates up so they are. + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear If 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + */ +attribute_deprecated +struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff); + +/** + * Resample an array of samples using a previously configured context. + * @param src an array of unconsumed samples + * @param consumed the number of samples of src which have been consumed are returned here + * @param src_size the number of unconsumed samples available + * @param dst_size the amount of space in samples available in dst + * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. + * @return the number of samples written in dst or -1 if an error occurred + */ +attribute_deprecated +int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx); + + +/** + * Compensate samplerate/timestamp drift. The compensation is done by changing + * the resampler parameters, so no audible clicks or similar distortions occur + * @param compensation_distance distance in output samples over which the compensation should be performed + * @param sample_delta number of output samples which should be output less + * + * example: av_resample_compensate(c, 10, 500) + * here instead of 510 samples only 500 samples would be output + * + * note, due to rounding the actual compensation might be slightly different, + * especially if the compensation_distance is large and the in_rate used during init is small + */ +attribute_deprecated +void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance); +attribute_deprecated +void av_resample_close(struct AVResampleContext *c); + +/** + * @} + */ +#endif + +/** + * @addtogroup lavc_picture + * @{ + */ + +/** + * Allocate memory for the pixels of a picture and setup the AVPicture + * fields for it. + * + * Call avpicture_free() to free it. + * + * @param picture the picture structure to be filled in + * @param pix_fmt the pixel format of the picture + * @param width the width of the picture + * @param height the height of the picture + * @return zero if successful, a negative error code otherwise + * + * @see av_image_alloc(), avpicture_fill() + */ +int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); + +/** + * Free a picture previously allocated by avpicture_alloc(). + * The data buffer used by the AVPicture is freed, but the AVPicture structure + * itself is not. + * + * @param picture the AVPicture to be freed + */ +void avpicture_free(AVPicture *picture); + +/** + * Setup the picture fields based on the specified image parameters + * and the provided image data buffer. + * + * The picture fields are filled in by using the image data buffer + * pointed to by ptr. + * + * If ptr is NULL, the function will fill only the picture linesize + * array and return the required size for the image buffer. + * + * To allocate an image buffer and fill the picture data in one call, + * use avpicture_alloc(). + * + * @param picture the picture to be filled in + * @param ptr buffer where the image data is stored, or NULL + * @param pix_fmt the pixel format of the image + * @param width the width of the image in pixels + * @param height the height of the image in pixels + * @return the size in bytes required for src, a negative error code + * in case of failure + * + * @see av_image_fill_arrays() + */ +int avpicture_fill(AVPicture *picture, const uint8_t *ptr, + enum AVPixelFormat pix_fmt, int width, int height); + +/** + * Copy pixel data from an AVPicture into a buffer. + * + * avpicture_get_size() can be used to compute the required size for + * the buffer to fill. + * + * @param src source picture with filled data + * @param pix_fmt picture pixel format + * @param width picture width + * @param height picture height + * @param dest destination buffer + * @param dest_size destination buffer size in bytes + * @return the number of bytes written to dest, or a negative value + * (error code) on error, for example if the destination buffer is not + * big enough + * + * @see av_image_copy_to_buffer() + */ +int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt, + int width, int height, + unsigned char *dest, int dest_size); + +/** + * Calculate the size in bytes that a picture of the given width and height + * would occupy if stored in the given picture format. + * + * @param pix_fmt picture pixel format + * @param width picture width + * @param height picture height + * @return the computed picture buffer size or a negative error code + * in case of error + * + * @see av_image_get_buffer_size(). + */ +int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); + +#if FF_API_DEINTERLACE +/** + * deinterlace - if not supported return -1 + * + * @deprecated - use yadif (in libavfilter) instead + */ +attribute_deprecated +int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, + enum AVPixelFormat pix_fmt, int width, int height); +#endif +/** + * Copy image src to dst. Wraps av_image_copy(). + */ +void av_picture_copy(AVPicture *dst, const AVPicture *src, + enum AVPixelFormat pix_fmt, int width, int height); + +/** + * Crop image top and left side. + */ +int av_picture_crop(AVPicture *dst, const AVPicture *src, + enum AVPixelFormat pix_fmt, int top_band, int left_band); + +/** + * Pad image. + */ +int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, + int padtop, int padbottom, int padleft, int padright, int *color); + +/** + * @} + */ + +/** + * @defgroup lavc_misc Utility functions + * @ingroup libavc + * + * Miscellaneous utility functions related to both encoding and decoding + * (or neither). + * @{ + */ + +/** + * @defgroup lavc_misc_pixfmt Pixel formats + * + * Functions for working with pixel formats. + * @{ + */ + +/** + * Utility function to access log2_chroma_w log2_chroma_h from + * the pixel format AVPixFmtDescriptor. + * + * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample + * for one that returns a failure code and continues in case of invalid + * pix_fmts. + * + * @param[in] pix_fmt the pixel format + * @param[out] h_shift store log2_chroma_w + * @param[out] v_shift store log2_chroma_h + * + * @see av_pix_fmt_get_chroma_sub_sample + */ + +void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); + +/** + * Return a value representing the fourCC code associated to the + * pixel format pix_fmt, or 0 if no associated fourCC code can be + * found. + */ +unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); + +#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ +#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ +#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ +#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ +#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ +#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ + +/** + * Compute what kind of losses will occur when converting from one specific + * pixel format to another. + * When converting from one pixel format to another, information loss may occur. + * For example, when converting from RGB24 to GRAY, the color information will + * be lost. Similarly, other losses occur when converting from some formats to + * other formats. These losses can involve loss of chroma, but also loss of + * resolution, loss of color depth, loss due to the color space conversion, loss + * of the alpha bits or loss due to color quantization. + * avcodec_get_fix_fmt_loss() informs you about the various types of losses + * which will occur when converting from one pixel format to another. + * + * @param[in] dst_pix_fmt destination pixel format + * @param[in] src_pix_fmt source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @return Combination of flags informing you what kind of losses will occur + * (maximum loss for an invalid dst_pix_fmt). + */ +int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, + int has_alpha); + +/** + * Find the best pixel format to convert to given a certain source pixel + * format. When converting from one pixel format to another, information loss + * may occur. For example, when converting from RGB24 to GRAY, the color + * information will be lost. Similarly, other losses occur when converting from + * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of + * the given pixel formats should be used to suffer the least amount of loss. + * The pixel formats from which it chooses one, are determined by the + * pix_fmt_list parameter. + * + * + * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from + * @param[in] src_pix_fmt source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @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(const enum AVPixelFormat *pix_fmt_list, + enum AVPixelFormat src_pix_fmt, + int has_alpha, int *loss_ptr); + +/** + * Find the best pixel format to convert to given a certain source pixel + * format and a selection of two destination pixel formats. When converting from + * one pixel format to another, information loss may occur. For example, when converting + * from RGB24 to GRAY, the color information will be lost. Similarly, other losses occur when + * converting from some formats to other formats. avcodec_find_best_pix_fmt_of_2() selects which of + * the given pixel formats should be used to suffer the least amount of loss. + * + * If one of the destination formats is AV_PIX_FMT_NONE the other pixel format (if valid) will be + * returned. + * + * @code + * src_pix_fmt = AV_PIX_FMT_YUV420P; + * dst_pix_fmt1= AV_PIX_FMT_RGB24; + * dst_pix_fmt2= AV_PIX_FMT_GRAY8; + * dst_pix_fmt3= AV_PIX_FMT_RGB8; + * loss= FF_LOSS_CHROMA; // don't care about chroma loss, so chroma loss will be ignored. + * dst_pix_fmt = avcodec_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, alpha, &loss); + * dst_pix_fmt = avcodec_find_best_pix_fmt_of_2(dst_pix_fmt, dst_pix_fmt3, src_pix_fmt, alpha, &loss); + * @endcode + * + * @param[in] dst_pix_fmt1 One of the two destination pixel formats to choose from + * @param[in] dst_pix_fmt2 The other of the two destination pixel formats to choose from + * @param[in] src_pix_fmt Source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @param[in, out] loss_ptr Combination of loss flags. In: selects which of the losses to ignore, i.e. + * NULL or value of zero means we care about all losses. Out: the loss + * that occurs when converting from src to selected dst pixel format. + * @return The best pixel format to convert to or -1 if none was found. + */ +enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, + 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(const enum AVPixelFormat *pix_fmt_list, + enum AVPixelFormat src_pix_fmt, + int has_alpha, int *loss_ptr); +#else +enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, + enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); +#endif + + +enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); + +/** + * @} + */ + +void avcodec_set_dimensions(AVCodecContext *s, int width, int height); + +/** + * Put a string representing the codec tag codec_tag in buf. + * + * @param buf_size size in bytes of buf + * @return the length of the string that would have been generated if + * enough space had been available, excluding the trailing null + */ +size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); + +void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); + +/** + * Return a name for the specified profile, if available. + * + * @param codec the codec that is searched for the given profile + * @param profile the profile value for which a name is requested + * @return A name for the profile if found, NULL otherwise. + */ +const char *av_get_profile_name(const AVCodec *codec, int profile); + +int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); +int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); +//FIXME func typedef + +/** + * Fill AVFrame audio data and linesize pointers. + * + * The buffer buf must be a preallocated buffer with a size big enough + * to contain the specified samples amount. The filled AVFrame data + * pointers will point to this buffer. + * + * AVFrame extended_data channel pointers are allocated if necessary for + * planar audio. + * + * @param frame the AVFrame + * frame->nb_samples must be set prior to calling the + * function. This function fills in frame->data, + * frame->extended_data, frame->linesize[0]. + * @param nb_channels channel count + * @param sample_fmt sample format + * @param buf buffer to use for frame data + * @param buf_size size of buffer + * @param align plane size sample alignment (0 = default) + * @return >=0 on success, negative error code on failure + * @todo return the size in bytes required to store the samples in + * case of success, at the next libavutil bump + */ +int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, + enum AVSampleFormat sample_fmt, const uint8_t *buf, + int buf_size, int align); + +/** + * 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); + +/** + * Return codec bits per sample. + * + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. + */ +int av_get_bits_per_sample(enum AVCodecID codec_id); + +/** + * Return the PCM codec associated with a sample format. + * @param be endianness, 0 for little, 1 for big, + * -1 (or anything else) for native + * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE + */ +enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); + +/** + * Return codec bits per sample. + * Only return non-zero if the bits per sample is exactly correct, not an + * approximation. + * + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. + */ +int av_get_exact_bits_per_sample(enum AVCodecID codec_id); + +/** + * Return audio frame duration. + * + * @param avctx codec context + * @param frame_bytes size of the frame, or 0 if unknown + * @return frame duration, in samples, if known. 0 if not able to + * determine. + */ +int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); + typedef struct AVBitStreamFilterContext { void *priv_data; @@ -4722,14 +4786,78 @@ typedef struct AVBitStreamFilter { struct AVBitStreamFilter *next; } AVBitStreamFilter; +/** + * Register a bitstream filter. + * + * The filter will be accessible to the application code through + * av_bitstream_filter_next() or can be directly initialized with + * av_bitstream_filter_init(). + * + * @see avcodec_register_all() + */ void av_register_bitstream_filter(AVBitStreamFilter *bsf); + +/** + * Create and initialize a bitstream filter context given a bitstream + * filter name. + * + * The returned context must be freed with av_bitstream_filter_close(). + * + * @param name the name of the bitstream filter + * @return a bitstream filter context if a matching filter was found + * and successfully initialized, NULL otherwise + */ AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); + +/** + * Filter bitstream. + * + * This function filters the buffer buf with size buf_size, and places the + * filtered buffer in the buffer pointed to by poutbuf. + * + * The output buffer must be freed by the caller. + * + * @param bsfc bitstream filter context created by av_bitstream_filter_init() + * @param avctx AVCodecContext accessed by the filter, may be NULL. + * If specified, this must point to the encoder context of the + * output stream the packet is sent to. + * @param args arguments which specify the filter configuration, may be NULL + * @param poutbuf pointer which is updated to point to the filtered buffer + * @param poutbuf_size pointer which is updated to the filtered buffer size in bytes + * @param buf buffer containing the data to filter + * @param buf_size size in bytes of buf + * @param keyframe set to non-zero if the buffer to filter corresponds to a key-frame packet data + * @return >= 0 in case of success, or a negative error code in case of failure + * + * If the return value is positive, an output buffer is allocated and + * is availble in *poutbuf, and is distinct from the input buffer. + * + * If the return value is 0, the output buffer is not allocated and + * should be considered identical to the input buffer, or in case + * *poutbuf was set it points to the input buffer (not necessarily to + * its starting address). + */ int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe); + +/** + * Release bitstream filter context. + * + * @param bsf the bitstream filter context created with + * av_bitstream_filter_init(), can be NULL + */ void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); +/** + * If f is NULL, return the first registered bitstream filter, + * if f is non-NULL, return the next registered bitstream filter + * after f, or NULL if f is the last one. + * + * This function can be used to iterate over all registered bitstream + * filters. + */ AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f); /* memory */ @@ -4757,7 +4885,7 @@ 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_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. @@ -4765,22 +4893,10 @@ void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size); void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); /** - * Copy image src to dst. Wraps av_picture_data_copy() above. + * Same behaviour av_fast_padded_malloc except that buffer will always + * be 0-initialized after call. */ -void av_picture_copy(AVPicture *dst, const AVPicture *src, - enum PixelFormat pix_fmt, int width, int height); - -/** - * Crop image top and left side. - */ -int av_picture_crop(AVPicture *dst, const AVPicture *src, - enum PixelFormat pix_fmt, int top_band, int left_band); - -/** - * Pad image. - */ -int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum PixelFormat pix_fmt, - int padtop, int padbottom, int padleft, int padright, int *color); +void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); /** * Encode extradata length to a buffer. Used by xiph codecs. @@ -4791,6 +4907,7 @@ int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, */ unsigned int av_xiphlacing(unsigned char *s, unsigned int v); +#if FF_API_MISSING_SAMPLE /** * Log a generic warning message about a missing feature. This function is * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) @@ -4802,7 +4919,9 @@ unsigned int av_xiphlacing(unsigned char *s, unsigned int v); * If want_sample is non-zero, additional verbage will be added to the log * message which tells the user how to report samples to the development * mailing list. + * @deprecated Use avpriv_report_missing_feature() instead. */ +attribute_deprecated void av_log_missing_feature(void *avc, const char *feature, int want_sample); /** @@ -4812,8 +4931,11 @@ void av_log_missing_feature(void *avc, const char *feature, int want_sample); * @param[in] avc a pointer to an arbitrary struct of which the first field is * a pointer to an AVClass struct * @param[in] msg string containing an optional message, or NULL if no message + * @deprecated Use avpriv_request_sample() instead. */ +attribute_deprecated void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3); +#endif /* FF_API_MISSING_SAMPLE */ /** * Register the hardware accelerator hwaccel. @@ -4856,22 +4978,52 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); /** * Get the type of the given codec. */ -enum AVMediaType avcodec_get_type(enum CodecID codec_id); +enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); /** - * Get the AVClass for AVCodecContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). + * Get the name of a codec. + * @return a static string identifying the codec; never NULL */ -const AVClass *avcodec_get_class(void); +const char *avcodec_get_name(enum AVCodecID id); /** - * Get the AVClass for AVFrame. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * @return a positive value if s is open (i.e. avcodec_open2() was called on it + * with no corresponding avcodec_close()), 0 otherwise. + */ +int avcodec_is_open(AVCodecContext *s); + +/** + * @return a non-zero number if codec is an encoder, zero otherwise + */ +int av_codec_is_encoder(const AVCodec *codec); + +/** + * @return a non-zero number if codec is a decoder, zero otherwise + */ +int av_codec_is_decoder(const AVCodec *codec); + +/** + * @return descriptor for given codec ID or NULL if no descriptor exists. + */ +const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); + +/** + * Iterate over all codec descriptors known to libavcodec. * - * @see av_opt_find(). + * @param prev previous descriptor. NULL to get the first descriptor. + * + * @return next descriptor or NULL after the last descriptor + */ +const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); + +/** + * @return codec descriptor with the given name or NULL if no such descriptor + * exists. + */ +const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); + +/** + * @} */ -const AVClass *avcodec_get_frame_class(void); #endif /* AVCODEC_AVCODEC_H */ diff --git a/extern/ffmpeg/include/libavcodec/avfft.h b/extern/ffmpeg/include/libavcodec/avfft.h index be2d9c7e10..2d20a45f87 100644 --- a/extern/ffmpeg/include/libavcodec/avfft.h +++ b/extern/ffmpeg/include/libavcodec/avfft.h @@ -19,6 +19,19 @@ #ifndef AVCODEC_AVFFT_H #define AVCODEC_AVFFT_H +/** + * @file + * @ingroup lavc_fft + * FFT functions + */ + +/** + * @defgroup lavc_fft FFT functions + * @ingroup lavc_misc + * + * @{ + */ + typedef float FFTSample; typedef struct FFTComplex { @@ -96,4 +109,8 @@ DCTContext *av_dct_init(int nbits, enum DCTTransformType type); void av_dct_calc(DCTContext *s, FFTSample *data); void av_dct_end (DCTContext *s); +/** + * @} + */ + #endif /* AVCODEC_AVFFT_H */ diff --git a/extern/ffmpeg/include/libavcodec/dxva2.h b/extern/ffmpeg/include/libavcodec/dxva2.h index fc99560830..ac39e06917 100644 --- a/extern/ffmpeg/include/libavcodec/dxva2.h +++ b/extern/ffmpeg/include/libavcodec/dxva2.h @@ -23,11 +23,31 @@ #ifndef AVCODEC_DXVA_H #define AVCODEC_DXVA_H -#include +/** + * @file + * @ingroup lavc_codec_hwaccel_dxva2 + * Public libavcodec DXVA2 header. + */ +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600 +#undef _WIN32_WINNT +#endif + +#if !defined(_WIN32_WINNT) +#define _WIN32_WINNT 0x0600 +#endif + +#include #include #include +/** + * @defgroup lavc_codec_hwaccel_dxva2 DXVA2 + * @ingroup lavc_codec_hwaccel + * + * @{ + */ + #define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards /** @@ -68,4 +88,8 @@ struct dxva_context { unsigned report_id; }; +/** + * @} + */ + #endif /* AVCODEC_DXVA_H */ diff --git a/extern/ffmpeg/include/libavcodec/old_codec_ids.h b/extern/ffmpeg/include/libavcodec/old_codec_ids.h new file mode 100644 index 0000000000..d8a8f746d9 --- /dev/null +++ b/extern/ffmpeg/include/libavcodec/old_codec_ids.h @@ -0,0 +1,397 @@ +/* + * 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 AVCODEC_OLD_CODEC_IDS_H +#define AVCODEC_OLD_CODEC_IDS_H + +#include "libavutil/common.h" + +/* + * This header exists to prevent new codec IDs from being accidentally added to + * the deprecated list. + * Do not include it directly. It will be removed on next major bump + * + * Do not add new items to this list. Use the AVCodecID enum instead. + */ + + CODEC_ID_NONE = AV_CODEC_ID_NONE, + + /* video codecs */ + CODEC_ID_MPEG1VIDEO, + CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding + CODEC_ID_MPEG2VIDEO_XVMC, + CODEC_ID_H261, + CODEC_ID_H263, + CODEC_ID_RV10, + CODEC_ID_RV20, + CODEC_ID_MJPEG, + CODEC_ID_MJPEGB, + CODEC_ID_LJPEG, + CODEC_ID_SP5X, + CODEC_ID_JPEGLS, + CODEC_ID_MPEG4, + CODEC_ID_RAWVIDEO, + CODEC_ID_MSMPEG4V1, + CODEC_ID_MSMPEG4V2, + CODEC_ID_MSMPEG4V3, + CODEC_ID_WMV1, + CODEC_ID_WMV2, + CODEC_ID_H263P, + CODEC_ID_H263I, + CODEC_ID_FLV1, + CODEC_ID_SVQ1, + CODEC_ID_SVQ3, + CODEC_ID_DVVIDEO, + CODEC_ID_HUFFYUV, + CODEC_ID_CYUV, + CODEC_ID_H264, + CODEC_ID_INDEO3, + CODEC_ID_VP3, + CODEC_ID_THEORA, + CODEC_ID_ASV1, + CODEC_ID_ASV2, + CODEC_ID_FFV1, + CODEC_ID_4XM, + CODEC_ID_VCR1, + CODEC_ID_CLJR, + CODEC_ID_MDEC, + CODEC_ID_ROQ, + CODEC_ID_INTERPLAY_VIDEO, + CODEC_ID_XAN_WC3, + CODEC_ID_XAN_WC4, + CODEC_ID_RPZA, + CODEC_ID_CINEPAK, + CODEC_ID_WS_VQA, + CODEC_ID_MSRLE, + CODEC_ID_MSVIDEO1, + CODEC_ID_IDCIN, + CODEC_ID_8BPS, + CODEC_ID_SMC, + CODEC_ID_FLIC, + CODEC_ID_TRUEMOTION1, + CODEC_ID_VMDVIDEO, + CODEC_ID_MSZH, + CODEC_ID_ZLIB, + CODEC_ID_QTRLE, + CODEC_ID_TSCC, + CODEC_ID_ULTI, + CODEC_ID_QDRAW, + CODEC_ID_VIXL, + CODEC_ID_QPEG, + CODEC_ID_PNG, + CODEC_ID_PPM, + CODEC_ID_PBM, + CODEC_ID_PGM, + CODEC_ID_PGMYUV, + CODEC_ID_PAM, + CODEC_ID_FFVHUFF, + CODEC_ID_RV30, + CODEC_ID_RV40, + CODEC_ID_VC1, + CODEC_ID_WMV3, + CODEC_ID_LOCO, + CODEC_ID_WNV1, + CODEC_ID_AASC, + CODEC_ID_INDEO2, + CODEC_ID_FRAPS, + CODEC_ID_TRUEMOTION2, + CODEC_ID_BMP, + CODEC_ID_CSCD, + CODEC_ID_MMVIDEO, + CODEC_ID_ZMBV, + CODEC_ID_AVS, + CODEC_ID_SMACKVIDEO, + CODEC_ID_NUV, + CODEC_ID_KMVC, + CODEC_ID_FLASHSV, + CODEC_ID_CAVS, + CODEC_ID_JPEG2000, + CODEC_ID_VMNC, + CODEC_ID_VP5, + CODEC_ID_VP6, + CODEC_ID_VP6F, + CODEC_ID_TARGA, + CODEC_ID_DSICINVIDEO, + CODEC_ID_TIERTEXSEQVIDEO, + CODEC_ID_TIFF, + CODEC_ID_GIF, + CODEC_ID_DXA, + CODEC_ID_DNXHD, + CODEC_ID_THP, + CODEC_ID_SGI, + CODEC_ID_C93, + CODEC_ID_BETHSOFTVID, + CODEC_ID_PTX, + CODEC_ID_TXD, + CODEC_ID_VP6A, + CODEC_ID_AMV, + CODEC_ID_VB, + CODEC_ID_PCX, + CODEC_ID_SUNRAST, + CODEC_ID_INDEO4, + CODEC_ID_INDEO5, + CODEC_ID_MIMIC, + CODEC_ID_RL2, + CODEC_ID_ESCAPE124, + CODEC_ID_DIRAC, + CODEC_ID_BFI, + CODEC_ID_CMV, + CODEC_ID_MOTIONPIXELS, + CODEC_ID_TGV, + CODEC_ID_TGQ, + CODEC_ID_TQI, + CODEC_ID_AURA, + CODEC_ID_AURA2, + CODEC_ID_V210X, + CODEC_ID_TMV, + CODEC_ID_V210, + CODEC_ID_DPX, + CODEC_ID_MAD, + CODEC_ID_FRWU, + CODEC_ID_FLASHSV2, + CODEC_ID_CDGRAPHICS, + CODEC_ID_R210, + CODEC_ID_ANM, + CODEC_ID_BINKVIDEO, + CODEC_ID_IFF_ILBM, + CODEC_ID_IFF_BYTERUN1, + CODEC_ID_KGV1, + CODEC_ID_YOP, + CODEC_ID_VP8, + CODEC_ID_PICTOR, + CODEC_ID_ANSI, + CODEC_ID_A64_MULTI, + CODEC_ID_A64_MULTI5, + CODEC_ID_R10K, + CODEC_ID_MXPEG, + CODEC_ID_LAGARITH, + CODEC_ID_PRORES, + CODEC_ID_JV, + CODEC_ID_DFA, + CODEC_ID_WMV3IMAGE, + CODEC_ID_VC1IMAGE, + CODEC_ID_UTVIDEO, + CODEC_ID_BMV_VIDEO, + CODEC_ID_VBLE, + CODEC_ID_DXTORY, + CODEC_ID_V410, + CODEC_ID_XWD, + CODEC_ID_CDXL, + CODEC_ID_XBM, + CODEC_ID_ZEROCODEC, + CODEC_ID_MSS1, + CODEC_ID_MSA1, + CODEC_ID_TSCC2, + CODEC_ID_MTS2, + CODEC_ID_CLLC, + CODEC_ID_Y41P = MKBETAG('Y','4','1','P'), + CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'), + CODEC_ID_EXR = MKBETAG('0','E','X','R'), + CODEC_ID_AVRP = MKBETAG('A','V','R','P'), + + CODEC_ID_G2M = MKBETAG( 0 ,'G','2','M'), + CODEC_ID_AVUI = MKBETAG('A','V','U','I'), + CODEC_ID_AYUV = MKBETAG('A','Y','U','V'), + CODEC_ID_V308 = MKBETAG('V','3','0','8'), + CODEC_ID_V408 = MKBETAG('V','4','0','8'), + CODEC_ID_YUV4 = MKBETAG('Y','U','V','4'), + CODEC_ID_SANM = MKBETAG('S','A','N','M'), + CODEC_ID_PAF_VIDEO = MKBETAG('P','A','F','V'), + CODEC_ID_SNOW = AV_CODEC_ID_SNOW, + + /* various PCM "codecs" */ + CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs + CODEC_ID_PCM_S16LE = 0x10000, + CODEC_ID_PCM_S16BE, + CODEC_ID_PCM_U16LE, + CODEC_ID_PCM_U16BE, + CODEC_ID_PCM_S8, + CODEC_ID_PCM_U8, + CODEC_ID_PCM_MULAW, + CODEC_ID_PCM_ALAW, + CODEC_ID_PCM_S32LE, + CODEC_ID_PCM_S32BE, + CODEC_ID_PCM_U32LE, + CODEC_ID_PCM_U32BE, + CODEC_ID_PCM_S24LE, + CODEC_ID_PCM_S24BE, + CODEC_ID_PCM_U24LE, + CODEC_ID_PCM_U24BE, + CODEC_ID_PCM_S24DAUD, + CODEC_ID_PCM_ZORK, + CODEC_ID_PCM_S16LE_PLANAR, + CODEC_ID_PCM_DVD, + CODEC_ID_PCM_F32BE, + CODEC_ID_PCM_F32LE, + CODEC_ID_PCM_F64BE, + CODEC_ID_PCM_F64LE, + CODEC_ID_PCM_BLURAY, + CODEC_ID_PCM_LXF, + CODEC_ID_S302M, + CODEC_ID_PCM_S8_PLANAR, + + /* various ADPCM codecs */ + CODEC_ID_ADPCM_IMA_QT = 0x11000, + CODEC_ID_ADPCM_IMA_WAV, + CODEC_ID_ADPCM_IMA_DK3, + CODEC_ID_ADPCM_IMA_DK4, + CODEC_ID_ADPCM_IMA_WS, + CODEC_ID_ADPCM_IMA_SMJPEG, + CODEC_ID_ADPCM_MS, + CODEC_ID_ADPCM_4XM, + CODEC_ID_ADPCM_XA, + CODEC_ID_ADPCM_ADX, + CODEC_ID_ADPCM_EA, + CODEC_ID_ADPCM_G726, + CODEC_ID_ADPCM_CT, + CODEC_ID_ADPCM_SWF, + CODEC_ID_ADPCM_YAMAHA, + CODEC_ID_ADPCM_SBPRO_4, + CODEC_ID_ADPCM_SBPRO_3, + CODEC_ID_ADPCM_SBPRO_2, + CODEC_ID_ADPCM_THP, + CODEC_ID_ADPCM_IMA_AMV, + CODEC_ID_ADPCM_EA_R1, + CODEC_ID_ADPCM_EA_R3, + CODEC_ID_ADPCM_EA_R2, + CODEC_ID_ADPCM_IMA_EA_SEAD, + CODEC_ID_ADPCM_IMA_EA_EACS, + CODEC_ID_ADPCM_EA_XAS, + CODEC_ID_ADPCM_EA_MAXIS_XA, + CODEC_ID_ADPCM_IMA_ISS, + CODEC_ID_ADPCM_G722, + CODEC_ID_ADPCM_IMA_APC, + CODEC_ID_VIMA = MKBETAG('V','I','M','A'), + + /* AMR */ + CODEC_ID_AMR_NB = 0x12000, + CODEC_ID_AMR_WB, + + /* RealAudio codecs*/ + CODEC_ID_RA_144 = 0x13000, + CODEC_ID_RA_288, + + /* various DPCM codecs */ + CODEC_ID_ROQ_DPCM = 0x14000, + CODEC_ID_INTERPLAY_DPCM, + CODEC_ID_XAN_DPCM, + CODEC_ID_SOL_DPCM, + + /* audio codecs */ + CODEC_ID_MP2 = 0x15000, + CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 + CODEC_ID_AAC, + CODEC_ID_AC3, + CODEC_ID_DTS, + CODEC_ID_VORBIS, + CODEC_ID_DVAUDIO, + CODEC_ID_WMAV1, + CODEC_ID_WMAV2, + CODEC_ID_MACE3, + CODEC_ID_MACE6, + CODEC_ID_VMDAUDIO, + CODEC_ID_FLAC, + CODEC_ID_MP3ADU, + CODEC_ID_MP3ON4, + CODEC_ID_SHORTEN, + CODEC_ID_ALAC, + CODEC_ID_WESTWOOD_SND1, + CODEC_ID_GSM, ///< as in Berlin toast format + CODEC_ID_QDM2, + CODEC_ID_COOK, + CODEC_ID_TRUESPEECH, + CODEC_ID_TTA, + CODEC_ID_SMACKAUDIO, + CODEC_ID_QCELP, + CODEC_ID_WAVPACK, + CODEC_ID_DSICINAUDIO, + CODEC_ID_IMC, + CODEC_ID_MUSEPACK7, + CODEC_ID_MLP, + CODEC_ID_GSM_MS, /* as found in WAV */ + CODEC_ID_ATRAC3, + CODEC_ID_VOXWARE, + CODEC_ID_APE, + CODEC_ID_NELLYMOSER, + CODEC_ID_MUSEPACK8, + CODEC_ID_SPEEX, + CODEC_ID_WMAVOICE, + CODEC_ID_WMAPRO, + CODEC_ID_WMALOSSLESS, + CODEC_ID_ATRAC3P, + CODEC_ID_EAC3, + CODEC_ID_SIPR, + CODEC_ID_MP1, + CODEC_ID_TWINVQ, + CODEC_ID_TRUEHD, + CODEC_ID_MP4ALS, + CODEC_ID_ATRAC1, + CODEC_ID_BINKAUDIO_RDFT, + CODEC_ID_BINKAUDIO_DCT, + CODEC_ID_AAC_LATM, + CODEC_ID_QDMC, + CODEC_ID_CELT, + CODEC_ID_G723_1, + CODEC_ID_G729, + CODEC_ID_8SVX_EXP, + CODEC_ID_8SVX_FIB, + CODEC_ID_BMV_AUDIO, + CODEC_ID_RALF, + CODEC_ID_IAC, + CODEC_ID_ILBC, + CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'), + CODEC_ID_SONIC = MKBETAG('S','O','N','C'), + CODEC_ID_SONIC_LS = MKBETAG('S','O','N','L'), + CODEC_ID_PAF_AUDIO = MKBETAG('P','A','F','A'), + CODEC_ID_OPUS = MKBETAG('O','P','U','S'), + + /* subtitle codecs */ + CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. + CODEC_ID_DVD_SUBTITLE = 0x17000, + CODEC_ID_DVB_SUBTITLE, + CODEC_ID_TEXT, ///< raw UTF-8 text + CODEC_ID_XSUB, + CODEC_ID_SSA, + CODEC_ID_MOV_TEXT, + CODEC_ID_HDMV_PGS_SUBTITLE, + CODEC_ID_DVB_TELETEXT, + CODEC_ID_SRT, + CODEC_ID_MICRODVD = MKBETAG('m','D','V','D'), + CODEC_ID_EIA_608 = MKBETAG('c','6','0','8'), + CODEC_ID_JACOSUB = MKBETAG('J','S','U','B'), + CODEC_ID_SAMI = MKBETAG('S','A','M','I'), + CODEC_ID_REALTEXT = MKBETAG('R','T','X','T'), + CODEC_ID_SUBVIEWER = MKBETAG('S','u','b','V'), + + /* other specific kind of codecs (generally used for attachments) */ + CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. + CODEC_ID_TTF = 0x18000, + CODEC_ID_BINTEXT = MKBETAG('B','T','X','T'), + CODEC_ID_XBIN = MKBETAG('X','B','I','N'), + CODEC_ID_IDF = MKBETAG( 0 ,'I','D','F'), + CODEC_ID_OTF = MKBETAG( 0 ,'O','T','F'), + + CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it + + CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS + * stream (only used by libavformat) */ + CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems + * stream (only used by libavformat) */ + CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. + +#endif /* AVCODEC_OLD_CODEC_IDS_H */ diff --git a/extern/ffmpeg/include/libavcodec/opt.h b/extern/ffmpeg/include/libavcodec/opt.h deleted file mode 100644 index 2380e74332..0000000000 --- a/extern/ffmpeg/include/libavcodec/opt.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of Libav. - * - * Libav 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, - * 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 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * This header is provided for compatibility only and will be removed - * on next major bump - */ - -#ifndef AVCODEC_OPT_H -#define AVCODEC_OPT_H - -#include "libavcodec/version.h" - -#if FF_API_OPT_H -#include "libavutil/opt.h" -#endif - -#endif /* AVCODEC_OPT_H */ diff --git a/extern/ffmpeg/include/libavcodec/vaapi.h b/extern/ffmpeg/include/libavcodec/vaapi.h index 4c3bb9bb52..815a27e226 100644 --- a/extern/ffmpeg/include/libavcodec/vaapi.h +++ b/extern/ffmpeg/include/libavcodec/vaapi.h @@ -24,11 +24,17 @@ #ifndef AVCODEC_VAAPI_H #define AVCODEC_VAAPI_H +/** + * @file + * @ingroup lavc_codec_hwaccel_vaapi + * Public libavcodec VA API header. + */ + #include /** - * @defgroup VAAPI_Decoding VA API Decoding - * @ingroup Decoder + * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding + * @ingroup lavc_codec_hwaccel * @{ */ diff --git a/extern/ffmpeg/include/libavcodec/vda.h b/extern/ffmpeg/include/libavcodec/vda.h index 6e9de9cd0a..b3d6399a65 100644 --- a/extern/ffmpeg/include/libavcodec/vda.h +++ b/extern/ffmpeg/include/libavcodec/vda.h @@ -23,7 +23,12 @@ #ifndef AVCODEC_VDA_H #define AVCODEC_VDA_H -#include +/** + * @file + * @ingroup lavc_codec_hwaccel_vda + * Public libavcodec VDA header. + */ + #include // emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes @@ -34,34 +39,14 @@ #include #undef Picture +#include "libavcodec/version.h" + /** - * This structure is used to store a decoded frame information and data. + * @defgroup lavc_codec_hwaccel_vda VDA + * @ingroup lavc_codec_hwaccel + * + * @{ */ -typedef struct { - /** - * The PTS of the frame. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - int64_t pts; - - /** - * The CoreVideo buffer that contains the decoded data. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - CVPixelBufferRef cv_buffer; - - /** - * A pointer to the next frame. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - struct vda_frame *next_frame; -} vda_frame; /** * This structure is used to provide the necessary configurations and data @@ -71,84 +56,95 @@ typedef struct { */ struct vda_context { /** - * VDA decoder object. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ + * VDA decoder object. + * + * - encoding: unused + * - decoding: Set/Unset by libavcodec. + */ VDADecoder decoder; /** - * VDA frames queue ordered by presentation timestamp. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - vda_frame *queue; + * The Core Video pixel buffer that contains the current image data. + * + * encoding: unused + * decoding: Set by libavcodec. Unset by user. + */ + CVPixelBufferRef cv_buffer; /** - * Mutex for locking queue operations. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - pthread_mutex_t queue_mutex; + * Use the hardware decoder in synchronous mode. + * + * encoding: unused + * decoding: Set by user. + */ + int use_sync_decoding; /** - * The frame width. - * - * - encoding: unused - * - decoding: Set/Unset by user. - */ + * The frame width. + * + * - encoding: unused + * - decoding: Set/Unset by user. + */ int width; /** - * The frame height. - * - * - encoding: unused - * - decoding: Set/Unset by user. - */ + * The frame height. + * + * - encoding: unused + * - decoding: Set/Unset by user. + */ int height; /** - * The frame format. - * - * - encoding: unused - * - decoding: Set/Unset by user. - */ + * The frame format. + * + * - encoding: unused + * - decoding: Set/Unset by user. + */ int format; /** - * The pixel format for output image buffers. - * - * - encoding: unused - * - decoding: Set/Unset by user. - */ + * The pixel format for output image buffers. + * + * - encoding: unused + * - decoding: Set/Unset by user. + */ OSType cv_pix_fmt_type; /** - * The current bitstream buffer. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - uint8_t *bitstream; + * The current bitstream buffer. + * + * - encoding: unused + * - decoding: Set/Unset by libavcodec. + */ + uint8_t *priv_bitstream; /** - * The current size of the bitstream. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - int bitstream_size; + * The current size of the bitstream. + * + * - encoding: unused + * - decoding: Set/Unset by libavcodec. + */ + int priv_bitstream_size; /** - * The reference size used for fast reallocation. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - int ref_size; + * The reference size used for fast reallocation. + * + * - encoding: unused + * - decoding: Set/Unset by libavcodec. + */ + int priv_allocated_size; + + /** + * Use av_buffer to manage buffer. + * When the flag is set, the CVPixelBuffers returned by the decoder will + * be released automatically, so you have to retain them if necessary. + * Not setting this flag may cause memory leak. + * + * encoding: unused + * decoding: Set by user. + */ + int use_ref_buffer; }; /** Create the video decoder. */ @@ -159,10 +155,8 @@ int ff_vda_create_decoder(struct vda_context *vda_ctx, /** Destroy the video decoder. */ int ff_vda_destroy_decoder(struct vda_context *vda_ctx); -/** Return the top frame of the queue. */ -vda_frame *ff_vda_queue_pop(struct vda_context *vda_ctx); - -/** Release the given frame. */ -void ff_vda_release_vda_frame(vda_frame *frame); +/** + * @} + */ #endif /* AVCODEC_VDA_H */ diff --git a/extern/ffmpeg/include/libavcodec/vdpau.h b/extern/ffmpeg/include/libavcodec/vdpau.h index f3a547184d..b1c836c4b6 100644 --- a/extern/ffmpeg/include/libavcodec/vdpau.h +++ b/extern/ffmpeg/include/libavcodec/vdpau.h @@ -25,7 +25,15 @@ #define AVCODEC_VDPAU_H /** - * @defgroup Decoder VDPAU Decoder and Renderer + * @file + * @ingroup lavc_codec_hwaccel_vdpau + * Public libavcodec VDPAU header. + */ + + +/** + * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer + * @ingroup lavc_codec_hwaccel * * VDPAU hardware acceleration has two modules * - VDPAU decoding @@ -38,14 +46,110 @@ * and rendering (API calls) are done as part of the VDPAU * presentation (vo_vdpau.c) module. * - * @defgroup VDPAU_Decoding VDPAU Decoding - * @ingroup Decoder * @{ */ #include #include +#include "libavutil/avconfig.h" +#include "libavutil/attributes.h" +#ifndef FF_API_CAP_VDPAU +#define FF_API_CAP_VDPAU 1 +#endif +#ifndef FF_API_BUFS_VDPAU +#define FF_API_BUFS_VDPAU 1 +#endif + +#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 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. + */ +typedef struct AVVDPAUContext { + /** + * VDPAU decoder handle + * + * Set by user. + */ + VdpDecoder decoder; + + /** + * VDPAU decoder render callback + * + * Set by the user. + */ + VdpDecoderRender *render; + +#if FF_API_BUFS_VDPAU + /** + * VDPAU picture information + * + * Set by libavcodec. + */ + attribute_deprecated + union AVVDPAUPictureInfo info; + + /** + * Allocated size of the bitstream_buffers table. + * + * Set by libavcodec. + */ + attribute_deprecated + int bitstream_buffers_allocated; + + /** + * Useful bitstream buffers in the bitstream buffers table. + * + * Set by libavcodec. + */ + attribute_deprecated + int bitstream_buffers_used; + + /** + * Table of bitstream buffers. + * The user is responsible for freeing this buffer using av_freep(). + * + * 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); + +#if FF_API_CAP_VDPAU /** @brief The videoSurface is used for rendering. */ #define FF_VDPAU_STATE_USED_FOR_RENDER 1 @@ -67,6 +171,11 @@ struct vdpau_render_state { int state; ///< Holds FF_VDPAU_STATE_* values. +#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI + /** picture parameter information for all supported codecs */ + union AVVDPAUPictureInfo info; +#endif + /** Describe size/location of the compressed video data. Set to 0 when freeing bitstream_buffers. */ int bitstream_buffers_allocated; @@ -74,14 +183,12 @@ struct vdpau_render_state { /** The user is responsible for freeing this buffer using av_freep(). */ VdpBitstreamBuffer *bitstream_buffers; +#if !AV_HAVE_INCOMPATIBLE_LIBAV_ABI /** picture parameter information for all supported codecs */ - union VdpPictureInfo { - VdpPictureInfoH264 h264; - VdpPictureInfoMPEG1Or2 mpeg; - VdpPictureInfoVC1 vc1; - VdpPictureInfoMPEG4Part2 mpeg4; - } info; + union AVVDPAUPictureInfo info; +#endif }; +#endif /* @}*/ diff --git a/extern/ffmpeg/include/libavcodec/version.h b/extern/ffmpeg/include/libavcodec/version.h index d67ad2f5d2..63f6346ab3 100644 --- a/extern/ffmpeg/include/libavcodec/version.h +++ b/extern/ffmpeg/include/libavcodec/version.h @@ -20,9 +20,17 @@ #ifndef AVCODEC_VERSION_H #define AVCODEC_VERSION_H -#define LIBAVCODEC_VERSION_MAJOR 53 -#define LIBAVCODEC_VERSION_MINOR 60 -#define LIBAVCODEC_VERSION_MICRO 100 +/** + * @file + * @ingroup libavc + * Libavcodec version macros. + */ + +#include "libavutil/avutil.h" + +#define LIBAVCODEC_VERSION_MAJOR 55 +#define LIBAVCODEC_VERSION_MINOR 39 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ @@ -35,96 +43,62 @@ #define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) /** - * Those FF_API_* defines are not part of public API. - * They may change, break or disappear at any time. + * FF_API_* defines may be placed below to indicate public API that will be + * 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_PALETTE_CONTROL -#define FF_API_PALETTE_CONTROL (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_OLD_SAMPLE_FMT -#define FF_API_OLD_SAMPLE_FMT (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_OLD_AUDIOCONVERT -#define FF_API_OLD_AUDIOCONVERT (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_ANTIALIAS_ALGO -#define FF_API_ANTIALIAS_ALGO (LIBAVCODEC_VERSION_MAJOR < 54) -#endif + #ifndef FF_API_REQUEST_CHANNELS -#define FF_API_REQUEST_CHANNELS (LIBAVCODEC_VERSION_MAJOR < 55) -#endif -#ifndef FF_API_OPT_H -#define FF_API_OPT_H (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_THREAD_INIT -#define FF_API_THREAD_INIT (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_OLD_FF_PICT_TYPES -#define FF_API_OLD_FF_PICT_TYPES (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_FLAC_GLOBAL_OPTS -#define FF_API_FLAC_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_GET_PIX_FMT_NAME -#define FF_API_GET_PIX_FMT_NAME (LIBAVCODEC_VERSION_MAJOR < 54) +#define FF_API_REQUEST_CHANNELS (LIBAVCODEC_VERSION_MAJOR < 56) #endif #ifndef FF_API_ALLOC_CONTEXT -#define FF_API_ALLOC_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 54) +#define FF_API_ALLOC_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 55) #endif #ifndef FF_API_AVCODEC_OPEN -#define FF_API_AVCODEC_OPEN (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_DRC_SCALE -#define FF_API_DRC_SCALE (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_ER -#define FF_API_ER (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_AVCODEC_INIT -#define FF_API_AVCODEC_INIT (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_X264_GLOBAL_OPTS -#define FF_API_X264_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_MPEGVIDEO_GLOBAL_OPTS -#define FF_API_MPEGVIDEO_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_LAME_GLOBAL_OPTS -#define FF_API_LAME_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_SNOW_GLOBAL_OPTS -#define FF_API_SNOW_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_MJPEG_GLOBAL_OPTS -#define FF_API_MJPEG_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_GET_ALPHA_INFO -#define FF_API_GET_ALPHA_INFO (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_PARSE_FRAME -#define FF_API_PARSE_FRAME (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_INTERNAL_CONTEXT -#define FF_API_INTERNAL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_TIFFENC_COMPLEVEL -#define FF_API_TIFFENC_COMPLEVEL (LIBAVCODEC_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_DATA_POINTERS -#define FF_API_DATA_POINTERS (LIBAVCODEC_VERSION_MAJOR < 54) +#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 < 55) +#define FF_API_OLD_DECODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56) #endif #ifndef FF_API_OLD_TIMECODE -#define FF_API_OLD_TIMECODE (LIBAVCODEC_VERSION_MAJOR < 54) +#define FF_API_OLD_TIMECODE (LIBAVCODEC_VERSION_MAJOR < 55) #endif -#ifndef FF_API_AVFRAME_AGE -#define FF_API_AVFRAME_AGE (LIBAVCODEC_VERSION_MAJOR < 54) -#endif #ifndef FF_API_OLD_ENCODE_AUDIO -#define FF_API_OLD_ENCODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 55) +#define FF_API_OLD_ENCODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_OLD_ENCODE_VIDEO +#define FF_API_OLD_ENCODE_VIDEO (LIBAVCODEC_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_CODEC_ID +#define FF_API_CODEC_ID (LIBAVCODEC_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_AVCODEC_RESAMPLE +#define FF_API_AVCODEC_RESAMPLE (LIBAVCODEC_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_DEINTERLACE +#define FF_API_DEINTERLACE (LIBAVCODEC_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_DESTRUCT_PACKET +#define FF_API_DESTRUCT_PACKET (LIBAVCODEC_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_GET_BUFFER +#define FF_API_GET_BUFFER (LIBAVCODEC_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_MISSING_SAMPLE +#define FF_API_MISSING_SAMPLE (LIBAVCODEC_VERSION_MAJOR < 56) +#endif +#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 #endif /* AVCODEC_VERSION_H */ diff --git a/extern/ffmpeg/include/libavcodec/xvmc.h b/extern/ffmpeg/include/libavcodec/xvmc.h index 93ad8bb9a5..b2bf518d0c 100644 --- a/extern/ffmpeg/include/libavcodec/xvmc.h +++ b/extern/ffmpeg/include/libavcodec/xvmc.h @@ -21,10 +21,23 @@ #ifndef AVCODEC_XVMC_H #define AVCODEC_XVMC_H +/** + * @file + * @ingroup lavc_codec_hwaccel_xvmc + * Public libavcodec XvMC header. + */ + #include #include "avcodec.h" +/** + * @defgroup lavc_codec_hwaccel_xvmc XvMC + * @ingroup lavc_codec_hwaccel + * + * @{ + */ + #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) */ @@ -134,7 +147,7 @@ struct xvmc_pix_fmt { */ int filled_mv_blocks_num; - /** Number of the the next free data block; one data block consists of + /** Number of the next free data block; one data block consists of 64 short values in the data_blocks array. All blocks before this one have already been claimed by placing their position into the corresponding block description structure field, @@ -148,4 +161,8 @@ struct xvmc_pix_fmt { int next_free_data_block_num; }; +/** + * @} + */ + #endif /* AVCODEC_XVMC_H */ diff --git a/extern/ffmpeg/include/libavdevice/avdevice.h b/extern/ffmpeg/include/libavdevice/avdevice.h index 5abf9f523f..93a044f270 100644 --- a/extern/ffmpeg/include/libavdevice/avdevice.h +++ b/extern/ffmpeg/include/libavdevice/avdevice.h @@ -19,6 +19,8 @@ #ifndef AVDEVICE_AVDEVICE_H #define AVDEVICE_AVDEVICE_H +#include "version.h" + /** * @file * @ingroup lavd @@ -34,28 +36,15 @@ * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own * I/O functions). The filename passed to avformat_open_input() often does not * refer to an actually existing file, but has some special device-specific - * meaning - e.g. for the x11grab device it is the display name. + * meaning - e.g. for x11grab it is the display name. * * To use libavdevice, simply call avdevice_register_all() to register all * compiled muxers and demuxers. They all use standard libavformat API. * @} */ -#include "libavutil/avutil.h" #include "libavformat/avformat.h" -#define LIBAVDEVICE_VERSION_MAJOR 53 -#define LIBAVDEVICE_VERSION_MINOR 4 -#define LIBAVDEVICE_VERSION_MICRO 100 - -#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT - /** * Return the LIBAVDEVICE_VERSION_INT constant. */ @@ -78,4 +67,3 @@ const char *avdevice_license(void); void avdevice_register_all(void); #endif /* AVDEVICE_AVDEVICE_H */ - diff --git a/extern/ffmpeg/include/libavdevice/version.h b/extern/ffmpeg/include/libavdevice/version.h new file mode 100644 index 0000000000..4f4ec99d94 --- /dev/null +++ b/extern/ffmpeg/include/libavdevice/version.h @@ -0,0 +1,50 @@ +/* + * 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 AVDEVICE_VERSION_H +#define AVDEVICE_VERSION_H + +/** + * @file + * @ingroup lavd + * Libavdevice version macros + */ + +#include "libavutil/avutil.h" + +#define LIBAVDEVICE_VERSION_MAJOR 55 +#define LIBAVDEVICE_VERSION_MINOR 5 +#define LIBAVDEVICE_VERSION_MICRO 100 + +#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ + LIBAVDEVICE_VERSION_MINOR, \ + LIBAVDEVICE_VERSION_MICRO) +#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \ + LIBAVDEVICE_VERSION_MINOR, \ + LIBAVDEVICE_VERSION_MICRO) +#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT + +#define LIBAVDEVICE_IDENT "Lavd" AV_STRINGIFY(LIBAVDEVICE_VERSION) + +/** + * FF_API_* defines may be placed below to indicate public API that will be + * 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. + */ + +#endif /* AVDEVICE_VERSION_H */ diff --git a/extern/ffmpeg/include/libavfilter/asrc_abuffer.h b/extern/ffmpeg/include/libavfilter/asrc_abuffer.h new file mode 100644 index 0000000000..aa3446166f --- /dev/null +++ b/extern/ffmpeg/include/libavfilter/asrc_abuffer.h @@ -0,0 +1,91 @@ +/* + * 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 AVFILTER_ASRC_ABUFFER_H +#define AVFILTER_ASRC_ABUFFER_H + +#include "avfilter.h" + +/** + * @file + * memory buffer source for audio + * + * @deprecated use buffersrc.h instead. + */ + +/** + * Queue an audio buffer to the audio buffer source. + * + * @param abuffersrc audio source buffer context + * @param data pointers to the samples planes + * @param linesize linesizes of each audio buffer plane + * @param nb_samples number of samples per channel + * @param sample_fmt sample format of the audio data + * @param ch_layout channel layout of the audio data + * @param planar flag to indicate if audio data is planar or packed + * @param pts presentation timestamp of the audio buffer + * @param flags unused + * + * @deprecated use av_buffersrc_add_ref() instead. + */ +attribute_deprecated +int av_asrc_buffer_add_samples(AVFilterContext *abuffersrc, + uint8_t *data[8], int linesize[8], + int nb_samples, int sample_rate, + int sample_fmt, int64_t ch_layout, int planar, + int64_t pts, int av_unused flags); + +/** + * Queue an audio buffer to the audio buffer source. + * + * This is similar to av_asrc_buffer_add_samples(), but the samples + * are stored in a buffer with known size. + * + * @param abuffersrc audio source buffer context + * @param buf pointer to the samples data, packed is assumed + * @param size the size in bytes of the buffer, it must contain an + * integer number of samples + * @param sample_fmt sample format of the audio data + * @param ch_layout channel layout of the audio data + * @param pts presentation timestamp of the audio buffer + * @param flags unused + * + * @deprecated use av_buffersrc_add_ref() instead. + */ +attribute_deprecated +int av_asrc_buffer_add_buffer(AVFilterContext *abuffersrc, + uint8_t *buf, int buf_size, + int sample_rate, + int sample_fmt, int64_t ch_layout, int planar, + int64_t pts, int av_unused flags); + +/** + * Queue an audio buffer to the audio buffer source. + * + * @param abuffersrc audio source buffer context + * @param samplesref buffer ref to queue + * @param flags unused + * + * @deprecated use av_buffersrc_add_ref() instead. + */ +attribute_deprecated +int av_asrc_buffer_add_audio_buffer_ref(AVFilterContext *abuffersrc, + AVFilterBufferRef *samplesref, + int av_unused flags); + +#endif /* AVFILTER_ASRC_ABUFFER_H */ diff --git a/extern/ffmpeg/include/libavfilter/avcodec.h b/extern/ffmpeg/include/libavfilter/avcodec.h index 22dd1a263e..8bbdad267f 100644 --- a/extern/ffmpeg/include/libavfilter/avcodec.h +++ b/extern/ffmpeg/include/libavfilter/avcodec.h @@ -28,44 +28,83 @@ * symbols defined below will not be available. */ -#include "libavcodec/avcodec.h" // AVFrame #include "avfilter.h" -#include "vsrc_buffer.h" +#if FF_API_AVFILTERBUFFER /** - * Copy the frame properties of src to dst, without copying the actual - * image data. + * Create and return a picref reference from the data and properties + * contained in frame. + * + * @param perms permissions to assign to the new buffer reference + * @deprecated avfilter APIs work natively with AVFrame instead. */ -int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src); +attribute_deprecated +AVFilterBufferRef *avfilter_get_video_buffer_ref_from_frame(const AVFrame *frame, int perms); + /** * Create and return a picref reference from the data and properties * contained in frame. * * @param perms permissions to assign to the new buffer reference + * @deprecated avfilter APIs work natively with AVFrame instead. */ -AVFilterBufferRef *avfilter_get_video_buffer_ref_from_frame(const AVFrame *frame, int perms); +attribute_deprecated +AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_frame(const AVFrame *frame, + int perms); + +/** + * Create and return a buffer reference from the data and properties + * contained in frame. + * + * @param perms permissions to assign to the new buffer reference + * @deprecated avfilter APIs work natively with AVFrame instead. + */ +attribute_deprecated +AVFilterBufferRef *avfilter_get_buffer_ref_from_frame(enum AVMediaType type, + const AVFrame *frame, + int perms); +#endif + +#if FF_API_FILL_FRAME +/** + * Fill an AVFrame with the information stored in samplesref. + * + * @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 + * failure + * @deprecated Use avfilter_copy_buf_props() instead. + */ +attribute_deprecated +int avfilter_fill_frame_from_audio_buffer_ref(AVFrame *frame, + const AVFilterBufferRef *samplesref); /** * Fill an AVFrame with the information stored in picref. * * @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. */ +attribute_deprecated int avfilter_fill_frame_from_video_buffer_ref(AVFrame *frame, const AVFilterBufferRef *picref); /** - * Add frame data to buffer_src. + * Fill an AVFrame with information stored in ref. * - * @param buffer_src pointer to a buffer source context - * @param flags a combination of AV_VSRC_BUF_FLAG_* flags + * @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 * failure + * @deprecated Use avfilter_copy_buf_props() instead. */ -int av_vsrc_buffer_add_frame(AVFilterContext *buffer_src, - const AVFrame *frame, int flags); +attribute_deprecated +int avfilter_fill_frame_from_buffer_ref(AVFrame *frame, + const AVFilterBufferRef *ref); +#endif #endif /* AVFILTER_AVCODEC_H */ diff --git a/extern/ffmpeg/include/libavfilter/avfilter.h b/extern/ffmpeg/include/libavfilter/avfilter.h index 9c7a2e5bbf..412b12391c 100644 --- a/extern/ffmpeg/include/libavfilter/avfilter.h +++ b/extern/ffmpeg/include/libavfilter/avfilter.h @@ -22,22 +22,27 @@ #ifndef AVFILTER_AVFILTER_H #define AVFILTER_AVFILTER_H +/** + * @file + * @ingroup lavfi + * Main libavfilter public API header + */ + +/** + * @defgroup lavfi Libavfilter - graph-based frame editing library + * @{ + */ + +#include + +#include "libavutil/attributes.h" #include "libavutil/avutil.h" +#include "libavutil/dict.h" +#include "libavutil/frame.h" #include "libavutil/log.h" #include "libavutil/samplefmt.h" #include "libavutil/pixfmt.h" #include "libavutil/rational.h" -#include "libavcodec/avcodec.h" - - -#ifndef FF_API_OLD_VSINK_API -#define FF_API_OLD_VSINK_API (LIBAVFILTER_VERSION_MAJOR < 3) -#endif -#ifndef FF_API_OLD_ALL_FORMATS_API -#define FF_API_OLD_ALL_FORMATS_API (LIBAVFILTER_VERSION_MAJOR < 3) -#endif - -#include #include "libavfilter/version.h" @@ -56,11 +61,12 @@ const char *avfilter_configuration(void); */ const char *avfilter_license(void); - typedef struct AVFilterContext AVFilterContext; typedef struct AVFilterLink AVFilterLink; typedef struct AVFilterPad AVFilterPad; +typedef struct AVFilterFormats AVFilterFormats; +#if FF_API_AVFILTERBUFFER /** * A reference-counted buffer data type used by the filter system. Filters * should not store pointers to this structure directly, but instead use the @@ -68,9 +74,23 @@ typedef struct AVFilterPad AVFilterPad; */ typedef struct AVFilterBuffer { uint8_t *data[8]; ///< buffer data for each plane/channel - int linesize[8]; ///< number of bytes per line - unsigned refcount; ///< number of references to this buffer + /** + * pointers to the data planes/channels. + * + * For video, this should simply point to data[]. + * + * For planar audio, each channel has a separate data pointer, and + * linesize[0] contains the size of each channel buffer. + * For packed audio, there is just one data pointer, and linesize[0] + * contains the total size of the buffer for all channels. + * + * Note: Both data and extended_data will always be set, but for planar + * audio with more channels that can fit in data, extended_data must be used + * in order to access all channels. + */ + uint8_t **extended_data; + int linesize[8]; ///< number of bytes per line /** private data to be used by a custom free function */ void *priv; @@ -84,6 +104,7 @@ typedef struct AVFilterBuffer { int format; ///< media format int w, h; ///< width and height of the allocated buffer + unsigned refcount; ///< number of references to this buffer } AVFilterBuffer; #define AV_PERM_READ 0x01 ///< can read from the buffer @@ -105,7 +126,7 @@ typedef struct AVFilterBufferRefAudioProps { uint64_t channel_layout; ///< channel layout of audio buffer int nb_samples; ///< number of audio samples per channel int sample_rate; ///< audio buffer sample rate - int planar; ///< audio buffer - planar or packed + int channels; ///< number of channels (do not access directly) } AVFilterBufferRefAudioProps; /** @@ -121,6 +142,9 @@ typedef struct AVFilterBufferRefVideoProps { int top_field_first; ///< field order enum AVPictureType pict_type; ///< picture type of the frame int key_frame; ///< 1 -> keyframe, 0-> not + int qp_table_linesize; ///< qp_table stride + int qp_table_size; ///< qp_table size + int8_t *qp_table; ///< array of Quantization Parameters } AVFilterBufferRefVideoProps; /** @@ -134,8 +158,25 @@ typedef struct AVFilterBufferRefVideoProps { typedef struct AVFilterBufferRef { AVFilterBuffer *buf; ///< the buffer that this is a reference to uint8_t *data[8]; ///< picture/audio data for each plane + /** + * pointers to the data planes/channels. + * + * For video, this should simply point to data[]. + * + * For planar audio, each channel has a separate data pointer, and + * linesize[0] contains the size of each channel buffer. + * For packed audio, there is just one data pointer, and linesize[0] + * contains the total size of the buffer for all channels. + * + * Note: Both data and extended_data will always be set, but for planar + * audio with more channels that can fit in data, extended_data must be used + * in order to access all channels. + */ + uint8_t **extended_data; int linesize[8]; ///< number of bytes per line - int format; ///< media format + + AVFilterBufferRefVideoProps *video; ///< video buffer specific properties + AVFilterBufferRefAudioProps *audio; ///< audio buffer specific properties /** * presentation timestamp. The time unit may change during @@ -145,28 +186,20 @@ typedef struct AVFilterBufferRef { int64_t pts; int64_t pos; ///< byte position in stream, -1 if unknown + int format; ///< media format + int perms; ///< permissions, see the AV_PERM_* flags enum AVMediaType type; ///< media type of buffer data - AVFilterBufferRefVideoProps *video; ///< video buffer specific properties - AVFilterBufferRefAudioProps *audio; ///< audio buffer specific properties + + AVDictionary *metadata; ///< dictionary containing metadata key=value tags } AVFilterBufferRef; /** * Copy properties of src to dst, without copying the actual data */ -static inline void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src) -{ - // copy common properties - dst->pts = src->pts; - dst->pos = src->pos; - - switch (src->type) { - case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break; - case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break; - default: break; - } -} +attribute_deprecated +void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src); /** * Add a new reference to a buffer. @@ -177,6 +210,7 @@ static inline void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilt * @return a new reference to the buffer with the same properties as the * old, excluding any permissions denied by pmask */ +attribute_deprecated AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask); /** @@ -184,165 +218,40 @@ AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask); * buffer, the buffer itself is also automatically freed. * * @param ref reference to the buffer, may be NULL + * + * @note it is recommended to use avfilter_unref_bufferp() instead of this + * function */ +attribute_deprecated void avfilter_unref_buffer(AVFilterBufferRef *ref); /** - * A list of supported formats for one end of a filter link. This is used - * during the format negotiation process to try to pick the best format to - * use to minimize the number of necessary conversions. Each filter gives a - * list of the formats supported by each input and output pad. The list - * given for each pad need not be distinct - they may be references to the - * same list of formats, as is often the case when a filter supports multiple - * formats, but will always output the same format as it is given in input. + * Remove a reference to a buffer and set the pointer to NULL. + * If this is the last reference to the buffer, the buffer itself + * is also automatically freed. * - * In this way, a list of possible input formats and a list of possible - * output formats are associated with each link. When a set of formats is - * negotiated over a link, the input and output lists are merged to form a - * new list containing only the common elements of each list. In the case - * that there were no common elements, a format conversion is necessary. - * Otherwise, the lists are merged, and all other links which reference - * either of the format lists involved in the merge are also affected. - * - * For example, consider the filter chain: - * filter (a) --> (b) filter (b) --> (c) filter - * - * where the letters in parenthesis indicate a list of formats supported on - * the input or output of the link. Suppose the lists are as follows: - * (a) = {A, B} - * (b) = {A, B, C} - * (c) = {B, C} - * - * First, the first link's lists are merged, yielding: - * filter (a) --> (a) filter (a) --> (c) filter - * - * Notice that format list (b) now refers to the same list as filter list (a). - * Next, the lists for the second link are merged, yielding: - * filter (a) --> (a) filter (a) --> (a) filter - * - * where (a) = {B}. - * - * Unfortunately, when the format lists at the two ends of a link are merged, - * we must ensure that all links which reference either pre-merge format list - * get updated as well. Therefore, we have the format list structure store a - * pointer to each of the pointers to itself. - */ -typedef struct AVFilterFormats { - unsigned format_count; ///< number of formats - int64_t *formats; ///< list of media formats - - unsigned refcount; ///< number of references to this list - struct AVFilterFormats ***refs; ///< references to this list -} AVFilterFormats; - -/** - * Create a list of supported formats. This is intended for use in - * AVFilter->query_formats(). - * - * @param fmts list of media formats, terminated by -1. If NULL an - * empty list is created. - * @return the format list, with no existing references - */ -AVFilterFormats *avfilter_make_format_list(const int *fmts); -AVFilterFormats *avfilter_make_format64_list(const int64_t *fmts); - -/** - * Add fmt to the list of media formats contained in *avff. - * If *avff is NULL the function allocates the filter formats struct - * and puts its pointer in *avff. - * - * @return a non negative value in case of success, or a negative - * value corresponding to an AVERROR code in case of error - */ -int avfilter_add_format(AVFilterFormats **avff, int64_t fmt); - -#if FF_API_OLD_ALL_FORMATS_API -/** - * @deprecated Use avfilter_make_all_formats() instead. + * @param ref pointer to the buffer reference */ attribute_deprecated -AVFilterFormats *avfilter_all_formats(enum AVMediaType type); +void avfilter_unref_bufferp(AVFilterBufferRef **ref); #endif /** - * Return a list of all formats supported by FFmpeg for the given media type. + * Get the number of channels of a buffer reference. */ -AVFilterFormats *avfilter_make_all_formats(enum AVMediaType type); - -/** - * A list of all channel layouts supported by libavfilter. - */ -extern const int64_t avfilter_all_channel_layouts[]; - -/** - * Return a list of all channel layouts supported by FFmpeg. - */ -AVFilterFormats *avfilter_make_all_channel_layouts(void); - -/** - * Return a list of all audio packing formats. - */ -AVFilterFormats *avfilter_make_all_packing_formats(void); - -/** - * Return a format list which contains the intersection of the formats of - * a and b. Also, all the references of a, all the references of b, and - * a and b themselves will be deallocated. - * - * If a and b do not share any common formats, neither is modified, and NULL - * is returned. - */ -AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b); - -/** - * Add *ref as a new reference to formats. - * That is the pointers will point like in the ASCII art below: - * ________ - * |formats |<--------. - * | ____ | ____|___________________ - * | |refs| | | __|_ - * | |* * | | | | | | AVFilterLink - * | |* *--------->|*ref| - * | |____| | | |____| - * |________| |________________________ - */ -void avfilter_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref); - -/** - * If *ref is non-NULL, remove *ref as a reference to the format list - * it currently points to, deallocates that list if this was the last - * reference, and sets *ref to NULL. - * - * Before After - * ________ ________ NULL - * |formats |<--------. |formats | ^ - * | ____ | ____|________________ | ____ | ____|________________ - * | |refs| | | __|_ | |refs| | | __|_ - * | |* * | | | | | | AVFilterLink | |* * | | | | | | AVFilterLink - * | |* *--------->|*ref| | |* | | | |*ref| - * | |____| | | |____| | |____| | | |____| - * |________| |_____________________ |________| |_____________________ - */ -void avfilter_formats_unref(AVFilterFormats **ref); - -/** - * - * Before After - * ________ ________ - * |formats |<---------. |formats |<---------. - * | ____ | ___|___ | ____ | ___|___ - * | |refs| | | | | | |refs| | | | | NULL - * | |* *--------->|*oldref| | |* *--------->|*newref| ^ - * | |* * | | |_______| | |* * | | |_______| ___|___ - * | |____| | | |____| | | | | - * |________| |________| |*oldref| - * |_______| - */ -void avfilter_formats_changeref(AVFilterFormats **oldref, - AVFilterFormats **newref); +attribute_deprecated +int avfilter_ref_get_channels(AVFilterBufferRef *ref); +#if FF_API_AVFILTERPAD_PUBLIC /** * A filter pad used for either input or output. + * + * See doc/filter_design.txt for details on how to implement the methods. + * + * @warning this struct might be removed from public API. + * users should call avfilter_pad_get_name() and avfilter_pad_get_type() + * to access the name and type fields; there should be no need to access + * any other fields from outside of libavfilter. */ struct AVFilterPad { /** @@ -353,79 +262,79 @@ struct AVFilterPad { const char *name; /** - * AVFilterPad type. Can be AVMEDIA_TYPE_VIDEO or AVMEDIA_TYPE_AUDIO. + * AVFilterPad type. */ enum AVMediaType type; /** + * Input pads: * Minimum required permissions on incoming buffers. Any buffer with * insufficient permissions will be automatically copied by the filter * system to a new buffer which provides the needed access permissions. * - * Input pads only. + * Output pads: + * Guaranteed permissions on outgoing buffers. Any buffer pushed on the + * link must have at least these permissions; this fact is checked by + * asserts. It can be used to optimize buffer allocation. */ - int min_perms; + attribute_deprecated int min_perms; /** + * Input pads: * Permissions which are not accepted on incoming buffers. Any buffer * which has any of these permissions set will be automatically copied * by the filter system to a new buffer which does not have those * permissions. This can be used to easily disallow buffers with * AV_PERM_REUSE. * - * Input pads only. + * Output pads: + * Permissions which are automatically removed on outgoing buffers. It + * can be used to optimize buffer allocation. */ - int rej_perms; + attribute_deprecated int rej_perms; /** - * Callback called before passing the first slice of a new frame. If - * NULL, the filter layer will default to storing a reference to the - * picture inside the link structure. - * - * Input video pads only. + * @deprecated unused */ - void (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref); + int (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref); /** * Callback function to get a video buffer. If NULL, the filter system will - * use avfilter_default_get_video_buffer(). + * use ff_default_get_video_buffer(). * * Input video pads only. */ - AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h); + AVFrame *(*get_video_buffer)(AVFilterLink *link, int w, int h); /** * Callback function to get an audio buffer. If NULL, the filter system will - * use avfilter_default_get_audio_buffer(). + * use ff_default_get_audio_buffer(). * * Input audio pads only. */ - AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms, int nb_samples); + AVFrame *(*get_audio_buffer)(AVFilterLink *link, int nb_samples); /** - * Callback called after the slices of a frame are completely sent. If - * NULL, the filter layer will default to releasing the reference stored - * in the link structure during start_frame(). - * - * Input video pads only. + * @deprecated unused */ - void (*end_frame)(AVFilterLink *link); + int (*end_frame)(AVFilterLink *link); /** - * Slice drawing callback. This is where a filter receives video data - * and should do its processing. - * - * Input video pads only. + * @deprecated unused */ - void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir); + int (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir); /** - * Samples filtering callback. This is where a filter receives audio data - * and should do its processing. + * Filtering callback. This is where a filter receives a frame with + * audio/video data and should do its processing. * - * Input audio pads only. + * Input pads only. + * + * @return >= 0 on success, a negative AVERROR on error. This function + * must ensure that frame is properly unreferenced on error if it + * hasn't been passed on to another filter. */ - void (*filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref); + int (*filter_frame)(AVFilterLink *link, AVFrame *frame); /** * Frame poll callback. This returns the number of immediately available @@ -434,7 +343,7 @@ struct AVFilterPad { * * Defaults to just calling the source poll_frame() method. * - * Output video pads only. + * Output pads only. */ int (*poll_frame)(AVFilterLink *link); @@ -442,8 +351,10 @@ struct AVFilterPad { * Frame request callback. A call to this should result in at least one * frame being output over the given link. This should return zero on * success, and another value on error. + * See ff_request_frame() for the error codes with a specific + * meaning. * - * Output video pads only. + * Output pads only. */ int (*request_frame)(AVFilterLink *link); @@ -465,103 +376,223 @@ struct AVFilterPad { * and another value on error. */ int (*config_props)(AVFilterLink *link); + + /** + * The filter expects a fifo to be inserted on its input link, + * typically because it has a delay. + * + * input pads only. + */ + int needs_fifo; + + int needs_writable; }; - -/** default handler for start_frame() for video inputs */ -void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); - -/** default handler for draw_slice() for video inputs */ -void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); - -/** default handler for end_frame() for video inputs */ -void avfilter_default_end_frame(AVFilterLink *link); - -/** default handler for filter_samples() for audio inputs */ -void avfilter_default_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref); - -/** default handler for get_video_buffer() for video inputs */ -AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, - int perms, int w, int h); - -/** default handler for get_audio_buffer() for audio inputs */ -AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, - int perms, int nb_samples); +#endif /** - * Helpers for query_formats() which set all links to the same list of - * formats/layouts. If there are no links hooked to this filter, the list - * of formats is freed. + * Get the number of elements in a NULL-terminated array of AVFilterPads (e.g. + * AVFilter.inputs/outputs). */ -void avfilter_set_common_pixel_formats(AVFilterContext *ctx, AVFilterFormats *formats); -void avfilter_set_common_sample_formats(AVFilterContext *ctx, AVFilterFormats *formats); -void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *formats); -void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats); +int avfilter_pad_count(const AVFilterPad *pads); -/** Default handler for query_formats() */ -int avfilter_default_query_formats(AVFilterContext *ctx); +/** + * Get the name of an AVFilterPad. + * + * @param pads an array of AVFilterPads + * @param pad_idx index of the pad in the array it; is the caller's + * responsibility to ensure the index is valid + * + * @return name of the pad_idx'th pad in pads + */ +const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx); -/** start_frame() handler for filters which simply pass video along */ -void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); +/** + * Get the type of an AVFilterPad. + * + * @param pads an array of AVFilterPads + * @param pad_idx index of the pad in the array; it is the caller's + * responsibility to ensure the index is valid + * + * @return type of the pad_idx'th pad in pads + */ +enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx); -/** draw_slice() handler for filters which simply pass video along */ -void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); - -/** end_frame() handler for filters which simply pass video along */ -void avfilter_null_end_frame(AVFilterLink *link); - -/** filter_samples() handler for filters which simply pass audio along */ -void avfilter_null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref); - -/** get_video_buffer() handler for filters which simply pass video along */ -AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, - int perms, int w, int h); - -/** get_audio_buffer() handler for filters which simply pass audio along */ -AVFilterBufferRef *avfilter_null_get_audio_buffer(AVFilterLink *link, - int perms, int nb_samples); +/** + * The number of the filter inputs is not determined just by AVFilter.inputs. + * The filter might add additional inputs during initialization depending on the + * options supplied to it. + */ +#define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0) +/** + * The number of the filter outputs is not determined just by AVFilter.outputs. + * The filter might add additional outputs during initialization depending on + * the options supplied to it. + */ +#define AVFILTER_FLAG_DYNAMIC_OUTPUTS (1 << 1) +/** + * The filter supports multithreading by splitting frames into multiple parts + * and processing them concurrently. + */ +#define AVFILTER_FLAG_SLICE_THREADS (1 << 2) +/** + * Some filters support a generic "enable" expression option that can be used + * to enable or disable a filter in the timeline. Filters supporting this + * option have this flag set. When the enable expression is false, the default + * no-op filter_frame() function is called in place of the filter_frame() + * callback defined on each input pad, thus the frame is passed unchanged to + * the next filters. + */ +#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC (1 << 16) +/** + * Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will + * have its filter_frame() callback(s) called as usual even when the enable + * expression is false. The filter will disable filtering within the + * filter_frame() callback(s) itself, for example executing code depending on + * the AVFilterContext->is_disabled value. + */ +#define AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL (1 << 17) +/** + * Handy mask to test whether the filter supports or no the timeline feature + * (internally or generically). + */ +#define AVFILTER_FLAG_SUPPORT_TIMELINE (AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL) /** * Filter definition. This defines the pads a filter contains, and all the * callback functions used to interact with the filter. */ typedef struct AVFilter { - const char *name; ///< filter name - - int priv_size; ///< size of private data to allocate for the filter - /** - * Filter initialization function. Args contains the user-supplied - * parameters. FIXME: maybe an AVOption-based system would be better? - * opaque is data provided by the code requesting creation of the filter, - * and is used to pass data to the filter. + * Filter name. Must be non-NULL and unique among filters. */ - int (*init)(AVFilterContext *ctx, const char *args, void *opaque); + const char *name; /** - * Filter uninitialization function. Should deallocate any memory held - * by the filter, release any buffer references, etc. This does not need - * to deallocate the AVFilterContext->priv memory itself. + * A description of the filter. May be NULL. + * + * You should use the NULL_IF_CONFIG_SMALL() macro to define it. + */ + const char *description; + + /** + * List of inputs, terminated by a zeroed element. + * + * NULL if there are no (static) inputs. Instances of filters with + * AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in + * this list. + */ + const AVFilterPad *inputs; + /** + * List of outputs, terminated by a zeroed element. + * + * NULL if there are no (static) outputs. Instances of filters with + * AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in + * this list. + */ + const AVFilterPad *outputs; + + /** + * A class for the private data, used to declare filter private AVOptions. + * This field is NULL for filters that do not declare any options. + * + * If this field is non-NULL, the first member of the filter private data + * must be a pointer to AVClass, which will be set by libavfilter generic + * code to this class. + */ + const AVClass *priv_class; + + /** + * A combination of AVFILTER_FLAG_* + */ + int flags; + + /***************************************************************** + * All fields below this line are not part of the public API. They + * may not be used outside of libavfilter and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + */ + + /** + * Filter initialization function. + * + * This callback will be called only once during the filter lifetime, after + * all the options have been set, but before links between filters are + * established and format negotiation is done. + * + * Basic filter initialization should be done here. Filters with dynamic + * inputs and/or outputs should create those inputs/outputs here based on + * provided options. No more changes to this filter's inputs/outputs can be + * done after this callback. + * + * This callback must not assume that the filter links exist or frame + * parameters are known. + * + * @ref AVFilter.uninit "uninit" is guaranteed to be called even if + * initialization fails, so this callback does not have to clean up on + * failure. + * + * @return 0 on success, a negative AVERROR on failure + */ + int (*init)(AVFilterContext *ctx); + + /** + * Should be set instead of @ref AVFilter.init "init" by the filters that + * want to pass a dictionary of AVOptions to nested contexts that are + * allocated during init. + * + * On return, the options dict should be freed and replaced with one that + * contains all the options which could not be processed by this filter (or + * with NULL if all the options were processed). + * + * Otherwise the semantics is the same as for @ref AVFilter.init "init". + */ + int (*init_dict)(AVFilterContext *ctx, AVDictionary **options); + + /** + * Filter uninitialization function. + * + * Called only once right before the filter is freed. Should deallocate any + * memory held by the filter, release any buffer references, etc. It does + * not need to deallocate the AVFilterContext.priv memory itself. + * + * This callback may be called even if @ref AVFilter.init "init" was not + * called or failed, so it must be prepared to handle such a situation. */ void (*uninit)(AVFilterContext *ctx); /** - * Queries formats/layouts supported by the filter and its pads, and sets - * the in_formats/in_chlayouts for links connected to its output pads, - * and out_formats/out_chlayouts for links connected to its input pads. + * Query formats supported by the filter on its inputs and outputs. + * + * This callback is called after the filter is initialized (so the inputs + * and outputs are fixed), shortly before the format negotiation. This + * callback may be called more than once. + * + * This callback must set AVFilterLink.out_formats on every input link and + * AVFilterLink.in_formats on every output link to a list of pixel/sample + * formats that the filter supports on that link. For audio links, this + * filter must also set @ref AVFilterLink.in_samplerates "in_samplerates" / + * @ref AVFilterLink.out_samplerates "out_samplerates" and + * @ref AVFilterLink.in_channel_layouts "in_channel_layouts" / + * @ref AVFilterLink.out_channel_layouts "out_channel_layouts" analogously. + * + * This callback may be NULL for filters with one input, in which case + * libavfilter assumes that it supports all input formats and preserves + * them on output. * * @return zero on success, a negative value corresponding to an * AVERROR code otherwise */ int (*query_formats)(AVFilterContext *); - const AVFilterPad *inputs; ///< NULL terminated list of inputs. NULL if none - const AVFilterPad *outputs; ///< NULL terminated list of outputs. NULL if none + int priv_size; ///< size of private data to allocate for the filter /** - * A description for the filter. You should use the - * NULL_IF_CONFIG_SMALL() macro to define it. + * Used by the filter registration system. Must not be touched by any other + * code. */ - const char *description; + struct AVFilter *next; /** * Make the filter instance process a command. @@ -576,32 +607,77 @@ typedef struct AVFilter { * AVERROR(ENOSYS) on unsupported commands */ int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags); + + /** + * Filter initialization function, alternative to the init() + * callback. Args contains the user-supplied parameters, opaque is + * used for providing binary data. + */ + int (*init_opaque)(AVFilterContext *ctx, void *opaque); } AVFilter; +/** + * Process multiple parts of the frame concurrently. + */ +#define AVFILTER_THREAD_SLICE (1 << 0) + +typedef struct AVFilterInternal AVFilterInternal; + /** An instance of a filter */ struct AVFilterContext { - const AVClass *av_class; ///< needed for av_log() + const AVClass *av_class; ///< needed for av_log() and filters common options - AVFilter *filter; ///< the AVFilter of which this is an instance + const AVFilter *filter; ///< the AVFilter of which this is an instance char *name; ///< name of this filter instance - unsigned input_count; ///< number of input pads AVFilterPad *input_pads; ///< array of input pads AVFilterLink **inputs; ///< array of pointers to input links +#if FF_API_FOO_COUNT + attribute_deprecated unsigned input_count; ///< @deprecated use nb_inputs +#endif + unsigned nb_inputs; ///< number of input pads - unsigned output_count; ///< number of output pads AVFilterPad *output_pads; ///< array of output pads AVFilterLink **outputs; ///< array of pointers to output links +#if FF_API_FOO_COUNT + attribute_deprecated unsigned output_count; ///< @deprecated use nb_outputs +#endif + unsigned nb_outputs; ///< number of output pads void *priv; ///< private data for use by the filter - struct AVFilterCommand *command_queue; -}; + struct AVFilterGraph *graph; ///< filtergraph this filter belongs to -enum AVFilterPacking { - AVFILTER_PACKED = 0, - AVFILTER_PLANAR, + /** + * Type of multithreading being allowed/used. A combination of + * AVFILTER_THREAD_* flags. + * + * May be set by the caller before initializing the filter to forbid some + * or all kinds of multithreading for this filter. The default is allowing + * everything. + * + * When the filter is initialized, this field is combined using bit AND with + * AVFilterGraph.thread_type to get the final mask used for determining + * allowed threading types. I.e. a threading type needs to be set in both + * to be allowed. + * + * After the filter is initialzed, libavfilter sets this field to the + * threading type that is actually used (0 for no multithreading). + */ + int thread_type; + + /** + * An opaque struct for libavfilter internal use. + */ + AVFilterInternal *internal; + + struct AVFilterCommand *command_queue; + + char *enable_str; ///< enable expression string + void *enable; ///< parsed expression (AVExpr*) + double *var_values; ///< variable values for the enable expression + int is_disabled; ///< the enabled state from the last expression evaluation }; /** @@ -618,13 +694,6 @@ struct AVFilterLink { AVFilterContext *dst; ///< dest filter AVFilterPad *dstpad; ///< input pad on the dest filter - /** stage of the initialization of the link properties (dimensions, etc) */ - enum { - AVLINK_UNINIT = 0, ///< not started - AVLINK_STARTINIT, ///< started, but incomplete - AVLINK_INIT ///< complete - } init_state; - enum AVMediaType type; ///< filter media type /* These parameters apply only to video */ @@ -632,43 +701,11 @@ struct AVFilterLink { int h; ///< agreed upon image height AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio /* These parameters apply only to audio */ - uint64_t channel_layout; ///< channel layout of current buffer (see libavutil/audioconvert.h) -#if LIBAVFILTER_VERSION_MAJOR < 3 - int64_t sample_rate; ///< samples per second -#else + uint64_t channel_layout; ///< channel layout of current buffer (see libavutil/channel_layout.h) int sample_rate; ///< samples per second -#endif - int planar; ///< agreed upon packing mode of audio buffers. true if planar. int format; ///< agreed upon media format - /** - * Lists of formats and channel layouts supported by the input and output - * filters respectively. These lists are used for negotiating the format - * to actually be used, which will be loaded into the format and - * channel_layout members, above, when chosen. - * - */ - AVFilterFormats *in_formats; - AVFilterFormats *out_formats; - - AVFilterFormats *in_chlayouts; - AVFilterFormats *out_chlayouts; - AVFilterFormats *in_packing; - AVFilterFormats *out_packing; - - /** - * The buffer reference currently being sent across the link by the source - * filter. This is used internally by the filter system to allow - * automatic copying of buffers which do not have sufficient permissions - * for the destination. This should not be accessed directly by the - * filters. - */ - AVFilterBufferRef *src_buf; - - AVFilterBufferRef *cur_buf; - AVFilterBufferRef *out_buf; - /** * Define the time base used by the PTS of the frames/samples * which will pass through this link. @@ -678,7 +715,145 @@ struct AVFilterLink { */ AVRational time_base; + /***************************************************************** + * All fields below this line are not part of the public API. They + * may not be used outside of libavfilter and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + */ + /** + * Lists of formats and channel layouts supported by the input and output + * filters respectively. These lists are used for negotiating the format + * to actually be used, which will be loaded into the format and + * channel_layout members, above, when chosen. + * + */ + AVFilterFormats *in_formats; + AVFilterFormats *out_formats; + + /** + * Lists of channel layouts and sample rates used for automatic + * negotiation. + */ + AVFilterFormats *in_samplerates; + AVFilterFormats *out_samplerates; + struct AVFilterChannelLayouts *in_channel_layouts; + struct AVFilterChannelLayouts *out_channel_layouts; + + /** + * Audio only, the destination filter sets this to a non-zero value to + * request that buffers with the given number of samples should be sent to + * it. AVFilterPad.needs_fifo must also be set on the corresponding input + * pad. + * Last buffer before EOF will be padded with silence. + */ + int request_samples; + + /** stage of the initialization of the link properties (dimensions, etc) */ + enum { + AVLINK_UNINIT = 0, ///< not started + AVLINK_STARTINIT, ///< started, but incomplete + AVLINK_INIT ///< complete + } init_state; + struct AVFilterPool *pool; + + /** + * Graph the filter belongs to. + */ + struct AVFilterGraph *graph; + + /** + * Current timestamp of the link, as defined by the most recent + * frame(s), in AV_TIME_BASE units. + */ + int64_t current_pts; + + /** + * Index in the age array. + */ + int age_index; + + /** + * Frame rate of the stream on the link, or 1/0 if unknown; + * if left to 0/0, will be automatically be copied from the first input + * of the source filter if it exists. + * + * Sources should set it to the best estimation of the real frame rate. + * Filters should update it if necessary depending on their function. + * Sinks can use it to set a default output frame rate. + * It is similar to the r_frame_rate field in AVStream. + */ + AVRational frame_rate; + + /** + * Buffer partially filled with samples to achieve a fixed/minimum size. + */ + AVFrame *partial_buf; + + /** + * Size of the partial buffer to allocate. + * Must be between min_samples and max_samples. + */ + int partial_buf_size; + + /** + * Minimum number of samples to filter at once. If filter_frame() is + * called with fewer samples, it will accumulate them in partial_buf. + * This field and the related ones must not be changed after filtering + * has started. + * If 0, all related fields are ignored. + */ + int min_samples; + + /** + * Maximum number of samples to filter at once. If filter_frame() is + * called with more samples, it will split them. + */ + int max_samples; + + /** + * The buffer reference currently being received across the link by the + * destination filter. This is used internally by the filter system to + * allow automatic copying of buffers which do not have sufficient + * permissions for the destination. This should not be accessed directly + * by the filters. + */ + AVFilterBufferRef *cur_buf_copy; + + /** + * True if the link is closed. + * If set, all attemps of start_frame, filter_frame or request_frame + * will fail with AVERROR_EOF, and if necessary the reference will be + * destroyed. + * If request_frame returns AVERROR_EOF, this flag is set on the + * corresponding link. + * It can be set also be set by either the source or the destination + * filter. + */ + int closed; + + /** + * Number of channels. + */ + int channels; + + /** + * True if a frame is being requested on the link. + * Used internally by the framework. + */ + unsigned frame_requested; + + /** + * Link processing flags. + */ + unsigned flags; + + /** + * Number of past frames sent through the link. + */ + int64_t frame_count; }; /** @@ -698,6 +873,16 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, */ void avfilter_link_free(AVFilterLink **link); +/** + * Get the number of channels of a link. + */ +int avfilter_link_get_channels(AVFilterLink *link); + +/** + * Set the closed field of a link. + */ +void avfilter_link_set_closed(AVFilterLink *link, int closed); + /** * Negotiate the media format, dimensions, etc of all inputs to a filter. * @@ -706,20 +891,7 @@ void avfilter_link_free(AVFilterLink **link); */ int avfilter_config_links(AVFilterContext *filter); -/** - * Request a picture buffer with a specific set of permissions. - * - * @param link the output link to the filter from which the buffer will - * be requested - * @param perms the required access permissions - * @param w the minimum width of the buffer to allocate - * @param h the minimum height of the buffer to allocate - * @return A reference to the buffer. This must be unreferenced with - * avfilter_unref_buffer when you are finished with it. - */ -AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, - int w, int h); - +#if FF_API_AVFILTERBUFFER /** * Create a buffer reference wrapped around an already allocated image * buffer. @@ -731,23 +903,32 @@ AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, * @param h the height of the image specified by the data and linesize arrays * @param format the pixel format of the image specified by the data and linesize arrays */ +attribute_deprecated AVFilterBufferRef * avfilter_get_video_buffer_ref_from_arrays(uint8_t * const data[4], const int linesize[4], int perms, - int w, int h, enum PixelFormat format); + int w, int h, enum AVPixelFormat format); /** - * Request an audio samples buffer with a specific set of permissions. + * Create an audio buffer reference wrapped around an already + * allocated samples buffer. * - * @param link the output link to the filter from which the buffer will - * be requested + * See avfilter_get_audio_buffer_ref_from_arrays_channels() for a version + * that can handle unknown channel layouts. + * + * @param data pointers to the samples plane buffers + * @param linesize linesize for the samples plane buffers * @param perms the required access permissions - * @param nb_samples the number of samples per channel - * @return A reference to the samples. This must be unreferenced with - * avfilter_unref_buffer when you are finished with it. + * @param nb_samples number of samples per channel + * @param sample_fmt the format of each sample in the buffer to allocate + * @param channel_layout the channel layout of the buffer */ -AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms, - int nb_samples); - +attribute_deprecated +AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_arrays(uint8_t **data, + int linesize, + int perms, + int nb_samples, + enum AVSampleFormat sample_fmt, + uint64_t channel_layout); /** * Create an audio buffer reference wrapped around an already * allocated samples buffer. @@ -757,64 +938,21 @@ AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms, * @param perms the required access permissions * @param nb_samples number of samples per channel * @param sample_fmt the format of each sample in the buffer to allocate - * @param channel_layout the channel layout of the buffer - * @param planar audio data layout - planar or packed + * @param channels the number of channels of the buffer + * @param channel_layout the channel layout of the buffer, + * must be either 0 or consistent with channels */ -AVFilterBufferRef * -avfilter_get_audio_buffer_ref_from_arrays(uint8_t *data[8], int linesize[8], int perms, - int nb_samples, enum AVSampleFormat sample_fmt, - uint64_t channel_layout, int planar); -/** - * Request an input frame from the filter at the other end of the link. - * - * @param link the input link - * @return zero on success - */ -int avfilter_request_frame(AVFilterLink *link); +attribute_deprecated +AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_arrays_channels(uint8_t **data, + int linesize, + int perms, + int nb_samples, + enum AVSampleFormat sample_fmt, + int channels, + uint64_t channel_layout); -/** - * Poll a frame from the filter chain. - * - * @param link the input link - * @return the number of immediately available frames, a negative - * number in case of error - */ -int avfilter_poll_frame(AVFilterLink *link); +#endif -/** - * Notify the next filter of the start of a frame. - * - * @param link the output link the frame will be sent over - * @param picref A reference to the frame about to be sent. The data for this - * frame need only be valid once draw_slice() is called for that - * portion. The receiving filter will free this reference when - * it no longer needs it. - */ -void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); - -/** - * Notify the next filter that the current frame has finished. - * - * @param link the output link the frame was sent over - */ -void avfilter_end_frame(AVFilterLink *link); - -/** - * Send a slice to the next filter. - * - * Slices have to be provided in sequential order, either in - * top-bottom or bottom-top order. If slices are provided in - * non-sequential order the behavior of the function is undefined. - * - * @param link the output link over which the frame is being sent - * @param y offset in pixels from the top of the image for this slice - * @param h height of this slice in pixels - * @param slice_dir the assumed direction for sending slices, - * from the top slice to the bottom slice if the value is 1, - * from the bottom slice to the top slice if the value is -1, - * for other values the behavior of the function is undefined. - */ -void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); #define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically #define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw) @@ -825,27 +963,20 @@ void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); */ int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags); -/** - * Send a buffer of audio samples to the next filter. - * - * @param link the output link over which the audio samples are being sent - * @param samplesref a reference to the buffer of audio samples being sent. The - * receiving filter will free this reference when it no longer - * needs it or pass it on to the next filter. - */ -void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref); - -/** Initialize the filter system. Register all built-in filters. */ +/** Initialize the filter system. Register all builtin filters. */ void avfilter_register_all(void); +#if FF_API_OLD_FILTER_REGISTER /** Uninitialize the filter system. Unregister all filters. */ +attribute_deprecated void avfilter_uninit(void); +#endif /** * Register a filter. This is only needed if you plan to use * avfilter_get_by_name later to lookup the AVFilter structure by name. A - * filter can still by instantiated with avfilter_open even if it is not - * registered. + * filter can still by instantiated with avfilter_graph_alloc_filter even if it + * is not registered. * * @param filter the filter to register * @return 0 if the registration was successful, a negative value @@ -862,14 +993,26 @@ int avfilter_register(AVFilter *filter); */ AVFilter *avfilter_get_by_name(const char *name); +/** + * Iterate over all registered filters. + * @return If prev is non-NULL, next registered filter after prev or NULL if + * prev is the last filter. If prev is NULL, return the first registered filter. + */ +const AVFilter *avfilter_next(const AVFilter *prev); + +#if FF_API_OLD_FILTER_REGISTER /** * If filter is NULL, returns a pointer to the first registered filter pointer, * if filter is non-NULL, returns the next pointer after filter. * If the returned pointer points to NULL, the last registered filter * was already reached. + * @deprecated use avfilter_next() */ +attribute_deprecated AVFilter **av_filter_next(AVFilter **filter); +#endif +#if FF_API_AVFILTER_OPEN /** * Create a filter instance. * @@ -878,9 +1021,14 @@ AVFilter **av_filter_next(AVFilter **filter); * @param filter the filter to create an instance of * @param inst_name Name to give to the new instance. Can be NULL for none. * @return >= 0 in case of success, a negative error code otherwise + * @deprecated use avfilter_graph_alloc_filter() instead */ +attribute_deprecated int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name); +#endif + +#if FF_API_AVFILTER_INIT_FILTER /** * Initialize a filter. * @@ -891,10 +1039,47 @@ int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *in * of this parameter varies by filter. * @return zero on success */ +attribute_deprecated int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque); +#endif /** - * Free a filter context. + * Initialize a filter with the supplied parameters. + * + * @param ctx uninitialized filter context to initialize + * @param args Options to initialize the filter with. This must be a + * ':'-separated list of options in the 'key=value' form. + * May be NULL if the options have been set directly using the + * AVOptions API or there are no options that need to be set. + * @return 0 on success, a negative AVERROR on failure + */ +int avfilter_init_str(AVFilterContext *ctx, const char *args); + +/** + * Initialize a filter with the supplied dictionary of options. + * + * @param ctx uninitialized filter context to initialize + * @param options An AVDictionary filled with options for this filter. On + * return this parameter will be destroyed and replaced with + * a dict containing options that were not found. This dictionary + * must be freed by the caller. + * May be NULL, then this function is equivalent to + * avfilter_init_str() with the second parameter set to NULL. + * @return 0 on success, a negative AVERROR on failure + * + * @note This function and avfilter_init_str() do essentially the same thing, + * the difference is in manner in which the options are passed. It is up to the + * calling code to choose whichever is more preferable. The two functions also + * behave differently when some of the provided options are not declared as + * supported by the filter. In such a case, avfilter_init_str() will fail, but + * this function will leave those extra options in the options AVDictionary and + * continue as usual. + */ +int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options); + +/** + * Free a filter context. This will also remove the filter from its + * filtergraph's list of filters. * * @param filter the filter to free */ @@ -912,37 +1097,424 @@ void avfilter_free(AVFilterContext *filter); int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, unsigned filt_srcpad_idx, unsigned filt_dstpad_idx); +#if FF_API_AVFILTERBUFFER /** - * Insert a new pad. + * Copy the frame properties of src to dst, without copying the actual + * image data. * - * @param idx Insertion point. Pad is inserted at the end if this point - * is beyond the end of the list of pads. - * @param count Pointer to the number of pads in the list - * @param padidx_off Offset within an AVFilterLink structure to the element - * to increment when inserting a new pad causes link - * numbering to change - * @param pads Pointer to the pointer to the beginning of the list of pads - * @param links Pointer to the pointer to the beginning of the list of links - * @param newpad The new pad to add. A copy is made when adding. + * @return 0 on success, a negative number on error. */ -void avfilter_insert_pad(unsigned idx, unsigned *count, size_t padidx_off, - AVFilterPad **pads, AVFilterLink ***links, - AVFilterPad *newpad); +attribute_deprecated +int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src); -/** Insert a new input pad for the filter. */ -static inline void avfilter_insert_inpad(AVFilterContext *f, unsigned index, - AVFilterPad *p) -{ - avfilter_insert_pad(index, &f->input_count, offsetof(AVFilterLink, dstpad), - &f->input_pads, &f->inputs, p); -} +/** + * Copy the frame properties and data pointers of src to dst, without copying + * the actual data. + * + * @return 0 on success, a negative number on error. + */ +attribute_deprecated +int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src); +#endif -/** Insert a new output pad for the filter. */ -static inline void avfilter_insert_outpad(AVFilterContext *f, unsigned index, - AVFilterPad *p) -{ - avfilter_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad), - &f->output_pads, &f->outputs, p); -} +/** + * @return AVClass for AVFilterContext. + * + * @see av_opt_find(). + */ +const AVClass *avfilter_get_class(void); + +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 + attribute_deprecated + unsigned filter_count_unused; +#endif + AVFilterContext **filters; +#if !FF_API_FOO_COUNT + unsigned nb_filters; +#endif + + char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters + char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters +#if FF_API_FOO_COUNT + unsigned nb_filters; +#endif + + /** + * Type of multithreading allowed for filters in this graph. A combination + * of AVFILTER_THREAD_* flags. + * + * May be set by the caller at any point, the setting will apply to all + * filters initialized after that. The default is allowing everything. + * + * When a filter in this graph is initialized, this field is combined using + * bit AND with AVFilterContext.thread_type to get the final mask used for + * determining allowed threading types. I.e. a threading type needs to be + * set in both to be allowed. + */ + int thread_type; + + /** + * Maximum number of threads used by filters in this graph. May be set by + * the caller before adding any filters to the filtergraph. Zero (the + * default) means that the number of threads is determined automatically. + */ + int nb_threads; + + /** + * Opaque object for libavfilter internal use. + */ + 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 + + /** + * Private fields + * + * The following fields are for internal use only. + * Their type, offset, number and semantic can change without notice. + */ + + AVFilterLink **sink_links; + int sink_links_count; + + unsigned disable_auto_convert; +} AVFilterGraph; + +/** + * Allocate a filter graph. + */ +AVFilterGraph *avfilter_graph_alloc(void); + +/** + * Create a new filter instance in a filter graph. + * + * @param graph graph in which the new filter will be used + * @param filter the filter to create an instance of + * @param name Name to give to the new instance (will be copied to + * AVFilterContext.name). This may be used by the caller to identify + * different filters, libavfilter itself assigns no semantics to + * this parameter. May be NULL. + * + * @return the context of the newly created filter instance (note that it is + * also retrievable directly through AVFilterGraph.filters or with + * avfilter_graph_get_filter()) on success or NULL or failure. + */ +AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph, + const AVFilter *filter, + const char *name); + +/** + * Get a filter instance with name name from graph. + * + * @return the pointer to the found filter instance or NULL if it + * cannot be found. + */ +AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name); + +#if FF_API_AVFILTER_OPEN +/** + * Add an existing filter instance to a filter graph. + * + * @param graphctx the filter graph + * @param filter the filter to be added + * + * @deprecated use avfilter_graph_alloc_filter() to allocate a filter in a + * filter graph + */ +attribute_deprecated +int avfilter_graph_add_filter(AVFilterGraph *graphctx, AVFilterContext *filter); +#endif + +/** + * Create and add a filter instance into an existing graph. + * The filter instance is created from the filter filt and inited + * with the parameters args and opaque. + * + * In case of success put in *filt_ctx the pointer to the created + * filter instance, otherwise set *filt_ctx to NULL. + * + * @param name the instance name to give to the created filter instance + * @param graph_ctx the filter graph + * @return a negative AVERROR error code in case of failure, a non + * negative value otherwise + */ +int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, + const char *name, const char *args, void *opaque, + AVFilterGraph *graph_ctx); + +/** + * Enable or disable automatic format conversion inside the graph. + * + * Note that format conversion can still happen inside explicitly inserted + * scale and aresample filters. + * + * @param flags any of the AVFILTER_AUTO_CONVERT_* constants + */ +void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); + +enum { + AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ + AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ +}; + +/** + * Check validity and configure all the links and formats in the graph. + * + * @param graphctx the filter graph + * @param log_ctx context used for logging + * @return >= 0 in case of success, a negative AVERROR code otherwise + */ +int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); + +/** + * Free a graph, destroy its links, and set *graph to NULL. + * If *graph is NULL, do nothing. + */ +void avfilter_graph_free(AVFilterGraph **graph); + +/** + * A linked-list of the inputs/outputs of the filter chain. + * + * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), + * where it is used to communicate open (unlinked) inputs and outputs from and + * to the caller. + * This struct specifies, per each not connected pad contained in the graph, the + * filter context and the pad index required for establishing a link. + */ +typedef struct AVFilterInOut { + /** unique name for this input/output in the list */ + char *name; + + /** filter context associated to this input/output */ + AVFilterContext *filter_ctx; + + /** index of the filt_ctx pad to use for linking */ + int pad_idx; + + /** next input/input in the list, NULL if this is the last */ + struct AVFilterInOut *next; +} AVFilterInOut; + +/** + * Allocate a single AVFilterInOut entry. + * Must be freed with avfilter_inout_free(). + * @return allocated AVFilterInOut on success, NULL on failure. + */ +AVFilterInOut *avfilter_inout_alloc(void); + +/** + * Free the supplied list of AVFilterInOut and set *inout to NULL. + * If *inout is NULL, do nothing. + */ +void avfilter_inout_free(AVFilterInOut **inout); + +#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI || !FF_API_OLD_GRAPH_PARSE +/** + * Add a graph described by a string to a graph. + * + * @note The caller must provide the lists of inputs and outputs, + * which therefore must be known before calling the function. + * + * @note The inputs parameter describes inputs of the already existing + * part of the graph; i.e. from the point of view of the newly created + * part, they are outputs. Similarly the outputs parameter describes + * outputs of the already existing filters, which are provided as + * inputs to the parsed filters. + * + * @param graph the filter graph where to link the parsed grap context + * @param filters string to be parsed + * @param inputs linked list to the inputs of the graph + * @param outputs linked list to the outputs of the graph + * @return zero on success, a negative AVERROR code on error + */ +int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, + AVFilterInOut *inputs, AVFilterInOut *outputs, + void *log_ctx); +#else +/** + * Add a graph described by a string to a graph. + * + * @param graph the filter graph where to link the parsed graph context + * @param filters string to be parsed + * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. + * If non-NULL, *inputs is updated to contain the list of open inputs + * after the parsing, should be freed with avfilter_inout_free(). + * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. + * If non-NULL, *outputs is updated to contain the list of open outputs + * after the parsing, should be freed with avfilter_inout_free(). + * @return non negative on success, a negative AVERROR code on error + * @deprecated Use avfilter_graph_parse_ptr() instead. + */ +attribute_deprecated +int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, + AVFilterInOut **inputs, AVFilterInOut **outputs, + void *log_ctx); +#endif + +/** + * Add a graph described by a string to a graph. + * + * @param graph the filter graph where to link the parsed graph context + * @param filters string to be parsed + * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. + * If non-NULL, *inputs is updated to contain the list of open inputs + * after the parsing, should be freed with avfilter_inout_free(). + * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. + * If non-NULL, *outputs is updated to contain the list of open outputs + * after the parsing, should be freed with avfilter_inout_free(). + * @return non negative on success, a negative AVERROR code on error + */ +int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, + AVFilterInOut **inputs, AVFilterInOut **outputs, + void *log_ctx); + +/** + * Add a graph described by a string to a graph. + * + * @param[in] graph the filter graph where to link the parsed graph context + * @param[in] filters string to be parsed + * @param[out] inputs a linked list of all free (unlinked) inputs of the + * parsed graph will be returned here. It is to be freed + * by the caller using avfilter_inout_free(). + * @param[out] outputs a linked list of all free (unlinked) outputs of the + * parsed graph will be returned here. It is to be freed by the + * caller using avfilter_inout_free(). + * @return zero on success, a negative AVERROR code on error + * + * @note This function returns the inputs and outputs that are left + * unlinked after parsing the graph and the caller then deals with + * them. + * @note This function makes no reference whatsoever to already + * existing parts of the graph and the inputs parameter will on return + * contain inputs of the newly parsed part of the graph. Analogously + * the outputs parameter will contain outputs of the newly created + * filters. + */ +int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, + AVFilterInOut **inputs, + AVFilterInOut **outputs); + +/** + * Send a command to one or more filter instances. + * + * @param graph the filter graph + * @param target the filter(s) to which the command should be sent + * "all" sends to all filters + * otherwise it can be a filter or filter instance name + * which will send the command to all matching filters. + * @param cmd the command to send, for handling simplicity all commands must be alphanumeric only + * @param arg the argument for the command + * @param res a buffer with size res_size where the filter(s) can return a response. + * + * @returns >=0 on success otherwise an error code. + * AVERROR(ENOSYS) on unsupported commands + */ +int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); + +/** + * Queue a command for one or more filter instances. + * + * @param graph the filter graph + * @param target the filter(s) to which the command should be sent + * "all" sends to all filters + * otherwise it can be a filter or filter instance name + * which will send the command to all matching filters. + * @param cmd the command to sent, for handling simplicity all commands must be alphanummeric only + * @param arg the argument for the command + * @param ts time at which the command should be sent to the filter + * + * @note As this executes commands after this function returns, no return code + * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. + */ +int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); + + +/** + * Dump a graph into a human-readable string representation. + * + * @param graph the graph to dump + * @param options formatting options; currently ignored + * @return a string, or NULL in case of memory allocation failure; + * the string must be freed using av_free + */ +char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); + +/** + * Request a frame on the oldest sink link. + * + * If the request returns AVERROR_EOF, try the next. + * + * Note that this function is not meant to be the sole scheduling mechanism + * of a filtergraph, only a convenience function to help drain a filtergraph + * in a balanced way under normal circumstances. + * + * Also note that AVERROR_EOF does not mean that frames did not arrive on + * some of the sinks during the process. + * When there are multiple sink links, in case the requested link + * returns an EOF, this may cause a filter to flush pending frames + * which are sent to another sink link, although unrequested. + * + * @return the return value of ff_request_frame(), + * or AVERROR_EOF if all links returned AVERROR_EOF + */ +int avfilter_graph_request_oldest(AVFilterGraph *graph); + +/** + * @} + */ #endif /* AVFILTER_AVFILTER_H */ diff --git a/extern/ffmpeg/include/libavfilter/avfiltergraph.h b/extern/ffmpeg/include/libavfilter/avfiltergraph.h index 375ab8efbc..b31d581ca0 100644 --- a/extern/ffmpeg/include/libavfilter/avfiltergraph.h +++ b/extern/ffmpeg/include/libavfilter/avfiltergraph.h @@ -23,162 +23,6 @@ #define AVFILTER_AVFILTERGRAPH_H #include "avfilter.h" - -typedef struct AVFilterGraph { - unsigned filter_count; - AVFilterContext **filters; - - char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters -} AVFilterGraph; - -/** - * Allocate a filter graph. - */ -AVFilterGraph *avfilter_graph_alloc(void); - -/** - * Get a filter instance with name name from graph. - * - * @return the pointer to the found filter instance or NULL if it - * cannot be found. - */ -AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name); - -/** - * Add an existing filter instance to a filter graph. - * - * @param graphctx the filter graph - * @param filter the filter to be added - */ -int avfilter_graph_add_filter(AVFilterGraph *graphctx, AVFilterContext *filter); - -/** - * Create and add a filter instance into an existing graph. - * The filter instance is created from the filter filt and inited - * with the parameters args and opaque. - * - * In case of success put in *filt_ctx the pointer to the created - * filter instance, otherwise set *filt_ctx to NULL. - * - * @param name the instance name to give to the created filter instance - * @param graph_ctx the filter graph - * @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, - const char *name, const char *args, void *opaque, - AVFilterGraph *graph_ctx); - -/** - * Check validity and configure all the links and formats in the graph. - * - * @param graphctx the filter graph - * @param log_ctx context used for logging - * @return 0 in case of success, a negative AVERROR code otherwise - */ -int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); - -/** - * Free a graph, destroy its links, and set *graph to NULL. - * If *graph is NULL, do nothing. - */ -void avfilter_graph_free(AVFilterGraph **graph); - -/** - * A linked-list of the inputs/outputs of the filter chain. - * - * This is mainly useful for avfilter_graph_parse(), since this - * function may accept a description of a graph with not connected - * input/output pads. This struct specifies, per each not connected - * pad contained in the graph, the filter context and the pad index - * required for establishing a link. - */ -typedef struct AVFilterInOut { - /** unique name for this input/output in the list */ - char *name; - - /** filter context associated to this input/output */ - AVFilterContext *filter_ctx; - - /** index of the filt_ctx pad to use for linking */ - int pad_idx; - - /** next input/input in the list, NULL if this is the last */ - struct AVFilterInOut *next; -} AVFilterInOut; - -/** - * Create an AVFilterInOut. - * Must be free with avfilter_inout_free(). - */ -AVFilterInOut *avfilter_inout_alloc(void); - -/** - * Free the AVFilterInOut in *inout, and set its pointer to NULL. - * If *inout is NULL, do nothing. - */ -void avfilter_inout_free(AVFilterInOut **inout); - -/** - * Add a graph described by a string to a graph. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. - * If non-NULL, *inputs is updated to contain the list of open inputs - * after the parsing, should be freed with avfilter_inout_free(). - * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. - * If non-NULL, *outputs is updated to contain the list of open outputs - * after the parsing, should be freed with avfilter_inout_free(). - * @return non negative on success, a negative AVERROR code on error - */ -int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, AVFilterInOut **outputs, - void *log_ctx); - -/** - * Send a command to one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ -int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Queue a command for one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to sent, for handling simplicity all commands must be alphanummeric only - * @param arg the argument for the command - * @param ts time at which the command should be sent to the filter - * - * @note As this executes commands after this function returns, no return code - * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. - */ -int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); - - -/** - * Dump a graph into a human-readable string representation. - * - * @param graph the graph to dump - * @param options formatting options; currently ignored - * @return a string, or NULL in case of memory allocation failure; - * the string must be freed using av_free - */ -char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); +#include "libavutil/log.h" #endif /* AVFILTER_AVFILTERGRAPH_H */ diff --git a/extern/ffmpeg/include/libavfilter/buffersink.h b/extern/ffmpeg/include/libavfilter/buffersink.h index 73926a4539..ce96d08b36 100644 --- a/extern/ffmpeg/include/libavfilter/buffersink.h +++ b/extern/ffmpeg/include/libavfilter/buffersink.h @@ -16,8 +16,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef AVFILTER_VSINK_BUFFER_H -#define AVFILTER_VSINK_BUFFER_H +#ifndef AVFILTER_BUFFERSINK_H +#define AVFILTER_BUFFERSINK_H /** * @file @@ -26,11 +26,94 @@ #include "avfilter.h" +#if FF_API_AVFILTERBUFFER +/** + * Get an audio/video buffer data from buffer_sink and put it in bufref. + * + * This function works with both audio and video buffer sinks. + * + * @param buffer_sink pointer to a buffersink or abuffersink context + * @param flags a combination of AV_BUFFERSINK_FLAG_* flags + * @return >= 0 in case of success, a negative AVERROR code in case of + * failure + */ +attribute_deprecated +int av_buffersink_get_buffer_ref(AVFilterContext *buffer_sink, + AVFilterBufferRef **bufref, int flags); + +/** + * Get the number of immediately available frames. + */ +attribute_deprecated +int av_buffersink_poll_frame(AVFilterContext *ctx); + +/** + * Get a buffer with filtered data from sink and put it in buf. + * + * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. + * @param buf pointer to the buffer will be written here if buf is non-NULL. buf + * must be freed by the caller using avfilter_unref_buffer(). + * Buf may also be NULL to query whether a buffer is ready to be + * output. + * + * @return >= 0 in case of success, a negative AVERROR code in case of + * failure. + */ +attribute_deprecated +int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf); + +/** + * Same as av_buffersink_read, but with the ability to specify the number of + * samples read. This function is less efficient than av_buffersink_read(), + * because it copies the data around. + * + * @param ctx pointer to a context of the abuffersink AVFilter. + * @param buf pointer to the buffer will be written here if buf is non-NULL. buf + * must be freed by the caller using avfilter_unref_buffer(). buf + * will contain exactly nb_samples audio samples, except at the end + * of stream, when it can contain less than nb_samples. + * Buf may also be NULL to query whether a buffer is ready to be + * output. + * + * @warning do not mix this function with av_buffersink_read(). Use only one or + * the other with a single sink, not both. + */ +attribute_deprecated +int av_buffersink_read_samples(AVFilterContext *ctx, AVFilterBufferRef **buf, + int nb_samples); +#endif + +/** + * Get a frame with filtered data from sink and put it in frame. + * + * @param ctx pointer to a buffersink or abuffersink filter context. + * @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() + * @param flags a combination of AV_BUFFERSINK_FLAG_* flags + * + * @return >= 0 in for success, a negative AVERROR code for failure. + */ +int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags); + +/** + * Tell av_buffersink_get_buffer_ref() to read video/samples buffer + * reference, but not remove it from the buffer. This is useful if you + * need only to read a video/samples buffer, without to fetch it. + */ +#define AV_BUFFERSINK_FLAG_PEEK 1 + +/** + * Tell av_buffersink_get_buffer_ref() not to request a frame from its input. + * If a frame is already buffered, it is read (and removed from the buffer), + * but if no frame is present, return AVERROR(EAGAIN). + */ +#define AV_BUFFERSINK_FLAG_NO_REQUEST 2 + /** * Struct to use for initializing a buffersink context. */ typedef struct { - const enum PixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by PIX_FMT_NONE + const enum AVPixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by AV_PIX_FMT_NONE } AVBufferSinkParams; /** @@ -46,7 +129,9 @@ AVBufferSinkParams *av_buffersink_params_alloc(void); typedef struct { const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1 - const int *packing_fmts; ///< list of allowed packing formats + const int *channel_counts; ///< list of allowed channel counts, terminated by -1 + int all_channel_counts; ///< if not 0, accept any channel count or layout + int *sample_rates; ///< list of allowed sample rates, terminated by -1 } AVABufferSinkParams; /** @@ -57,38 +142,45 @@ typedef struct { AVABufferSinkParams *av_abuffersink_params_alloc(void); /** - * Tell av_buffersink_get_buffer_ref() to read video/samples buffer - * reference, but not remove it from the buffer. This is useful if you - * need only to read a video/samples buffer, without to fetch it. + * Set the frame size for an audio buffer sink. + * + * All calls to av_buffersink_get_buffer_ref will return a buffer with + * exactly the specified number of samples, or AVERROR(EAGAIN) if there is + * not enough. The last buffer at EOF will be padded with 0. */ -#define AV_BUFFERSINK_FLAG_PEEK 1 +void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size); /** - * Get an audio/video buffer data from buffer_sink and put it in bufref. + * Get the frame rate of the input. + */ +AVRational av_buffersink_get_frame_rate(AVFilterContext *ctx); + +/** + * Get a frame with filtered data from sink and put it in frame. * - * This function works with both audio and video buffer sinks. + * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. + * @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() * - * @param buffer_sink pointer to a buffersink or abuffersink context - * @param flags a combination of AV_BUFFERSINK_FLAG_* flags * @return >= 0 in case of success, a negative AVERROR code in case of - * failure + * failure. */ -int av_buffersink_get_buffer_ref(AVFilterContext *buffer_sink, - AVFilterBufferRef **bufref, int flags); - +int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); /** - * Get the number of immediately available frames. + * Same as av_buffersink_get_frame(), but with the ability to specify the number + * of samples read. This function is less efficient than + * av_buffersink_get_frame(), because it copies the data around. + * + * @param ctx pointer to a context of the abuffersink AVFilter. + * @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() + * frame will contain exactly nb_samples audio samples, except at + * the end of stream, when it can contain less than nb_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_poll_frame(AVFilterContext *ctx); +int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); -#if FF_API_OLD_VSINK_API -/** - * @deprecated Use av_buffersink_get_buffer_ref() instead. - */ -attribute_deprecated -int av_vsink_buffer_get_video_buffer_ref(AVFilterContext *buffer_sink, - AVFilterBufferRef **picref, int flags); -#endif - -#endif /* AVFILTER_VSINK_BUFFER_H */ +#endif /* AVFILTER_BUFFERSINK_H */ diff --git a/extern/ffmpeg/include/libavfilter/buffersrc.h b/extern/ffmpeg/include/libavfilter/buffersrc.h new file mode 100644 index 0000000000..89613e10cd --- /dev/null +++ b/extern/ffmpeg/include/libavfilter/buffersrc.h @@ -0,0 +1,148 @@ +/* + * + * 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 AVFILTER_BUFFERSRC_H +#define AVFILTER_BUFFERSRC_H + +/** + * @file + * Memory buffer source API. + */ + +#include "libavcodec/avcodec.h" +#include "avfilter.h" + +enum { + + /** + * Do not check for format changes. + */ + AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1, + +#if FF_API_AVFILTERBUFFER + /** + * Ignored + */ + AV_BUFFERSRC_FLAG_NO_COPY = 2, +#endif + + /** + * Immediately push the frame to the output. + */ + AV_BUFFERSRC_FLAG_PUSH = 4, + + /** + * Keep a reference to the frame. + * If the frame if reference-counted, create a new reference; otherwise + * copy the frame data. + */ + AV_BUFFERSRC_FLAG_KEEP_REF = 8, + +}; + +/** + * Add buffer data in picref to buffer_src. + * + * @param buffer_src pointer to a buffer source context + * @param picref a buffer reference, or NULL to mark EOF + * @param flags a combination of AV_BUFFERSRC_FLAG_* + * @return >= 0 in case of success, a negative AVERROR code + * in case of failure + */ +int av_buffersrc_add_ref(AVFilterContext *buffer_src, + AVFilterBufferRef *picref, int flags); + +/** + * Get the number of failed requests. + * + * A failed request is when the request_frame method is called while no + * frame is present in the buffer. + * The number is reset when a frame is added. + */ +unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src); + +#if FF_API_AVFILTERBUFFER +/** + * Add a buffer to the filtergraph s. + * + * @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); +#endif + +/** + * Add a frame to the buffer source. + * + * @param s 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. + * + * @return 0 on success, a negative AVERROR on error + * + * 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); + +/** + * Add a frame to the buffer source. + * + * @param s 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, + * the input frame is not touched. + * + * @return 0 on success, a negative AVERROR on error. + * + * @note the difference between this function and av_buffersrc_write_frame() is + * that av_buffersrc_write_frame() creates a new reference to the input frame, + * while this function takes ownership of the reference passed to it. + * + * This function is equivalent to av_buffersrc_add_frame_flags() without the + * AV_BUFFERSRC_FLAG_KEEP_REF flag. + */ +int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame); + +/** + * Add a frame to the buffer source. + * + * By default, if the frame is reference-counted, this function will take + * ownership of the reference(s) and reset the frame. This can be controled + * using the flags. + * + * If this function returns an error, the input frame is not touched. + * + * @param buffer_src pointer to a buffer source context + * @param frame a frame, or NULL to mark EOF + * @param flags a combination of AV_BUFFERSRC_FLAG_* + * @return >= 0 in case of success, a negative AVERROR code + * in case of failure + */ +int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src, + AVFrame *frame, int flags); + + +#endif /* AVFILTER_BUFFERSRC_H */ diff --git a/extern/ffmpeg/include/libavfilter/version.h b/extern/ffmpeg/include/libavfilter/version.h index 60e496dcc0..541b869299 100644 --- a/extern/ffmpeg/include/libavfilter/version.h +++ b/extern/ffmpeg/include/libavfilter/version.h @@ -1,20 +1,20 @@ /* * Version macros. * - * 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 */ @@ -23,13 +23,14 @@ /** * @file + * @ingroup lavfi * Libavfilter version macros */ #include "libavutil/avutil.h" -#define LIBAVFILTER_VERSION_MAJOR 2 -#define LIBAVFILTER_VERSION_MINOR 60 +#define LIBAVFILTER_VERSION_MAJOR 3 +#define LIBAVFILTER_VERSION_MINOR 90 #define LIBAVFILTER_VERSION_MICRO 100 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ @@ -40,4 +41,49 @@ LIBAVFILTER_VERSION_MICRO) #define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT -#endif // AVFILTER_VERSION_H +#define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION) + +/** + * FF_API_* defines may be placed below to indicate public API that will be + * 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_AVFILTERPAD_PUBLIC +#define FF_API_AVFILTERPAD_PUBLIC (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_FOO_COUNT +#define FF_API_FOO_COUNT (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_FILL_FRAME +#define FF_API_FILL_FRAME (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_BUFFERSRC_BUFFER +#define FF_API_BUFFERSRC_BUFFER (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_AVFILTERBUFFER +#define FF_API_AVFILTERBUFFER (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_OLD_FILTER_OPTS +#define FF_API_OLD_FILTER_OPTS (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_ACONVERT_FILTER +#define FF_API_ACONVERT_FILTER (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_AVFILTER_OPEN +#define FF_API_AVFILTER_OPEN (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_AVFILTER_INIT_FILTER +#define FF_API_AVFILTER_INIT_FILTER (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_OLD_FILTER_REGISTER +#define FF_API_OLD_FILTER_REGISTER (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_OLD_GRAPH_PARSE +#define FF_API_OLD_GRAPH_PARSE (LIBAVFILTER_VERSION_MAJOR < 4) +#endif +#ifndef FF_API_DRAWTEXT_OLD_TIMELINE +#define FF_API_DRAWTEXT_OLD_TIMELINE (LIBAVFILTER_VERSION_MAJOR < 4) +#endif + +#endif /* AVFILTER_VERSION_H */ diff --git a/extern/ffmpeg/include/libavfilter/vsrc_buffer.h b/extern/ffmpeg/include/libavfilter/vsrc_buffer.h deleted file mode 100644 index b661d414ea..0000000000 --- a/extern/ffmpeg/include/libavfilter/vsrc_buffer.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2008 Vitor Sessak - * - * 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 AVFILTER_VSRC_BUFFER_H -#define AVFILTER_VSRC_BUFFER_H - -/** - * @file - * memory buffer source API for video - */ - -#include "avfilter.h" - -/** - * Tell av_vsrc_buffer_add_video_buffer_ref() to overwrite the already - * cached video buffer with the new added one, otherwise the function - * will complain and exit. - */ -#define AV_VSRC_BUF_FLAG_OVERWRITE 1 - -/** - * Add video buffer data in picref to buffer_src. - * - * @param buffer_src pointer to a buffer source context - * @param flags a combination of AV_VSRC_BUF_FLAG_* flags - * @return >= 0 in case of success, a negative AVERROR code in case of - * failure - */ -int av_vsrc_buffer_add_video_buffer_ref(AVFilterContext *buffer_src, - AVFilterBufferRef *picref, int flags); - -#endif /* AVFILTER_VSRC_BUFFER_H */ diff --git a/extern/ffmpeg/include/libavformat/avformat.h b/extern/ffmpeg/include/libavformat/avformat.h index c28d1ddb2b..4e5683c66a 100644 --- a/extern/ffmpeg/include/libavformat/avformat.h +++ b/extern/ffmpeg/include/libavformat/avformat.h @@ -50,7 +50,7 @@ * * Main lavf structure used for both muxing and demuxing is AVFormatContext, * which exports all information about the file being read or written. As with - * most Libav structures, its size is not part of public ABI, so it cannot be + * most Libavformat structures, its size is not part of public ABI, so it cannot be * allocated on stack or directly with av_malloc(). To create an * AVFormatContext, use avformat_alloc_context() (some functions, like * avformat_open_input() might do that for you). @@ -66,11 +66,23 @@ * set by user for input, always set by user for output (unless you are dealing * with an AVFMT_NOFILE format). * + * @section lavf_options Passing options to (de)muxers + * Lavf allows to configure muxers and demuxers using the @ref avoptions + * mechanism. Generic (format-independent) libavformat options are provided by + * AVFormatContext, they can be examined from a user program by calling + * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass + * from avformat_get_class()). Private (format-specific) options are provided by + * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / + * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. + * Further options may be provided by the @ref AVFormatContext.pb "I/O context", + * if its AVClass is non-NULL, and the protocols layer. See the discussion on + * nesting in @ref avoptions documentation to learn how to access those. + * * @defgroup lavf_decoding Demuxing * @{ * Demuxers read a media file and split it into chunks of data (@em packets). A - * @ref AVPacket "packet" contains one or more frames which belong a single - * elementary stream. In lavf API this process is represented by the + * @ref AVPacket "packet" contains one or more encoded frames which belongs to a + * single elementary stream. In the lavf API this process is represented by the * avformat_open_input() function for opening a file, av_read_frame() for * reading a single packet and finally avformat_close_input(), which does the * cleanup. @@ -100,10 +112,61 @@ * your reading callbacks to it. Then set the @em pb field of your * AVFormatContext to newly created AVIOContext. * + * Since the format of the opened file is in general not known until after + * avformat_open_input() has returned, it is not possible to set demuxer private + * options on a preallocated context. Instead, the options should be passed to + * avformat_open_input() wrapped in an AVDictionary: + * @code + * AVDictionary *options = NULL; + * av_dict_set(&options, "video_size", "640x480", 0); + * av_dict_set(&options, "pixel_format", "rgb24", 0); + * + * if (avformat_open_input(&s, url, NULL, &options) < 0) + * abort(); + * av_dict_free(&options); + * @endcode + * This code passes the private options 'video_size' and 'pixel_format' to the + * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it + * cannot know how to interpret raw video data otherwise. If the format turns + * out to be something different than raw video, those options will not be + * recognized by the demuxer and therefore will not be applied. Such unrecognized + * options are then returned in the options dictionary (recognized options are + * consumed). The calling program can handle such unrecognized options as it + * wishes, e.g. + * @code + * AVDictionaryEntry *e; + * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { + * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); + * abort(); + * } + * @endcode + * * After you have finished reading the file, you must close it with * avformat_close_input(). It will free everything associated with the file. * * @section lavf_decoding_read Reading from an opened file + * Reading data from an opened AVFormatContext is done by repeatedly calling + * av_read_frame() on it. Each call, if successful, will return an AVPacket + * containing encoded data for one AVStream, identified by + * AVPacket.stream_index. This packet may be passed straight into the libavcodec + * decoding functions avcodec_decode_video2(), avcodec_decode_audio4() or + * avcodec_decode_subtitle2() if the caller wishes to decode the data. + * + * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be + * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for + * pts/dts, 0 for duration) if the stream does not provide them. The timing + * information will be in AVStream.time_base units, i.e. it has to be + * multiplied by the timebase to convert them to seconds. + * + * If AVPacket.buf is set on the returned packet, then the packet is + * allocated dynamically and the user may keep it indefinitely. + * Otherwise, if AVPacket.buf is NULL, the packet data is backed by a + * static storage somewhere inside the demuxer and the packet is only valid + * until the next av_read_frame() call or closing the file. If the caller + * requires a longer lifetime, av_dup_packet() will make an av_malloc()ed copy + * of it. + * In both cases, the packet must be freed with av_free_packet() when it is no + * longer needed. * * @section lavf_decoding_seek Seeking * @} @@ -220,74 +283,6 @@ struct AVFormatContext; * @} */ -#if FF_API_OLD_METADATA2 -/** - * @defgroup old_metadata Old metadata API - * The following functions are deprecated, use - * their equivalents from libavutil/dict.h instead. - * @{ - */ - -#define AV_METADATA_MATCH_CASE AV_DICT_MATCH_CASE -#define AV_METADATA_IGNORE_SUFFIX AV_DICT_IGNORE_SUFFIX -#define AV_METADATA_DONT_STRDUP_KEY AV_DICT_DONT_STRDUP_KEY -#define AV_METADATA_DONT_STRDUP_VAL AV_DICT_DONT_STRDUP_VAL -#define AV_METADATA_DONT_OVERWRITE AV_DICT_DONT_OVERWRITE - -typedef attribute_deprecated AVDictionary AVMetadata; -typedef attribute_deprecated AVDictionaryEntry AVMetadataTag; - -typedef struct AVMetadataConv AVMetadataConv; - -/** - * Get a metadata element with matching key. - * - * @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 tag or NULL, changing key or value leads to undefined behavior. - */ -attribute_deprecated AVDictionaryEntry * -av_metadata_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags); - -/** - * Set the given tag in *pm, overwriting an existing tag. - * - * @param pm pointer to a pointer to a metadata struct. If *pm is NULL - * a metadata struct is allocated and put in *pm. - * @param key tag key to add to *pm (will be av_strduped depending on flags) - * @param value tag value to add to *pm (will be av_strduped depending on flags). - * Passing a NULL value will cause an existing tag to be deleted. - * @return >= 0 on success otherwise an error code <0 - */ -attribute_deprecated int av_metadata_set2(AVDictionary **pm, const char *key, const char *value, int flags); - -/** - * This function is provided for compatibility reason and currently does nothing. - */ -attribute_deprecated void av_metadata_conv(struct AVFormatContext *ctx, const AVMetadataConv *d_conv, - const AVMetadataConv *s_conv); - -/** - * Copy metadata from one AVDictionary struct into another. - * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, - * this function will allocate a struct for you and put it in *dst - * @param src pointer to source AVDictionary struct - * @param flags flags to use when setting metadata in *dst - * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag - */ -attribute_deprecated void av_metadata_copy(AVDictionary **dst, AVDictionary *src, int flags); - -/** - * Free all the memory allocated for an AVDictionary struct. - */ -attribute_deprecated void av_metadata_free(AVDictionary **m); -/** - * @} - */ -#endif - - /* packet functions */ @@ -342,27 +337,11 @@ typedef struct AVProbeData { int buf_size; /**< Size of buf except extra allocated bytes */ } AVProbeData; -#define AVPROBE_SCORE_MAX 100 ///< maximum score, half of that is used for file-extension-based detection -#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer +#define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4) +#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension +#define AVPROBE_SCORE_MAX 100 ///< maximum score -typedef struct AVFormatParameters { -#if FF_API_FORMAT_PARAMETERS - attribute_deprecated AVRational time_base; - attribute_deprecated int sample_rate; - attribute_deprecated int channels; - attribute_deprecated int width; - attribute_deprecated int height; - attribute_deprecated enum PixelFormat pix_fmt; - attribute_deprecated int channel; /**< Used to select DV channel. */ - attribute_deprecated const char *standard; /**< deprecated, use demuxer-specific options instead. */ - attribute_deprecated unsigned int mpeg2ts_raw:1; /**< deprecated, use mpegtsraw demuxer */ - /**< deprecated, use mpegtsraw demuxer-specific options instead */ - attribute_deprecated unsigned int mpeg2ts_compute_pcr:1; - attribute_deprecated unsigned int initial_pause:1; /**< Do not begin to play the stream - immediately (RTSP only). */ - attribute_deprecated unsigned int prealloced_context:1; -#endif -} AVFormatParameters; +#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer /// Demuxer will use avio_open, no opened file should be provided by the caller. #define AVFMT_NOFILE 0x0001 @@ -377,13 +356,28 @@ typedef struct AVFormatParameters { #define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ #define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ #define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ -#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fallback to binary search via read_timestamp */ -#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fallback to generic search */ +#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ +#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ #define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ #define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */ -#define AVFMT_TS_NONSTRICT 0x8000000 /**< Format does not require strictly - increasing timestamps, but they must - still be monotonic */ +#if LIBAVFORMAT_VERSION_MAJOR <= 54 +#define AVFMT_TS_NONSTRICT 0x8020000 //we try to be compatible to the ABIs of ffmpeg and major forks +#else +#define AVFMT_TS_NONSTRICT 0x20000 +#endif + /**< Format does not require strictly + increasing timestamps, but they must + still be monotonic */ +#define AVFMT_TS_NEGATIVE 0x40000 /**< Format allows muxing negative + timestamps. If not set the timestamp + will be shifted in av_write_frame and + av_interleaved_write_frame so they + start from 0. + The user or muxer can override this through + AVFormatContext.avoid_negative_ts + */ + +#define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ /** * @addtogroup lavf_encoding @@ -399,13 +393,40 @@ typedef struct AVOutputFormat { const char *long_name; const char *mime_type; const char *extensions; /**< comma-separated filename extensions */ + /* output support */ + enum AVCodecID audio_codec; /**< default audio codec */ + enum AVCodecID video_codec; /**< default video codec */ + enum AVCodecID subtitle_codec; /**< default subtitle codec */ + /** + * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE, + * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, + * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, + * AVFMT_TS_NONSTRICT + */ + int flags; + + /** + * List of supported codec_id-codec_tag pairs, ordered by "better + * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. + */ + const struct AVCodecTag * const *codec_tag; + + + const AVClass *priv_class; ///< AVClass for the private context + + /***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + */ + struct AVOutputFormat *next; /** * size of private data so that it can be allocated in the wrapper */ int priv_data_size; - /* output support */ - enum CodecID audio_codec; /**< default audio codec */ - enum CodecID video_codec; /**< default video codec */ + int (*write_header)(struct AVFormatContext *); /** * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, @@ -417,44 +438,21 @@ typedef struct AVOutputFormat { int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); int (*write_trailer)(struct AVFormatContext *); /** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE, - * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH + * Currently only used to set pixel format if not YUV420P. */ - int flags; - - void *dummy; - int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, AVPacket *in, int flush); - - /** - * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all terminated by CODEC_ID_NONE. - */ - const struct AVCodecTag * const *codec_tag; - - enum CodecID subtitle_codec; /**< default subtitle codec */ - -#if FF_API_OLD_METADATA2 - const AVMetadataConv *metadata_conv; -#endif - - const AVClass *priv_class; ///< AVClass for the private context - /** * Test if the given codec can be stored in this container. * * @return 1 if the codec is supported, 0 if it is not. * A negative number if unknown. + * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC */ - int (*query_codec)(enum CodecID id, int std_compliance); + int (*query_codec)(enum AVCodecID id, int std_compliance); void (*get_output_timestamp)(struct AVFormatContext *s, int stream, int64_t *dts, int64_t *wall); - - /* private fields */ - struct AVOutputFormat *next; } AVOutputFormat; /** * @} @@ -478,6 +476,38 @@ typedef struct AVInputFormat { */ const char *long_name; + /** + * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, + * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, + * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. + */ + int flags; + + /** + * If extensions are defined, then no probe is done. You should + * usually not use extension format guessing because it is not + * reliable enough + */ + const char *extensions; + + const struct AVCodecTag * const *codec_tag; + + const AVClass *priv_class; ///< AVClass for the private context + + /***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + */ + struct AVInputFormat *next; + + /** + * Raw demuxers store their codec ID here. + */ + int raw_codec_id; + /** * Size of private data so that it can be allocated in the wrapper. */ @@ -492,16 +522,14 @@ typedef struct AVInputFormat { /** * Read the format header and initialize the AVFormatContext - * structure. Return 0 if OK. 'ap' if non-NULL contains - * additional parameters. Only used in raw format right - * now. 'av_new_stream' should be called to create new streams. + * structure. Return 0 if OK. Only used in raw format right + * now. 'avformat_new_stream' should be called to create new streams. */ - int (*read_header)(struct AVFormatContext *, - AVFormatParameters *ap); + int (*read_header)(struct AVFormatContext *); /** * Read one packet and put it in 'pkt'. pts and flags are also - * set. 'av_new_stream' can be called only if the flag + * set. 'avformat_new_stream' can be called only if the flag * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a * background thread). * @return 0 on success, < 0 on error. @@ -534,25 +562,6 @@ typedef struct AVInputFormat { int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, int64_t *pos, int64_t pos_limit); - /** - * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, - * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, - * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK. - */ - int flags; - - /** - * If extensions are defined, then no probe is done. You should - * usually not use extension format guessing because it is not - * reliable enough - */ - const char *extensions; - - /** - * General purpose read-only value that the format can use. - */ - int value; - /** * Start/resume playing - only meaningful if using a network-based format * (RTSP). @@ -565,8 +574,6 @@ typedef struct AVInputFormat { */ int (*read_pause)(struct AVFormatContext *); - const struct AVCodecTag * const *codec_tag; - /** * Seek to timestamp ts. * Seeking will be done so that the point from which all active streams @@ -574,15 +581,6 @@ typedef struct AVInputFormat { * 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); - -#if FF_API_OLD_METADATA2 - const AVMetadataConv *metadata_conv; -#endif - - const AVClass *priv_class; ///< AVClass for the private context - - /* private fields */ - struct AVInputFormat *next; } AVInputFormat; /** * @} @@ -594,6 +592,9 @@ enum AVStreamParseType { AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ + AVSTREAM_PARSE_FULL_RAW=MKTAG(0,'R','A','W'), /**< full parsing and repack with timestamp and position generation by parser for raw + this assumes that each packet in the file contains no demuxer level headers and + just codec level data, otherwise position generation would fail */ }; typedef struct AVIndexEntry { @@ -626,6 +627,27 @@ typedef struct AVIndexEntry { #define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */ #define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */ #define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< stream without voice */ +/** + * The stream is stored in the file as an attached picture/"cover art" (e.g. + * APIC frame in ID3v2). The single packet associated with it will be returned + * among the first few packets read from the file unless seeking takes place. + * It can also be accessed at any time in AVStream.attached_pic. + */ +#define AV_DISPOSITION_ATTACHED_PIC 0x0400 + +/** + * To specify text track kind (different from subtitles default). + */ +#define AV_DISPOSITION_CAPTIONS 0x10000 +#define AV_DISPOSITION_DESCRIPTIONS 0x20000 +#define AV_DISPOSITION_METADATA 0x40000 + +/** + * Options for behavior on timestamp wrap detection. + */ +#define AV_PTS_WRAP_IGNORE 0 ///< ignore the wrap +#define AV_PTS_WRAP_ADD_OFFSET 1 ///< add the format specific offset on wrap detection +#define AV_PTS_WRAP_SUB_OFFSET -1 ///< subtract the format specific offset on wrap detection /** * Stream structure. @@ -636,24 +658,26 @@ typedef struct AVIndexEntry { */ typedef struct AVStream { int index; /**< stream index in AVFormatContext */ - int id; /**< format-specific stream ID */ - AVCodecContext *codec; /**< codec context */ /** - * Real base framerate of the stream. - * This is the lowest framerate with which all timestamps can be - * represented accurately (it is the least common multiple of all - * framerates in the stream). Note, this value is just a guess! - * For example, if the time base is 1/90000 and all frames have either - * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. + * Format-specific stream ID. + * decoding: set by libavformat + * encoding: set by the user, replaced by libavformat if left unset */ - AVRational r_frame_rate; + int id; + /** + * Codec context associated with this stream. Allocated and freed by + * libavformat. + * + * - decoding: The demuxer exports codec information stored in the headers + * here. + * - encoding: The user sets codec information, the muxer writes it to the + * output. Mandatory fields as specified in AVCodecContext + * documentation must be set even if this AVCodecContext is + * not actually used for encoding. + */ + AVCodecContext *codec; void *priv_data; -#if FF_API_REORDER_PRIVATE - /* internal data used in av_find_stream_info() */ - int64_t first_dts; -#endif - /** * encoding: pts generation when outputting stream */ @@ -661,29 +685,14 @@ typedef struct AVStream { /** * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * time base should be 1/framerate and timestamp increments should be 1. + * of which frame timestamps are represented. + * * decoding: set by libavformat - * encoding: set by libavformat in av_write_header + * encoding: set by libavformat in avformat_write_header. The muxer may use the + * user-provided value of @ref AVCodecContext.time_base "codec->time_base" + * as a hint. */ AVRational time_base; -#if FF_API_REORDER_PRIVATE - int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ -#endif -#if FF_API_STREAM_COPY - /* ffmpeg.c private use */ - attribute_deprecated int stream_copy; /**< If set, just copy stream. */ -#endif - enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. - -#if FF_API_AVSTREAM_QUALITY - //FIXME move stuff to a flags field? - /** - * Quality, as it has been removed from AVCodecContext and put in AVVideoFrame. - * MN: dunno if that is the right place for it - */ - attribute_deprecated float quality; -#endif /** * Decoding: pts of the first frame of the stream in presentation order, in stream time base. @@ -702,30 +711,11 @@ typedef struct AVStream { */ int64_t duration; -#if FF_API_REORDER_PRIVATE - /* av_read_frame() support */ - enum AVStreamParseType need_parsing; - struct AVCodecParserContext *parser; - - int64_t cur_dts; - int last_IP_duration; - int64_t last_IP_pts; - /* av_seek_frame() support */ - AVIndexEntry *index_entries; /**< Only used if the format does not - support seeking natively. */ - int nb_index_entries; - unsigned int index_entries_allocated_size; -#endif - int64_t nb_frames; ///< number of frames in this stream if known or 0 int disposition; /**< AV_DISPOSITION_* bit field */ -#if FF_API_REORDER_PRIVATE - AVProbeData probe_data; -#define MAX_REORDER_DELAY 16 - int64_t pts_buffer[MAX_REORDER_DELAY+1]; -#endif + enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. /** * sample aspect ratio (0 if unknown) @@ -736,43 +726,20 @@ typedef struct AVStream { AVDictionary *metadata; -#if FF_API_REORDER_PRIVATE - /* Intended mostly for av_read_frame() support. Not supposed to be used by */ - /* external applications; try to use something else if at all possible. */ - const uint8_t *cur_ptr; - int cur_len; - AVPacket cur_pkt; - - // Timestamp generation support: - /** - * Timestamp corresponding to the last dts sync point. - * - * Initialized when AVCodecParserContext.dts_sync_point >= 0 and - * a DTS is received from the underlying container. Otherwise set to - * AV_NOPTS_VALUE by default. - */ - int64_t reference_dts; - - /** - * Number of packets to buffer for codec probing - * NOT PART OF PUBLIC API - */ -#define MAX_PROBE_PACKETS 2500 - int probe_packets; - - /** - * last packet in packet_buffer for this stream when muxing. - * Used internally, NOT PART OF PUBLIC API, do not read or - * write from outside of libav* - */ - struct AVPacketList *last_in_packet_buffer; -#endif - /** * Average framerate */ AVRational avg_frame_rate; + /** + * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet + * will contain the attached picture. + * + * decoding: set by libavformat, must not be modified by the caller. + * encoding: unused + */ + AVPacket attached_pic; + /***************************************************************** * 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 @@ -781,43 +748,32 @@ typedef struct AVStream { ***************************************************************** */ - /** - * Number of frames that have been demuxed during av_find_stream_info() - */ - int codec_info_nb_frames; - - /** - * Stream Identifier - * This is the MPEG-TS stream identifier +1 - * 0 means unknown - */ - int stream_identifier; - - int64_t interleaver_chunk_size; - int64_t interleaver_chunk_duration; - /** * Stream information used internally by av_find_stream_info() */ -#define MAX_STD_TIMEBASES (60*12+5) +#define MAX_STD_TIMEBASES (60*12+6) struct { int64_t last_dts; int64_t duration_gcd; int duration_count; - double duration_error[2][2][MAX_STD_TIMEBASES]; + double (*duration_error)[2][MAX_STD_TIMEBASES]; int64_t codec_info_duration; - int nb_decoded_frames; + int64_t codec_info_duration_fields; + int found_decoder; + + int64_t last_duration; + + /** + * Those are used for average framerate estimation. + */ + int64_t fps_first_dts; + int fps_first_dts_idx; + int64_t fps_last_dts; + int fps_last_dts_idx; + } *info; - /** - * flag to indicate that probing is requested - * NOT PART OF PUBLIC API - */ - int request_probe; -#if !FF_API_REORDER_PRIVATE - const uint8_t *cur_ptr; - int cur_len; - AVPacket cur_pkt; + int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ // Timestamp generation support: /** @@ -830,8 +786,8 @@ typedef struct AVStream { int64_t reference_dts; int64_t first_dts; int64_t cur_dts; - int last_IP_duration; int64_t last_IP_pts; + int last_IP_duration; /** * Number of packets to buffer for codec probing @@ -839,6 +795,15 @@ typedef struct AVStream { #define MAX_PROBE_PACKETS 2500 int probe_packets; + /** + * Number of frames that have been demuxed during av_find_stream_info() + */ + int codec_info_nb_frames; + + /* av_read_frame() support */ + enum AVStreamParseType need_parsing; + struct AVCodecParserContext *parser; + /** * last packet in packet_buffer for this stream when muxing. */ @@ -846,19 +811,88 @@ typedef struct AVStream { AVProbeData probe_data; #define MAX_REORDER_DELAY 16 int64_t pts_buffer[MAX_REORDER_DELAY+1]; - /* av_read_frame() support */ - enum AVStreamParseType need_parsing; - struct AVCodecParserContext *parser; AVIndexEntry *index_entries; /**< Only used if the format does not support seeking natively. */ int nb_index_entries; unsigned int index_entries_allocated_size; - int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ -#endif + /** + * Real base framerate of the stream. + * This is the lowest framerate with which all timestamps can be + * represented accurately (it is the least common multiple of all + * framerates in the stream). Note, this value is just a guess! + * For example, if the time base is 1/90000 and all frames have either + * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. + * + * Code outside avformat should access this field using: + * av_stream_get/set_r_frame_rate(stream) + */ + AVRational r_frame_rate; + + /** + * Stream Identifier + * This is the MPEG-TS stream identifier +1 + * 0 means unknown + */ + int stream_identifier; + + int64_t interleaver_chunk_size; + int64_t interleaver_chunk_duration; + + /** + * stream probing state + * -1 -> probing finished + * 0 -> no probing requested + * rest -> perform probing with request_probe being the minimum score to accept. + * NOT PART OF PUBLIC API + */ + int request_probe; + /** + * Indicates that everything up to the next keyframe + * should be discarded. + */ + int skip_to_keyframe; + + /** + * Number of samples to skip at the start of the frame decoded from the next packet. + */ + int skip_samples; + + /** + * Number of internally decoded frames, used internally in libavformat, do not access + * its lifetime differs from info which is why it is not in that structure. + */ + int nb_decoded_frames; + + /** + * Timestamp offset added to timestamps before muxing + * NOT PART OF PUBLIC API + */ + int64_t mux_ts_offset; + + /** + * Internal data to check for wrapping of the time stamp + */ + int64_t pts_wrap_reference; + + /** + * Options for behavior, when a wrap is detected. + * + * Defined by AV_PTS_WRAP_ values. + * + * If correction is enabled, there are two possibilities: + * If the first time stamp is near the wrap point, the wrap offset + * will be subtracted, which will create negative time stamps. + * Otherwise the offset will be added. + */ + int pts_wrap_behavior; + } AVStream; +AVRational av_stream_get_r_frame_rate(const AVStream *s); +void av_stream_set_r_frame_rate(AVStream *s, AVRational r); + #define AV_PROGRAM_RUNNING 1 /** @@ -878,6 +912,19 @@ typedef struct AVProgram { int program_num; int pmt_pid; int pcr_pid; + + /***************************************************************** + * 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 + * removed at will. + * New public fields should be added right above. + ***************************************************************** + */ + int64_t start_time; + int64_t end_time; + + int64_t pts_wrap_reference; ///< reference dts for wrap detection + int pts_wrap_behavior; ///< behavior on wrap detection } AVProgram; #define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present @@ -890,6 +937,17 @@ typedef struct AVChapter { AVDictionary *metadata; } AVChapter; + +/** + * The duration of a video can be estimated through various ways, and this enum can be used + * to know how the duration was estimated. + */ +enum AVDurationEstimationMethod { + AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes + AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration + AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) +}; + /** * Format I/O context. * New fields can be added to the end with minor version bumps. @@ -920,7 +978,7 @@ typedef struct AVFormatContext { */ void *priv_data; - /* + /** * I/O context. * * decoding: either set by the user before avformat_open_input() (then @@ -933,6 +991,9 @@ typedef struct AVFormatContext { */ AVIOContext *pb; + /* stream info */ + int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */ + /** * A list of all streams in the file. New streams are created with * avformat_new_stream(). @@ -946,24 +1007,6 @@ typedef struct AVFormatContext { AVStream **streams; char filename[1024]; /**< input or output filename */ - /* stream info */ -#if FF_API_TIMESTAMP - /** - * @deprecated use 'creation_time' metadata tag instead - */ - attribute_deprecated int64_t timestamp; -#endif - - int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */ -#if FF_API_REORDER_PRIVATE - /* private data for pts handling (do not modify directly). */ - /** - * This buffer is only needed when packets were already buffered but - * not decoded, for example to get the codec parameters in MPEG - * streams. - */ - struct AVPacketList *packet_buffer; -#endif /** * Decoding: position of the first frame of the component, in @@ -980,13 +1023,6 @@ typedef struct AVFormatContext { */ int64_t duration; -#if FF_API_FILESIZE - /** - * decoding: total file size, 0 if unknown - */ - attribute_deprecated int64_t file_size; -#endif - /** * Decoding: total stream bitrate in bit/s, 0 if not * available. Never set it directly if the file_size and the @@ -994,37 +1030,9 @@ typedef struct AVFormatContext { */ int bit_rate; -#if FF_API_REORDER_PRIVATE - /* av_read_frame() support */ - AVStream *cur_st; - - /* av_seek_frame() support */ - int64_t data_offset; /**< offset of the first packet */ -#endif - -#if FF_API_MUXRATE - /** - * use mpeg muxer private options instead - */ - attribute_deprecated int mux_rate; -#endif unsigned int packet_size; -#if FF_API_PRELOAD - attribute_deprecated int preload; -#endif int max_delay; -#if FF_API_LOOP_OUTPUT -#define AVFMT_NOOUTPUTLOOP -1 -#define AVFMT_INFINITEOUTPUTLOOP 0 - /** - * number of times to loop output in formats that support it - * - * @deprecated use the 'loop' private option in the gif muxer. - */ - attribute_deprecated int loop_output; -#endif - int flags; #define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. #define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. @@ -1032,22 +1040,14 @@ typedef struct AVFormatContext { #define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS #define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container #define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled -#if FF_API_FLAG_RTP_HINT -#define AVFMT_FLAG_RTP_HINT 0x0040 ///< Deprecated, use the -movflags rtphint muxer specific AVOption instead -#endif +#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 ///< Dont merge side data but keep it seperate. - -#if FF_API_LOOP_INPUT - /** - * @deprecated, use the 'loop' img2 demuxer private option. - */ - attribute_deprecated int loop_input; -#endif +#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate. /** * decoding: size of data to probe; encoding: unused. @@ -1070,19 +1070,19 @@ typedef struct AVFormatContext { * Forced video codec_id. * Demuxing: Set by user. */ - enum CodecID video_codec_id; + enum AVCodecID video_codec_id; /** * Forced audio codec_id. * Demuxing: Set by user. */ - enum CodecID audio_codec_id; + enum AVCodecID audio_codec_id; /** * Forced subtitle codec_id. * Demuxing: Set by user. */ - enum CodecID subtitle_codec_id; + enum AVCodecID subtitle_codec_id; /** * Maximum amount of memory in bytes to use for the index of each stream. @@ -1102,39 +1102,22 @@ typedef struct AVFormatContext { */ 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; - /** - * Flags to enable debugging. - */ - int debug; -#define FF_FDEBUG_TS 0x0001 - -#if FF_API_REORDER_PRIVATE - /** - * Raw packets from the demuxer, prior to parsing and decoding. - * This buffer is used for buffering packets until the codec can - * be identified, as parsing cannot be done without knowing the - * codec. - */ - struct AVPacketList *raw_packet_buffer; - struct AVPacketList *raw_packet_buffer_end; - - struct AVPacketList *packet_buffer_end; -#endif - AVDictionary *metadata; -#if FF_API_REORDER_PRIVATE - /** - * Remaining size available for raw_packet_buffer, in bytes. - * NOT PART OF PUBLIC API - */ -#define RAW_PACKET_BUFFER_SIZE 2500000 - int raw_packet_buffer_remaining_size; -#endif - /** * Start time of the stream in real world time, in microseconds * since the unix epoch (00:00 1st January 1970). That is, pts=0 @@ -1168,6 +1151,12 @@ typedef struct AVFormatContext { */ AVIOInterruptCB interrupt_callback; + /** + * Flags to enable debugging. + */ + int debug; +#define FF_FDEBUG_TS 0x0001 + /** * Transport stream id. * This will be moved into demuxer private options. Thus no API/ABI compatibility @@ -1198,6 +1187,77 @@ typedef struct AVFormatContext { */ int max_chunk_size; + /** + * forces the use of wallclock timestamps as pts/dts of packets + * This has undefined results in the presence of B frames. + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + */ + int use_wallclock_as_timestamps; + + /** + * Avoid negative timestamps during muxing. + * 0 -> allow negative timestamps + * 1 -> avoid negative timestamps + * -1 -> choose automatically (default) + * Note, this only works when interleave_packet_per_dts is in use. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + */ + int avoid_negative_ts; + + /** + * avio flags, used to force AVIO_FLAG_DIRECT. + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + */ + int avio_flags; + + /** + * The duration field can be estimated through various ways, and this field can be used + * to know how the duration was estimated. + * - encoding: unused + * - decoding: Read by user via AVOptions (NO direct access) + */ + enum AVDurationEstimationMethod duration_estimation_method; + + /** + * Skip initial bytes when opening stream + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + */ + unsigned int skip_initial_bytes; + + /** + * Correct single timestamp overflows + * - encoding: unused + * - 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) + */ + int seek2any; + + /** + * Flush the I/O context after each packet. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + */ + 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 @@ -1205,20 +1265,6 @@ typedef struct AVFormatContext { * New public fields should be added right above. ***************************************************************** */ -#if !FF_API_REORDER_PRIVATE - /** - * Raw packets from the demuxer, prior to parsing and decoding. - * This buffer is used for buffering packets until the codec can - * be identified, as parsing cannot be done without knowing the - * codec. - */ - struct AVPacketList *raw_packet_buffer; - struct AVPacketList *raw_packet_buffer_end; - /** - * Remaining size available for raw_packet_buffer, in bytes. - */ -#define RAW_PACKET_BUFFER_SIZE 2500000 - int raw_packet_buffer_remaining_size; /** * This buffer is only needed when packets were already buffered but @@ -1228,14 +1274,88 @@ typedef struct AVFormatContext { struct AVPacketList *packet_buffer; struct AVPacketList *packet_buffer_end; - /* av_read_frame() support */ - AVStream *cur_st; - /* av_seek_frame() support */ int64_t data_offset; /**< offset of the first packet */ -#endif + + /** + * Raw packets from the demuxer, prior to parsing and decoding. + * This buffer is used for buffering packets until the codec can + * be identified, as parsing cannot be done without knowing the + * codec. + */ + struct AVPacketList *raw_packet_buffer; + struct AVPacketList *raw_packet_buffer_end; + /** + * Packets split by the parser get queued here. + */ + struct AVPacketList *parse_queue; + struct AVPacketList *parse_queue_end; + /** + * Remaining size available for raw_packet_buffer, in bytes. + */ +#define RAW_PACKET_BUFFER_SIZE 2500000 + int raw_packet_buffer_remaining_size; + + /** + * Offset to remap timestamps to be non-negative. + * Expressed in timebase units. + * @see AVStream.mux_ts_offset + */ + int64_t offset; + + /** + * Timebase for the timestamp offset. + */ + AVRational offset_timebase; + + /** + * IO repositioned flag. + * This is set by avformat when the underlaying IO context read pointer + * is repositioned, for example when doing byte based seeking. + * 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; } 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); + +/** + * Returns the method used to set ctx->duration. + * + * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. + */ +enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx); + typedef struct AVPacketList { AVPacket pkt; struct AVPacketList *next; @@ -1273,7 +1393,6 @@ const char *avformat_license(void); * * @see av_register_input_format() * @see av_register_output_format() - * @see av_register_protocol() */ void av_register_all(void); @@ -1339,13 +1458,16 @@ const AVClass *avformat_get_class(void); * * When muxing, should be called by the user before avformat_write_header(). * + * User is required to call avcodec_close() and avformat_free_context() to + * clean up the allocation by avformat_new_stream(). + * * @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. * * @return newly created stream or NULL on error. */ -AVStream *avformat_new_stream(AVFormatContext *s, AVCodec *c); +AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c); AVProgram *av_new_program(AVFormatContext *s, int id); @@ -1354,17 +1476,6 @@ AVProgram *av_new_program(AVFormatContext *s, int id); */ -#if FF_API_GUESS_IMG2_CODEC -attribute_deprecated enum CodecID av_guess_image2_codec(const char *filename); -#endif - -#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() @@ -1446,46 +1557,24 @@ AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score * @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); -#if FF_API_FORMAT_PARAMETERS -/** - * Allocate all the structures needed to read an input stream. - * This does not open the needed codecs for decoding the stream[s]. - * @deprecated use avformat_open_input instead. - */ -attribute_deprecated int av_open_input_stream(AVFormatContext **ic_ptr, - AVIOContext *pb, const char *filename, - AVInputFormat *fmt, AVFormatParameters *ap); - -/** - * Open a media file as input. The codecs are not opened. Only the file - * header (if present) is read. - * - * @param ic_ptr The opened media file handle is put here. - * @param filename filename to open - * @param fmt If non-NULL, force the file format to use. - * @param buf_size optional buffer size (zero if default is OK) - * @param ap Additional parameters needed when opening the file - * (NULL if default). - * @return 0 if OK, AVERROR_xxx otherwise - * - * @deprecated use avformat_open_input instead. - */ -attribute_deprecated int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, - AVInputFormat *fmt, - int buf_size, - AVFormatParameters *ap); -#endif - /** * 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 @@ -1504,7 +1593,8 @@ attribute_deprecated int av_open_input_file(AVFormatContext **ic_ptr, const char */ int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options); -int av_demuxer_open(AVFormatContext *ic, AVFormatParameters *ap); +attribute_deprecated +int av_demuxer_open(AVFormatContext *ic); #if FF_API_FORMAT_PARAMETERS /** @@ -1592,7 +1682,11 @@ int av_find_best_stream(AVFormatContext *ic, AVCodec **decoder_ret, int flags); +#if FF_API_READ_PACKET /** + * @deprecated use AVFMT_FLAG_NOFILLIN | AVFMT_FLAG_NOPARSE to read raw + * unprocessed packets + * * Read a transport packet from a media file. * * This function is obsolete and should never be used. @@ -1602,7 +1696,9 @@ int av_find_best_stream(AVFormatContext *ic, * @param pkt is filled * @return 0 if OK, AVERROR_xxx on error */ +attribute_deprecated int av_read_packet(AVFormatContext *s, AVPacket *pkt); +#endif /** * Return the next frame of a stream. @@ -1612,13 +1708,13 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt); * omit invalid data between valid frames so as to give the decoder the maximum * information possible for decoding. * - * The returned packet is valid - * until the next av_read_frame() or until av_close_input_file() and - * must be freed with av_free_packet. 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 have a variable size (e.g. MPEG audio), - * then it contains one frame. + * If pkt->buf is NULL, then the packet is valid until the next + * 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 + * have a variable size (e.g. MPEG audio), then it contains one frame. * * pkt->pts, pkt->dts and pkt->duration are always set to correct * values in AVStream.time_base units (and guessed if the format cannot @@ -1658,6 +1754,7 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, * or if stream_index is -1, in AV_TIME_BASE units. * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as * keyframes (this may not be supported by all demuxers). + * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. * * @param stream_index index of the stream which is used as time base reference * @param min_ts smallest acceptable timestamp @@ -1685,16 +1782,6 @@ int av_read_play(AVFormatContext *s); */ int av_read_pause(AVFormatContext *s); -#if FF_API_FORMAT_PARAMETERS -/** - * Free a AVFormatContext allocated by av_open_input_stream. - * @param s context to free - * @deprecated use av_close_input_file() - */ -attribute_deprecated -void av_close_input_stream(AVFormatContext *s); -#endif - #if FF_API_CLOSE_INPUT_FILE /** * @deprecated use avformat_close_input() @@ -1744,28 +1831,6 @@ void av_set_pts_info(AVStream *s, int pts_wrap_bits, #define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes #define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number -#if FF_API_SEEK_PUBLIC -attribute_deprecated -int av_seek_frame_binary(AVFormatContext *s, int stream_index, - int64_t target_ts, int flags); -attribute_deprecated -void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp); -attribute_deprecated -int64_t av_gen_search(AVFormatContext *s, int stream_index, - int64_t target_ts, int64_t pos_min, - int64_t pos_max, int64_t pos_limit, - int64_t ts_min, int64_t ts_max, - int flags, int64_t *ts_ret, - int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t )); -#endif - -#if FF_API_FORMAT_PARAMETERS -/** - * @deprecated pass the options to avformat_write_header directly. - */ -attribute_deprecated int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap); -#endif - /** * @addtogroup lavf_encoding * @{ @@ -1776,7 +1841,7 @@ attribute_deprecated int av_set_parameters(AVFormatContext *s, AVFormatParameter * * @param s Media file handle, must be allocated with avformat_alloc_context(). * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already openened AVIOContext. + * Its pb field must be set to an already opened AVIOContext. * @param options An AVDictionary filled with AVFormatContext and muxer-private options. * On return this parameter will be destroyed and replaced with a dict containing * options that were not found. May be NULL. @@ -1787,21 +1852,6 @@ attribute_deprecated int av_set_parameters(AVFormatContext *s, AVFormatParameter */ int avformat_write_header(AVFormatContext *s, AVDictionary **options); -#if FF_API_FORMAT_PARAMETERS -/** - * Allocate the stream private data and write the stream header to an - * output media file. - * @note: this sets stream time-bases, if possible to stream->codec->time_base - * but for some formats it might also be some other time base - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - * - * @deprecated use avformat_write_header. - */ -attribute_deprecated int av_write_header(AVFormatContext *s); -#endif - /** * Write a packet to an output media file. * @@ -1831,10 +1881,12 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt); * demuxer level. * * @param s media file handle - * @param pkt The packet containing the data to be written. Libavformat takes - * ownership of the data and will free it when it sees fit using the packet's - * @ref AVPacket.destruct "destruct" field. The caller must not access the data - * after this function returns, as it may already be freed. + * @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". @@ -1846,29 +1898,11 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt); */ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); -/** - * Interleave a packet per dts in an output media file. - * - * Packets with pkt->destruct == av_destruct_packet will be freed inside this - * function, so they cannot be used after it. Note that calling av_free_packet() - * on them is still safe. - * - * @param s media file handle - * @param out the interleaved packet will be output here - * @param pkt the input packet - * @param flush 1 if no further packets are available as input and all - * remaining packets should be output - * @return 1 if a packet was output, 0 if no packet could be output, - * < 0 if an error occurred - */ -int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, - AVPacket *pkt, int flush); - /** * Write the stream trailer to an output media file and free the * file private data. * - * May only be called after a successful call to av_write_header. + * May only be called after a successful call to avformat_write_header. * * @param s media file handle * @return 0 if OK, AVERROR_xxx on error @@ -1894,7 +1928,7 @@ AVOutputFormat *av_guess_format(const char *short_name, /** * Guess the codec ID based upon muxer and filename. */ -enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, +enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, const char *filename, const char *mime_type, enum AVMediaType type); @@ -1905,9 +1939,9 @@ enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, * work in real time. * @param s media file handle * @param stream stream in the media file - * @param dts[out] DTS of the last packet output for the stream, in stream + * @param[out] dts DTS of the last packet output for the stream, in stream * time_base units - * @param wall[out] absolute time when that packet whas output, + * @param[out] wall absolute time when that packet whas output, * in microsecond * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it * Note: some formats or devices may not allow to measure dts and wall @@ -1927,7 +1961,7 @@ int av_get_output_timestamp(struct AVFormatContext *s, int stream, * @ingroup libavf * @{ * - * Miscelaneous utility functions related to both muxing and demuxing + * Miscellaneous utility functions related to both muxing and demuxing * (or neither). */ @@ -1940,7 +1974,7 @@ int av_get_output_timestamp(struct AVFormatContext *s, int stream, * * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 */ -void av_hex_dump(FILE *f, uint8_t *buf, int size); +void av_hex_dump(FILE *f, const uint8_t *buf, int size); /** * Send a nice hexadecimal dump of a buffer to the log. @@ -1954,7 +1988,7 @@ void av_hex_dump(FILE *f, uint8_t *buf, int size); * * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2 */ -void av_hex_dump_log(void *avcl, int level, uint8_t *buf, int size); +void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size); /** * Send a nice dump of a packet to the specified file stream. @@ -1982,13 +2016,13 @@ void av_pkt_dump_log2(void *avcl, int level, AVPacket *pkt, int dump_payload, AVStream *st); /** - * Get the CodecID for the given codec tag tag. - * If no codec id is found returns CODEC_ID_NONE. + * Get the AVCodecID for the given codec tag tag. + * If no codec id is found returns AV_CODEC_ID_NONE. * * @param tags list of supported codec_id-codec_tag pairs, as stored * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag */ -enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); +enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); /** * Get the codec tag for the given codec id id. @@ -1997,7 +2031,19 @@ enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int * @param tags list of supported codec_id-codec_tag pairs, as stored * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag */ -unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecID id); +unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id); + +/** + * Get the codec tag for the given codec id. + * + * @param tags list of supported codec_id - codec_tag pairs, as stored + * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag + * @param id codec id that should be searched for in the list + * @param tag A pointer to the found tag + * @return 0 if id was not found in tags, > 0 if it was found + */ +int av_codec_get_tag2(const struct AVCodecTag * const *tags, enum AVCodecID id, + unsigned int *tag); int av_find_default_stream_index(AVFormatContext *s); @@ -2047,45 +2093,12 @@ void av_url_split(char *proto, int proto_size, char *path, int path_size, const char *url); -#if FF_API_DUMP_FORMAT -/** - * @deprecated Deprecated in favor of av_dump_format(). - */ -attribute_deprecated void dump_format(AVFormatContext *ic, - int index, - const char *url, - int is_output); -#endif void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output); -#if FF_API_PARSE_DATE -/** - * Parse datestr and return a corresponding number of microseconds. - * - * @param datestr String representing a date or a duration. - * See av_parse_time() for the syntax of the provided string. - * @deprecated in favor of av_parse_time() - */ -attribute_deprecated -int64_t parse_date(const char *datestr, int duration); -#endif - -/** - * Get the current time in microseconds. - */ -int64_t av_gettime(void); - -#if FF_API_FIND_INFO_TAG -/** - * @deprecated use av_find_info_tag in libavutil instead. - */ -attribute_deprecated int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); -#endif - /** * Return in 'buf' the path with '%d' replaced by a number. * @@ -2112,6 +2125,9 @@ int av_filename_number_test(const char *filename); /** * Generate an SDP for an RTP session. * + * Note, this overwrites the id values of AVStreams in the muxer contexts + * for getting unique dynamic payload types. + * * @param ac array of AVFormatContexts describing the RTP streams. If the * array is composed by only one context, such context can contain * multiple AVStreams (one AVStream per RTP stream). Otherwise, @@ -2125,10 +2141,6 @@ int av_filename_number_test(const char *filename); */ int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size); -#if FF_API_SDP_CREATE -attribute_deprecated int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size); -#endif - /** * Return a positive value if the given filename has one of the given * extensions, 0 otherwise. @@ -2145,7 +2157,80 @@ int av_match_ext(const char *filename, const char *extensions); * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. * A negative number if this information is not available. */ -int avformat_query_codec(AVOutputFormat *ofmt, enum CodecID codec_id, int std_compliance); +int avformat_query_codec(AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance); + +/** + * @defgroup riff_fourcc RIFF FourCCs + * @{ + * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. The tables are + * meant to be passed to av_codec_get_id()/av_codec_get_tag() as in the + * following code: + * @code + * uint32_t tag = MKTAG('H', '2', '6', '4'); + * const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 }; + * enum AVCodecID id = av_codec_get_id(table, tag); + * @endcode + */ +/** + * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. + */ +const struct AVCodecTag *avformat_get_riff_video_tags(void); +/** + * @return the table mapping RIFF FourCCs for audio to AVCodecID. + */ +const struct AVCodecTag *avformat_get_riff_audio_tags(void); + +/** + * @} + */ + +/** + * Guess the sample aspect ratio of a frame, based on both the stream and the + * frame aspect ratio. + * + * Since the frame aspect ratio is set by the codec but the stream aspect ratio + * is set by the demuxer, these two may not be equal. This function tries to + * return the value that you should use if you would like to display the frame. + * + * Basic logic is to use the stream aspect ratio if it is set to something sane + * otherwise use the frame aspect ratio. This way a container setting, which is + * usually easy to modify can override the coded value in the frames. + * + * @param format the format context which the stream is part of + * @param stream the stream which the frame is part of + * @param frame the frame with the aspect ratio to be determined + * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea + */ +AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame); + +/** + * Guess the frame rate, based on both the container and codec information. + * + * @param ctx the format context which the stream is part of + * @param stream the stream which the frame is part of + * @param frame the frame for which the frame rate should be determined, may be NULL + * @return the guessed (valid) frame rate, 0/1 if no idea + */ +AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame); + +/** + * Check if the stream st contained in s is matched by the stream specifier + * spec. + * + * See the "stream specifiers" chapter in the documentation for the syntax + * of spec. + * + * @return >0 if st is matched by spec; + * 0 if st is not matched by spec; + * AVERROR code if spec is invalid + * + * @note A stream specifier can match several streams in the format. + */ +int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, + const char *spec); + +int avformat_queue_attached_pictures(AVFormatContext *s); + /** * @} diff --git a/extern/ffmpeg/include/libavformat/avio.h b/extern/ffmpeg/include/libavformat/avio.h index a8698a8419..4f4ac3cbaf 100644 --- a/extern/ffmpeg/include/libavformat/avio.h +++ b/extern/ffmpeg/include/libavformat/avio.h @@ -48,7 +48,7 @@ * new elements have been added after this struct in AVFormatContext * or AVIOContext. */ -typedef struct { +typedef struct AVIOInterruptCB { int (*callback)(void*); void *opaque; } AVIOInterruptCB; @@ -65,8 +65,7 @@ typedef struct { * when implementing custom I/O. Normally these are set to the * function pointers specified in avio_alloc_context() */ -typedef struct { -#if !FF_API_OLD_AVIO +typedef struct AVIOContext { /** * A class for private options. * @@ -79,8 +78,7 @@ typedef struct { * warning -- this field can be NULL, be sure to not pass this AVIOContext * to any av_opt_* functions in that case. */ - AVClass *av_class; -#endif + const AVClass *av_class; unsigned char *buffer; /**< Start of the buffer. */ int buffer_size; /**< Maximum buffer size */ unsigned char *buf_ptr; /**< Current position in the buffer */ @@ -97,9 +95,6 @@ typedef struct { int must_flush; /**< true if the next seek should flush */ int eof_reached; /**< true if eof reached */ int write_flag; /**< true if open for writing */ -#if FF_API_OLD_AVIO - attribute_deprecated int is_streamed; -#endif int max_packet_size; unsigned long checksum; unsigned char *checksum_ptr; @@ -125,264 +120,36 @@ typedef struct { * max filesize, used to limit allocations * This field is internal to libavformat and access from outside is not allowed. */ - int64_t maxsize; + int64_t maxsize; + + /** + * avio_read and avio_write should if possible be satisfied directly + * instead of going through a buffer, and avio_seek will always + * call the underlying seek function directly. + */ + int direct; + + /** + * Bytes read statistic + * This field is internal to libavformat and access from outside is not allowed. + */ + int64_t bytes_read; + + /** + * seek statistic + * This field is internal to libavformat and access from outside is not allowed. + */ + int seek_count; + + /** + * writeout statistic + * This field is internal to libavformat and access from outside is not allowed. + */ + int writeout_count; } AVIOContext; /* unbuffered I/O */ -#if FF_API_OLD_AVIO -/** - * URL Context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(URLContext) must not be used outside libav*. - * @deprecated This struct will be made private - */ -typedef struct URLContext { - const AVClass *av_class; ///< information for av_log(). Set by url_open(). - struct URLProtocol *prot; - int flags; - int is_streamed; /**< true if streamed (no seek possible), default = false */ - int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ - void *priv_data; - char *filename; /**< specified URL */ - int is_connected; - AVIOInterruptCB interrupt_callback; -} URLContext; - -#define URL_PROTOCOL_FLAG_NESTED_SCHEME 1 /*< The protocol name can be the first part of a nested protocol scheme */ -#define URL_PROTOCOL_FLAG_NETWORK 2 /*< The protocol uses network */ - -/** - * @deprecated This struct is to be made private. Use the higher-level - * AVIOContext-based API instead. - */ -typedef struct URLProtocol { - const char *name; - int (*url_open)(URLContext *h, const char *url, int flags); - int (*url_read)(URLContext *h, unsigned char *buf, int size); - int (*url_write)(URLContext *h, const unsigned char *buf, int size); - int64_t (*url_seek)(URLContext *h, int64_t pos, int whence); - int (*url_close)(URLContext *h); - struct URLProtocol *next; - int (*url_read_pause)(URLContext *h, int pause); - int64_t (*url_read_seek)(URLContext *h, int stream_index, - int64_t timestamp, int flags); - int (*url_get_file_handle)(URLContext *h); - int priv_data_size; - const AVClass *priv_data_class; - int flags; - int (*url_check)(URLContext *h, int mask); -} URLProtocol; - -typedef struct URLPollEntry { - URLContext *handle; - int events; - int revents; -} URLPollEntry; - -/* not implemented */ -attribute_deprecated int url_poll(URLPollEntry *poll_table, int n, int timeout); - -/** - * @name URL open modes - * The flags argument to url_open and cosins must be one of the following - * constants, optionally ORed with other flags. - * @{ - */ -#define URL_RDONLY 1 /**< read-only */ -#define URL_WRONLY 2 /**< write-only */ -#define URL_RDWR (URL_RDONLY|URL_WRONLY) /**< read-write */ -/** - * @} - */ - -/** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - */ -#define URL_FLAG_NONBLOCK 8 - -typedef int URLInterruptCB(void); -extern URLInterruptCB *url_interrupt_cb; - -/** - * @defgroup old_url_funcs Old url_* functions - * The following functions are deprecated. Use the buffered API based on #AVIOContext instead. - * @{ - * @ingroup lavf_io - */ -attribute_deprecated int url_open_protocol (URLContext **puc, struct URLProtocol *up, - const char *url, int flags); -attribute_deprecated int url_alloc(URLContext **h, const char *url, int flags); -attribute_deprecated int url_connect(URLContext *h); -attribute_deprecated int url_open(URLContext **h, const char *url, int flags); -attribute_deprecated int url_read(URLContext *h, unsigned char *buf, int size); -attribute_deprecated int url_read_complete(URLContext *h, unsigned char *buf, int size); -attribute_deprecated int url_write(URLContext *h, const unsigned char *buf, int size); -attribute_deprecated int64_t url_seek(URLContext *h, int64_t pos, int whence); -attribute_deprecated int url_close(URLContext *h); -attribute_deprecated int64_t url_filesize(URLContext *h); -attribute_deprecated int url_get_file_handle(URLContext *h); -attribute_deprecated int url_get_max_packet_size(URLContext *h); -attribute_deprecated void url_get_filename(URLContext *h, char *buf, int buf_size); -attribute_deprecated int av_url_read_pause(URLContext *h, int pause); -attribute_deprecated int64_t av_url_read_seek(URLContext *h, int stream_index, - int64_t timestamp, int flags); -attribute_deprecated void url_set_interrupt_cb(int (*interrupt_cb)(void)); - -/** - * returns the next registered protocol after the given protocol (the first if - * NULL is given), or NULL if protocol is the last one. - */ -URLProtocol *av_protocol_next(URLProtocol *p); - -/** - * Register the URLProtocol protocol. - * - * @param size the size of the URLProtocol struct referenced - */ -attribute_deprecated int av_register_protocol2(URLProtocol *protocol, int size); -/** - * @} - */ - - -typedef attribute_deprecated AVIOContext ByteIOContext; - -attribute_deprecated int init_put_byte(AVIOContext *s, - unsigned char *buffer, - int buffer_size, - int write_flag, - void *opaque, - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), - int64_t (*seek)(void *opaque, int64_t offset, int whence)); -attribute_deprecated AVIOContext *av_alloc_put_byte( - unsigned char *buffer, - int buffer_size, - int write_flag, - void *opaque, - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), - int64_t (*seek)(void *opaque, int64_t offset, int whence)); - -/** - * @defgroup old_avio_funcs Old put_/get_*() functions - * The following functions are deprecated. Use the "avio_"-prefixed functions instead. - * @{ - * @ingroup lavf_io - */ -attribute_deprecated int get_buffer(AVIOContext *s, unsigned char *buf, int size); -attribute_deprecated int get_partial_buffer(AVIOContext *s, unsigned char *buf, int size); -attribute_deprecated int get_byte(AVIOContext *s); -attribute_deprecated unsigned int get_le16(AVIOContext *s); -attribute_deprecated unsigned int get_le24(AVIOContext *s); -attribute_deprecated unsigned int get_le32(AVIOContext *s); -attribute_deprecated uint64_t get_le64(AVIOContext *s); -attribute_deprecated unsigned int get_be16(AVIOContext *s); -attribute_deprecated unsigned int get_be24(AVIOContext *s); -attribute_deprecated unsigned int get_be32(AVIOContext *s); -attribute_deprecated uint64_t get_be64(AVIOContext *s); - -attribute_deprecated void put_byte(AVIOContext *s, int b); -attribute_deprecated void put_nbyte(AVIOContext *s, int b, int count); -attribute_deprecated void put_buffer(AVIOContext *s, const unsigned char *buf, int size); -attribute_deprecated void put_le64(AVIOContext *s, uint64_t val); -attribute_deprecated void put_be64(AVIOContext *s, uint64_t val); -attribute_deprecated void put_le32(AVIOContext *s, unsigned int val); -attribute_deprecated void put_be32(AVIOContext *s, unsigned int val); -attribute_deprecated void put_le24(AVIOContext *s, unsigned int val); -attribute_deprecated void put_be24(AVIOContext *s, unsigned int val); -attribute_deprecated void put_le16(AVIOContext *s, unsigned int val); -attribute_deprecated void put_be16(AVIOContext *s, unsigned int val); -attribute_deprecated void put_tag(AVIOContext *s, const char *tag); -/** - * @} - */ - -attribute_deprecated int av_url_read_fpause(AVIOContext *h, int pause); -attribute_deprecated int64_t av_url_read_fseek (AVIOContext *h, int stream_index, - int64_t timestamp, int flags); - -/** - * @defgroup old_url_f_funcs Old url_f* functions - * The following functions are deprecated, use the "avio_"-prefixed functions instead. - * @{ - * @ingroup lavf_io - */ -attribute_deprecated int url_fopen( AVIOContext **s, const char *url, int flags); -attribute_deprecated int url_fclose(AVIOContext *s); -attribute_deprecated int64_t url_fseek(AVIOContext *s, int64_t offset, int whence); -attribute_deprecated int url_fskip(AVIOContext *s, int64_t offset); -attribute_deprecated int64_t url_ftell(AVIOContext *s); -attribute_deprecated int64_t url_fsize(AVIOContext *s); -#define URL_EOF (-1) -attribute_deprecated int url_fgetc(AVIOContext *s); -attribute_deprecated int url_setbufsize(AVIOContext *s, int buf_size); -attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); -attribute_deprecated void put_flush_packet(AVIOContext *s); -attribute_deprecated int url_open_dyn_buf(AVIOContext **s); -attribute_deprecated int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size); -attribute_deprecated int url_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); -attribute_deprecated int url_fdopen(AVIOContext **s, URLContext *h); -/** - * @} - */ - -attribute_deprecated int url_ferror(AVIOContext *s); - -attribute_deprecated int udp_set_remote_url(URLContext *h, const char *uri); -attribute_deprecated int udp_get_local_port(URLContext *h); - -attribute_deprecated void init_checksum(AVIOContext *s, - unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), - unsigned long checksum); -attribute_deprecated unsigned long get_checksum(AVIOContext *s); -attribute_deprecated void put_strz(AVIOContext *s, const char *buf); -/** @note unlike fgets, the EOL character is not returned and a whole - line is parsed. return NULL if first char read was EOF */ -attribute_deprecated char *url_fgets(AVIOContext *s, char *buf, int buf_size); -/** - * @deprecated use avio_get_str instead - */ -attribute_deprecated char *get_strz(AVIOContext *s, char *buf, int maxlen); -/** - * @deprecated Use AVIOContext.seekable field directly. - */ -attribute_deprecated static inline int url_is_streamed(AVIOContext *s) -{ - return !s->seekable; -} -attribute_deprecated URLContext *url_fileno(AVIOContext *s); - -/** - * @deprecated use AVIOContext.max_packet_size directly. - */ -attribute_deprecated int url_fget_max_packet_size(AVIOContext *s); - -attribute_deprecated int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags); - -/** return the written or read size */ -attribute_deprecated int url_close_buf(AVIOContext *s); - -/** - * Return a non-zero value if the resource indicated by url - * exists, 0 otherwise. - * @deprecated Use avio_check instead. - */ -attribute_deprecated int url_exist(const char *url); -#endif // FF_API_OLD_AVIO - /** * Return AVIO_FLAG_* access flags corresponding to the access permissions * of the resource in url, or a negative value corresponding to an @@ -397,18 +164,6 @@ attribute_deprecated int url_exist(const char *url); */ int avio_check(const char *url, int flags); -#if FF_API_OLD_INTERRUPT_CB -/** - * The callback is called in blocking functions to test regulary if - * asynchronous interruption is needed. AVERROR_EXIT is returned - * in this case by the interrupted function. 'NULL' means no interrupt - * callback is given. - * @deprecated Use interrupt_callback in AVFormatContext/avio_open2 - * instead. - */ -attribute_deprecated void avio_set_interrupt_cb(int (*interrupt_cb)(void)); -#endif - /** * Allocate and initialize an AVIOContext for buffered I/O. It must be later * freed with av_free(). @@ -422,6 +177,7 @@ attribute_deprecated void avio_set_interrupt_cb(int (*interrupt_cb)(void)); * @param opaque An opaque pointer to user-specific data. * @param read_packet A function for refilling the buffer, may be NULL. * @param write_packet A function for writing the buffer contents, may be NULL. + * The function may not change the input buffers content. * @param seek A function for seeking to specified byte position, may be NULL. * * @return Allocated AVIOContext or NULL on failure. @@ -467,8 +223,8 @@ int avio_put_str16le(AVIOContext *s, const char *str); /** * Oring this flag as into the "whence" parameter to a seek function causes it to - * seek by any means (like reopening and linear reading) or other normally unreasonble - * means that can be extreemly slow. + * seek by any means (like reopening and linear reading) or other normally unreasonable + * means that can be extremely slow. * This may be ignored by the seek code. */ #define AVSEEK_FORCE 0x20000 @@ -509,9 +265,14 @@ int url_feof(AVIOContext *s); /** @warning currently size is limited */ int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); +/** + * Force flushing of buffered data to the output s. + * + * Force the buffered data to be immediately written to the output, + * without to wait to fill the internal buffer. + */ void avio_flush(AVIOContext *s); - /** * Read size bytes from AVIOContext into buf. * @return number of bytes read or AVERROR @@ -589,6 +350,14 @@ int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); */ #define AVIO_FLAG_NONBLOCK 8 +/** + * Use direct mode. + * avio_read and avio_write should if possible be satisfied directly + * instead of going through a buffer, and avio_seek will always + * call the underlying seek function directly. + */ +#define AVIO_FLAG_DIRECT 0x8000 + /** * Create and initialize a AVIOContext for accessing the * resource indicated by url. @@ -599,7 +368,7 @@ int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); * In case of failure the pointed to value is set to NULL. * @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); @@ -618,7 +387,7 @@ int avio_open(AVIOContext **s, const char *url, int flags); * @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, @@ -628,10 +397,28 @@ int avio_open2(AVIOContext **s, const char *url, int flags, * Close the resource accessed by the AVIOContext s and free it. * This function can only be used if s was opened by avio_open(). * + * The internal buffer is automatically flushed before closing the + * resource. + * * @return 0 on success, an AVERROR < 0 on error. + * @see avio_closep */ int avio_close(AVIOContext *s); +/** + * Close the resource accessed by the AVIOContext *s, free it + * and set the pointer pointing to it to NULL. + * This function can only be used if s was opened by avio_open(). + * + * The internal buffer is automatically flushed before closing the + * resource. + * + * @return 0 on success, an AVERROR < 0 on error. + * @see avio_close + */ +int avio_closep(AVIOContext **s); + + /** * Open a write only memory stream. * @@ -653,7 +440,6 @@ int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); /** * Iterate through names of available protocols. - * @note it is recommanded to use av_protocol_next() instead of this * * @param opaque A private pointer representing current protocol. * It must be a pointer to NULL on first iteration and will diff --git a/extern/ffmpeg/include/libavformat/version.h b/extern/ffmpeg/include/libavformat/version.h index f3848da6bb..0028c9b074 100644 --- a/extern/ffmpeg/include/libavformat/version.h +++ b/extern/ffmpeg/include/libavformat/version.h @@ -29,9 +29,9 @@ #include "libavutil/avutil.h" -#define LIBAVFORMAT_VERSION_MAJOR 53 -#define LIBAVFORMAT_VERSION_MINOR 31 -#define LIBAVFORMAT_VERSION_MICRO 100 +#define LIBAVFORMAT_VERSION_MAJOR 55 +#define LIBAVFORMAT_VERSION_MINOR 19 +#define LIBAVFORMAT_VERSION_MICRO 104 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ @@ -44,86 +44,33 @@ #define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) /** - * Those FF_API_* defines are not part of public API. - * They may change, break or disappear at any time. + * FF_API_* defines may be placed below to indicate public API that will be + * 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_METADATA2 -#define FF_API_OLD_METADATA2 (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_OLD_AVIO -#define FF_API_OLD_AVIO (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_DUMP_FORMAT -#define FF_API_DUMP_FORMAT (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_PARSE_DATE -#define FF_API_PARSE_DATE (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_FIND_INFO_TAG -#define FF_API_FIND_INFO_TAG (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_PKT_DUMP -#define FF_API_PKT_DUMP (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_GUESS_IMG2_CODEC -#define FF_API_GUESS_IMG2_CODEC (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_SDP_CREATE -#define FF_API_SDP_CREATE (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif + #ifndef FF_API_ALLOC_OUTPUT_CONTEXT -#define FF_API_ALLOC_OUTPUT_CONTEXT (LIBAVFORMAT_VERSION_MAJOR < 54) +#define FF_API_ALLOC_OUTPUT_CONTEXT (LIBAVFORMAT_VERSION_MAJOR < 56) #endif #ifndef FF_API_FORMAT_PARAMETERS -#define FF_API_FORMAT_PARAMETERS (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_FLAG_RTP_HINT -#define FF_API_FLAG_RTP_HINT (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_AVSTREAM_QUALITY -#define FF_API_AVSTREAM_QUALITY (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_LOOP_INPUT -#define FF_API_LOOP_INPUT (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_LOOP_OUTPUT -#define FF_API_LOOP_OUTPUT (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_TIMESTAMP -#define FF_API_TIMESTAMP (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_FILESIZE -#define FF_API_FILESIZE (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_MUXRATE -#define FF_API_MUXRATE (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_RTSP_URL_OPTIONS -#define FF_API_RTSP_URL_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 54) +#define FF_API_FORMAT_PARAMETERS (LIBAVFORMAT_VERSION_MAJOR < 56) #endif #ifndef FF_API_NEW_STREAM -#define FF_API_NEW_STREAM (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_PRELOAD -#define FF_API_PRELOAD (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_STREAM_COPY -#define FF_API_STREAM_COPY (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_SEEK_PUBLIC -#define FF_API_SEEK_PUBLIC (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_REORDER_PRIVATE -#define FF_API_REORDER_PRIVATE (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_OLD_INTERRUPT_CB -#define FF_API_OLD_INTERRUPT_CB (LIBAVFORMAT_VERSION_MAJOR < 54) +#define FF_API_NEW_STREAM (LIBAVFORMAT_VERSION_MAJOR < 56) #endif #ifndef FF_API_SET_PTS_INFO -#define FF_API_SET_PTS_INFO (LIBAVFORMAT_VERSION_MAJOR < 54) +#define FF_API_SET_PTS_INFO (LIBAVFORMAT_VERSION_MAJOR < 56) #endif #ifndef FF_API_CLOSE_INPUT_FILE -#define FF_API_CLOSE_INPUT_FILE (LIBAVFORMAT_VERSION_MAJOR < 55) +#define FF_API_CLOSE_INPUT_FILE (LIBAVFORMAT_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_READ_PACKET +#define FF_API_READ_PACKET (LIBAVFORMAT_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_ASS_SSA +#define FF_API_ASS_SSA (LIBAVFORMAT_VERSION_MAJOR < 56) +#endif +#ifndef FF_API_R_FRAME_RATE +#define FF_API_R_FRAME_RATE 1 #endif - #endif /* AVFORMAT_VERSION_H */ diff --git a/extern/ffmpeg/include/libavutil/adler32.h b/extern/ffmpeg/include/libavutil/adler32.h index e926ef6cc2..8c08d2b882 100644 --- a/extern/ffmpeg/include/libavutil/adler32.h +++ b/extern/ffmpeg/include/libavutil/adler32.h @@ -25,7 +25,12 @@ #include "attributes.h" /** + * @defgroup lavu_adler32 Adler32 * @ingroup lavu_crypto + * @{ + */ + +/** * Calculate the Adler32 checksum of a buffer. * * Passing the return value to a subsequent av_adler32_update() call @@ -40,4 +45,8 @@ unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf, unsigned int len) av_pure; +/** + * @} + */ + #endif /* AVUTIL_ADLER32_H */ diff --git a/extern/ffmpeg/include/libavutil/aes.h b/extern/ffmpeg/include/libavutil/aes.h index bafa4cc3c4..09efbda107 100644 --- a/extern/ffmpeg/include/libavutil/aes.h +++ b/extern/ffmpeg/include/libavutil/aes.h @@ -23,6 +23,9 @@ #include +#include "attributes.h" +#include "version.h" + /** * @defgroup lavu_aes AES * @ingroup lavu_crypto @@ -33,6 +36,11 @@ extern const int av_aes_size; struct AVAES; +/** + * Allocate an AVAES context. + */ +struct AVAES *av_aes_alloc(void); + /** * Initialize an AVAES context. * @param key_bits 128, 192 or 256 diff --git a/extern/ffmpeg/include/libavutil/attributes.h b/extern/ffmpeg/include/libavutil/attributes.h index 0a6fda172b..8c0e5b2979 100644 --- a/extern/ffmpeg/include/libavutil/attributes.h +++ b/extern/ffmpeg/include/libavutil/attributes.h @@ -35,66 +35,60 @@ #ifndef av_always_inline #if AV_GCC_VERSION_AT_LEAST(3,1) # define av_always_inline __attribute__((always_inline)) inline +#elif defined(_MSC_VER) +# define av_always_inline __forceinline #else # define av_always_inline inline #endif #endif -#ifndef av_noreturn -#if AV_GCC_VERSION_AT_LEAST(2,5) -# define av_noreturn __attribute__((noreturn)) +#ifndef av_extern_inline +#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) +# define av_extern_inline extern inline #else -# define av_noreturn +# define av_extern_inline inline #endif #endif -#ifndef av_noinline #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 -#endif -#ifndef av_pure #if AV_GCC_VERSION_AT_LEAST(3,1) # define av_pure __attribute__((pure)) #else # define av_pure #endif -#endif -#ifndef av_const #if AV_GCC_VERSION_AT_LEAST(2,6) # define av_const __attribute__((const)) #else # define av_const #endif -#endif -#ifndef av_cold #if AV_GCC_VERSION_AT_LEAST(4,3) # define av_cold __attribute__((cold)) #else # define av_cold #endif -#endif -#ifndef av_flatten #if AV_GCC_VERSION_AT_LEAST(4,1) # define av_flatten __attribute__((flatten)) #else # define av_flatten #endif -#endif -#ifndef attribute_deprecated #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 -#endif /** * Disable warnings about deprecated features @@ -108,48 +102,46 @@ _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 #endif -#ifndef av_unused #if defined(__GNUC__) # define av_unused __attribute__((unused)) #else # define av_unused #endif -#endif /** * Mark a variable as used and prevent the compiler from optimizing it * away. This is useful for variables accessed only from inline * assembler without the compiler being aware. */ -#ifndef av_used #if AV_GCC_VERSION_AT_LEAST(3,1) # define av_used __attribute__((used)) #else # define av_used #endif -#endif -#ifndef av_alias #if AV_GCC_VERSION_AT_LEAST(3,3) # define av_alias __attribute__((may_alias)) #else # define av_alias #endif -#endif -#ifndef av_uninit -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__) # define av_uninit(x) x=x #else # define av_uninit(x) x #endif -#endif #ifdef __GNUC__ # define av_builtin_constant_p __builtin_constant_p @@ -159,4 +151,10 @@ # define av_printf_format(fmtpos, attrpos) #endif +#if AV_GCC_VERSION_AT_LEAST(2,5) +# define av_noreturn __attribute__((noreturn)) +#else +# define av_noreturn +#endif + #endif /* AVUTIL_ATTRIBUTES_H */ diff --git a/extern/ffmpeg/include/libavutil/audio_fifo.h b/extern/ffmpeg/include/libavutil/audio_fifo.h new file mode 100644 index 0000000000..903b8f1cdf --- /dev/null +++ b/extern/ffmpeg/include/libavutil/audio_fifo.h @@ -0,0 +1,149 @@ +/* + * Audio FIFO + * Copyright (c) 2012 Justin Ruggles + * + * 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 + * Audio FIFO Buffer + */ + +#ifndef AVUTIL_AUDIO_FIFO_H +#define AVUTIL_AUDIO_FIFO_H + +#include "avutil.h" +#include "fifo.h" +#include "samplefmt.h" + +/** + * @addtogroup lavu_audio + * @{ + */ + +/** + * Context for an Audio FIFO Buffer. + * + * - Operates at the sample level rather than the byte level. + * - Supports multiple channels with either planar or packed sample format. + * - Automatic reallocation when writing to a full buffer. + */ +typedef struct AVAudioFifo AVAudioFifo; + +/** + * Free an AVAudioFifo. + * + * @param af AVAudioFifo to free + */ +void av_audio_fifo_free(AVAudioFifo *af); + +/** + * Allocate an AVAudioFifo. + * + * @param sample_fmt sample format + * @param channels number of channels + * @param nb_samples initial allocation size, in samples + * @return newly allocated AVAudioFifo, or NULL on error + */ +AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, + int nb_samples); + +/** + * Reallocate an AVAudioFifo. + * + * @param af AVAudioFifo to reallocate + * @param nb_samples new allocation size, in samples + * @return 0 if OK, or negative AVERROR code on failure + */ +int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); + +/** + * Write data to an AVAudioFifo. + * + * The AVAudioFifo will be reallocated automatically if the available space + * is less than nb_samples. + * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. + * + * @param af AVAudioFifo to write to + * @param data audio data plane pointers + * @param nb_samples number of samples to write + * @return number of samples actually written, or negative AVERROR + * code on failure. If successful, the number of samples + * actually written will always be nb_samples. + */ +int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples); + +/** + * Read data from an AVAudioFifo. + * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. + * + * @param af AVAudioFifo to read from + * @param data audio data plane pointers + * @param nb_samples number of samples to read + * @return number of samples actually read, or negative AVERROR code + * on failure. The number of samples actually read will not + * be greater than nb_samples, and will only be less than + * nb_samples if av_audio_fifo_size is less than nb_samples. + */ +int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples); + +/** + * Drain data from an AVAudioFifo. + * + * Removes the data without reading it. + * + * @param af AVAudioFifo to drain + * @param nb_samples number of samples to drain + * @return 0 if OK, or negative AVERROR code on failure + */ +int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); + +/** + * Reset the AVAudioFifo buffer. + * + * This empties all data in the buffer. + * + * @param af AVAudioFifo to reset + */ +void av_audio_fifo_reset(AVAudioFifo *af); + +/** + * Get the current number of samples in the AVAudioFifo available for reading. + * + * @param af the AVAudioFifo to query + * @return number of samples available for reading + */ +int av_audio_fifo_size(AVAudioFifo *af); + +/** + * Get the current number of samples in the AVAudioFifo available for writing. + * + * @param af the AVAudioFifo to query + * @return number of samples available for writing + */ +int av_audio_fifo_space(AVAudioFifo *af); + +/** + * @} + */ + +#endif /* AVUTIL_AUDIO_FIFO_H */ diff --git a/extern/ffmpeg/include/libavutil/audioconvert.h b/extern/ffmpeg/include/libavutil/audioconvert.h index 29ec1cbc0a..300a67cd3d 100644 --- a/extern/ffmpeg/include/libavutil/audioconvert.h +++ b/extern/ffmpeg/include/libavutil/audioconvert.h @@ -1,147 +1,6 @@ -/* - * Copyright (c) 2006 Michael Niedermayer - * Copyright (c) 2008 Peter Ross - * - * 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_AUDIOCONVERT_H -#define AVUTIL_AUDIOCONVERT_H +#include "version.h" -#include - -/** - * @file - * audio conversion routines - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup channel_masks Audio channel masks - * @{ - */ -#define AV_CH_FRONT_LEFT 0x00000001 -#define AV_CH_FRONT_RIGHT 0x00000002 -#define AV_CH_FRONT_CENTER 0x00000004 -#define AV_CH_LOW_FREQUENCY 0x00000008 -#define AV_CH_BACK_LEFT 0x00000010 -#define AV_CH_BACK_RIGHT 0x00000020 -#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 -#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 -#define AV_CH_BACK_CENTER 0x00000100 -#define AV_CH_SIDE_LEFT 0x00000200 -#define AV_CH_SIDE_RIGHT 0x00000400 -#define AV_CH_TOP_CENTER 0x00000800 -#define AV_CH_TOP_FRONT_LEFT 0x00001000 -#define AV_CH_TOP_FRONT_CENTER 0x00002000 -#define AV_CH_TOP_FRONT_RIGHT 0x00004000 -#define AV_CH_TOP_BACK_LEFT 0x00008000 -#define AV_CH_TOP_BACK_CENTER 0x00010000 -#define AV_CH_TOP_BACK_RIGHT 0x00020000 -#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. -#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. -#define AV_CH_WIDE_LEFT 0x0000000080000000ULL -#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL -#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL -#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL - -/** Channel mask value used for AVCodecContext.request_channel_layout - to indicate that the user requests the channel order of the decoder output - to be the native codec channel order. */ -#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL - -/** - * @} - * @defgroup channel_mask_c Audio channel convenience macros - * @{ - * */ -#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) -#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) - -/** - * @} - */ - -/** - * Return a channel layout id that matches name, 0 if no match. - * name can be one or several of the following notations, - * separated by '+' or '|': - * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, - * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); - * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, - * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - * - a number of channels, in decimal, optionnally followed by 'c', yielding - * the default channel layout for that number of channels (@see - * av_get_default_channel_layout); - * - a channel layout mask, in hexadecimal starting with "0x" (see the - * AV_CH_* macros). - + Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7" - */ -uint64_t av_get_channel_layout(const char *name); - -/** - * Return a description of a channel layout. - * If nb_channels is <= 0, it is guessed from the channel_layout. - * - * @param buf put here the string containing the channel layout - * @param buf_size size in bytes of the buffer - */ -void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); - -/** - * Return the number of channels in the channel layout. - */ -int av_get_channel_layout_nb_channels(uint64_t channel_layout); - -/** - * Return default channel layout for a given number of channels. - */ -int64_t av_get_default_channel_layout(int nb_channels); - -/** - * @} - */ - -#endif /* AVUTIL_AUDIOCONVERT_H */ +#if FF_API_AUDIOCONVERT +#include "channel_layout.h" +#endif diff --git a/extern/ffmpeg/include/libavutil/avassert.h b/extern/ffmpeg/include/libavutil/avassert.h index e100d0bfdd..41f5e0eea7 100644 --- a/extern/ffmpeg/include/libavutil/avassert.h +++ b/extern/ffmpeg/include/libavutil/avassert.h @@ -36,7 +36,7 @@ */ #define av_assert0(cond) do { \ if (!(cond)) { \ - av_log(NULL, AV_LOG_FATAL, "Assertion %s failed at %s:%d\n", \ + av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \ AV_STRINGIFY(cond), __FILE__, __LINE__); \ abort(); \ } \ diff --git a/extern/ffmpeg/include/libavutil/avconfig.h b/extern/ffmpeg/include/libavutil/avconfig.h index f10aa6186b..f6685b72c1 100644 --- a/extern/ffmpeg/include/libavutil/avconfig.h +++ b/extern/ffmpeg/include/libavutil/avconfig.h @@ -3,4 +3,6 @@ #define AVUTIL_AVCONFIG_H #define AV_HAVE_BIGENDIAN 0 #define AV_HAVE_FAST_UNALIGNED 1 +#define AV_HAVE_INCOMPATIBLE_LIBAV_ABI 0 +#define AV_HAVE_INCOMPATIBLE_FORK_ABI 0 #endif /* AVUTIL_AVCONFIG_H */ diff --git a/extern/ffmpeg/include/libavutil/avstring.h b/extern/ffmpeg/include/libavutil/avstring.h index f73d6e7420..438ef799eb 100644 --- a/extern/ffmpeg/include/libavutil/avstring.h +++ b/extern/ffmpeg/include/libavutil/avstring.h @@ -66,6 +66,21 @@ int av_stristart(const char *str, const char *pfx, const char **ptr); */ char *av_stristr(const char *haystack, const char *needle); +/** + * Locate the first occurrence of the string needle in the string haystack + * where not more than hay_length characters are searched. A zero-length + * string needle is considered to match at the start of haystack. + * + * This function is a length-limited version of the standard strstr(). + * + * @param haystack string to search in + * @param needle string to search for + * @param hay_length length of string to search in + * @return pointer to the located match within haystack + * or a null pointer if no match + */ +char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); + /** * Copy the string src to dst, but no more than size - 1 bytes, and * null-terminate dst. @@ -170,6 +185,21 @@ char *av_get_token(const char **buf, const char *term); */ char *av_strtok(char *s, const char *delim, char **saveptr); +/** + * Locale-independent conversion of ASCII isdigit. + */ +int av_isdigit(int c); + +/** + * Locale-independent conversion of ASCII isgraph. + */ +int av_isgraph(int c); + +/** + * Locale-independent conversion of ASCII isspace. + */ +int av_isspace(int c); + /** * Locale-independent conversion of ASCII characters to uppercase. */ @@ -190,6 +220,11 @@ static inline int av_tolower(int c) return c; } +/** + * Locale-independent conversion of ASCII isxdigit. + */ +int av_isxdigit(int c); + /** * Locale-independent case-insensitive compare. * @note This means only ASCII-range characters are case-insensitive @@ -202,6 +237,64 @@ int av_strcasecmp(const char *a, const char *b); */ int av_strncasecmp(const char *a, const char *b, size_t n); + +/** + * Thread safe basename. + * @param path the path, on DOS both \ and / are considered separators. + * @return pointer to the basename substring. + */ +const char *av_basename(const char *path); + +/** + * Thread safe dirname. + * @param path the path, on DOS both \ and / are considered separators. + * @return the path with the separator replaced by the string terminator or ".". + * @note the function may change the input string. + */ +const char *av_dirname(char *path); + +enum AVEscapeMode { + AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. + AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. + AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. +}; + +/** + * Consider spaces special and escape them even in the middle of the + * string. + * + * This is equivalent to adding the whitespace characters to the special + * characters lists, except it is guaranteed to use the exact same list + * of whitespace characters as the rest of libavutil. + */ +#define AV_ESCAPE_FLAG_WHITESPACE 0x01 + +/** + * Escape only specified special characters. + * Without this flag, escape also any characters that may be considered + * special by av_get_token(), such as the single quote. + */ +#define AV_ESCAPE_FLAG_STRICT 0x02 + +/** + * Escape string in src, and put the escaped string in an allocated + * string in *dst, which must be freed with av_free(). + * + * @param dst pointer where an allocated string is put + * @param src string to escape, must be non-NULL + * @param special_chars string containing the special characters which + * need to be escaped, can be NULL + * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. + * Any unknown value for mode will be considered equivalent to + * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without + * notice. + * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros + * @return the length of the allocated string, or a negative error code in case of error + * @see av_bprint_escape() + */ +int av_escape(char **dst, const char *src, const char *special_chars, + enum AVEscapeMode mode, int flags); + /** * @} */ diff --git a/extern/ffmpeg/include/libavutil/avutil.h b/extern/ffmpeg/include/libavutil/avutil.h index 3f772621e0..4692c005c7 100644 --- a/extern/ffmpeg/include/libavutil/avutil.h +++ b/extern/ffmpeg/include/libavutil/avutil.h @@ -29,19 +29,52 @@ /** * @mainpage * - * @section libav_intro Introduction + * @section ffmpeg_intro Introduction * - * This document describe the usage of the different libraries + * This document describes the usage of the different libraries * provided by FFmpeg. * * @li @ref libavc "libavcodec" encoding/decoding library - * @li @subpage libavfilter graph based frame editing library + * @li @ref lavfi "libavfilter" graph-based frame editing library * @li @ref libavf "libavformat" I/O and muxing/demuxing library * @li @ref lavd "libavdevice" special devices muxing/demuxing library * @li @ref lavu "libavutil" common utility library - * @li @subpage libpostproc post processing library - * @li @subpage libswscale color conversion and scaling 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 * + * @section ffmpeg_versioning Versioning and compatibility + * + * Each of the FFmpeg libraries contains a version.h header, which defines a + * major, minor and micro version number with the + * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version + * number is incremented with backward incompatible changes - e.g. removing + * parts of the public API, reordering public struct members, etc. The minor + * version number is incremented for backward compatible API changes or major + * new features - e.g. adding a new public function or a new decoder. The micro + * version number is incremented for smaller changes that a calling program + * might still want to check for - e.g. changing behavior in a previously + * unspecified situation. + * + * FFmpeg guarantees backward API and ABI compatibility for each library as long + * as its major version number is unchanged. This means that no public symbols + * will be removed or renamed. Types and names of the public struct members and + * values of public macros and enums will remain the same (unless they were + * explicitly declared as not part of the public API). Documented behavior will + * not change. + * + * In other words, any correct program that works with a given FFmpeg snapshot + * should work just as well without any changes with any later snapshot with the + * same major versions. This applies to both rebuilding the program against new + * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program + * links against. + * + * However, new public symbols may be added and new members may be appended to + * public structs whose size is not part of public ABI (most public structs in + * FFmpeg). New macros and enum values may be added. Behavior in undocumented + * situations may change slightly (and be documented). All those are accompanied + * by an entry in doc/APIchanges and incrementing either the minor or micro + * version number. */ /** @@ -95,6 +128,12 @@ * * @} * + * @defgroup lavu_log Logging Facility + * + * @{ + * + * @} + * * @defgroup lavu_misc Other * * @{ @@ -109,96 +148,6 @@ */ -/** - * @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) - -/** - * @} - */ - -/** - * @defgroup version_utils Library Version Macros - * - * Useful to check and match library version in order to maintain - * backward compatibility. - * - * @{ - */ - -#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c) -#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c -#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) - -/** - * @} - * - * @defgroup lavu_ver Version and Build diagnostics - * - * Macros and function useful to check at compiletime and at runtime - * which version of libavutil is in use. - * - * @{ - */ - -#define LIBAVUTIL_VERSION_MAJOR 51 -#define LIBAVUTIL_VERSION_MINOR 34 -#define LIBAVUTIL_VERSION_MICRO 101 - -#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT - -#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) - -/** - * @} - * - * @defgroup depr_guards Deprecation guards - * Those FF_API_* defines are not part of public API. - * They may change, break or disappear at any time. - * - * They are used mostly internally to mark code that will be removed - * on the next major version. - * - * @{ - */ -#ifndef FF_API_OLD_EVAL_NAMES -#define FF_API_OLD_EVAL_NAMES (LIBAVUTIL_VERSION_MAJOR < 52) -#endif -#ifndef FF_API_GET_BITS_PER_SAMPLE_FMT -#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 52) -#endif -#ifndef FF_API_FIND_OPT -#define FF_API_FIND_OPT (LIBAVUTIL_VERSION_MAJOR < 52) -#endif -#ifndef FF_API_AV_FIFO_PEEK -#define FF_API_AV_FIFO_PEEK (LIBAVUTIL_VERSION_MAJOR < 52) -#endif -#ifndef FF_API_OLD_AVOPTIONS -#define FF_API_OLD_AVOPTIONS (LIBAVUTIL_VERSION_MAJOR < 52) -#endif - -/** - * @} - */ - /** * @addtogroup lavu_ver * @{ @@ -277,7 +226,7 @@ const char *av_get_media_type_string(enum AVMediaType media_type); * either pts or dts. */ -#define AV_NOPTS_VALUE INT64_C(0x8000000000000000) +#define AV_NOPTS_VALUE ((int64_t)UINT64_C(0x8000000000000000)) /** * Internal time base represented as integer @@ -327,6 +276,7 @@ char av_get_picture_type_char(enum AVPictureType pict_type); #include "common.h" #include "error.h" +#include "version.h" #include "mathematics.h" #include "rational.h" #include "intfloat_readwrite.h" @@ -341,6 +291,27 @@ static inline void *av_x_if_null(const void *p, const void *x) return (void *)(intptr_t)(p ? p : x); } +/** + * Compute the length of an integer list. + * + * @param elsize size in bytes of each list element (only 1, 2, 4 or 8) + * @param term list terminator (usually 0 or -1) + * @param list pointer to the list + * @return length of the list, in elements, not counting the terminator + */ +unsigned av_int_list_length_for_size(unsigned elsize, + const void *list, uint64_t term) av_pure; + +/** + * Compute the length of an integer list. + * + * @param term list terminator (usually 0 or -1) + * @param list pointer to the list + * @return length of the list, in elements, not counting the terminator + */ +#define av_int_list_length(list, term) \ + av_int_list_length_for_size(sizeof(*(list)), list, term) + /** * @} * @} diff --git a/extern/ffmpeg/include/libavutil/base64.h b/extern/ffmpeg/include/libavutil/base64.h index b095576130..514498eac8 100644 --- a/extern/ffmpeg/include/libavutil/base64.h +++ b/extern/ffmpeg/include/libavutil/base64.h @@ -46,15 +46,17 @@ int av_base64_decode(uint8_t *out, const char *in, int out_size); * Encode data to base64 and null-terminate. * * @param out buffer for encoded data - * @param out_size size in bytes of the output buffer, must be at - * least AV_BASE64_SIZE(in_size) - * @param in_size size in bytes of the 'in' buffer - * @return 'out' or NULL in case of error + * @param out_size size in bytes of the out buffer (including the + * null terminator), must be at least AV_BASE64_SIZE(in_size) + * @param in input buffer containing the data to encode + * @param in_size size in bytes of the in buffer + * @return out or NULL in case of error */ char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); /** - * Calculate the output size needed to base64-encode x bytes. + * Calculate the output size needed to base64-encode x bytes to a + * null-terminated string. */ #define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) diff --git a/extern/ffmpeg/include/libavutil/blowfish.h b/extern/ffmpeg/include/libavutil/blowfish.h new file mode 100644 index 0000000000..0b004532de --- /dev/null +++ b/extern/ffmpeg/include/libavutil/blowfish.h @@ -0,0 +1,77 @@ +/* + * Blowfish algorithm + * Copyright (c) 2012 Samuel Pitoiset + * + * 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_BLOWFISH_H +#define AVUTIL_BLOWFISH_H + +#include + +/** + * @defgroup lavu_blowfish Blowfish + * @ingroup lavu_crypto + * @{ + */ + +#define AV_BF_ROUNDS 16 + +typedef struct AVBlowfish { + uint32_t p[AV_BF_ROUNDS + 2]; + uint32_t s[4][256]; +} AVBlowfish; + +/** + * Initialize an AVBlowfish context. + * + * @param ctx an AVBlowfish context + * @param key a key + * @param key_len length of the key + */ +void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); + +/** + * Encrypt or decrypt a buffer using a previously initialized context. + * + * @param ctx an AVBlowfish context + * @param xl left four bytes halves of input to be encrypted + * @param xr right four bytes halves of input to be encrypted + * @param decrypt 0 for encryption, 1 for decryption + */ +void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, + int decrypt); + +/** + * Encrypt or decrypt a buffer using a previously initialized context. + * + * @param ctx an AVBlowfish context + * @param dst destination array, can be equal to src + * @param src source array, can be equal to dst + * @param count number of 8 byte blocks + * @param iv initialization vector for CBC mode, if NULL ECB will be used + * @param decrypt 0 for encryption, 1 for decryption + */ +void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, + int count, uint8_t *iv, int decrypt); + +/** + * @} + */ + +#endif /* AVUTIL_BLOWFISH_H */ diff --git a/extern/ffmpeg/include/libavutil/bprint.h b/extern/ffmpeg/include/libavutil/bprint.h new file mode 100644 index 0000000000..839ec1ec0d --- /dev/null +++ b/extern/ffmpeg/include/libavutil/bprint.h @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2012 Nicolas George + * + * 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_BPRINT_H +#define AVUTIL_BPRINT_H + +#include + +#include "attributes.h" +#include "avstring.h" + +/** + * Define a structure with extra padding to a fixed size + * This helps ensuring binary compatibility with future versions. + */ +#define FF_PAD_STRUCTURE(size, ...) \ + __VA_ARGS__ \ + char reserved_padding[size - sizeof(struct { __VA_ARGS__ })]; + +/** + * Buffer to print data progressively + * + * The string buffer grows as necessary and is always 0-terminated. + * The content of the string is never accessed, and thus is + * encoding-agnostic and can even hold binary data. + * + * Small buffers are kept in the structure itself, and thus require no + * memory allocation at all (unless the contents of the buffer is needed + * after the structure goes out of scope). This is almost as lightweight as + * declaring a local "char buf[512]". + * + * The length of the string can go beyond the allocated size: the buffer is + * then truncated, but the functions still keep account of the actual total + * length. + * + * In other words, buf->len can be greater than buf->size and records the + * total length of what would have been to the buffer if there had been + * enough memory. + * + * Append operations do not need to be tested for failure: if a memory + * allocation fails, data stop being appended to the buffer, but the length + * is still updated. This situation can be tested with + * av_bprint_is_complete(). + * + * The size_max field determines several possible behaviours: + * + * size_max = -1 (= UINT_MAX) or any large value will let the buffer be + * reallocated as necessary, with an amortized linear cost. + * + * size_max = 0 prevents writing anything to the buffer: only the total + * length is computed. The write operations can then possibly be repeated in + * a buffer with exactly the necessary size + * (using size_init = size_max = len + 1). + * + * size_max = 1 is automatically replaced by the exact size available in the + * structure itself, thus ensuring no dynamic memory allocation. The + * internal buffer is large enough to hold a reasonable paragraph of text, + * such as the current paragraph. + */ +typedef struct AVBPrint { + FF_PAD_STRUCTURE(1024, + char *str; /**< string so far */ + unsigned len; /**< length so far */ + unsigned size; /**< allocated memory */ + unsigned size_max; /**< maximum allocated memory */ + char reserved_internal_buffer[1]; + ) +} AVBPrint; + +/** + * Convenience macros for special values for av_bprint_init() size_max + * parameter. + */ +#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) +#define AV_BPRINT_SIZE_AUTOMATIC 1 +#define AV_BPRINT_SIZE_COUNT_ONLY 0 + +/** + * Init a print buffer. + * + * @param buf buffer to init + * @param size_init initial size (including the final 0) + * @param size_max maximum size; + * 0 means do not write anything, just count the length; + * 1 is replaced by the maximum value for automatic storage; + * any large value means that the internal buffer will be + * reallocated as needed up to that limit; -1 is converted to + * UINT_MAX, the largest limit possible. + * Check also AV_BPRINT_SIZE_* macros. + */ +void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); + +/** + * Init a print buffer using a pre-existing buffer. + * + * The buffer will not be reallocated. + * + * @param buf buffer structure to init + * @param buffer byte buffer to use for the string data + * @param size size of buffer + */ +void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size); + +/** + * Append a formatted string to a print buffer. + */ +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. + * + * param buf bprint buffer to use + * param fmt date and time format string, see strftime() + * param tm broken-down time structure to translate + * + * @note due to poor design of the standard strftime function, it may + * produce poor results if the format string expands to a very long text and + * the bprint buffer is near the limit stated by the size_max option. + */ +void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm); + +/** + * Allocate bytes in the buffer for external use. + * + * @param[in] buf buffer structure + * @param[in] size required size + * @param[out] mem pointer to the memory area + * @param[out] actual_size size of the memory area after allocation; + * can be larger or smaller than size + */ +void av_bprint_get_buffer(AVBPrint *buf, unsigned size, + unsigned char **mem, unsigned *actual_size); + +/** + * Reset the string to "" but keep internal allocated data. + */ +void av_bprint_clear(AVBPrint *buf); + +/** + * Test if the print buffer is complete (not truncated). + * + * It may have been truncated due to a memory allocation failure + * or the size_max limit (compare size and size_max if necessary). + */ +static inline int av_bprint_is_complete(AVBPrint *buf) +{ + return buf->len < buf->size; +} + +/** + * Finalize a print buffer. + * + * The print buffer can no longer be used afterwards, + * but the len and size fields are still valid. + * + * @arg[out] ret_str if not NULL, used to return a permanent copy of the + * buffer contents, or NULL if memory allocation fails; + * if NULL, the buffer is discarded and freed + * @return 0 for success or error code (probably AVERROR(ENOMEM)) + */ +int av_bprint_finalize(AVBPrint *buf, char **ret_str); + +/** + * Escape the content in src and append it to dstbuf. + * + * @param dstbuf already inited destination bprint buffer + * @param src string containing the text to escape + * @param special_chars string containing the special characters which + * need to be escaped, can be NULL + * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. + * Any unknown value for mode will be considered equivalent to + * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without + * notice. + * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros + */ +void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, + enum AVEscapeMode mode, int flags); + +#endif /* AVUTIL_BPRINT_H */ diff --git a/extern/ffmpeg/include/libavutil/buffer.h b/extern/ffmpeg/include/libavutil/buffer.h new file mode 100644 index 0000000000..b4399fd39f --- /dev/null +++ b/extern/ffmpeg/include/libavutil/buffer.h @@ -0,0 +1,274 @@ +/* + * 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_buffer + * refcounted data buffer API + */ + +#ifndef AVUTIL_BUFFER_H +#define AVUTIL_BUFFER_H + +#include + +/** + * @defgroup lavu_buffer AVBuffer + * @ingroup lavu_data + * + * @{ + * AVBuffer is an API for reference-counted data buffers. + * + * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer + * represents the data buffer itself; it is opaque and not meant to be accessed + * by the caller directly, but only through AVBufferRef. However, the caller may + * e.g. compare two AVBuffer pointers to check whether two different references + * are describing the same data buffer. AVBufferRef represents a single + * reference to an AVBuffer and it is the object that may be manipulated by the + * caller directly. + * + * There are two functions provided for creating a new AVBuffer with a single + * reference -- av_buffer_alloc() to just allocate a new buffer, and + * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing + * reference, additional references may be created with av_buffer_ref(). + * Use av_buffer_unref() to free a reference (this will automatically free the + * data once all the references are freed). + * + * The convention throughout this API and the rest of FFmpeg is such that the + * buffer is considered writable if there exists only one reference to it (and + * it has not been marked as read-only). The av_buffer_is_writable() function is + * provided to check whether this is true and av_buffer_make_writable() will + * automatically create a new writable buffer when necessary. + * Of course nothing prevents the calling code from violating this convention, + * however that is safe only when all the existing references are under its + * control. + * + * @note Referencing and unreferencing the buffers is thread-safe and thus + * may be done from multiple threads simultaneously without any need for + * additional locking. + * + * @note Two different references to the same buffer can point to different + * parts of the buffer (i.e. their AVBufferRef.data will not be equal). + */ + +/** + * A reference counted buffer type. It is opaque and is meant to be used through + * references (AVBufferRef). + */ +typedef struct AVBuffer AVBuffer; + +/** + * A reference to a data buffer. + * + * The size of this struct is not a part of the public ABI and it is not meant + * to be allocated directly. + */ +typedef struct AVBufferRef { + AVBuffer *buffer; + + /** + * The data buffer. It is considered writable if and only if + * this is the only reference to the buffer, in which case + * av_buffer_is_writable() returns 1. + */ + uint8_t *data; + /** + * Size of data in bytes. + */ + int size; +} AVBufferRef; + +/** + * Allocate an AVBuffer of the given size using av_malloc(). + * + * @return an AVBufferRef of given size or NULL when out of memory + */ +AVBufferRef *av_buffer_alloc(int size); + +/** + * Same as av_buffer_alloc(), except the returned buffer will be initialized + * to zero. + */ +AVBufferRef *av_buffer_allocz(int size); + +/** + * Always treat the buffer as read-only, even when it has only one + * reference. + */ +#define AV_BUFFER_FLAG_READONLY (1 << 0) + +/** + * Create an AVBuffer from an existing array. + * + * If this function is successful, data is owned by the AVBuffer. The caller may + * only access data through the returned AVBufferRef and references derived from + * it. + * If this function fails, data is left untouched. + * @param data data array + * @param size size of data in bytes + * @param free a callback for freeing this buffer's data + * @param opaque parameter to be got for processing or passed to free + * @param flags a combination of AV_BUFFER_FLAG_* + * + * @return an AVBufferRef referring to data on success, NULL on failure. + */ +AVBufferRef *av_buffer_create(uint8_t *data, int size, + void (*free)(void *opaque, uint8_t *data), + void *opaque, int flags); + +/** + * Default free callback, which calls av_free() on the buffer data. + * This function is meant to be passed to av_buffer_create(), not called + * directly. + */ +void av_buffer_default_free(void *opaque, uint8_t *data); + +/** + * Create a new reference to an AVBuffer. + * + * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on + * failure. + */ +AVBufferRef *av_buffer_ref(AVBufferRef *buf); + +/** + * Free a given reference and automatically free the buffer if there are no more + * references to it. + * + * @param buf the reference to be freed. The pointer is set to NULL on return. + */ +void av_buffer_unref(AVBufferRef **buf); + +/** + * @return 1 if the caller may write to the data referred to by buf (which is + * true if and only if buf is the only reference to the underlying AVBuffer). + * Return 0 otherwise. + * A positive answer is valid until av_buffer_ref() is called on buf. + */ +int av_buffer_is_writable(const AVBufferRef *buf); + +/** + * @return the opaque parameter set by av_buffer_create. + */ +void *av_buffer_get_opaque(const AVBufferRef *buf); + +int av_buffer_get_ref_count(const AVBufferRef *buf); + +/** + * Create a writable reference from a given buffer reference, avoiding data copy + * if possible. + * + * @param buf buffer reference to make writable. On success, buf is either left + * untouched, or it is unreferenced and a new writable AVBufferRef is + * written in its place. On failure, buf is left untouched. + * @return 0 on success, a negative AVERROR on failure. + */ +int av_buffer_make_writable(AVBufferRef **buf); + +/** + * Reallocate a given buffer. + * + * @param buf a buffer reference to reallocate. On success, buf will be + * unreferenced and a new reference with the required size will be + * written in its place. On failure buf will be left untouched. *buf + * may be NULL, then a new buffer is allocated. + * @param size required new buffer size. + * @return 0 on success, a negative AVERROR on failure. + * + * @note the buffer is actually reallocated with av_realloc() only if it was + * initially allocated through av_buffer_realloc(NULL) and there is only one + * reference to it (i.e. the one passed to this function). In all other cases + * a new buffer is allocated and the data is copied. + */ +int av_buffer_realloc(AVBufferRef **buf, int size); + +/** + * @} + */ + +/** + * @defgroup lavu_bufferpool AVBufferPool + * @ingroup lavu_data + * + * @{ + * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. + * + * Frequently allocating and freeing large buffers may be slow. AVBufferPool is + * meant to solve this in cases when the caller needs a set of buffers of the + * same size (the most obvious use case being buffers for raw video or audio + * frames). + * + * At the beginning, the user must call av_buffer_pool_init() to create the + * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to + * get a reference to a new buffer, similar to av_buffer_alloc(). This new + * reference works in all aspects the same way as the one created by + * av_buffer_alloc(). However, when the last reference to this buffer is + * unreferenced, it is returned to the pool instead of being freed and will be + * reused for subsequent av_buffer_pool_get() calls. + * + * When the caller is done with the pool and no longer needs to allocate any new + * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. + * Once all the buffers are released, it will automatically be freed. + * + * Allocating and releasing buffers with this API is thread-safe as long as + * either the default alloc callback is used, or the user-supplied one is + * thread-safe. + */ + +/** + * The buffer pool. This structure is opaque and not meant to be accessed + * directly. It is allocated with av_buffer_pool_init() and freed with + * av_buffer_pool_uninit(). + */ +typedef struct AVBufferPool AVBufferPool; + +/** + * Allocate and initialize a buffer pool. + * + * @param size size of each buffer in this pool + * @param alloc a function that will be used to allocate new buffers when the + * pool is empty. May be NULL, then the default allocator will be used + * (av_buffer_alloc()). + * @return newly created buffer pool on success, NULL on error. + */ +AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); + +/** + * Mark the pool as being available for freeing. It will actually be freed only + * once all the allocated buffers associated with the pool are released. Thus it + * is safe to call this function while some of the allocated buffers are still + * in use. + * + * @param pool pointer to the pool to be freed. It will be set to NULL. + * @see av_buffer_pool_can_uninit() + */ +void av_buffer_pool_uninit(AVBufferPool **pool); + +/** + * Allocate a new AVBuffer, reusing an old buffer from the pool when available. + * This function may be called simultaneously from multiple threads. + * + * @return a reference to the new buffer on success, NULL on error. + */ +AVBufferRef *av_buffer_pool_get(AVBufferPool *pool); + +/** + * @} + */ + +#endif /* AVUTIL_BUFFER_H */ diff --git a/extern/ffmpeg/include/libavutil/channel_layout.h b/extern/ffmpeg/include/libavutil/channel_layout.h new file mode 100644 index 0000000000..ba4f96d2d0 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/channel_layout.h @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2006 Michael Niedermayer + * Copyright (c) 2008 Peter Ross + * + * 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_CHANNEL_LAYOUT_H +#define AVUTIL_CHANNEL_LAYOUT_H + +#include + +/** + * @file + * audio channel layout utility functions + */ + +/** + * @addtogroup lavu_audio + * @{ + */ + +/** + * @defgroup channel_masks Audio channel masks + * + * A channel layout is a 64-bits integer with a bit set for every channel. + * The number of bits set must be equal to the number of channels. + * The value 0 means that the channel layout is not known. + * @note this data structure is not powerful enough to handle channels + * combinations that have the same channel multiple times, such as + * dual-mono. + * + * @{ + */ +#define AV_CH_FRONT_LEFT 0x00000001 +#define AV_CH_FRONT_RIGHT 0x00000002 +#define AV_CH_FRONT_CENTER 0x00000004 +#define AV_CH_LOW_FREQUENCY 0x00000008 +#define AV_CH_BACK_LEFT 0x00000010 +#define AV_CH_BACK_RIGHT 0x00000020 +#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 +#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 +#define AV_CH_BACK_CENTER 0x00000100 +#define AV_CH_SIDE_LEFT 0x00000200 +#define AV_CH_SIDE_RIGHT 0x00000400 +#define AV_CH_TOP_CENTER 0x00000800 +#define AV_CH_TOP_FRONT_LEFT 0x00001000 +#define AV_CH_TOP_FRONT_CENTER 0x00002000 +#define AV_CH_TOP_FRONT_RIGHT 0x00004000 +#define AV_CH_TOP_BACK_LEFT 0x00008000 +#define AV_CH_TOP_BACK_CENTER 0x00010000 +#define AV_CH_TOP_BACK_RIGHT 0x00020000 +#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. +#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. +#define AV_CH_WIDE_LEFT 0x0000000080000000ULL +#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL +#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL +#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL +#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL + +/** Channel mask value used for AVCodecContext.request_channel_layout + to indicate that the user requests the channel order of the decoder output + to be the native codec channel order. */ +#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL + +/** + * @} + * @defgroup channel_mask_c Audio channel convenience macros + * @{ + * */ +#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) +#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) +#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) +#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) +#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) +#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) +#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) +#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) +#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) +#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) +#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) +#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) +#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) +#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) +#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) +#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) +#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) +#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) +#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) +#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) +#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) +#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) +#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) +#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) +#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) +#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) +#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) + +enum AVMatrixEncoding { + AV_MATRIX_ENCODING_NONE, + AV_MATRIX_ENCODING_DOLBY, + AV_MATRIX_ENCODING_DPLII, + AV_MATRIX_ENCODING_NB +}; + +/** + * @} + */ + +/** + * Return a channel layout id that matches name, or 0 if no match is found. + * + * name can be one or several of the following notations, + * separated by '+' or '|': + * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, + * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); + * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, + * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); + * - a number of channels, in decimal, optionally followed by 'c', yielding + * the default channel layout for that number of channels (@see + * av_get_default_channel_layout); + * - a channel layout mask, in hexadecimal starting with "0x" (see the + * AV_CH_* macros). + * + * @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); + +/** + * Return a description of a channel layout. + * If nb_channels is <= 0, it is guessed from the channel_layout. + * + * @param buf put here the string containing the channel layout + * @param buf_size size in bytes of the buffer + */ +void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); + +struct AVBPrint; +/** + * Append a description of a channel layout to a bprint buffer. + */ +void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); + +/** + * Return the number of channels in the channel layout. + */ +int av_get_channel_layout_nb_channels(uint64_t channel_layout); + +/** + * Return default channel layout for a given number of channels. + */ +int64_t av_get_default_channel_layout(int nb_channels); + +/** + * Get the index of a channel in channel_layout. + * + * @param channel a channel layout describing exactly one channel which must be + * present in channel_layout. + * + * @return index of channel in channel_layout on success, a negative AVERROR + * on error. + */ +int av_get_channel_layout_channel_index(uint64_t channel_layout, + uint64_t channel); + +/** + * Get the channel with the given index in channel_layout. + */ +uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); + +/** + * Get the name of a given channel. + * + * @return channel name on success, NULL on error. + */ +const char *av_get_channel_name(uint64_t channel); + +/** + * Get the description of a given channel. + * + * @param channel a channel layout with a single channel + * @return channel description on success, NULL on error + */ +const char *av_get_channel_description(uint64_t channel); + +/** + * Get the value and name of a standard channel layout. + * + * @param[in] index index in an internal list, starting at 0 + * @param[out] layout channel layout mask + * @param[out] name name of the layout + * @return 0 if the layout exists, + * <0 if index is beyond the limits + */ +int av_get_standard_channel_layout(unsigned index, uint64_t *layout, + const char **name); + +/** + * @} + */ + +#endif /* AVUTIL_CHANNEL_LAYOUT_H */ diff --git a/extern/ffmpeg/include/libavutil/common.h b/extern/ffmpeg/include/libavutil/common.h index 84290c6363..b1203ad5a2 100644 --- a/extern/ffmpeg/include/libavutil/common.h +++ b/extern/ffmpeg/include/libavutil/common.h @@ -26,7 +26,6 @@ #ifndef AVUTIL_COMMON_H #define AVUTIL_COMMON_H -#include #include #include #include @@ -34,7 +33,9 @@ #include #include #include + #include "attributes.h" +#include "version.h" #include "libavutil/avconfig.h" #if AV_HAVE_BIGENDIAN @@ -47,6 +48,9 @@ #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) /* assume b>0 */ #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) +/* assume a>0 and b>0 */ +#define FF_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \ + : ((a) + (1<<(b)) - 1) >> (b)) #define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b)) #define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b)) #define FFABS(a) ((a) >= 0 ? (a) : (-(a))) @@ -62,37 +66,13 @@ #define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) /* misc math functions */ -extern const uint8_t ff_log2_tab[256]; -extern const uint8_t av_reverse[256]; - -static av_always_inline av_const int av_log2_c(unsigned int v) -{ - int n = 0; - if (v & 0xffff0000) { - v >>= 16; - n += 16; - } - if (v & 0xff00) { - v >>= 8; - n += 8; - } - n += ff_log2_tab[v]; - - return n; -} - -static av_always_inline av_const int av_log2_16bit_c(unsigned int v) -{ - int n = 0; - if (v & 0xff00) { - v >>= 8; - n += 8; - } - n += ff_log2_tab[v]; - - return n; -} +/** + * Reverse the order of the bits of an 8-bits unsigned integer. + */ +#if FF_API_AV_REVERSE +extern attribute_deprecated const uint8_t av_reverse[256]; +#endif #ifdef HAVE_AV_CONFIG_H # include "config.h" @@ -102,6 +82,14 @@ static av_always_inline av_const int av_log2_16bit_c(unsigned int v) /* Pull in unguarded fallback defines at the end of this file. */ #include "common.h" +#ifndef av_log2 +av_const int av_log2(unsigned v); +#endif + +#ifndef av_log2_16bit +av_const int av_log2_16bit(unsigned v); +#endif + /** * Clip a signed integer value into the amin-amax range. * @param a value to clip @@ -111,6 +99,26 @@ static av_always_inline av_const int av_log2_16bit_c(unsigned int v) */ static av_always_inline av_const int av_clip_c(int a, int amin, int amax) { +#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 + if (amin > amax) abort(); +#endif + if (a < amin) return amin; + else if (a > amax) return amax; + else return a; +} + +/** + * Clip a signed 64bit integer value into the amin-amax range. + * @param a value to clip + * @param amin minimum value of the clip range + * @param amax maximum value of the clip range + * @return clipped value + */ +static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax) +{ +#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 + if (amin > amax) abort(); +#endif if (a < amin) return amin; else if (a > amax) return amax; else return a; @@ -167,8 +175,8 @@ static av_always_inline av_const int16_t av_clip_int16_c(int a) */ 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; - else return a; + if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF); + else return (int32_t)a; } /** @@ -183,6 +191,30 @@ static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) else return a; } +/** + * Add two signed 32-bit values with saturation. + * + * @param a one value + * @param b another value + * @return sum with signed saturation + */ +static av_always_inline int av_sat_add32_c(int a, int b) +{ + return av_clipl_int32((int64_t)a + b); +} + +/** + * Add a doubled value to another value with saturation at both stages. + * + * @param a first value + * @param b value doubled and added to a + * @return sum with signed saturation + */ +static av_always_inline int av_sat_dadd32_c(int a, int b) +{ + return av_sat_add32(a, av_sat_add32(b, b)); +} + /** * Clip a float value into the amin-amax range. * @param a value to clip @@ -192,6 +224,26 @@ static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) */ static av_always_inline av_const float av_clipf_c(float a, float amin, float amax) { +#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 + if (amin > amax) abort(); +#endif + if (a < amin) return amin; + else if (a > amax) return amax; + else return a; +} + +/** + * Clip a double value into the amin-amax range. + * @param a value to clip + * @param amin minimum value of the clip range + * @param amax maximum value of the clip range + * @return clipped value + */ +static av_always_inline av_const double av_clipd_c(double a, double amin, double amax) +{ +#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 + if (amin > amax) abort(); +#endif if (a < amin) return amin; else if (a > amax) return amax; else return a; @@ -227,7 +279,7 @@ static av_always_inline av_const int av_popcount_c(uint32_t x) */ static av_always_inline av_const int av_popcount64_c(uint64_t x) { - return av_popcount(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)) @@ -243,20 +295,26 @@ static av_always_inline av_const int av_popcount64_c(uint64_t x) * 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;\ {\ - int ones= 7 - av_log2(val ^ 255);\ - if(ones==1)\ + uint32_t top = (val & 128) >> 1;\ + if ((val & 0xc0) == 0x80 || val >= 0xFE)\ ERROR\ - val&= 127>>ones;\ - while(--ones > 0){\ + while (val & top) {\ int tmp= GET_BYTE - 128;\ if(tmp>>6)\ ERROR\ val= (val<<6) + tmp;\ + top <<= 5;\ }\ + val &= (top << 1) - 1;\ } /** @@ -359,18 +417,15 @@ static av_always_inline av_const int av_popcount64_c(uint64_t x) * to ensure they are immediately available in intmath.h. */ -#ifndef av_log2 -# define av_log2 av_log2_c -#endif -#ifndef av_log2_16bit -# define av_log2_16bit av_log2_16bit_c -#endif #ifndef av_ceil_log2 # define av_ceil_log2 av_ceil_log2_c #endif #ifndef av_clip # define av_clip av_clip_c #endif +#ifndef av_clip64 +# define av_clip64 av_clip64_c +#endif #ifndef av_clip_uint8 # define av_clip_uint8 av_clip_uint8_c #endif @@ -389,9 +444,18 @@ static av_always_inline av_const int av_popcount64_c(uint64_t x) #ifndef av_clip_uintp2 # define av_clip_uintp2 av_clip_uintp2_c #endif +#ifndef av_sat_add32 +# define av_sat_add32 av_sat_add32_c +#endif +#ifndef av_sat_dadd32 +# define av_sat_dadd32 av_sat_dadd32_c +#endif #ifndef av_clipf # define av_clipf av_clipf_c #endif +#ifndef av_clipd +# define av_clipd av_clipd_c +#endif #ifndef av_popcount # define av_popcount av_popcount_c #endif diff --git a/extern/ffmpeg/include/libavutil/cpu.h b/extern/ffmpeg/include/libavutil/cpu.h index 5f7eed2b60..55c3ec9a06 100644 --- a/extern/ffmpeg/include/libavutil/cpu.h +++ b/extern/ffmpeg/include/libavutil/cpu.h @@ -21,18 +21,23 @@ #ifndef AVUTIL_CPU_H #define AVUTIL_CPU_H +#include "attributes.h" + #define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ /* lower 16 bits - CPU features */ #define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX +#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext #define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext #define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW #define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions #define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions #define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster + ///< 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 @@ -40,24 +45,67 @@ #define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used #define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions #define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions -#define AV_CPU_FLAG_IWMMXT 0x0100 ///< XScale IWMMXT +// #if LIBAVUTIL_VERSION_MAJOR <52 +#define AV_CPU_FLAG_CMOV 0x1001000 ///< supports cmov instruction +// #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_ALTIVEC 0x0001 ///< standard +#define AV_CPU_FLAG_ARMV5TE (1 << 0) +#define AV_CPU_FLAG_ARMV6 (1 << 1) +#define AV_CPU_FLAG_ARMV6T2 (1 << 2) +#define AV_CPU_FLAG_VFP (1 << 3) +#define AV_CPU_FLAG_VFPV3 (1 << 4) +#define AV_CPU_FLAG_NEON (1 << 5) + /** * Return the flags which specify extensions supported by the CPU. + * The returned value is affected by av_force_cpu_flags() if that was used + * before. So av_get_cpu_flags() can easily be used in a application to + * detect the enabled cpu flags. */ int av_get_cpu_flags(void); - /** * Disables cpu detection and forces the specified flags. + * -1 is a special case that disables forcing of specific flags. */ void av_force_cpu_flags(int flags); +/** + * Set a mask on flags returned by av_get_cpu_flags(). + * This function is mainly useful for testing. + * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible + * + * @warning this function is not thread safe. + */ +attribute_deprecated void av_set_cpu_flags_mask(int mask); -/* 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); +/** + * Parse CPU flags from a string. + * + * The returned flags contain the specified flags as well as related unspecified flags. + * + * This function exists only for compatibility with libav. + * Please use av_parse_cpu_caps() when possible. + * @return a combination of AV_CPU_* flags, negative on error. + */ +attribute_deprecated +int av_parse_cpu_flags(const char *s); + +/** + * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. + * + * @return negative on error. + */ +int av_parse_cpu_caps(unsigned *flags, const char *s); + +/** + * @return the number of logical CPU cores present. + */ +int av_cpu_count(void); #endif /* AVUTIL_CPU_H */ diff --git a/extern/ffmpeg/include/libavutil/crc.h b/extern/ffmpeg/include/libavutil/crc.h index 6c0baab5ac..f4219ca5bb 100644 --- a/extern/ffmpeg/include/libavutil/crc.h +++ b/extern/ffmpeg/include/libavutil/crc.h @@ -25,6 +25,12 @@ #include #include "attributes.h" +/** + * @defgroup lavu_crc32 CRC32 + * @ingroup lavu_crypto + * @{ + */ + typedef uint32_t AVCRC; typedef enum { @@ -33,12 +39,47 @@ typedef enum { AV_CRC_16_CCITT, AV_CRC_32_IEEE, AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ + AV_CRC_24_IEEE = 12, AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ }AVCRCId; +/** + * Initialize a CRC table. + * @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 + * @param le If 1, the lowest bit represents the coefficient for the highest + * exponent of the corresponding polynomial (both for poly and + * actual CRC). + * If 0, you must swap the CRC parameter and the result of av_crc + * if you need the standard representation (can be simplified in + * most cases to e.g. bswap16): + * av_bswap32(crc << (32-bits)) + * @param bits number of bits for the CRC + * @param poly generator polynomial without the x**bits coefficient, in the + * representation as specified by le + * @param ctx_size size of ctx in bytes + * @return <0 on failure + */ int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size); + +/** + * Get an initialized standard CRC table. + * @param crc_id ID of a standard CRC + * @return a pointer to the CRC table or NULL on failure + */ const AVCRC *av_crc_get_table(AVCRCId crc_id); -uint32_t av_crc(const AVCRC *ctx, uint32_t start_crc, const uint8_t *buffer, size_t length) av_pure; + +/** + * Calculate the CRC of a block. + * @param crc CRC of previous blocks if any or initial value for CRC + * @return CRC updated with the data from the given block + * + * @see av_crc_init() "le" parameter + */ +uint32_t av_crc(const AVCRC *ctx, uint32_t crc, + const uint8_t *buffer, size_t length) av_pure; + +/** + * @} + */ #endif /* AVUTIL_CRC_H */ - diff --git a/extern/ffmpeg/include/libavutil/dict.h b/extern/ffmpeg/include/libavutil/dict.h index 2adf28c124..38f03a407f 100644 --- a/extern/ffmpeg/include/libavutil/dict.h +++ b/extern/ffmpeg/include/libavutil/dict.h @@ -74,7 +74,7 @@ #define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no delimiter is added, the strings are simply concatenated. */ -typedef struct { +typedef struct AVDictionaryEntry { char *key; char *value; } AVDictionaryEntry; @@ -92,6 +92,14 @@ typedef struct AVDictionary AVDictionary; AVDictionaryEntry * av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags); +/** + * Get number of entries in dictionary. + * + * @param m dictionary + * @return number of entries in dictionary + */ +int av_dict_count(const AVDictionary *m); + /** * Set the given entry in *pm, overwriting an existing entry. * @@ -99,11 +107,28 @@ av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int * a dictionary struct is allocated and put in *pm. * @param key entry key to add to *pm (will be av_strduped depending on flags) * @param value entry value to add to *pm (will be av_strduped depending on flags). - * Passing a NULL value will cause an existing tag to be deleted. + * Passing a NULL value will cause an existing entry to be deleted. * @return >= 0 on success otherwise an error code <0 */ 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. + * + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other + * @param flags flags to use when adding to dictionary. + * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL + * are ignored since the key/value tokens will always + * be duplicated. + * @return 0 on success, negative AVERROR code on failure + */ +int av_dict_parse_string(AVDictionary **pm, const char *str, + const char *key_val_sep, const char *pairs_sep, + int flags); + /** * Copy entries from one AVDictionary struct into another. * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, @@ -124,4 +149,4 @@ void av_dict_free(AVDictionary **m); * @} */ -#endif // AVUTIL_DICT_H +#endif /* AVUTIL_DICT_H */ diff --git a/extern/ffmpeg/include/libavutil/error.h b/extern/ffmpeg/include/libavutil/error.h index 40e54f1edc..f3fd7bbff6 100644 --- a/extern/ffmpeg/include/libavutil/error.h +++ b/extern/ffmpeg/include/libavutil/error.h @@ -25,7 +25,7 @@ #define AVUTIL_ERROR_H #include -#include "avutil.h" +#include /** * @addtogroup lavu_error @@ -44,26 +44,34 @@ #define AVUNERROR(e) (e) #endif -#define AVERROR_BSF_NOT_FOUND (-MKTAG(0xF8,'B','S','F')) ///< Bitstream filter not found -#define AVERROR_BUG (-MKTAG( 'B','U','G','!')) ///< Internal bug, also see AVERROR_BUG2 -#define AVERROR_DECODER_NOT_FOUND (-MKTAG(0xF8,'D','E','C')) ///< Decoder not found -#define AVERROR_DEMUXER_NOT_FOUND (-MKTAG(0xF8,'D','E','M')) ///< Demuxer not found -#define AVERROR_ENCODER_NOT_FOUND (-MKTAG(0xF8,'E','N','C')) ///< Encoder not found -#define AVERROR_EOF (-MKTAG( 'E','O','F',' ')) ///< End of file -#define AVERROR_EXIT (-MKTAG( 'E','X','I','T')) ///< Immediate exit was requested; the called function should not be restarted -#define AVERROR_FILTER_NOT_FOUND (-MKTAG(0xF8,'F','I','L')) ///< Filter not found -#define AVERROR_INVALIDDATA (-MKTAG( 'I','N','D','A')) ///< Invalid data found when processing input -#define AVERROR_MUXER_NOT_FOUND (-MKTAG(0xF8,'M','U','X')) ///< Muxer not found -#define AVERROR_OPTION_NOT_FOUND (-MKTAG(0xF8,'O','P','T')) ///< Option not found -#define AVERROR_PATCHWELCOME (-MKTAG( 'P','A','W','E')) ///< Not yet implemented in FFmpeg, patches welcome -#define AVERROR_PROTOCOL_NOT_FOUND (-MKTAG(0xF8,'P','R','O')) ///< Protocol not found -#define AVERROR_STREAM_NOT_FOUND (-MKTAG(0xF8,'S','T','R')) ///< Stream not found +#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) +#define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found +#define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 +#define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small +#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found +#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found +#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found +#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file +#define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted +#define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library +#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found +#define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input +#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found +#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found +#define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome +#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found + +#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found /** * This is semantically identical to AVERROR_BUG * it has been introduced in Libav after our AVERROR_BUG and with a modified value. */ -#define AVERROR_BUG2 (-MKTAG( 'B','U','G',' ')) +#define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ') +#define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library +#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. + +#define AV_ERROR_MAX_STRING_SIZE 64 /** * Put a description of the AVERROR code errnum in errbuf. @@ -79,6 +87,29 @@ */ int av_strerror(int errnum, char *errbuf, size_t errbuf_size); +/** + * Fill the provided buffer with a string containing an error string + * corresponding to the AVERROR code errnum. + * + * @param errbuf a buffer + * @param errbuf_size size in bytes of errbuf + * @param errnum error code to describe + * @return the buffer in input, filled with the error description + * @see av_strerror() + */ +static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum) +{ + av_strerror(errnum, errbuf, errbuf_size); + return errbuf; +} + +/** + * Convenience macro, the return value should be used only directly in + * function arguments but never stand-alone. + */ +#define av_err2str(errnum) \ + av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum) + /** * @} */ diff --git a/extern/ffmpeg/include/libavutil/eval.h b/extern/ffmpeg/include/libavutil/eval.h index 22fa121127..6159b0fe58 100644 --- a/extern/ffmpeg/include/libavutil/eval.h +++ b/extern/ffmpeg/include/libavutil/eval.h @@ -45,7 +45,7 @@ typedef struct AVExpr AVExpr; * @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, @@ -68,7 +68,7 @@ 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, @@ -91,39 +91,6 @@ double av_expr_eval(AVExpr *e, const double *const_values, void *opaque); */ void av_expr_free(AVExpr *e); -#if FF_API_OLD_EVAL_NAMES -/** - * @deprecated Deprecated in favor of av_expr_parse_and_eval(). - */ -attribute_deprecated -int av_parse_and_eval_expr(double *res, const char *s, - const char * const *const_names, const double *const_values, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - void *opaque, int log_offset, void *log_ctx); - -/** - * @deprecated Deprecated in favor of av_expr_parse(). - */ -attribute_deprecated -int av_parse_expr(AVExpr **expr, const char *s, - const char * const *const_names, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - int log_offset, void *log_ctx); -/** - * @deprecated Deprecated in favor of av_expr_eval(). - */ -attribute_deprecated -double av_eval_expr(AVExpr *e, const double *const_values, void *opaque); - -/** - * @deprecated Deprecated in favor of av_expr_free(). - */ -attribute_deprecated -void av_free_expr(AVExpr *e); -#endif /* FF_API_OLD_EVAL_NAMES */ - /** * Parse the string in numstr and return its value as a double. If * the string is empty, contains only whitespaces, or does not contain diff --git a/extern/ffmpeg/include/libavutil/fifo.h b/extern/ffmpeg/include/libavutil/fifo.h index 22a9aa5d18..849b9a6b81 100644 --- a/extern/ffmpeg/include/libavutil/fifo.h +++ b/extern/ffmpeg/include/libavutil/fifo.h @@ -26,6 +26,7 @@ #include #include "avutil.h" +#include "attributes.h" typedef struct AVFifoBuffer { uint8_t *buffer; @@ -102,6 +103,17 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void */ int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); +/** + * Enlarge an AVFifoBuffer. + * In case of reallocation failure, the old FIFO is kept unchanged. + * The new fifo size may be larger than the requested size. + * + * @param f AVFifoBuffer to resize + * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() + * @return <0 for failure, >=0 otherwise + */ +int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); + /** * Read and discard the specified amount of data from an AVFifoBuffer. * @param f AVFifoBuffer to read from @@ -129,15 +141,4 @@ static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) return ptr; } -#if FF_API_AV_FIFO_PEEK -/** - * @deprecated Use av_fifo_peek2() instead. - */ -attribute_deprecated -static inline uint8_t av_fifo_peek(AVFifoBuffer *f, int offs) -{ - return *av_fifo_peek2(f, offs); -} -#endif - #endif /* AVUTIL_FIFO_H */ diff --git a/extern/ffmpeg/include/libavutil/file.h b/extern/ffmpeg/include/libavutil/file.h index f3af9ef7e5..a7364fe8fe 100644 --- a/extern/ffmpeg/include/libavutil/file.h +++ b/extern/ffmpeg/include/libavutil/file.h @@ -19,6 +19,8 @@ #ifndef AVUTIL_FILE_H #define AVUTIL_FILE_H +#include + #include "avutil.h" /** @@ -55,6 +57,9 @@ void av_file_unmap(uint8_t *bufptr, size_t size); * *prefix can be a character constant; *filename will be allocated internally. * @return file descriptor of opened file (or -1 on error) * and opened file name in **filename. + * @note On very old libcs it is necessary to set a secure umask before + * calling this, av_tempfile() can't call umask itself as it is used in + * libraries and could interfere with the calling application. */ int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); diff --git a/extern/ffmpeg/include/libavutil/frame.h b/extern/ffmpeg/include/libavutil/frame.h new file mode 100644 index 0000000000..1c785ddbe3 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/frame.h @@ -0,0 +1,659 @@ +/* + * + * 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_FRAME_H +#define AVUTIL_FRAME_H + +#include + +#include "libavcodec/version.h" + +#include "avutil.h" +#include "buffer.h" +#include "dict.h" +#include "rational.h" +#include "samplefmt.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 +}; +#define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG + +enum AVColorRange{ + AVCOL_RANGE_UNSPECIFIED = 0, + AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges + AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + AVCOL_RANGE_NB , ///< Not part of ABI +}; + +enum AVFrameSideDataType { + /** + * The data is the AVPanScan struct defined in libavcodec. + */ + AV_FRAME_DATA_PANSCAN, +}; + +typedef struct AVFrameSideData { + enum AVFrameSideDataType type; + uint8_t *data; + int size; + AVDictionary *metadata; +} AVFrameSideData; + +/** + * This structure describes decoded (raw) audio or video data. + * + * AVFrame must be allocated using av_frame_alloc(). Note that this only + * allocates the AVFrame itself, the buffers for the data must be managed + * through other means (see below). + * AVFrame must be freed with av_frame_free(). + * + * AVFrame is typically allocated once and then reused multiple times to hold + * different data (e.g. a single AVFrame to hold frames received from a + * decoder). In such a case, av_frame_unref() will free any references held by + * the frame and reset it to its original clean state before it + * is reused again. + * + * The data described by an AVFrame is usually reference counted through the + * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / + * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at + * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, + * every single data plane must be contained in one of the buffers in + * AVFrame.buf or AVFrame.extended_buf. + * There may be a single buffer for all the data, or one separate buffer for + * each plane, or anything in between. + * + * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added + * to the end with a minor bump. + * Similarly fields that are marked as to be only accessed by + * av_opt_ptr() can be reordered. This allows 2 forks to add fields + * without breaking compatibility with each other. + */ +typedef struct AVFrame { +#define AV_NUM_DATA_POINTERS 8 + /** + * pointer to the picture/channel planes. + * This might be different from the first allocated byte + * + * Some decoders access areas outside 0,0 - width,height, please + * see avcodec_align_dimensions2(). Some filters and swscale can read + * up to 16 bytes beyond the planes, if these filters are to be used, + * then 16 extra bytes must be allocated. + */ + uint8_t *data[AV_NUM_DATA_POINTERS]; + + /** + * For video, size in bytes of each picture line. + * For audio, size in bytes of each plane. + * + * For audio, only linesize[0] may be set. For planar audio, each channel + * plane must be the same size. + * + * For video the linesizes should be multiplies of the CPUs alignment + * 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]; + + /** + * pointers to the data planes/channels. + * + * For video, this should simply point to data[]. + * + * For planar audio, each channel has a separate data pointer, and + * linesize[0] contains the size of each channel buffer. + * For packed audio, there is just one data pointer, and linesize[0] + * contains the total size of the buffer for all channels. + * + * Note: Both data and extended_data should always be set in a valid frame, + * but for planar audio with more channels that can fit in data, + * extended_data must be used in order to access all channels. + */ + uint8_t **extended_data; + + /** + * width and height of the video frame + */ + int width, height; + + /** + * number of audio samples (per channel) described by this frame + */ + int nb_samples; + + /** + * format of the frame, -1 if unknown or unset + * Values correspond to enum AVPixelFormat for video frames, + * enum AVSampleFormat for audio) + */ + int format; + + /** + * 1 -> keyframe, 0-> not + */ + int key_frame; + + /** + * Picture type of the frame. + */ + enum AVPictureType pict_type; + +#if FF_API_AVFRAME_LAVC + attribute_deprecated + uint8_t *base[AV_NUM_DATA_POINTERS]; +#endif + + /** + * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. + */ + AVRational sample_aspect_ratio; + + /** + * Presentation timestamp in time_base units (time when frame should be shown to user). + */ + int64_t pts; + + /** + * PTS copied from the AVPacket that was decoded to produce this frame. + */ + int64_t pkt_pts; + + /** + * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isnt used) + * This is also the Presentation time of this AVFrame calculated from + * only AVPacket.dts values without pts values. + */ + int64_t pkt_dts; + + /** + * picture number in bitstream order + */ + int coded_picture_number; + /** + * picture number in display order + */ + int display_picture_number; + + /** + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) + */ + int quality; + +#if FF_API_AVFRAME_LAVC + attribute_deprecated + int reference; + + /** + * QP table + */ + attribute_deprecated + int8_t *qscale_table; + /** + * QP store stride + */ + attribute_deprecated + int qstride; + + attribute_deprecated + int qscale_type; + + /** + * mbskip_table[mb]>=1 if MB didn't change + * stride= mb_width = (width+15)>>4 + */ + attribute_deprecated + uint8_t *mbskip_table; + + /** + * motion vector table + * @code + * example: + * int mv_sample_log2= 4 - motion_subsample_log2; + * int mb_width= (width+15)>>4; + * int mv_stride= (mb_width << mv_sample_log2) + 1; + * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y]; + * @endcode + */ + attribute_deprecated + int16_t (*motion_val[2])[2]; + + /** + * macroblock type table + * mb_type_base + mb_width + 2 + */ + attribute_deprecated + uint32_t *mb_type; + + /** + * DCT coefficients + */ + attribute_deprecated + short *dct_coeff; + + /** + * motion reference frame index + * the order in which these are stored can depend on the codec. + */ + attribute_deprecated + int8_t *ref_index[2]; +#endif + + /** + * for some private data of the user + */ + void *opaque; + + /** + * error + */ + uint64_t error[AV_NUM_DATA_POINTERS]; + +#if FF_API_AVFRAME_LAVC + attribute_deprecated + int type; +#endif + + /** + * When decoding, this signals how much the picture must be delayed. + * extra_delay = repeat_pict / (2*fps) + */ + int repeat_pict; + + /** + * The content of the picture is interlaced. + */ + int interlaced_frame; + + /** + * If the content is interlaced, is top field displayed first. + */ + int top_field_first; + + /** + * Tell user application that palette has changed from previous frame. + */ + int palette_has_changed; + +#if FF_API_AVFRAME_LAVC + attribute_deprecated + int buffer_hints; + + /** + * Pan scan. + */ + attribute_deprecated + struct AVPanScan *pan_scan; +#endif + + /** + * reordered opaque 64bit (generally an integer or a double precision float + * PTS but can be anything). + * The user sets AVCodecContext.reordered_opaque to represent the input at + * that time, + * the decoder reorders values as needed and sets AVFrame.reordered_opaque + * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque + * @deprecated in favor of pkt_pts + */ + int64_t reordered_opaque; + +#if FF_API_AVFRAME_LAVC + /** + * @deprecated this field is unused + */ + attribute_deprecated void *hwaccel_picture_private; + + attribute_deprecated + struct AVCodecContext *owner; + attribute_deprecated + void *thread_opaque; + + /** + * log2 of the size of the block which a single vector in motion_val represents: + * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) + */ + attribute_deprecated + uint8_t motion_subsample_log2; +#endif + + /** + * Sample rate of the audio data. + */ + int sample_rate; + + /** + * Channel layout of the audio data. + */ + uint64_t channel_layout; + + /** + * AVBuffer references backing the data for this frame. If all elements of + * this array are NULL, then this frame is not reference counted. + * + * There may be at most one AVBuffer per data plane, so for video this array + * always contains all the references. For planar audio with more than + * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in + * this array. Then the extra AVBufferRef pointers are stored in the + * extended_buf array. + */ + AVBufferRef *buf[AV_NUM_DATA_POINTERS]; + + /** + * For planar audio which requires more than AV_NUM_DATA_POINTERS + * AVBufferRef pointers, this array will hold all the references which + * cannot fit into AVFrame.buf. + * + * Note that this is different from AVFrame.extended_data, which always + * contains all the pointers. This array only contains the extra pointers, + * which cannot fit into AVFrame.buf. + * + * This array is always allocated using av_malloc() by whoever constructs + * the frame. It is freed in av_frame_unref(). + */ + AVBufferRef **extended_buf; + /** + * Number of elements in extended_buf. + */ + int nb_extended_buf; + + AVFrameSideData **side_data; + int nb_side_data; + + /** + * frame timestamp estimated using various heuristics, in stream time base + * Code outside libavcodec should access this field using: + * av_frame_get_best_effort_timestamp(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + */ + int64_t best_effort_timestamp; + + /** + * reordered pos from the last AVPacket that has been input into the decoder + * Code outside libavcodec should access this field using: + * av_frame_get_pkt_pos(frame) + * - encoding: unused + * - decoding: Read by user. + */ + int64_t pkt_pos; + + /** + * duration of the corresponding packet, expressed in + * AVStream->time_base units, 0 if unknown. + * Code outside libavcodec should access this field using: + * av_frame_get_pkt_duration(frame) + * - encoding: unused + * - decoding: Read by user. + */ + int64_t pkt_duration; + + /** + * metadata. + * Code outside libavcodec should access this field using: + * av_frame_get_metadata(frame) + * - encoding: Set by user. + * - decoding: Set by libavcodec. + */ + AVDictionary *metadata; + + /** + * decode error flags of the frame, set to a combination of + * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there + * were errors during the decoding. + * Code outside libavcodec should access this field using: + * av_frame_get_decode_error_flags(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + */ + int decode_error_flags; +#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 +#define FF_DECODE_ERROR_MISSING_REFERENCE 2 + + /** + * number of audio channels, only used for audio. + * Code outside libavcodec should access this field using: + * av_frame_get_channels(frame) + * - encoding: unused + * - decoding: Read by user. + */ + int channels; + + /** + * size of the corresponding packet containing the compressed + * frame. It must be accessed using av_frame_get_pkt_size() and + * av_frame_set_pkt_size(). + * It is set to a negative value if unknown. + * - encoding: unused + * - decoding: set by libavcodec, read by user. + */ + int pkt_size; + + /** + * YUV colorspace type. + * It must be accessed using av_frame_get_colorspace() and + * av_frame_set_colorspace(). + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorSpace colorspace; + + /** + * MPEG vs JPEG YUV range. + * It must be accessed using av_frame_get_color_range() and + * av_frame_set_color_range(). + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorRange color_range; + + + /** + * Not to be accessed directly from outside libavutil + */ + AVBufferRef *qp_table_buf; +} AVFrame; + +/** + * Accessors for some AVFrame fields. + * The position of these field in the structure is not part of the ABI, + * they should not be accessed directly outside libavcodec. + */ +int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); +void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); +int64_t av_frame_get_pkt_duration (const AVFrame *frame); +void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); +int64_t av_frame_get_pkt_pos (const AVFrame *frame); +void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); +int64_t av_frame_get_channel_layout (const AVFrame *frame); +void av_frame_set_channel_layout (AVFrame *frame, int64_t val); +int av_frame_get_channels (const AVFrame *frame); +void av_frame_set_channels (AVFrame *frame, int val); +int av_frame_get_sample_rate (const AVFrame *frame); +void av_frame_set_sample_rate (AVFrame *frame, int val); +AVDictionary *av_frame_get_metadata (const AVFrame *frame); +void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); +int av_frame_get_decode_error_flags (const AVFrame *frame); +void av_frame_set_decode_error_flags (AVFrame *frame, int val); +int av_frame_get_pkt_size(const AVFrame *frame); +void av_frame_set_pkt_size(AVFrame *frame, int val); +AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame); +int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); +int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); +enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); +void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); +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(). + * + * @return An AVFrame filled with default values or NULL on failure. + * + * @note this only allocates the AVFrame itself, not the data buffers. Those + * must be allocated through other means, e.g. with av_frame_get_buffer() or + * manually. + */ +AVFrame *av_frame_alloc(void); + +/** + * Free the frame and any dynamically allocated objects in it, + * e.g. extended_data. If the frame is reference counted, it will be + * unreferenced first. + * + * @param frame frame to be freed. The pointer will be set to NULL. + */ +void av_frame_free(AVFrame **frame); + +/** + * Setup a new reference to the data described by a given frame. + * + * Copy frame properties from src to dst and create a new reference for each + * AVBufferRef from src. + * + * If src is not reference counted, new buffers are allocated and the data is + * copied. + * + * @return 0 on success, a negative AVERROR on error + */ +int av_frame_ref(AVFrame *dst, AVFrame *src); + +/** + * Create a new frame that references the same data as src. + * + * This is a shortcut for av_frame_alloc()+av_frame_ref(). + * + * @return newly created AVFrame on success, NULL on error. + */ +AVFrame *av_frame_clone(AVFrame *src); + +/** + * Unreference all the buffers referenced by frame and reset the frame fields. + */ +void av_frame_unref(AVFrame *frame); + +/** + * Move everythnig contained in src to dst and reset src. + */ +void av_frame_move_ref(AVFrame *dst, AVFrame *src); + +/** + * Allocate new buffer(s) for audio or video data. + * + * The following fields must be set on frame before calling this function: + * - format (pixel format for video, sample format for audio) + * - width and height for video + * - nb_samples and channel_layout for audio + * + * This function will fill AVFrame.data and AVFrame.buf arrays and, if + * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. + * For planar formats, one buffer will be allocated for each plane. + * + * @param frame frame in which to store the new buffers. + * @param align required buffer size alignment + * + * @return 0 on success, a negative AVERROR on error. + */ +int av_frame_get_buffer(AVFrame *frame, int align); + +/** + * Check if the frame data is writable. + * + * @return A positive value if the frame data is writable (which is true if and + * only if each of the underlying buffers has only one reference, namely the one + * stored in this frame). Return 0 otherwise. + * + * If 1 is returned the answer is valid until av_buffer_ref() is called on any + * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). + * + * @see av_frame_make_writable(), av_buffer_is_writable() + */ +int av_frame_is_writable(AVFrame *frame); + +/** + * Ensure that the frame data is writable, avoiding data copy if possible. + * + * Do nothing if the frame is writable, allocate new buffers and copy the data + * if it is not. + * + * @return 0 on success, a negative AVERROR on error. + * + * @see av_frame_is_writable(), av_buffer_is_writable(), + * av_buffer_make_writable() + */ +int av_frame_make_writable(AVFrame *frame); + +/** + * Copy only "metadata" fields from src to dst. + * + * Metadata for the purpose of this function are those fields that do not affect + * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample + * aspect ratio (for video), but not width/height or channel layout. + * Side data is also copied. + */ +int av_frame_copy_props(AVFrame *dst, const AVFrame *src); + +/** + * Get the buffer reference a given data plane is stored in. + * + * @param plane index of the data plane of interest in frame->extended_data. + * + * @return the buffer reference that contains the plane or NULL if the input + * frame is not valid. + */ +AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); + +/** + * Add a new side data to a frame. + * + * @param frame a frame to which the side data should be added + * @param type type of the added side data + * @param size size of the side data + * + * @return newly added side data on success, NULL on error + */ +AVFrameSideData *av_frame_new_side_data(AVFrame *frame, + enum AVFrameSideDataType type, + int size); + +/** + * @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(const AVFrame *frame, + enum AVFrameSideDataType type); + +#endif /* AVUTIL_FRAME_H */ diff --git a/extern/ffmpeg/include/libavutil/hmac.h b/extern/ffmpeg/include/libavutil/hmac.h new file mode 100644 index 0000000000..d36d4de19e --- /dev/null +++ b/extern/ffmpeg/include/libavutil/hmac.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2012 Martin Storsjo + * + * 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_HMAC_H +#define AVUTIL_HMAC_H + +#include + +/** + * @defgroup lavu_hmac HMAC + * @ingroup lavu_crypto + * @{ + */ + +enum AVHMACType { + AV_HMAC_MD5, + AV_HMAC_SHA1, + AV_HMAC_SHA224 = 10, + AV_HMAC_SHA256, + AV_HMAC_SHA384, + AV_HMAC_SHA512, +}; + +typedef struct AVHMAC AVHMAC; + +/** + * Allocate an AVHMAC context. + * @param type The hash function used for the HMAC. + */ +AVHMAC *av_hmac_alloc(enum AVHMACType type); + +/** + * Free an AVHMAC context. + * @param ctx The context to free, may be NULL + */ +void av_hmac_free(AVHMAC *ctx); + +/** + * Initialize an AVHMAC context with an authentication key. + * @param ctx The HMAC context + * @param key The authentication key + * @param keylen The length of the key, in bytes + */ +void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen); + +/** + * Hash data with the HMAC. + * @param ctx The HMAC context + * @param data The data to hash + * @param len The length of the data, in bytes + */ +void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len); + +/** + * Finish hashing and output the HMAC digest. + * @param ctx The HMAC context + * @param out The output buffer to write the digest into + * @param outlen The length of the out buffer, in bytes + * @return The number of bytes written to out, or a negative error code. + */ +int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen); + +/** + * Hash an array of data with a key. + * @param ctx The HMAC context + * @param data The data to hash + * @param len The length of the data, in bytes + * @param key The authentication key + * @param keylen The length of the key, in bytes + * @param out The output buffer to write the digest into + * @param outlen The length of the out buffer, in bytes + * @return The number of bytes written to out, or a negative error code. + */ +int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len, + const uint8_t *key, unsigned int keylen, + uint8_t *out, unsigned int outlen); + +/** + * @} + */ + +#endif /* AVUTIL_HMAC_H */ diff --git a/extern/ffmpeg/include/libavutil/imgutils.h b/extern/ffmpeg/include/libavutil/imgutils.h index 9b53815fb6..ab32d667d3 100644 --- a/extern/ffmpeg/include/libavutil/imgutils.h +++ b/extern/ffmpeg/include/libavutil/imgutils.h @@ -55,7 +55,7 @@ void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], * * @return the computed size in bytes */ -int av_image_get_linesize(enum PixelFormat pix_fmt, int width, int plane); +int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); /** * Fill plane linesizes for an image with pixel format pix_fmt and @@ -64,7 +64,7 @@ int av_image_get_linesize(enum PixelFormat pix_fmt, int width, int plane); * @param linesizes array to be filled with the linesize for each plane * @return >= 0 in case of success, a negative error code otherwise */ -int av_image_fill_linesizes(int linesizes[4], enum PixelFormat pix_fmt, int width); +int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); /** * Fill plane data pointers for an image with pixel format pix_fmt and @@ -77,7 +77,7 @@ int av_image_fill_linesizes(int linesizes[4], enum PixelFormat pix_fmt, int widt * @return the size in bytes required for the image buffer, a negative * error code in case of failure */ -int av_image_fill_pointers(uint8_t *data[4], enum PixelFormat pix_fmt, int height, +int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, uint8_t *ptr, const int linesizes[4]); /** @@ -91,7 +91,7 @@ int av_image_fill_pointers(uint8_t *data[4], enum PixelFormat pix_fmt, int heigh * error code in case of failure */ int av_image_alloc(uint8_t *pointers[4], int linesizes[4], - int w, int h, enum PixelFormat pix_fmt, int align); + int w, int h, enum AVPixelFormat pix_fmt, int align); /** * Copy image plane from src to dst. @@ -99,6 +99,9 @@ int av_image_alloc(uint8_t *pointers[4], int linesizes[4], * The first byte of each successive line is separated by *_linesize * bytes. * + * bytewidth must be contained by both absolute values of dst_linesize + * and src_linesize, otherwise the function behavior is undefined. + * * @param dst_linesize linesize for the image plane in dst * @param src_linesize linesize for the image plane in src */ @@ -114,7 +117,66 @@ void av_image_copy_plane(uint8_t *dst, int dst_linesize, */ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], const uint8_t *src_data[4], const int src_linesizes[4], - enum PixelFormat pix_fmt, int width, int height); + enum AVPixelFormat pix_fmt, int width, int height); + +/** + * Setup the data pointers and linesizes based on the specified image + * parameters and the provided array. + * + * The fields of the given image are filled in by using the src + * address which points to the image data buffer. Depending on the + * specified pixel format, one or multiple image data pointers and + * line sizes will be set. If a planar format is specified, several + * pointers will be set pointing to the different picture planes and + * the line sizes of the different planes will be stored in the + * lines_sizes array. Call with src == NULL to get the required + * size for the src buffer. + * + * To allocate the buffer and fill in the dst_data and dst_linesize in + * one call, use av_image_alloc(). + * + * @param dst_data data pointers to be filled in + * @param dst_linesizes linesizes for the image in dst_data to be filled in + * @param src buffer which will contain or contains the actual image data, can be NULL + * @param pix_fmt the pixel format of the image + * @param width the width of the image in pixels + * @param height the height of the image in pixels + * @param align the value used in src for linesize alignment + * @return the size in bytes required for src, a negative error code + * in case of failure + */ +int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], + const uint8_t *src, + enum AVPixelFormat pix_fmt, int width, int height, int align); + +/** + * Return the size in bytes of the amount of data required to store an + * image with the given parameters. + * + * @param[in] align the assumed linesize alignment + */ +int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); + +/** + * Copy image data from an image into a buffer. + * + * av_image_get_buffer_size() can be used to compute the required size + * for the buffer to fill. + * + * @param dst a buffer into which picture data will be copied + * @param dst_size the size in bytes of dst + * @param src_data pointers containing the source image data + * @param src_linesizes linesizes for the image in src_data + * @param pix_fmt the pixel format of the source image + * @param width the width of the source image in pixels + * @param height the height of the source image in pixels + * @param align the assumed linesize alignment for dst + * @return the number of bytes written to dst, or a negative value + * (error code) on error + */ +int av_image_copy_to_buffer(uint8_t *dst, int dst_size, + const uint8_t * const src_data[4], const int src_linesize[4], + enum AVPixelFormat pix_fmt, int width, int height, int align); /** * Check if the given dimension of an image is valid, meaning that all @@ -128,7 +190,7 @@ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], */ int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); -int ff_set_systematic_pal2(uint32_t pal[256], enum PixelFormat pix_fmt); +int avpriv_set_systematic_pal2(uint32_t pal[256], enum AVPixelFormat pix_fmt); /** * @} diff --git a/extern/ffmpeg/include/libavutil/intfloat.h b/extern/ffmpeg/include/libavutil/intfloat.h new file mode 100644 index 0000000000..fe3d7ec4a5 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/intfloat.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2011 Mans Rullgard + * + * 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_INTFLOAT_H +#define AVUTIL_INTFLOAT_H + +#include +#include "attributes.h" + +union av_intfloat32 { + uint32_t i; + float f; +}; + +union av_intfloat64 { + uint64_t i; + double f; +}; + +/** + * Reinterpret a 32-bit integer as a float. + */ +static av_always_inline float av_int2float(uint32_t i) +{ + union av_intfloat32 v; + v.i = i; + return v.f; +} + +/** + * Reinterpret a float as a 32-bit integer. + */ +static av_always_inline uint32_t av_float2int(float f) +{ + union av_intfloat32 v; + v.f = f; + return v.i; +} + +/** + * Reinterpret a 64-bit integer as a double. + */ +static av_always_inline double av_int2double(uint64_t i) +{ + union av_intfloat64 v; + v.i = i; + return v.f; +} + +/** + * Reinterpret a double as a 64-bit integer. + */ +static av_always_inline uint64_t av_double2int(double f) +{ + union av_intfloat64 v; + v.f = f; + return v.i; +} + +#endif /* AVUTIL_INTFLOAT_H */ diff --git a/extern/ffmpeg/include/libavutil/intreadwrite.h b/extern/ffmpeg/include/libavutil/intreadwrite.h index 09d796c8b8..7ee6977554 100644 --- a/extern/ffmpeg/include/libavutil/intreadwrite.h +++ b/extern/ffmpeg/include/libavutil/intreadwrite.h @@ -47,7 +47,7 @@ typedef union { /* * Arch-specific headers can provide any combination of - * AV_[RW][BLN](16|24|32|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. + * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. * Preprocessor symbols must be defined, even if these are implemented * as inline functions. */ @@ -114,6 +114,18 @@ typedef union { # define AV_WN32(p, v) AV_WB32(p, v) # endif +# if defined(AV_RN48) && !defined(AV_RB48) +# define AV_RB48(p) AV_RN48(p) +# elif !defined(AV_RN48) && defined(AV_RB48) +# define AV_RN48(p) AV_RB48(p) +# endif + +# if defined(AV_WN48) && !defined(AV_WB48) +# define AV_WB48(p, v) AV_WN48(p, v) +# elif !defined(AV_WN48) && defined(AV_WB48) +# define AV_WN48(p, v) AV_WB48(p, v) +# endif + # if defined(AV_RN64) && !defined(AV_RB64) # define AV_RB64(p) AV_RN64(p) # elif !defined(AV_RN64) && defined(AV_RB64) @@ -164,6 +176,18 @@ typedef union { # define AV_WN32(p, v) AV_WL32(p, v) # endif +# if defined(AV_RN48) && !defined(AV_RL48) +# define AV_RL48(p) AV_RN48(p) +# elif !defined(AV_RN48) && defined(AV_RL48) +# define AV_RN48(p) AV_RL48(p) +# endif + +# if defined(AV_WN48) && !defined(AV_WL48) +# define AV_WL48(p, v) AV_WN48(p, v) +# elif !defined(AV_WN48) && defined(AV_WL48) +# define AV_WN48(p, v) AV_WL48(p, v) +# endif + # if defined(AV_RN64) && !defined(AV_RL64) # define AV_RL64(p) AV_RN64(p) # elif !defined(AV_RN64) && defined(AV_RL64) @@ -210,7 +234,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; ((const uint8_t*)(x))[1]) #endif #ifndef AV_WB16 -# define AV_WB16(p, d) do { \ +# define AV_WB16(p, darg) do { \ + unsigned d = (darg); \ ((uint8_t*)(p))[1] = (d); \ ((uint8_t*)(p))[0] = (d)>>8; \ } while(0) @@ -222,7 +247,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; ((const uint8_t*)(x))[0]) #endif #ifndef AV_WL16 -# define AV_WL16(p, d) do { \ +# define AV_WL16(p, darg) do { \ + unsigned d = (darg); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ } while(0) @@ -236,7 +262,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; ((const uint8_t*)(x))[3]) #endif #ifndef AV_WB32 -# define AV_WB32(p, d) do { \ +# define AV_WB32(p, darg) do { \ + unsigned d = (darg); \ ((uint8_t*)(p))[3] = (d); \ ((uint8_t*)(p))[2] = (d)>>8; \ ((uint8_t*)(p))[1] = (d)>>16; \ @@ -252,7 +279,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; ((const uint8_t*)(x))[0]) #endif #ifndef AV_WL32 -# define AV_WL32(p, d) do { \ +# define AV_WL32(p, darg) do { \ + unsigned d = (darg); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[2] = (d)>>16; \ @@ -272,7 +300,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; (uint64_t)((const uint8_t*)(x))[7]) #endif #ifndef AV_WB64 -# define AV_WB64(p, d) do { \ +# define AV_WB64(p, darg) do { \ + uint64_t d = (darg); \ ((uint8_t*)(p))[7] = (d); \ ((uint8_t*)(p))[6] = (d)>>8; \ ((uint8_t*)(p))[5] = (d)>>16; \ @@ -296,7 +325,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; (uint64_t)((const uint8_t*)(x))[0]) #endif #ifndef AV_WL64 -# define AV_WL64(p, d) do { \ +# define AV_WL64(p, darg) do { \ + uint64_t d = (darg); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[2] = (d)>>16; \ @@ -430,6 +460,48 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; } while(0) #endif +#ifndef AV_RB48 +# define AV_RB48(x) \ + (((uint64_t)((const uint8_t*)(x))[0] << 40) | \ + ((uint64_t)((const uint8_t*)(x))[1] << 32) | \ + ((uint64_t)((const uint8_t*)(x))[2] << 24) | \ + ((uint64_t)((const uint8_t*)(x))[3] << 16) | \ + ((uint64_t)((const uint8_t*)(x))[4] << 8) | \ + (uint64_t)((const uint8_t*)(x))[5]) +#endif +#ifndef AV_WB48 +# define AV_WB48(p, darg) do { \ + uint64_t d = (darg); \ + ((uint8_t*)(p))[5] = (d); \ + ((uint8_t*)(p))[4] = (d)>>8; \ + ((uint8_t*)(p))[3] = (d)>>16; \ + ((uint8_t*)(p))[2] = (d)>>24; \ + ((uint8_t*)(p))[1] = (d)>>32; \ + ((uint8_t*)(p))[0] = (d)>>40; \ + } while(0) +#endif + +#ifndef AV_RL48 +# define AV_RL48(x) \ + (((uint64_t)((const uint8_t*)(x))[5] << 40) | \ + ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ + ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ + ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ + ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ + (uint64_t)((const uint8_t*)(x))[0]) +#endif +#ifndef AV_WL48 +# define AV_WL48(p, darg) do { \ + uint64_t d = (darg); \ + ((uint8_t*)(p))[0] = (d); \ + ((uint8_t*)(p))[1] = (d)>>8; \ + ((uint8_t*)(p))[2] = (d)>>16; \ + ((uint8_t*)(p))[3] = (d)>>24; \ + ((uint8_t*)(p))[4] = (d)>>32; \ + ((uint8_t*)(p))[5] = (d)>>40; \ + } while(0) +#endif + /* * The AV_[RW]NA macros access naturally aligned data * in a type-safe way. @@ -462,6 +534,33 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; # define AV_WN64A(p, v) AV_WNA(64, p, v) #endif +/* + * The AV_COPYxxU macros are suitable for copying data to/from unaligned + * memory locations. + */ + +#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); + +#ifndef AV_COPY16U +# define AV_COPY16U(d, s) AV_COPYU(16, d, s) +#endif + +#ifndef AV_COPY32U +# define AV_COPY32U(d, s) AV_COPYU(32, d, s) +#endif + +#ifndef AV_COPY64U +# define AV_COPY64U(d, s) AV_COPYU(64, d, s) +#endif + +#ifndef AV_COPY128U +# define AV_COPY128U(d, s) \ + do { \ + AV_COPY64U(d, s); \ + AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ + } while(0) +#endif + /* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be * naturally aligned. They may be implemented using MMX, * so emms_c() must be called before using any float code diff --git a/extern/ffmpeg/include/libavutil/lfg.h b/extern/ffmpeg/include/libavutil/lfg.h index 854ffce737..ec90562cf2 100644 --- a/extern/ffmpeg/include/libavutil/lfg.h +++ b/extern/ffmpeg/include/libavutil/lfg.h @@ -22,7 +22,7 @@ #ifndef AVUTIL_LFG_H #define AVUTIL_LFG_H -typedef struct { +typedef struct AVLFG { unsigned int state[64]; int index; } AVLFG; diff --git a/extern/ffmpeg/include/libavutil/log.h b/extern/ffmpeg/include/libavutil/log.h index 02a0e1ac8c..55459e811a 100644 --- a/extern/ffmpeg/include/libavutil/log.h +++ b/extern/ffmpeg/include/libavutil/log.h @@ -25,6 +25,23 @@ #include "avutil.h" #include "attributes.h" +typedef enum { + AV_CLASS_CATEGORY_NA = 0, + AV_CLASS_CATEGORY_INPUT, + AV_CLASS_CATEGORY_OUTPUT, + AV_CLASS_CATEGORY_MUXER, + AV_CLASS_CATEGORY_DEMUXER, + AV_CLASS_CATEGORY_ENCODER, + AV_CLASS_CATEGORY_DECODER, + AV_CLASS_CATEGORY_FILTER, + AV_CLASS_CATEGORY_BITSTREAM_FILTER, + AV_CLASS_CATEGORY_SWSCALER, + AV_CLASS_CATEGORY_SWRESAMPLER, + AV_CLASS_CATEGORY_NB, ///< not part of ABI/API +}AVClassCategory; + +struct AVOptionRanges; + /** * Describe the class of an AVClass context structure. That is an * arbitrary struct of which the first field is a pointer to an @@ -65,10 +82,11 @@ typedef struct AVClass { int log_level_offset_offset; /** - * Offset in the structure where a pointer to the parent context for loging is stored. - * for example a decoder that uses eval.c could pass its AVCodecContext to eval as such - * parent context. And a av_log() implementation could then display the parent context - * can be NULL of course + * Offset in the structure where a pointer to the parent context for + * logging is stored. For example a decoder could pass its AVCodecContext + * to eval as such a parent context, which an av_log() implementation + * could then leverage to display the parent context. + * The offset can be NULL. */ int parent_log_context_offset; @@ -78,7 +96,7 @@ typedef struct AVClass { void* (*child_next)(void *obj, void *prev); /** - * Return an AVClass corresponding to next potential + * Return an AVClass corresponding to the next potential * AVOptions-enabled child. * * The difference between child_next and this is that @@ -86,10 +104,40 @@ typedef struct AVClass { * child_class_next iterates over _all possible_ children. */ const struct AVClass* (*child_class_next)(const struct AVClass *prev); + + /** + * Category used for visualization (like color) + * This is only set if the category is equal for all objects using this class. + * available since version (51 << 16 | 56 << 8 | 100) + */ + AVClassCategory category; + + /** + * Callback to return the category. + * available since version (51 << 16 | 59 << 8 | 100) + */ + AVClassCategory (*get_category)(void* ctx); + + /** + * Callback to return the supported/allowed ranges. + * available since version (52.12) + */ + 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 /** @@ -116,7 +164,14 @@ typedef struct AVClass { */ #define AV_LOG_WARNING 24 +/** + * Standard information. + */ #define AV_LOG_INFO 32 + +/** + * Detailed information. + */ #define AV_LOG_VERBOSE 40 /** @@ -124,28 +179,100 @@ typedef struct AVClass { */ #define AV_LOG_DEBUG 48 +#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)); + +/** + * 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 ap The arguments referenced by the format string. + */ void av_log_default_callback(void* ptr, 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); /** * Format a line of log the same way as the default callback. @@ -179,4 +306,8 @@ void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, #define AV_LOG_SKIP_REPEATED 1 void av_log_set_flags(int arg); +/** + * @} + */ + #endif /* AVUTIL_LOG_H */ diff --git a/extern/ffmpeg/include/libavutil/lzo.h b/extern/ffmpeg/include/libavutil/lzo.h index 060b5c9d76..c03403992d 100644 --- a/extern/ffmpeg/include/libavutil/lzo.h +++ b/extern/ffmpeg/include/libavutil/lzo.h @@ -32,18 +32,18 @@ #include /** @name Error flags returned by av_lzo1x_decode - * @{ */ + * @{ */ /// end of the input buffer reached before decoding finished -#define AV_LZO_INPUT_DEPLETED 1 +#define AV_LZO_INPUT_DEPLETED 1 /// decoded data did not fit into output buffer -#define AV_LZO_OUTPUT_FULL 2 +#define AV_LZO_OUTPUT_FULL 2 /// a reference to previously decoded data was wrong #define AV_LZO_INVALID_BACKPTR 4 /// a non-specific error in the compressed bitstream -#define AV_LZO_ERROR 8 +#define AV_LZO_ERROR 8 /** @} */ -#define AV_LZO_INPUT_PADDING 8 +#define AV_LZO_INPUT_PADDING 8 #define AV_LZO_OUTPUT_PADDING 12 /** @@ -59,17 +59,6 @@ */ int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); -/** - * @brief deliberately overlapping memcpy implementation - * @param dst destination buffer; must be padded with 12 additional bytes - * @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 - * - * cnt > back is valid, this will copy the bytes we just copied, - * thus creating a repeating pattern with a period length of back. - */ -void av_memcpy_backptr(uint8_t *dst, int back, int cnt); - /** * @} */ diff --git a/extern/ffmpeg/include/libavutil/mathematics.h b/extern/ffmpeg/include/libavutil/mathematics.h index ad39e263ce..71f0392218 100644 --- a/extern/ffmpeg/include/libavutil/mathematics.h +++ b/extern/ffmpeg/include/libavutil/mathematics.h @@ -1,5 +1,5 @@ /* - * copyright (c) 2005 Michael Niedermayer + * copyright (c) 2005-2012 Michael Niedermayer * * This file is part of FFmpeg. * @@ -25,6 +25,7 @@ #include #include "attributes.h" #include "rational.h" +#include "intfloat.h" #ifndef M_E #define M_E 2.7182818284590452354 /* e */ @@ -51,10 +52,10 @@ #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ #endif #ifndef NAN -#define NAN (0.0/0.0) +#define NAN av_int2float(0x7fc00000) #endif #ifndef INFINITY -#define INFINITY (1.0/0.0) +#define INFINITY av_int2float(0x7f800000) #endif /** @@ -69,6 +70,7 @@ enum AVRounding { AV_ROUND_DOWN = 2, ///< Round toward -infinity. AV_ROUND_UP = 3, ///< Round toward +infinity. AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. + AV_ROUND_PASS_MINMAX = 8192, ///< Flag to pass INT64_MIN/MAX through instead of rescaling, this avoids special cases for AV_NOPTS_VALUE }; /** @@ -87,6 +89,9 @@ int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; /** * Rescale a 64-bit integer with specified rounding. * A simple a*b/c isn't possible as it can overflow. + * + * @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is + * INT64_MIN or INT64_MAX then a is passed through unchanged. */ int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const; @@ -95,6 +100,15 @@ int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_cons */ int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; +/** + * Rescale a 64-bit integer by 2 rational numbers with specified rounding. + * + * @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is + * INT64_MIN or INT64_MAX then a is passed through unchanged. + */ +int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, + enum AVRounding) av_const; + /** * Compare 2 timestamps each in its own timebases. * The result of the function is undefined if one of the timestamps @@ -115,6 +129,17 @@ int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); */ int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); +/** + * Rescale a timestamp while preserving known durations. + * + * @param in_ts Input timestamp + * @param in_tb Input timesbase + * @param fs_tb Duration and *last timebase + * @param duration duration till the next call + * @param out_tb Output timesbase + */ +int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb); + /** * @} */ diff --git a/extern/ffmpeg/include/libavutil/md5.h b/extern/ffmpeg/include/libavutil/md5.h index 1333ab2ddf..79702c88c2 100644 --- a/extern/ffmpeg/include/libavutil/md5.h +++ b/extern/ffmpeg/include/libavutil/md5.h @@ -23,6 +23,9 @@ #include +#include "attributes.h" +#include "version.h" + /** * @defgroup lavu_md5 MD5 * @ingroup lavu_crypto @@ -33,9 +36,42 @@ extern const int av_md5_size; struct AVMD5; +/** + * Allocate an AVMD5 context. + */ +struct AVMD5 *av_md5_alloc(void); + +/** + * Initialize MD5 hashing. + * + * @param ctx pointer to the function context (of size av_md5_size) + */ void av_md5_init(struct AVMD5 *ctx); -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, const int len); + +/** + * Update hash value. + * + * @param ctx hash function context + * @param src input data to update hash with + * @param len input data length + */ +void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len); + +/** + * Finish hashing and output digest value. + * + * @param ctx hash function context + * @param dst buffer where output digest value is stored + */ void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); + +/** + * Hash an array of data. + * + * @param dst The output buffer to write the digest into + * @param src The data to hash + * @param len The length of the data, in bytes + */ void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); /** @@ -43,4 +79,3 @@ void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); */ #endif /* AVUTIL_MD5_H */ - diff --git a/extern/ffmpeg/include/libavutil/mem.h b/extern/ffmpeg/include/libavutil/mem.h index c6c907ea08..77b7adc373 100644 --- a/extern/ffmpeg/include/libavutil/mem.h +++ b/extern/ffmpeg/include/libavutil/mem.h @@ -26,6 +26,9 @@ #ifndef AVUTIL_MEM_H #define AVUTIL_MEM_H +#include +#include + #include "attributes.h" #include "error.h" #include "avutil.h" @@ -64,9 +67,9 @@ #endif #if AV_GCC_VERSION_AT_LEAST(4,3) - #define av_alloc_size(n) __attribute__((alloc_size(n))) + #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) #else - #define av_alloc_size(n) + #define av_alloc_size(...) #endif /** @@ -79,16 +82,37 @@ */ void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); +/** + * 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 + * be allocated. + * @see av_malloc() + */ +av_alloc_size(1, 2) static inline void *av_malloc_array(size_t nmemb, size_t size) +{ + if (!size || nmemb >= INT_MAX / size) + return NULL; + return av_malloc(nmemb * size); +} + /** * 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 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); @@ -103,6 +127,63 @@ 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_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 + * 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 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_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); + /** * Free a memory block which has been allocated with av_malloc(z)() or * av_realloc(). @@ -135,14 +216,38 @@ void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); */ void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; +/** + * 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 + * be allocated. + * @see av_mallocz() + * @see av_malloc_array() + */ +av_alloc_size(1, 2) static inline void *av_mallocz_array(size_t nmemb, size_t 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; +/** + * Duplicate the buffer p. + * @param p buffer to be duplicated + * @return Pointer to a newly allocated buffer containing a + * copy of p or NULL if the buffer cannot be allocated. + */ +void *av_memdup(const void *p, size_t size); + /** * Free a memory block which has been allocated with av_malloc(z)() or * av_realloc() and set the pointer pointing to it to NULL. @@ -155,12 +260,50 @@ void av_freep(void *ptr); /** * Add an element to a dynamic array. * - * @param tab_ptr Pointer to the array. - * @param nb_ptr Pointer to the number of elements in the array. - * @param elem Element to be added. + * The array to grow is supposed to be an array of pointers to + * structures, and the element to add must be a pointer to an already + * allocated structure. + * + * The array is reallocated when its size reaches powers of 2. + * Therefore, the amortized cost of adding an element is constant. + * + * In case of success, the pointer to the array is updated in order to + * point to the new grown array, and the number pointed to by nb_ptr + * is incremented. + * In case of failure, the array is freed, *tab_ptr is set to NULL and + * *nb_ptr is set to 0. + * + * @param tab_ptr pointer to the array to grow + * @param nb_ptr pointer to the number of elements in the array + * @param elem element to add + * @see av_dynarray2_add() */ void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); +/** + * Add an element of size elem_size to a dynamic array. + * + * The array is reallocated when its number of elements reaches powers of 2. + * Therefore, the amortized cost of adding an element is constant. + * + * In case of success, the pointer to the array is updated in order to + * point to the new grown array, and the number pointed to by nb_ptr + * is incremented. + * In case of failure, the array is freed, *tab_ptr is set to NULL and + * *nb_ptr is set to 0. + * + * @param tab_ptr pointer to the array to grow + * @param nb_ptr pointer to the number of elements in the array + * @param elem_size size in bytes of the elements in the array + * @param elem_data pointer to the data of the element to add. If NULL, the space of + * the new added element is not filled. + * @return pointer to the data of the element to copy in the new allocated space. + * If NULL, the new allocated space is left uninitialized." + * @see av_dynarray_add() + */ +void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, + const uint8_t *elem_data); + /** * Multiply two size_t values checking for overflow. * @return 0 if success, AVERROR(EINVAL) if overflow. @@ -181,6 +324,17 @@ static inline int av_size_mult(size_t a, size_t b, size_t *r) */ void av_max_alloc(size_t max); +/** + * 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 + * + * cnt > back is valid, this will copy the bytes we just copied, + * thus creating a repeating pattern with a period length of back. + */ +void av_memcpy_backptr(uint8_t *dst, int back, int cnt); + /** * @} */ diff --git a/extern/ffmpeg/include/libavutil/murmur3.h b/extern/ffmpeg/include/libavutil/murmur3.h new file mode 100644 index 0000000000..f29ed973e9 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/murmur3.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2013 Reimar Döffinger + * + * 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_MURMUR3_H +#define AVUTIL_MURMUR3_H + +#include + +struct AVMurMur3 *av_murmur3_alloc(void); +void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed); +void av_murmur3_init(struct AVMurMur3 *c); +void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len); +void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]); + +#endif /* AVUTIL_MURMUR3_H */ diff --git a/extern/ffmpeg/include/libavutil/old_pix_fmts.h b/extern/ffmpeg/include/libavutil/old_pix_fmts.h new file mode 100644 index 0000000000..3ee8aec145 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/old_pix_fmts.h @@ -0,0 +1,175 @@ +/* + * copyright (c) 2006-2012 Michael Niedermayer + * + * 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_OLD_PIX_FMTS_H +#define AVUTIL_OLD_PIX_FMTS_H + +/* + * This header exists to prevent new pixel formats from being accidentally added + * to the deprecated list. + * Do not include it directly. It will be removed on next major bump + * + * Do not add new items to this list. Use the AVPixelFormat enum instead. + */ + PIX_FMT_NONE = AV_PIX_FMT_NONE, + PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) + PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr + PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... + PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... + PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) + PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) + PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) + PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) + PIX_FMT_GRAY8, ///< Y , 8bpp + PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb + PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb + PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette + 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 + PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing + PIX_FMT_XVMC_MPEG2_IDCT, + 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_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits + PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) + PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) + PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits + PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) + PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) + PIX_FMT_NV21, ///< as above, but U and V bytes are swapped + + PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... + PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... + PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... + PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... + + PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian + PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian + 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_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian + PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian + PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0 + PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0 + + PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian + PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian + PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1 + PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1 + + PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers + PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers + PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + + PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), 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 + PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0 + PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1 + PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1 + PIX_FMT_GRAY8A, ///< 8bit gray, 8bit alpha + 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 + 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 PIX_FMT_YUV420P16* with the bpp stored separately + //is better + PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + PIX_FMT_VDA_VLD, ///< hardware decoding through VDA + +#ifdef AV_PIX_FMT_ABI_GIT_MASTER + PIX_FMT_RGBA64BE, ///< 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 + PIX_FMT_RGBA64LE, ///< 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 little-endian + PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian +#endif + PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp + PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big endian + PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little endian + PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big endian + PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little endian + PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big endian + PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little endian + +#ifndef AV_PIX_FMT_ABI_GIT_MASTER + 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 + PIX_FMT_RGBA64LE, ///< 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 little-endian + PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian +#endif + PIX_FMT_0RGB=0x123+4, ///< packed RGB 8:8:8, 32bpp, 0RGB0RGB... + PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGB0RGB0... + PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, 0BGR0BGR... + PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGR0BGR0... + PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) + PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) + + PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big endian + PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little endian + PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big endian + PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little endian + + 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 +#endif /* AVUTIL_OLD_PIX_FMTS_H */ diff --git a/extern/ffmpeg/include/libavutil/opt.h b/extern/ffmpeg/include/libavutil/opt.h index 0196056d6d..14faa6e066 100644 --- a/extern/ffmpeg/include/libavutil/opt.h +++ b/extern/ffmpeg/include/libavutil/opt.h @@ -31,6 +31,8 @@ #include "avutil.h" #include "dict.h" #include "log.h" +#include "pixfmt.h" +#include "samplefmt.h" /** * @defgroup avoptions AVOptions @@ -44,7 +46,7 @@ * This section describes how to add AVOptions capabilities to a struct. * * All AVOptions-related information is stored in an AVClass. Therefore - * the first member of the struct must be a pointer to an AVClass describing it. + * the first member of the struct should be a pointer to an AVClass describing it. * The option field of the AVClass must be set to a NULL-terminated static array * of AVOptions. Each AVOption must have a non-empty name, a type, a default * value and for number-type AVOptions also a range of allowed values. It must @@ -62,9 +64,9 @@ * 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, { -1 }, INT_MIN, INT_MAX }, + * 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), * AV_OPT_TYPE_STRING }, * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), @@ -75,13 +77,13 @@ * 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 * * Next, when allocating your struct, you must ensure that the AVClass pointer - * is set to the correct value. Then, av_opt_set_defaults() must be called to + * is set to the correct value. Then, av_opt_set_defaults() can be called to * initialize defaults. After that the struct is ready to be used with the * AVOptions API. * @@ -123,7 +125,7 @@ * } child_struct; * static const AVOption child_opts[] = { * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { 0 }, INT_MIN, INT_MAX }, + * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, * { NULL }, * }; * static const AVClass child_class = { @@ -161,7 +163,7 @@ * * @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 @@ -170,8 +172,8 @@ * above, put the following into the child_opts array: * @code * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { 0 }, INT_MIN, INT_MAX, "test_unit" }, - * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { 16 }, 0, 0, "test_unit" }, + * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, + * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, * @endcode * * @section avoptions_use Using AVOptions @@ -225,6 +227,13 @@ enum AVOptionType{ AV_OPT_TYPE_RATIONAL, AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length AV_OPT_TYPE_CONST = 128, + AV_OPT_TYPE_IMAGE_SIZE = MKBETAG('S','I','Z','E'), ///< offset must point to two consecutive integers + AV_OPT_TYPE_PIXEL_FMT = MKBETAG('P','F','M','T'), + AV_OPT_TYPE_SAMPLE_FMT = MKBETAG('S','F','M','T'), + 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, @@ -261,10 +270,10 @@ typedef struct AVOption { * the default value for scalar options */ union { + int64_t i64; double dbl; const char *str; /* TODO those are unused now */ - int64_t i64; AVRational q; } default_val; double min; ///< minimum valid value for the option @@ -277,6 +286,7 @@ typedef struct AVOption { #define AV_OPT_FLAG_AUDIO_PARAM 8 #define AV_OPT_FLAG_VIDEO_PARAM 16 #define AV_OPT_FLAG_SUBTITLE_PARAM 32 +#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 /** @@ -287,11 +297,30 @@ typedef struct AVOption { const char *unit; } AVOption; +/** + * A single allowed range of values, or a single allowed value. + */ +typedef struct AVOptionRange { + const char *str; + double value_min, value_max; ///< For string ranges this represents the min/max length, for dimensions this represents the min/max pixel count + double component_min, component_max; ///< For string this represents the unicode range for chars, 0-127 limits to ASCII + int is_range; ///< if set to 1 the struct encodes a range, if set to 0 a single value +} AVOptionRange; + +/** + * List of AVOptionRange structs + */ +typedef struct AVOptionRanges { + AVOptionRange **range; + int nb_ranges; +} AVOptionRanges; + + #if FF_API_FIND_OPT /** * 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 @@ -390,6 +419,36 @@ void av_opt_set_defaults2(void *s, int mask, int flags); int av_set_options_string(void *ctx, const char *opts, const char *key_val_sep, const char *pairs_sep); +/** + * Parse the key-value pairs list in opts. For each key=value pair found, + * set the value of the corresponding option in ctx. + * + * @param ctx the AVClass object to set options on + * @param opts the options string, key-value pairs separated by a + * delimiter + * @param shorthand a NULL-terminated array of options names for shorthand + * notation: if the first field in opts has no key part, + * the key is taken from the first element of shorthand; + * then again for the second, etc., until either opts is + * finished, shorthand is finished or a named option is + * found; after that, all options must be named + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value, for example '=' + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other, for example ':' or ',' + * @return the number of successfully set key=value pairs, or a negative + * value corresponding to an AVERROR code in case of error: + * AVERROR(EINVAL) if opts cannot be parsed, + * the error code issued by av_set_string3() if a key/value pair + * cannot be set + * + * Options names must use only the following characters: a-z A-Z 0-9 - . / _ + * Separators must use characters distinct from option names and from each + * other. + */ +int av_opt_set_from_string(void *ctx, const char *opts, + const char *const *shorthand, + const char *key_val_sep, const char *pairs_sep); /** * Free all string and binary options in obj. */ @@ -405,7 +464,7 @@ void av_opt_free(void *obj); */ int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); -/* +/** * Set all the options from a given dictionary on an object. * * @param obj a struct whose first element is a pointer to AVClass @@ -421,6 +480,39 @@ int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name) */ int av_opt_set_dict(void *obj, struct AVDictionary **options); +/** + * Extract a key-value pair from the beginning of a string. + * + * @param ropts pointer to the options string, will be updated to + * point to the rest of the string (one of the pairs_sep + * or the final NUL) + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value, for example '=' + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other, for example ':' or ',' + * @param flags flags; see the AV_OPT_FLAG_* values below + * @param rkey parsed key; must be freed using av_free() + * @param rval parsed value; must be freed using av_free() + * + * @return >=0 for success, or a negative value corresponding to an + * AVERROR code in case of error; in particular: + * AVERROR(EINVAL) if no key is present + * + */ +int av_opt_get_key_value(const char **ropts, + const char *key_val_sep, const char *pairs_sep, + unsigned flags, + char **rkey, char **rval); + +enum { + + /** + * Accept to parse a value without a key; the key will then be returned + * as NULL. + */ + AV_OPT_FLAG_IMPLICIT_KEY = 1, +}; + /** * @defgroup opt_eval_funcs Evaluating option strings * @{ @@ -561,6 +653,28 @@ int av_opt_set (void *obj, const char *name, const char *val, int search_f int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); int av_opt_set_double(void *obj, const char *name, double val, int search_flags); int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); +int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); +int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); +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 obj AVClass object to set options on + * @param name name of the binary option + * @param val pointer to an integer list (must have the correct type with + * regard to the contents of the list) + * @param term list terminator (usually 0 or -1) + * @param flags search flags + */ +#define av_opt_set_int_list(obj, name, val, term, flags) \ + (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ + AVERROR(EINVAL) : \ + av_opt_set_bin(obj, name, (const uint8_t *)(val), \ + av_int_list_length(val, term) * sizeof(*(val)), flags)) /** * @} */ @@ -575,15 +689,20 @@ int av_opt_set_q (void *obj, const char *name, AVRational val, int search_f * @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_double(void *obj, const char *name, int search_flags, double *out_val); int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); +int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); +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); /** * @} */ @@ -596,6 +715,41 @@ int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational * or written to. */ void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); + +/** + * Free an AVOptionRanges struct and set it to NULL. + */ +void av_opt_freep_ranges(AVOptionRanges **ranges); + +/** + * Get a list of allowed ranges for the given option. + * + * The returned list may depend on other fields in obj like for example profile. + * + * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored + * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance + * + * The result must be freed with av_opt_freep_ranges. + * + * @return >= 0 on success, a negative errro code otherwise + */ +int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); + +/** + * Get a default list of allowed ranges for the given option. + * + * This list is constructed without using the AVClass.query_ranges() callback + * and can be used as fallback from within the callback. + * + * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored + * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance + * + * The result must be freed with av_opt_free_ranges. + * + * @return >= 0 on success, a negative errro code otherwise + */ +int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); + /** * @} */ diff --git a/extern/ffmpeg/include/libavutil/parseutils.h b/extern/ffmpeg/include/libavutil/parseutils.h index 2a74a060f2..c80f0de3de 100644 --- a/extern/ffmpeg/include/libavutil/parseutils.h +++ b/extern/ffmpeg/include/libavutil/parseutils.h @@ -28,6 +28,30 @@ * misc parsing utilities */ +/** + * Parse str and store the parsed ratio in q. + * + * 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. + * + * The undefined value can be expressed using the "0:0" string. + * + * @param[in,out] q pointer to the AVRational which will contain the ratio + * @param[in] str the string to parse: it has to be a string in the format + * num:den, a float number or an expression + * @param[in] max the maximum allowed numerator and denominator + * @param[in] log_offset log level offset which is applied to the log + * level of log_ctx + * @param[in] log_ctx parent logging context + * @return >= 0 on success, a negative error code otherwise + */ +int av_parse_ratio(AVRational *q, const char *str, int max, + int log_offset, void *log_ctx); + +#define av_parse_ratio_quiet(rate, str, max) \ + av_parse_ratio(rate, str, max, AV_LOG_MAX_OFFSET, NULL) + /** * Parse str and put in width_ptr and height_ptr the detected values. * @@ -74,6 +98,19 @@ int av_parse_video_rate(AVRational *rate, const char *str); 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. @@ -88,7 +125,7 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, * @param timestr a string representing a date or a duration. * - If a date the syntax is: * @code - * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH[:MM[:SS[.m...]]]}|{HH[MM[SS[.m...]]]}}[Z] + * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m...]]]}|{HHMMSS[.m...]]]}}[Z] * now * @endcode * If the value is "now" it takes the current time. @@ -98,16 +135,42 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, * year-month-day. * - If a duration the syntax is: * @code - * [-]HH[:MM[:SS[.m...]]] + * [-][HH:]MM:SS[.m...] * [-]S+[.m...] * @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); +/** + * Parse the input string p according to the format string fmt and + * store its results in the structure dt. + * This implementation supports only a subset of the formats supported + * by the standard strptime(). + * + * In particular it actually supports the parameters: + * - %H: the hour as a decimal number, using a 24-hour clock, in the + * range '00' through '23' + * - %J: hours as a decimal number, in the range '0' through INT_MAX + * - %M: the minute as a decimal number, using a 24-hour clock, in the + * range '00' through '59' + * - %S: the second as a decimal number, using a 24-hour clock, in the + * range '00' through '59' + * - %Y: the year as a decimal number, using the Gregorian calendar + * - %m: the month as a decimal number, in the range '1' through '12' + * - %d: the day of the month as a decimal number, in the range '1' + * through '31' + * - %%: a literal '%' + * + * @return a pointer to the first character not processed in this + * function call, or NULL in case the function fails to match all of + * the fmt string and therefore an error occurred + */ +char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); + /** * Attempt to find a specific tag in a URL. * diff --git a/extern/ffmpeg/include/libavutil/pixdesc.h b/extern/ffmpeg/include/libavutil/pixdesc.h index 2175246785..e88bf9b92a 100644 --- a/extern/ffmpeg/include/libavutil/pixdesc.h +++ b/extern/ffmpeg/include/libavutil/pixdesc.h @@ -23,6 +23,8 @@ #define AVUTIL_PIXDESC_H #include + +#include "attributes.h" #include "pixfmt.h" typedef struct AVComponentDescriptor{ @@ -76,24 +78,71 @@ typedef struct AVPixFmtDescriptor{ uint8_t flags; /** - * Parameters that describe how pixels are packed. If the format - * has chroma components, they must be stored in comp[1] and - * comp[2]. + * Parameters that describe how pixels are packed. + * If the format has 2 or 4 components, then alpha is last. + * If the format has 1 or 2 components, then luma is 0. + * If the format has 3 or 4 components, + * if the RGB flag is set then 0 is red, 1 is green and 2 is blue; + * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V. */ AVComponentDescriptor comp[4]; }AVPixFmtDescriptor; -#define PIX_FMT_BE 1 ///< Pixel format is big-endian. -#define PIX_FMT_PAL 2 ///< Pixel format has a palette in data[1], values are indexes in this palette. -#define PIX_FMT_BITSTREAM 4 ///< All values of a component are bit-wise packed end to end. -#define PIX_FMT_HWACCEL 8 ///< Pixel format is an HW accelerated format. -#define PIX_FMT_PLANAR 16 ///< At least one pixel component is not in the first data plane -#define PIX_FMT_RGB 32 ///< The pixel format contains RGB-like data (as opposed to YUV/grayscale) +/** + * Pixel format is big-endian. + */ +#define AV_PIX_FMT_FLAG_BE (1 << 0) +/** + * Pixel format has a palette in data[1], values are indexes in this palette. + */ +#define AV_PIX_FMT_FLAG_PAL (1 << 1) +/** + * All values of a component are bit-wise packed end to end. + */ +#define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2) +/** + * Pixel format is an HW accelerated format. + */ +#define AV_PIX_FMT_FLAG_HWACCEL (1 << 3) +/** + * At least one pixel component is not in the first data plane. + */ +#define AV_PIX_FMT_FLAG_PLANAR (1 << 4) +/** + * The pixel format contains RGB-like data (as opposed to YUV/grayscale). + */ +#define AV_PIX_FMT_FLAG_RGB (1 << 5) +/** + * The pixel format is "pseudo-paletted". This means that FFmpeg treats it as + * paletted internally, but the palette is generated by the decoder and is not + * stored in the file. + */ +#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) +/** + * The pixel format has an alpha channel. + */ +#define AV_PIX_FMT_FLAG_ALPHA (1 << 7) +#if FF_API_PIX_FMT +/** + * @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 +#define PIX_FMT_BITSTREAM AV_PIX_FMT_FLAG_BITSTREAM +#define PIX_FMT_HWACCEL AV_PIX_FMT_FLAG_HWACCEL +#define PIX_FMT_PLANAR AV_PIX_FMT_FLAG_PLANAR +#define PIX_FMT_RGB AV_PIX_FMT_FLAG_RGB +#define PIX_FMT_PSEUDOPAL AV_PIX_FMT_FLAG_PSEUDOPAL +#define PIX_FMT_ALPHA AV_PIX_FMT_FLAG_ALPHA +#endif + +#if FF_API_PIX_FMT_DESC /** * The array of all the pixel format descriptors. */ -extern const AVPixFmtDescriptor av_pix_fmt_descriptors[]; +extern attribute_deprecated const AVPixFmtDescriptor av_pix_fmt_descriptors[]; +#endif /** * Read a line from an image, and write the values of the @@ -140,9 +189,9 @@ void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesi * For example in a little-endian system, first looks for "gray16", * then for "gray16le". * - * Finally if no pixel format has been found, returns PIX_FMT_NONE. + * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE. */ -enum PixelFormat av_get_pix_fmt(const char *name); +enum AVPixelFormat av_get_pix_fmt(const char *name); /** * Return the short name for a pixel format, NULL in case pix_fmt is @@ -150,11 +199,11 @@ enum PixelFormat av_get_pix_fmt(const char *name); * * @see av_get_pix_fmt(), av_get_pix_fmt_string() */ -const char *av_get_pix_fmt_name(enum PixelFormat pix_fmt); +const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); /** * 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 @@ -162,11 +211,12 @@ const char *av_get_pix_fmt_name(enum PixelFormat pix_fmt); * corresponding info string, or a negative value to print the * corresponding header. */ -char *av_get_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt); +char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt); /** * Return the number of bits per pixel used by the pixel format - * described by pixdesc. + * described by pixdesc. Note that this is not the same as the number + * of bits per sample. * * The returned number of bits refers to the number of bits actually * used for storing the pixel information, that is padding bits are @@ -174,4 +224,68 @@ char *av_get_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt); */ int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); +/** + * Return the number of bits per pixel for the pixel format + * described by pixdesc, including any padding or unused bits. + */ +int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); + +/** + * @return a pixel format descriptor for provided pixel format or NULL if + * this pixel format is unknown. + */ +const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt); + +/** + * Iterate over all pixel format descriptors known to libavutil. + * + * @param prev previous descriptor. NULL to get the first descriptor. + * + * @return next descriptor or NULL after the last descriptor + */ +const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev); + +/** + * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc + * is not a valid pointer to a pixel format descriptor. + */ +enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc); + +/** + * Utility function to access log2_chroma_w log2_chroma_h from + * the pixel format AVPixFmtDescriptor. + * + * See avcodec_get_chroma_sub_sample() for a function that asserts a + * valid pixel format instead of returning an error code. + * Its recommanded that you use avcodec_get_chroma_sub_sample unless + * you do check the return code! + * + * @param[in] pix_fmt the pixel format + * @param[out] h_shift store log2_chroma_w + * @param[out] v_shift store log2_chroma_h + * + * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format + */ +int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, + int *h_shift, int *v_shift); + +/** + * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a + * valid pixel format. + */ +int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); + +void ff_check_pixfmt_descriptors(void); + +/** + * Utility function to swap the endianness of a pixel format. + * + * @param[in] pix_fmt the pixel format + * + * @return pixel format with swapped endianness if it exists, + * otherwise AV_PIX_FMT_NONE + */ +enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); + + #endif /* AVUTIL_PIXDESC_H */ diff --git a/extern/ffmpeg/include/libavutil/pixfmt.h b/extern/ffmpeg/include/libavutil/pixfmt.h index f0d9c019af..7b17a4f0c4 100644 --- a/extern/ffmpeg/include/libavutil/pixfmt.h +++ b/extern/ffmpeg/include/libavutil/pixfmt.h @@ -28,22 +28,26 @@ */ #include "libavutil/avconfig.h" +#include "version.h" + +#define AVPALETTE_SIZE 1024 +#define AVPALETTE_COUNT 256 /** * Pixel format. * * @note - * PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA + * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA * color is put together as: * (A << 24) | (R << 16) | (G << 8) | B * This is stored as BGRA on little-endian CPU architectures and ARGB on * big-endian CPUs. * * @par - * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized + * When the pixel format is palettized RGB (AV_PIX_FMT_PAL8), the palettized * image data is stored in AVFrame.data[0]. The palette is transported in * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is - * formatted the same as in PIX_FMT_RGB32 described above (i.e., it is + * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is * also endian-specific). Note also that the individual RGB palette * components stored in AVFrame.data[1] should be in the range 0..255. * This is important as many custom PAL8 video codecs that were designed @@ -55,173 +59,339 @@ * 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 - * this allows simpler detection of big vs little endian. + * 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 PixelFormat { - PIX_FMT_NONE= -1, - PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... - PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... - PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - PIX_FMT_GRAY8, ///< Y , 8bpp - PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette - 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 - PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing - PIX_FMT_XVMC_MPEG2_IDCT, - 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_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) - PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) - PIX_FMT_NV21, ///< as above, but U and V bytes are swapped +enum AVPixelFormat { + AV_PIX_FMT_NONE = -1, + AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) + AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr + AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... + AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... + AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) + AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) + AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) + AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) + AV_PIX_FMT_GRAY8, ///< Y , 8bpp + AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb + AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb + AV_PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette + 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 + AV_PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing + AV_PIX_FMT_XVMC_MPEG2_IDCT, + 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_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits + AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) + AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) + AV_PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits + AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) + AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) + AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... + AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... + AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... + AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... + AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian - PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian - 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) - 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 - 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 + AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian + AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian + 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 - PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0 - PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0 + AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian + AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian + AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0 + AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0 - PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1 - PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1 + AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian + AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian + AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1 + AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1 - PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers - PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers - PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers + AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers + AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), 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 - 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 - PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer + AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), 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 - PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0 - PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0 - PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1 - PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1 - PIX_FMT_GRAY8A, ///< 8bit gray, 8bit alpha - 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 - 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 + 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_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0 + AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1 + AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1 + AV_PIX_FMT_GRAY8A, ///< 8bit gray, 8bit alpha + 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 PIX_FMT_YUV420P16* with the bpp stored seperately - //is better - PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - PIX_FMT_VDA_VLD, ///< hardware decoding through VDA + /** + * 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_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_VDA_VLD, ///< hardware decoding through VDA #ifdef AV_PIX_FMT_ABI_GIT_MASTER - PIX_FMT_RGBA64BE, ///< 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 - PIX_FMT_RGBA64LE, ///< 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 little-endian - PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian + AV_PIX_FMT_RGBA64BE, ///< 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_RGBA64LE, ///< 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 little-endian + AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian #endif - PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp - PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big endian - PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little endian - PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big endian - PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little endian - PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big endian - PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little endian + AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp + AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian + AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian + AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian + AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian + AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian + AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian + + /** + * duplicated pixel formats for compatibility with libav. + * FFmpeg supports these formats since May 8 2012 and Jan 28 2012 (commits f9ca1ac7 and 143a5c55) + * Libav added them Oct 12 2012 with incompatible values (commit 6d5600e85) + */ + AV_PIX_FMT_YUVA422P_LIBAV, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) + AV_PIX_FMT_YUVA444P_LIBAV, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) + + AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian + AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian + AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian + AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian + AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian + AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian + AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) + AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) + AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) + AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) + AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) + + AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface + + 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 - 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 - PIX_FMT_RGBA64LE, ///< 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 little-endian - PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian + 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_RGBA64LE, ///< 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 little-endian + AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian +#endif + AV_PIX_FMT_0RGB=0x123+4, ///< packed RGB 8:8:8, 32bpp, 0RGB0RGB... + AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGB0RGB0... + AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, 0BGR0BGR... + AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGR0BGR0... + AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) + AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) + + AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian + AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian + AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian + AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian + AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp + 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 */ + + 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 +#include "old_pix_fmts.h" #endif - PIX_FMT_0RGB=0x123+4, ///< packed RGB 8:8:8, 32bpp, 0RGB0RGB... - PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGB0RGB0... - PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, 0BGR0BGR... - PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGR0BGR0... - 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 }; -#define PIX_FMT_Y400A PIX_FMT_GRAY8A -#define PIX_FMT_GBR24P PIX_FMT_GBRP - -#if AV_HAVE_BIGENDIAN -# define PIX_FMT_NE(be, le) PIX_FMT_##be -#else -# define PIX_FMT_NE(be, le) PIX_FMT_##le +#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI +#define AV_PIX_FMT_YUVA422P AV_PIX_FMT_YUVA422P_LIBAV +#define AV_PIX_FMT_YUVA444P AV_PIX_FMT_YUVA444P_LIBAV #endif -#define PIX_FMT_RGB32 PIX_FMT_NE(ARGB, BGRA) -#define PIX_FMT_RGB32_1 PIX_FMT_NE(RGBA, ABGR) -#define PIX_FMT_BGR32 PIX_FMT_NE(ABGR, RGBA) -#define PIX_FMT_BGR32_1 PIX_FMT_NE(BGRA, ARGB) -#define PIX_FMT_0RGB32 PIX_FMT_NE(0RGB, BGR0) -#define PIX_FMT_0BGR32 PIX_FMT_NE(0BGR, RGB0) -#define PIX_FMT_GRAY16 PIX_FMT_NE(GRAY16BE, GRAY16LE) -#define PIX_FMT_RGB48 PIX_FMT_NE(RGB48BE, RGB48LE) -#define PIX_FMT_RGB565 PIX_FMT_NE(RGB565BE, RGB565LE) -#define PIX_FMT_RGB555 PIX_FMT_NE(RGB555BE, RGB555LE) -#define PIX_FMT_RGB444 PIX_FMT_NE(RGB444BE, RGB444LE) -#define PIX_FMT_BGR48 PIX_FMT_NE(BGR48BE, BGR48LE) -#define PIX_FMT_BGR565 PIX_FMT_NE(BGR565BE, BGR565LE) -#define PIX_FMT_BGR555 PIX_FMT_NE(BGR555BE, BGR555LE) -#define PIX_FMT_BGR444 PIX_FMT_NE(BGR444BE, BGR444LE) +#define AV_PIX_FMT_Y400A AV_PIX_FMT_GRAY8A +#define AV_PIX_FMT_GBR24P AV_PIX_FMT_GBRP -#define PIX_FMT_YUV420P9 PIX_FMT_NE(YUV420P9BE , YUV420P9LE) -#define PIX_FMT_YUV422P9 PIX_FMT_NE(YUV422P9BE , YUV422P9LE) -#define PIX_FMT_YUV444P9 PIX_FMT_NE(YUV444P9BE , YUV444P9LE) -#define PIX_FMT_YUV420P10 PIX_FMT_NE(YUV420P10BE, YUV420P10LE) -#define PIX_FMT_YUV422P10 PIX_FMT_NE(YUV422P10BE, YUV422P10LE) -#define PIX_FMT_YUV444P10 PIX_FMT_NE(YUV444P10BE, YUV444P10LE) -#define PIX_FMT_YUV420P16 PIX_FMT_NE(YUV420P16BE, YUV420P16LE) -#define PIX_FMT_YUV422P16 PIX_FMT_NE(YUV422P16BE, YUV422P16LE) -#define PIX_FMT_YUV444P16 PIX_FMT_NE(YUV444P16BE, YUV444P16LE) +#if AV_HAVE_BIGENDIAN +# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be +#else +# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le +#endif -#define PIX_FMT_RGBA64 PIX_FMT_NE(RGBA64BE, RGBA64LE) -#define PIX_FMT_BGRA64 PIX_FMT_NE(BGRA64BE, BGRA64LE) -#define PIX_FMT_GBRP9 PIX_FMT_NE(GBRP9BE , GBRP9LE) -#define PIX_FMT_GBRP10 PIX_FMT_NE(GBRP10BE, GBRP10LE) -#define PIX_FMT_GBRP16 PIX_FMT_NE(GBRP16BE, GBRP16LE) +#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) +#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) +#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) +#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) +#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) +#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) + +#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) +#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) +#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) +#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) +#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) +#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) +#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) +#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) +#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) + +#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE) +#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE) +#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE) +#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) +#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) +#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) +#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) +#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) +#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) +#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) +#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) +#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) +#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) +#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) +#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) + +#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) +#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) +#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE) +#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) +#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_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE) +#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) +#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) +#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) +#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) +#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) +#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 + +#define PIX_FMT_Y400A AV_PIX_FMT_Y400A +#define PIX_FMT_GBR24P AV_PIX_FMT_GBR24P + +#define PIX_FMT_NE(be, le) AV_PIX_FMT_NE(be, le) + +#define PIX_FMT_RGB32 AV_PIX_FMT_RGB32 +#define PIX_FMT_RGB32_1 AV_PIX_FMT_RGB32_1 +#define PIX_FMT_BGR32 AV_PIX_FMT_BGR32 +#define PIX_FMT_BGR32_1 AV_PIX_FMT_BGR32_1 +#define PIX_FMT_0RGB32 AV_PIX_FMT_0RGB32 +#define PIX_FMT_0BGR32 AV_PIX_FMT_0BGR32 + +#define PIX_FMT_GRAY16 AV_PIX_FMT_GRAY16 +#define PIX_FMT_RGB48 AV_PIX_FMT_RGB48 +#define PIX_FMT_RGB565 AV_PIX_FMT_RGB565 +#define PIX_FMT_RGB555 AV_PIX_FMT_RGB555 +#define PIX_FMT_RGB444 AV_PIX_FMT_RGB444 +#define PIX_FMT_BGR48 AV_PIX_FMT_BGR48 +#define PIX_FMT_BGR565 AV_PIX_FMT_BGR565 +#define PIX_FMT_BGR555 AV_PIX_FMT_BGR555 +#define PIX_FMT_BGR444 AV_PIX_FMT_BGR444 + +#define PIX_FMT_YUV420P9 AV_PIX_FMT_YUV420P9 +#define PIX_FMT_YUV422P9 AV_PIX_FMT_YUV422P9 +#define PIX_FMT_YUV444P9 AV_PIX_FMT_YUV444P9 +#define PIX_FMT_YUV420P10 AV_PIX_FMT_YUV420P10 +#define PIX_FMT_YUV422P10 AV_PIX_FMT_YUV422P10 +#define PIX_FMT_YUV444P10 AV_PIX_FMT_YUV444P10 +#define PIX_FMT_YUV420P12 AV_PIX_FMT_YUV420P12 +#define PIX_FMT_YUV422P12 AV_PIX_FMT_YUV422P12 +#define PIX_FMT_YUV444P12 AV_PIX_FMT_YUV444P12 +#define PIX_FMT_YUV420P14 AV_PIX_FMT_YUV420P14 +#define PIX_FMT_YUV422P14 AV_PIX_FMT_YUV422P14 +#define PIX_FMT_YUV444P14 AV_PIX_FMT_YUV444P14 +#define PIX_FMT_YUV420P16 AV_PIX_FMT_YUV420P16 +#define PIX_FMT_YUV422P16 AV_PIX_FMT_YUV422P16 +#define PIX_FMT_YUV444P16 AV_PIX_FMT_YUV444P16 + +#define PIX_FMT_RGBA64 AV_PIX_FMT_RGBA64 +#define PIX_FMT_BGRA64 AV_PIX_FMT_BGRA64 +#define PIX_FMT_GBRP9 AV_PIX_FMT_GBRP9 +#define PIX_FMT_GBRP10 AV_PIX_FMT_GBRP10 +#define PIX_FMT_GBRP12 AV_PIX_FMT_GBRP12 +#define PIX_FMT_GBRP14 AV_PIX_FMT_GBRP14 +#define PIX_FMT_GBRP16 AV_PIX_FMT_GBRP16 +#endif #endif /* AVUTIL_PIXFMT_H */ diff --git a/extern/ffmpeg/include/libavutil/rational.h b/extern/ffmpeg/include/libavutil/rational.h index 8c2bdb5529..b9800ee360 100644 --- a/extern/ffmpeg/include/libavutil/rational.h +++ b/extern/ffmpeg/include/libavutil/rational.h @@ -55,7 +55,7 @@ typedef struct AVRational{ 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; @@ -114,6 +114,17 @@ AVRational av_add_q(AVRational b, AVRational c) av_const; */ AVRational av_sub_q(AVRational b, AVRational c) av_const; +/** + * Invert a rational. + * @param q value + * @return 1 / q + */ +static av_always_inline AVRational av_inv_q(AVRational q) +{ + AVRational r = { q.den, q.num }; + return r; +} + /** * Convert a double precision floating point number to a rational. * inf is expressed as {1,0} or {-1,0} depending on the sign. diff --git a/extern/ffmpeg/include/libavutil/ripemd.h b/extern/ffmpeg/include/libavutil/ripemd.h new file mode 100644 index 0000000000..7b0c8bc89c --- /dev/null +++ b/extern/ffmpeg/include/libavutil/ripemd.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2007 Michael Niedermayer + * Copyright (C) 2013 James Almer + * + * 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_RIPEMD_H +#define AVUTIL_RIPEMD_H + +#include + +#include "attributes.h" +#include "version.h" + +/** + * @defgroup lavu_ripemd RIPEMD + * @ingroup lavu_crypto + * @{ + */ + +extern const int av_ripemd_size; + +struct AVRIPEMD; + +/** + * Allocate an AVRIPEMD context. + */ +struct AVRIPEMD *av_ripemd_alloc(void); + +/** + * Initialize RIPEMD hashing. + * + * @param context pointer to the function context (of size av_ripemd_size) + * @param bits number of bits in digest (128, 160, 256 or 320 bits) + * @return zero if initialization succeeded, -1 otherwise + */ +int av_ripemd_init(struct AVRIPEMD* context, int bits); + +/** + * Update hash value. + * + * @param context hash function context + * @param data input data to update hash with + * @param len input data length + */ +void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len); + +/** + * Finish hashing and output digest value. + * + * @param context hash function context + * @param digest buffer where output digest value is stored + */ +void av_ripemd_final(struct AVRIPEMD* context, uint8_t *digest); + +/** + * @} + */ + +#endif /* AVUTIL_RIPEMD_H */ diff --git a/extern/ffmpeg/include/libavutil/samplefmt.h b/extern/ffmpeg/include/libavutil/samplefmt.h index 855cffd838..db17d43bcf 100644 --- a/extern/ffmpeg/include/libavutil/samplefmt.h +++ b/extern/ffmpeg/include/libavutil/samplefmt.h @@ -19,10 +19,32 @@ #ifndef AVUTIL_SAMPLEFMT_H #define AVUTIL_SAMPLEFMT_H +#include + #include "avutil.h" +#include "attributes.h" /** - * all in native-endian format + * Audio Sample Formats + * + * @par + * The data described by the sample format is always in native-endian order. + * Sample values can be expressed by native C types, hence the lack of a signed + * 24-bit sample format even though it is a common raw audio data format. + * + * @par + * The floating-point formats are based on full volume being in the range + * [-1.0, 1.0]. Any values outside this range are beyond full volume level. + * + * @par + * The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg + * (such as AVFrame in libavcodec) is as follows: + * + * For planar sample formats, each audio channel is in a separate data plane, + * and linesize is the buffer size, in bytes, for a single plane. All data + * planes must be the same size. For packed sample formats, only the first data + * plane is used, and samples for each channel are interleaved. In this case, + * linesize is the buffer size, in bytes, for the 1 plane. */ enum AVSampleFormat { AV_SAMPLE_FMT_NONE = -1, @@ -61,6 +83,28 @@ enum AVSampleFormat av_get_sample_fmt(const char *name); */ enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar); +/** + * Get the packed alternative form of the given sample format. + * + * If the passed sample_fmt is already in packed format, the format returned is + * the same as the input. + * + * @return the packed alternative form of the given sample format or + AV_SAMPLE_FMT_NONE on error. + */ +enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); + +/** + * Get the planar alternative form of the given sample format. + * + * If the passed sample_fmt is already in planar format, the format returned is + * the same as the input. + * + * @return the planar alternative form of the given sample format or + AV_SAMPLE_FMT_NONE on error. + */ +enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); + /** * Generate a string corresponding to the sample format with * sample_fmt, or a header if sample_fmt is negative. @@ -107,33 +151,44 @@ int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); * @param nb_channels the number of channels * @param nb_samples the number of samples in a single channel * @param sample_fmt the sample format + * @param align buffer size alignment (0 = default, 1 = no alignment) * @return required buffer size, or negative error code on failure */ int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); /** - * Fill channel data pointers and linesize for samples with sample + * Fill plane data pointers and linesize for samples with sample * format sample_fmt. * - * The pointers array is filled with the pointers to the samples data: + * The audio_data array is filled with the pointers to the samples data planes: * for planar, set the start point of each channel's data within the buffer, * for packed, set the start point of the entire buffer only. * - * The linesize array is filled with the aligned size of each channel's data - * buffer for planar layout, or the aligned size of the buffer for all channels - * for packed layout. + * The value pointed to by linesize is set to the aligned size of each + * channel's data buffer for planar layout, or to the aligned size of the + * buffer for all channels for packed layout. + * + * The buffer in buf must be big enough to contain all the samples + * (use av_samples_get_buffer_size() to compute its minimum size), + * otherwise the audio_data pointers will point to invalid data. + * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. * * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize calculated linesize + * @param[out] linesize calculated linesize, may be NULL * @param buf the pointer to a buffer containing the samples * @param nb_channels the number of channels * @param nb_samples the number of samples in a single channel * @param sample_fmt the sample format - * @param align buffer size alignment (1 = no alignment required) - * @return 0 on success or a negative error code on failure + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return >=0 on success or a negative error code on failure + * @todo return minimum size in bytes required for the buffer in case + * of success at the next bump */ -int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, uint8_t *buf, +int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, + const uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); @@ -141,16 +196,61 @@ int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, uint8_t *buf, * Allocate a samples buffer for nb_samples samples, and fill data pointers and * linesize accordingly. * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) + * Allocated data will be initialized to silence. + * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. * * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize aligned size for audio buffer(s) + * @param[out] linesize aligned size for audio buffer(s), may be NULL * @param nb_channels number of audio channels * @param nb_samples number of samples per channel - * @param align buffer size alignment (1 = no alignment required) - * @return 0 on success or a negative error code on failure + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return >=0 on success or a negative error code on failure + * @todo return the size of the allocated buffer in case of success at the next bump * @see av_samples_fill_arrays() + * @see av_samples_alloc_array_and_samples() */ int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); +/** + * Allocate a data pointers array, samples buffer for nb_samples + * samples, and fill data pointers and linesize accordingly. + * + * This is the same as av_samples_alloc(), but also allocates the data + * pointers array. + * + * @see av_samples_alloc() + */ +int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, + int nb_samples, enum AVSampleFormat sample_fmt, int align); + +/** + * Copy samples from src to dst. + * + * @param dst destination array of pointers to data planes + * @param src source array of pointers to data planes + * @param dst_offset offset in samples at which the data will be written to dst + * @param src_offset offset in samples at which the data will be read from src + * @param nb_samples number of samples to be copied + * @param nb_channels number of audio channels + * @param sample_fmt audio sample format + */ +int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset, + int src_offset, int nb_samples, int nb_channels, + enum AVSampleFormat sample_fmt); + +/** + * Fill an audio buffer with silence. + * + * @param audio_data array of pointers to data planes + * @param offset offset in samples at which to start filling + * @param nb_samples number of samples to fill + * @param nb_channels number of audio channels + * @param sample_fmt audio sample format + */ +int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples, + int nb_channels, enum AVSampleFormat sample_fmt); + #endif /* AVUTIL_SAMPLEFMT_H */ diff --git a/extern/ffmpeg/include/libavutil/sha.h b/extern/ffmpeg/include/libavutil/sha.h index d891cae87f..bf4377e51b 100644 --- a/extern/ffmpeg/include/libavutil/sha.h +++ b/extern/ffmpeg/include/libavutil/sha.h @@ -23,6 +23,9 @@ #include +#include "attributes.h" +#include "version.h" + /** * @defgroup lavu_sha SHA * @ingroup lavu_crypto @@ -33,6 +36,11 @@ extern const int av_sha_size; struct AVSHA; +/** + * Allocate an AVSHA context. + */ +struct AVSHA *av_sha_alloc(void); + /** * Initialize SHA-1 or SHA-2 hashing. * diff --git a/extern/ffmpeg/include/libavutil/sha512.h b/extern/ffmpeg/include/libavutil/sha512.h new file mode 100644 index 0000000000..7b08701477 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/sha512.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2007 Michael Niedermayer + * Copyright (C) 2013 James Almer + * + * 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_SHA512_H +#define AVUTIL_SHA512_H + +#include + +#include "attributes.h" +#include "version.h" + +/** + * @defgroup lavu_sha512 SHA512 + * @ingroup lavu_crypto + * @{ + */ + +extern const int av_sha512_size; + +struct AVSHA512; + +/** + * Allocate an AVSHA512 context. + */ +struct AVSHA512 *av_sha512_alloc(void); + +/** + * Initialize SHA-2 512 hashing. + * + * @param context pointer to the function context (of size av_sha512_size) + * @param bits number of bits in digest (224, 256, 384 or 512 bits) + * @return zero if initialization succeeded, -1 otherwise + */ +int av_sha512_init(struct AVSHA512* context, int bits); + +/** + * Update hash value. + * + * @param context hash function context + * @param data input data to update hash with + * @param len input data length + */ +void av_sha512_update(struct AVSHA512* context, const uint8_t* data, unsigned int len); + +/** + * Finish hashing and output digest value. + * + * @param context hash function context + * @param digest buffer where output digest value is stored + */ +void av_sha512_final(struct AVSHA512* context, uint8_t *digest); + +/** + * @} + */ + +#endif /* AVUTIL_SHA512_H */ diff --git a/extern/ffmpeg/include/libavutil/time.h b/extern/ffmpeg/include/libavutil/time.h new file mode 100644 index 0000000000..90eb436949 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/time.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2000-2003 Fabrice Bellard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_TIME_H +#define AVUTIL_TIME_H + +#include + +/** + * Get the current time in microseconds. + */ +int64_t av_gettime(void); + +/** + * Sleep for a period of time. Although the duration is expressed in + * microseconds, the actual delay may be rounded to the precision of the + * system timer. + * + * @param usec Number of microseconds to sleep. + * @return zero on success or (negative) error code. + */ +int av_usleep(unsigned usec); + +#endif /* AVUTIL_TIME_H */ diff --git a/extern/ffmpeg/include/libavutil/timecode.h b/extern/ffmpeg/include/libavutil/timecode.h new file mode 100644 index 0000000000..56e3975fd8 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/timecode.h @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier + * Copyright (c) 2011-2012 Smartjog S.A.S, Clément BÅ“sch + * + * 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 + * Timecode helpers header + */ + +#ifndef AVUTIL_TIMECODE_H +#define AVUTIL_TIMECODE_H + +#include +#include "rational.h" + +#define AV_TIMECODE_STR_SIZE 16 + +enum AVTimecodeFlag { + AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame + AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours + AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed +}; + +typedef struct { + int start; ///< timecode frame start (first base frame number) + uint32_t flags; ///< flags such as drop frame, +24 hours support, ... + AVRational rate; ///< frame rate in rational form + unsigned fps; ///< frame per second; must be consistent with the rate field +} AVTimecode; + +/** + * Adjust frame number for NTSC drop frame time code. + * + * @param framenum frame number to adjust + * @param fps frame per second, 30 or 60 + * @return adjusted frame number + * @warning adjustment is only valid in NTSC 29.97 and 59.94 + */ +int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); + +/** + * Convert frame number to SMPTE 12M binary representation. + * + * @param tc timecode data correctly initialized + * @param framenum frame number + * @return the SMPTE binary representation + * + * @note Frame number adjustment is automatically done in case of drop timecode, + * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). + * @note The frame number is relative to tc->start. + * @note Color frame (CF), binary group flags (BGF) and biphase mark polarity + * correction (PC) bits are set to zero. + */ +uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); + +/** + * Load timecode string in buf. + * + * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long + * @param tc timecode data correctly initialized + * @param framenum frame number + * @return the buf parameter + * + * @note Timecode representation can be a negative timecode and have more than + * 24 hours, but will only be honored if the flags are correctly set. + * @note The frame number is relative to tc->start. + */ +char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); + +/** + * Get the timecode string from the SMPTE timecode format. + * + * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long + * @param tcsmpte the 32-bit SMPTE timecode + * @param prevent_df prevent the use of a drop flag when it is known the DF bit + * is arbitrary + * @return the buf parameter + */ +char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df); + +/** + * Get the timecode string from the 25-bit timecode format (MPEG GOP format). + * + * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long + * @param tc25bit the 25-bits timecode + * @return the buf parameter + */ +char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); + +/** + * Init a timecode struct with the passed parameters. + * + * @param log_ctx a pointer to an arbitrary struct of which the first field + * is a pointer to an AVClass struct (used for av_log) + * @param tc pointer to an allocated AVTimecode + * @param rate frame rate in rational form + * @param flags miscellaneous flags such as drop frame, +24 hours, ... + * (see AVTimecodeFlag) + * @param frame_start the first frame number + * @return 0 on success, AVERROR otherwise + */ +int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); + +/** + * Parse timecode representation (hh:mm:ss[:;.]ff). + * + * @param log_ctx a pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct (used for av_log). + * @param tc pointer to an allocated AVTimecode + * @param rate frame rate in rational form + * @param str timecode string which will determine the frame start + * @return 0 on success, AVERROR otherwise + */ +int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); + +/** + * Check if the timecode feature is available for the given frame rate + * + * @return 0 if supported, <0 otherwise + */ +int av_timecode_check_frame_rate(AVRational rate); + +#endif /* AVUTIL_TIMECODE_H */ diff --git a/extern/ffmpeg/include/libavutil/timestamp.h b/extern/ffmpeg/include/libavutil/timestamp.h new file mode 100644 index 0000000000..f63a08c579 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/timestamp.h @@ -0,0 +1,74 @@ +/* + * 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 + * timestamp utils, mostly useful for debugging/logging purposes + */ + +#ifndef AVUTIL_TIMESTAMP_H +#define AVUTIL_TIMESTAMP_H + +#include "common.h" + +#define AV_TS_MAX_STRING_SIZE 32 + +/** + * Fill the provided buffer with a string containing a timestamp + * representation. + * + * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE + * @param ts the timestamp to represent + * @return the buffer in input + */ +static inline char *av_ts_make_string(char *buf, int64_t ts) +{ + if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); + else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%"PRId64, ts); + return buf; +} + +/** + * Convenience macro, the return value should be used only directly in + * function arguments but never stand-alone. + */ +#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts) + +/** + * Fill the provided buffer with a string containing a timestamp time + * representation. + * + * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE + * @param ts the timestamp to represent + * @param tb the timebase of the timestamp + * @return the buffer in input + */ +static inline char *av_ts_make_time_string(char *buf, int64_t ts, AVRational *tb) +{ + if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); + else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%.6g", av_q2d(*tb) * ts); + return buf; +} + +/** + * Convenience macro, the return value should be used only directly in + * function arguments but never stand-alone. + */ +#define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb) + +#endif /* AVUTIL_TIMESTAMP_H */ diff --git a/extern/ffmpeg/include/libavutil/version.h b/extern/ffmpeg/include/libavutil/version.h new file mode 100644 index 0000000000..dd70beb9ea --- /dev/null +++ b/extern/ffmpeg/include/libavutil/version.h @@ -0,0 +1,153 @@ +/* + * copyright (c) 2003 Fabrice Bellard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_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) + +/** + * @} + */ + +/** + * @defgroup version_utils Library Version Macros + * + * Useful to check and match library version in order to maintain + * backward compatibility. + * + * @{ + */ + +#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c) +#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c +#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) + +/** + * @} + */ + + +/** + * @file + * @ingroup lavu + * Libavutil version macros + */ + +/** + * @defgroup lavu_ver Version and Build diagnostics + * + * Macros and function useful to check at compiletime and at runtime + * which version of libavutil is in use. + * + * @{ + */ + +#define LIBAVUTIL_VERSION_MAJOR 52 +#define LIBAVUTIL_VERSION_MINOR 48 +#define LIBAVUTIL_VERSION_MICRO 101 + +#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ + LIBAVUTIL_VERSION_MINOR, \ + LIBAVUTIL_VERSION_MICRO) +#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ + LIBAVUTIL_VERSION_MINOR, \ + LIBAVUTIL_VERSION_MICRO) +#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT + +#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) + +/** + * @} + * + * @defgroup depr_guards Deprecation guards + * FF_API_* defines may be placed below to indicate public API that will be + * 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_GET_BITS_PER_SAMPLE_FMT +#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_FIND_OPT +#define FF_API_FIND_OPT (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_OLD_AVOPTIONS +#define FF_API_OLD_AVOPTIONS (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_PIX_FMT +#define FF_API_PIX_FMT (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_CONTEXT_SIZE +#define FF_API_CONTEXT_SIZE (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_PIX_FMT_DESC +#define FF_API_PIX_FMT_DESC (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_AV_REVERSE +#define FF_API_AV_REVERSE (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_AUDIOCONVERT +#define FF_API_AUDIOCONVERT (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_CPU_FLAG_MMX2 +#define FF_API_CPU_FLAG_MMX2 (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_SAMPLES_UTILS_RETURN_ZERO +#define FF_API_SAMPLES_UTILS_RETURN_ZERO (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_LLS_PRIVATE +#define FF_API_LLS_PRIVATE (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_LLS1 +#define FF_API_LLS1 (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_AVFRAME_LAVC +#define FF_API_AVFRAME_LAVC (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_VDPAU +#define FF_API_VDPAU (LIBAVUTIL_VERSION_MAJOR < 53) +#endif +#ifndef FF_API_GET_CHANNEL_LAYOUT_COMPAT +#define FF_API_GET_CHANNEL_LAYOUT_COMPAT (LIBAVUTIL_VERSION_MAJOR < 53) +#endif + +/** + * @} + */ + +#endif /* AVUTIL_VERSION_H */ + diff --git a/extern/ffmpeg/include/libavutil/xtea.h b/extern/ffmpeg/include/libavutil/xtea.h new file mode 100644 index 0000000000..0899c92bc8 --- /dev/null +++ b/extern/ffmpeg/include/libavutil/xtea.h @@ -0,0 +1,62 @@ +/* + * A 32-bit implementation of the XTEA algorithm + * Copyright (c) 2012 Samuel Pitoiset + * + * 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_XTEA_H +#define AVUTIL_XTEA_H + +#include + +/** + * @defgroup lavu_xtea XTEA + * @ingroup lavu_crypto + * @{ + */ + +typedef struct AVXTEA { + uint32_t key[16]; +} AVXTEA; + +/** + * Initialize an AVXTEA context. + * + * @param ctx an AVXTEA context + * @param key a key of 16 bytes used for encryption/decryption + */ +void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]); + +/** + * Encrypt or decrypt a buffer using a previously initialized context. + * + * @param ctx an AVXTEA context + * @param dst destination array, can be equal to src + * @param src source array, can be equal to dst + * @param count number of 8 byte blocks + * @param iv initialization vector for CBC mode, if NULL then ECB will be used + * @param decrypt 0 for encryption, 1 for decryption + */ +void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, + int count, uint8_t *iv, int decrypt); + +/** + * @} + */ + +#endif /* AVUTIL_XTEA_H */ diff --git a/extern/ffmpeg/include/libpostproc/postprocess.h b/extern/ffmpeg/include/libpostproc/postprocess.h index c2c5c73240..928e01fe10 100644 --- a/extern/ffmpeg/include/libpostproc/postprocess.h +++ b/extern/ffmpeg/include/libpostproc/postprocess.h @@ -23,27 +23,16 @@ /** * @file - * @brief - * external postprocessing API + * @ingroup lpp + * external API header */ -#include "libavutil/avutil.h" +/** + * @defgroup lpp Libpostproc + * @{ + */ -#ifndef LIBPOSTPROC_VERSION_MAJOR -#define LIBPOSTPROC_VERSION_MAJOR 52 -#define LIBPOSTPROC_VERSION_MINOR 0 -#define LIBPOSTPROC_VERSION_MICRO 100 -#endif - -#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_VERSION AV_VERSION(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_BUILD LIBPOSTPROC_VERSION_INT - -#define LIBPOSTPROC_IDENT "postproc" AV_STRINGIFY(LIBPOSTPROC_VERSION) +#include "libpostproc/version.h" /** * Return the LIBPOSTPROC_VERSION_INT constant. @@ -100,6 +89,7 @@ void pp_free_context(pp_context *ppContext); #define PP_CPU_CAPS_MMX2 0x20000000 #define PP_CPU_CAPS_3DNOW 0x40000000 #define PP_CPU_CAPS_ALTIVEC 0x10000000 +#define PP_CPU_CAPS_AUTO 0x00080000 #define PP_FORMAT 0x00000008 #define PP_FORMAT_420 (0x00000011|PP_FORMAT) @@ -109,4 +99,8 @@ void pp_free_context(pp_context *ppContext); #define PP_PICT_TYPE_QP2 0x00000010 ///< MPEG2 style QScale +/** + * @} + */ + #endif /* POSTPROC_POSTPROCESS_H */ diff --git a/extern/ffmpeg/include/libpostproc/version.h b/extern/ffmpeg/include/libpostproc/version.h new file mode 100644 index 0000000000..111db44e01 --- /dev/null +++ b/extern/ffmpeg/include/libpostproc/version.h @@ -0,0 +1,45 @@ +/* + * Version macros. + * + * 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 POSTPROC_POSTPROCESS_VERSION_H +#define POSTPROC_POSTPROCESS_VERSION_H + +/** + * @file + * Libpostproc version macros + */ + +#include "libavutil/avutil.h" + +#define LIBPOSTPROC_VERSION_MAJOR 52 +#define LIBPOSTPROC_VERSION_MINOR 3 +#define LIBPOSTPROC_VERSION_MICRO 100 + +#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ + LIBPOSTPROC_VERSION_MINOR, \ + LIBPOSTPROC_VERSION_MICRO) +#define LIBPOSTPROC_VERSION AV_VERSION(LIBPOSTPROC_VERSION_MAJOR, \ + LIBPOSTPROC_VERSION_MINOR, \ + LIBPOSTPROC_VERSION_MICRO) +#define LIBPOSTPROC_BUILD LIBPOSTPROC_VERSION_INT + +#define LIBPOSTPROC_IDENT "postproc" AV_STRINGIFY(LIBPOSTPROC_VERSION) + +#endif /* POSTPROC_POSTPROCESS_VERSION_H */ diff --git a/extern/ffmpeg/include/libswresample/swresample.h b/extern/ffmpeg/include/libswresample/swresample.h index 8dc4e1f348..381130184d 100644 --- a/extern/ffmpeg/include/libswresample/swresample.h +++ b/extern/ffmpeg/include/libswresample/swresample.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Michael Niedermayer (michaelni@gmx.at) + * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at) * * This file is part of libswresample * @@ -18,33 +18,134 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifndef SWRESAMPLE_SWRESAMPLE_H +#define SWRESAMPLE_SWRESAMPLE_H + /** * @file + * @ingroup lswr * libswresample public header */ -#ifndef SWR_H -#define SWR_H +/** + * @defgroup lswr Libswresample + * @{ + * + * Libswresample (lswr) is a library that handles audio resampling, sample + * format conversion and mixing. + * + * Interaction with lswr is done through SwrContext, which is + * allocated with swr_alloc() or swr_alloc_set_opts(). It is opaque, so all parameters + * must be set with the @ref avoptions API. + * + * For example the following code will setup conversion from planar float sample + * format to interleaved signed 16-bit integer, downsampling from 48kHz to + * 44.1kHz and downmixing from 5.1 channels to stereo (using the default mixing + * matrix): + * @code + * SwrContext *swr = swr_alloc(); + * 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); + * av_opt_set_sample_fmt(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); + * @endcode + * + * Once all values have been set, it must be initialized with swr_init(). If + * you need to change the conversion parameters, you can change the parameters + * as described above, or by using swr_alloc_set_opts(), then call swr_init() + * again. + * + * The conversion itself is done by repeatedly calling swr_convert(). + * Note that the samples may get buffered in swr if you provide insufficient + * output space or if sample rate conversion is done, which requires "future" + * samples. Samples that do not require future input can be retrieved at any + * time by using swr_convert() (in_count can be set to 0). + * At the end of conversion the resampling buffer can be flushed by calling + * swr_convert() with NULL in and 0 in_count. + * + * The delay between input and output, can at any time be found by using + * swr_get_delay(). + * + * The following code demonstrates the conversion loop assuming the parameters + * from above and caller-defined functions get_input() and handle_output(): + * @code + * uint8_t **input; + * int in_samples; + * + * while (get_input(&input, &in_samples)) { + * uint8_t *output; + * int out_samples = av_rescale_rnd(swr_get_delay(swr, 48000) + + * in_samples, 44100, 48000, AV_ROUND_UP); + * av_samples_alloc(&output, NULL, 2, out_samples, + * AV_SAMPLE_FMT_S16, 0); + * out_samples = swr_convert(swr, &output, out_samples, + * input, in_samples); + * handle_output(output, out_samples); + * av_freep(&output); + * } + * @endcode + * + * When the conversion is finished, the conversion + * context and everything associated with it must be freed with swr_free(). + * There will be no memory leak if the data is not completely flushed before + * swr_free(). + */ -#include +#include #include "libavutil/samplefmt.h" -#define LIBSWRESAMPLE_VERSION_MAJOR 0 -#define LIBSWRESAMPLE_VERSION_MINOR 6 -#define LIBSWRESAMPLE_VERSION_MICRO 100 +#include "libswresample/version.h" -#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) - -#define SWR_CH_MAX 16 ///< Maximum number of channels +#if LIBSWRESAMPLE_VERSION_MAJOR < 1 +#define SWR_CH_MAX 32 ///< Maximum number of channels +#endif #define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate //TODO use int resample ? //long term TODO can we enable this dynamically? +enum SwrDitherType { + SWR_DITHER_NONE = 0, + SWR_DITHER_RECTANGULAR, + SWR_DITHER_TRIANGULAR, + SWR_DITHER_TRIANGULAR_HIGHPASS, -struct SwrContext; + SWR_DITHER_NS = 64, ///< not part of API/ABI + SWR_DITHER_NS_LIPSHITZ, + SWR_DITHER_NS_F_WEIGHTED, + SWR_DITHER_NS_MODIFIED_E_WEIGHTED, + SWR_DITHER_NS_IMPROVED_E_WEIGHTED, + SWR_DITHER_NS_SHIBATA, + SWR_DITHER_NS_LOW_SHIBATA, + SWR_DITHER_NS_HIGH_SHIBATA, + SWR_DITHER_NB, ///< not part of API/ABI +}; + +/** Resampling Engines */ +enum SwrEngine { + SWR_ENGINE_SWR, /**< SW Resampler */ + SWR_ENGINE_SOXR, /**< SoX Resampler */ + SWR_ENGINE_NB, ///< not part of API/ABI +}; + +/** Resampling Filter Types */ +enum SwrFilterType { + SWR_FILTER_TYPE_CUBIC, /**< Cubic */ + SWR_FILTER_TYPE_BLACKMAN_NUTTALL, /**< Blackman Nuttall Windowed Sinc */ + SWR_FILTER_TYPE_KAISER, /**< Kaiser Windowed Sinc */ +}; + +typedef struct SwrContext SwrContext; + +/** + * Get the AVClass for swrContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + */ +const AVClass *swr_get_class(void); /** * Allocate SwrContext. @@ -100,16 +201,35 @@ void swr_free(struct SwrContext **s); * in and in_count can be set to 0 to flush the last few samples out at the * end. * + * If more input is provided than output space then the input will be buffered. + * You can avoid this buffering by providing more output space than input. + * Convertion will run directly without copying whenever possible. + * * @param s allocated Swr context, with parameters set * @param out output buffers, only the first one need be set in case of packed audio * @param out_count amount of space available for output in samples per channel * @param in input buffers, only the first one need to be set in case of packed audio * @param in_count number of input samples available in one channel * - * @return number of samples output per channel + * @return number of samples output per channel, negative value on error */ -int swr_convert(struct SwrContext *s, uint8_t *out[SWR_CH_MAX], int out_count, - const uint8_t *in [SWR_CH_MAX], int in_count); +int swr_convert(struct SwrContext *s, uint8_t **out, int out_count, + const uint8_t **in , int in_count); + +/** + * Convert the next timestamp from input to output + * timestamps are in 1/(in_sample_rate * out_sample_rate) units. + * + * @note There are 2 slightly differently behaving modes. + * First is when automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) + * in this case timestamps will be passed through with delays compensated + * Second is when automatic timestamp compensation is used, (min_compensation < FLT_MAX) + * in this case the output timestamps will match output sample numbers + * + * @param pts timestamp for the next input sample, INT64_MIN if unknown + * @return the output timestamp for the next output sample + */ +int64_t swr_next_pts(struct SwrContext *s, int64_t pts); /** * Activate resampling compensation. @@ -126,6 +246,49 @@ int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensatio */ int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map); +/** + * Set a customized remix matrix. + * + * @param s allocated Swr context, not yet initialized + * @param matrix remix coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o + * @param stride offset between lines of the matrix + * @return AVERROR error code in case of failure. + */ +int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride); + +/** + * Drops the specified number of output samples. + */ +int swr_drop_output(struct SwrContext *s, int count); + +/** + * Injects the specified number of silence samples. + */ +int swr_inject_silence(struct SwrContext *s, int count); + +/** + * Gets the delay the next input sample will experience relative to the next output sample. + * + * Swresample can buffer data if more input has been provided than available + * output space, also converting between sample rates needs a delay. + * This function returns the sum of all such delays. + * The exact delay is not necessarily an integer value in either input or + * output sample rate. Especially when downsampling by a large value, the + * output sample rate may be a poor choice to represent the delay, similarly + * for upsampling and the input sample rate. + * + * @param s swr context + * @param base timebase in which the returned delay will be + * if its set to 1 the returned delay is in seconds + * if its set to 1000 the returned delay is in milli seconds + * if its set to the input sample rate then the returned delay is in input samples + * if its set to the output sample rate then the returned delay is in output samples + * an exact rounding free delay can be found by using LCM(in_sample_rate, out_sample_rate) + * @returns the delay in 1/base units. + */ +int64_t swr_get_delay(struct SwrContext *s, int64_t base); + /** * Return the LIBSWRESAMPLE_VERSION_INT constant. */ @@ -141,4 +304,8 @@ const char *swresample_configuration(void); */ const char *swresample_license(void); -#endif +/** + * @} + */ + +#endif /* SWRESAMPLE_SWRESAMPLE_H */ diff --git a/extern/ffmpeg/include/libswresample/version.h b/extern/ffmpeg/include/libswresample/version.h new file mode 100644 index 0000000000..464c86d74b --- /dev/null +++ b/extern/ffmpeg/include/libswresample/version.h @@ -0,0 +1,45 @@ +/* + * Version macros. + * + * This file is part of libswresample + * + * libswresample 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. + * + * libswresample 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 libswresample; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef SWR_VERSION_H +#define SWR_VERSION_H + +/** + * @file + * Libswresample version macros + */ + +#include "libavutil/avutil.h" + +#define LIBSWRESAMPLE_VERSION_MAJOR 0 +#define LIBSWRESAMPLE_VERSION_MINOR 17 +#define LIBSWRESAMPLE_VERSION_MICRO 104 + +#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ + LIBSWRESAMPLE_VERSION_MINOR, \ + LIBSWRESAMPLE_VERSION_MICRO) +#define LIBSWRESAMPLE_VERSION AV_VERSION(LIBSWRESAMPLE_VERSION_MAJOR, \ + LIBSWRESAMPLE_VERSION_MINOR, \ + LIBSWRESAMPLE_VERSION_MICRO) +#define LIBSWRESAMPLE_BUILD LIBSWRESAMPLE_VERSION_INT + +#define LIBSWRESAMPLE_IDENT "SwR" AV_STRINGIFY(LIBSWRESAMPLE_VERSION) + +#endif /* SWR_VERSION_H */ diff --git a/extern/ffmpeg/include/libswscale/swscale.h b/extern/ffmpeg/include/libswscale/swscale.h index fa7100c41a..42702b7aa2 100644 --- a/extern/ffmpeg/include/libswscale/swscale.h +++ b/extern/ffmpeg/include/libswscale/swscale.h @@ -23,41 +23,21 @@ /** * @file - * @brief - * external api for the swscale stuff + * @ingroup lsws + * external API header */ +/** + * @defgroup lsws Libswscale + * @{ + */ + +#include + #include "libavutil/avutil.h" #include "libavutil/log.h" #include "libavutil/pixfmt.h" - -#define LIBSWSCALE_VERSION_MAJOR 2 -#define LIBSWSCALE_VERSION_MINOR 1 -#define LIBSWSCALE_VERSION_MICRO 100 - -#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT - -#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) - -/** - * Those FF_API_* defines are not part of public API. - * They may change, break or disappear at any time. - */ -#ifndef FF_API_SWS_GETCONTEXT -#define FF_API_SWS_GETCONTEXT (LIBSWSCALE_VERSION_MAJOR < 3) -#endif -#ifndef FF_API_SWS_CPU_CAPS -#define FF_API_SWS_CPU_CAPS (LIBSWSCALE_VERSION_MAJOR < 3) -#endif -#ifndef FF_API_SWS_FORMAT_NAME -#define FF_API_SWS_FORMAT_NAME (LIBSWSCALE_VERSION_MAJOR < 3) -#endif +#include "version.h" /** * Return the LIBSWSCALE_VERSION_INT constant. @@ -102,6 +82,7 @@ const char *swscale_license(void); #define SWS_DIRECT_BGR 0x8000 #define SWS_ACCURATE_RND 0x40000 #define SWS_BITEXACT 0x80000 +#define SWS_ERROR_DIFFUSION 0x800000 #if FF_API_SWS_CPU_CAPS /** @@ -109,6 +90,7 @@ const char *swscale_license(void); * are only provided for API compatibility. */ #define SWS_CPU_CAPS_MMX 0x80000000 +#define SWS_CPU_CAPS_MMXEXT 0x20000000 #define SWS_CPU_CAPS_MMX2 0x20000000 #define SWS_CPU_CAPS_3DNOW 0x40000000 #define SWS_CPU_CAPS_ALTIVEC 0x10000000 @@ -137,13 +119,13 @@ const int *sws_getCoefficients(int colorspace); // when used for filters they must have an odd number of elements // coeffs cannot be shared between vectors -typedef struct { +typedef struct SwsVector { double *coeff; ///< pointer to the list of coefficients int length; ///< number of coefficients in the vector } SwsVector; // vectors can be shared -typedef struct { +typedef struct SwsFilter { SwsVector *lumH; SwsVector *lumV; SwsVector *chrH; @@ -156,13 +138,20 @@ struct SwsContext; * Return a positive value if pix_fmt is a supported input format, 0 * otherwise. */ -int sws_isSupportedInput(enum PixelFormat pix_fmt); +int sws_isSupportedInput(enum AVPixelFormat pix_fmt); /** * Return a positive value if pix_fmt is a supported output format, 0 * otherwise. */ -int sws_isSupportedOutput(enum PixelFormat pix_fmt); +int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); + +/** + * @param[in] pix_fmt the pixel format + * @return a positive value if an endianness conversion for pix_fmt is + * supported, 0 otherwise. + */ +int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); /** * Allocate an empty SwsContext. This must be filled and passed to @@ -202,8 +191,8 @@ void sws_freeContext(struct SwsContext *swsContext); * written * @deprecated Use sws_getCachedContext() instead. */ -struct SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, - int dstW, int dstH, enum PixelFormat dstFormat, +struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, + int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param); #endif @@ -239,7 +228,13 @@ int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], uint8_t *const dst[], const int dstStride[]); /** - * @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x] + * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) + * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) + * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] + * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] + * @param brightness 16.16 fixed point brightness correction + * @param contrast 16.16 fixed point contrast correction + * @param saturation 16.16 fixed point saturation correction * @return -1 if not supported */ int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], @@ -323,8 +318,8 @@ void sws_freeFilter(SwsFilter *filter); * are assumed to remain the same. */ struct SwsContext *sws_getCachedContext(struct SwsContext *context, - int srcW, int srcH, enum PixelFormat srcFormat, - int dstW, int dstH, enum PixelFormat dstFormat, + int srcW, int srcH, enum AVPixelFormat srcFormat, + int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param); @@ -360,4 +355,8 @@ void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pix */ const AVClass *sws_get_class(void); +/** + * @} + */ + #endif /* SWSCALE_SWSCALE_H */ diff --git a/extern/ffmpeg/include/libswscale/version.h b/extern/ffmpeg/include/libswscale/version.h new file mode 100644 index 0000000000..360ec820a9 --- /dev/null +++ b/extern/ffmpeg/include/libswscale/version.h @@ -0,0 +1,59 @@ +/* + * 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 SWSCALE_VERSION_H +#define SWSCALE_VERSION_H + +/** + * @file + * swscale version macros + */ + +#include "libavutil/avutil.h" + +#define LIBSWSCALE_VERSION_MAJOR 2 +#define LIBSWSCALE_VERSION_MINOR 5 +#define LIBSWSCALE_VERSION_MICRO 101 + +#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ + LIBSWSCALE_VERSION_MINOR, \ + LIBSWSCALE_VERSION_MICRO) +#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ + LIBSWSCALE_VERSION_MINOR, \ + LIBSWSCALE_VERSION_MICRO) +#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT + +#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) + +/** + * FF_API_* defines may be placed below to indicate public API that will be + * 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_SWS_GETCONTEXT +#define FF_API_SWS_GETCONTEXT (LIBSWSCALE_VERSION_MAJOR < 3) +#endif +#ifndef FF_API_SWS_CPU_CAPS +#define FF_API_SWS_CPU_CAPS (LIBSWSCALE_VERSION_MAJOR < 3) +#endif +#ifndef FF_API_SWS_FORMAT_NAME +#define FF_API_SWS_FORMAT_NAME (LIBSWSCALE_VERSION_MAJOR < 3) +#endif + +#endif /* SWSCALE_VERSION_H */ diff --git a/extern/ffmpeg/include/stdint.h b/extern/ffmpeg/include/stdint.h deleted file mode 100644 index d02608a597..0000000000 --- a/extern/ffmpeg/include/stdint.h +++ /dev/null @@ -1,247 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006-2008 Alexander Chemeris -// -// 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. -// -// 3. The name of the author may 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. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include - -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when -// compiling for ARM we should wrap include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#ifdef __cplusplus -extern "C" { -#endif -# include -#ifdef __cplusplus -} -#endif - -// Define _W64 macros to mark types changing their size, like intptr_t. -#ifndef _W64 -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif - - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types - -// Visual Studio 6 and Embedded Visual C++ 4 doesn't -// realize that, e.g. char has the same size as __int8 -// so we give up on __intX for them. -#if (_MSC_VER < 1300) - typedef signed char int8_t; - typedef signed short int16_t; - typedef signed int int32_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; -#else - typedef signed __int8 int8_t; - typedef signed __int16 int16_t; - typedef signed __int32 int32_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -#endif -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; - - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef signed __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef _W64 signed int intptr_t; - typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN ((int8_t)_I8_MIN) -#define INT8_MAX _I8_MAX -#define INT16_MIN ((int16_t)_I16_MIN) -#define INT16_MAX _I16_MAX -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX _I32_MAX -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val##i8 -#define INT16_C(val) val##i16 -#define INT32_C(val) val##i32 -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val##ui8 -#define UINT16_C(val) val##ui16 -#define UINT32_C(val) val##ui32 -#define UINT64_C(val) val##ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - - -#endif // _MSC_STDINT_H_ ] diff --git a/extern/ffmpeg/lib/avcodec-55.def b/extern/ffmpeg/lib/avcodec-55.def new file mode 100644 index 0000000000..23a1b97816 --- /dev/null +++ b/extern/ffmpeg/lib/avcodec-55.def @@ -0,0 +1,282 @@ +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_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_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 + av_fast_padded_malloc + av_fast_padded_mallocz + av_fast_realloc + 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_ref + av_packet_shrink_side_data + av_packet_split_side_data + 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_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_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_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_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_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_3dnow DATA + ff_fft_calc_3dnowext DATA + 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_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 diff --git a/extern/ffmpeg/lib/avcodec.lib b/extern/ffmpeg/lib/avcodec.lib index 53ecaeb2da..a43988778f 100644 Binary files a/extern/ffmpeg/lib/avcodec.lib and b/extern/ffmpeg/lib/avcodec.lib differ diff --git a/extern/ffmpeg/lib/avdevice-55.def b/extern/ffmpeg/lib/avdevice-55.def new file mode 100644 index 0000000000..7fa3953f0b --- /dev/null +++ b/extern/ffmpeg/lib/avdevice-55.def @@ -0,0 +1,5 @@ +EXPORTS + avdevice_configuration + avdevice_license + avdevice_register_all + avdevice_version diff --git a/extern/ffmpeg/lib/avdevice.lib b/extern/ffmpeg/lib/avdevice.lib index c783238217..6ad0e217df 100644 Binary files a/extern/ffmpeg/lib/avdevice.lib and b/extern/ffmpeg/lib/avdevice.lib differ diff --git a/extern/ffmpeg/lib/avfilter-3.def b/extern/ffmpeg/lib/avfilter-3.def new file mode 100644 index 0000000000..63e0823e13 --- /dev/null +++ b/extern/ffmpeg/lib/avfilter-3.def @@ -0,0 +1,261 @@ +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_af_aconvert DATA + avfilter_af_adelay DATA + avfilter_af_aecho DATA + avfilter_af_afade DATA + avfilter_af_afifo DATA + avfilter_af_aformat DATA + avfilter_af_ainterleave DATA + avfilter_af_allpass DATA + avfilter_af_amerge DATA + avfilter_af_amix DATA + avfilter_af_anull DATA + avfilter_af_apad DATA + avfilter_af_aperms DATA + avfilter_af_aphaser DATA + avfilter_af_aresample DATA + avfilter_af_aselect DATA + avfilter_af_asendcmd DATA + avfilter_af_asetnsamples DATA + avfilter_af_asetpts DATA + avfilter_af_asetrate DATA + avfilter_af_asettb DATA + avfilter_af_ashowinfo DATA + avfilter_af_asplit DATA + avfilter_af_astats DATA + avfilter_af_astreamsync DATA + avfilter_af_atempo DATA + avfilter_af_atrim DATA + avfilter_af_bandpass DATA + avfilter_af_bandreject DATA + avfilter_af_bass DATA + avfilter_af_biquad DATA + avfilter_af_channelmap DATA + avfilter_af_channelsplit DATA + avfilter_af_compand DATA + avfilter_af_earwax DATA + avfilter_af_ebur128 DATA + avfilter_af_equalizer DATA + avfilter_af_highpass DATA + avfilter_af_join DATA + avfilter_af_lowpass DATA + avfilter_af_pan DATA + avfilter_af_replaygain DATA + avfilter_af_silencedetect DATA + avfilter_af_treble DATA + avfilter_af_volume DATA + avfilter_af_volumedetect DATA + avfilter_all_channel_layouts DATA + avfilter_asink_abuffer DATA + avfilter_asink_anullsink DATA + avfilter_asink_ffabuffersink DATA + avfilter_asrc_abuffer DATA + avfilter_asrc_aevalsrc DATA + avfilter_asrc_anullsrc DATA + avfilter_asrc_sine DATA + avfilter_avf_avectorscope DATA + avfilter_avf_concat DATA + avfilter_avf_showspectrum DATA + avfilter_avf_showwaves DATA + avfilter_avsrc_amovie DATA + avfilter_avsrc_movie 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 + avfilter_vf_alphaextract DATA + avfilter_vf_alphamerge DATA + avfilter_vf_ass DATA + avfilter_vf_bbox DATA + avfilter_vf_blackdetect DATA + avfilter_vf_blackframe DATA + avfilter_vf_blend DATA + avfilter_vf_boxblur DATA + avfilter_vf_colorbalance DATA + avfilter_vf_colorchannelmixer DATA + avfilter_vf_colormatrix DATA + avfilter_vf_copy DATA + avfilter_vf_crop DATA + avfilter_vf_cropdetect DATA + avfilter_vf_curves DATA + avfilter_vf_dctdnoiz DATA + avfilter_vf_decimate DATA + avfilter_vf_delogo DATA + avfilter_vf_deshake DATA + avfilter_vf_drawbox DATA + avfilter_vf_drawgrid DATA + avfilter_vf_drawtext DATA + avfilter_vf_edgedetect DATA + avfilter_vf_extractplanes DATA + avfilter_vf_fade DATA + avfilter_vf_field DATA + avfilter_vf_fieldmatch DATA + avfilter_vf_fieldorder DATA + avfilter_vf_fifo DATA + avfilter_vf_format DATA + avfilter_vf_fps DATA + avfilter_vf_framestep DATA + avfilter_vf_frei0r DATA + avfilter_vf_geq DATA + avfilter_vf_gradfun DATA + avfilter_vf_haldclut DATA + avfilter_vf_hflip DATA + avfilter_vf_histeq DATA + avfilter_vf_histogram DATA + avfilter_vf_hqdn3d DATA + avfilter_vf_hue DATA + avfilter_vf_idet DATA + avfilter_vf_il DATA + avfilter_vf_interlace DATA + avfilter_vf_interleave DATA + avfilter_vf_kerndeint DATA + avfilter_vf_lut DATA + avfilter_vf_lut3d DATA + avfilter_vf_lutrgb DATA + avfilter_vf_lutyuv DATA + avfilter_vf_mcdeint DATA + avfilter_vf_mergeplanes DATA + avfilter_vf_mp DATA + avfilter_vf_mpdecimate DATA + avfilter_vf_negate DATA + avfilter_vf_noformat DATA + avfilter_vf_noise DATA + avfilter_vf_null DATA + avfilter_vf_overlay DATA + avfilter_vf_owdenoise DATA + avfilter_vf_pad DATA + avfilter_vf_perms DATA + avfilter_vf_perspective DATA + avfilter_vf_phase DATA + avfilter_vf_pixdesctest DATA + avfilter_vf_pp DATA + avfilter_vf_psnr DATA + avfilter_vf_pullup DATA + avfilter_vf_removelogo DATA + avfilter_vf_rotate DATA + avfilter_vf_sab DATA + avfilter_vf_scale DATA + avfilter_vf_select DATA + avfilter_vf_sendcmd DATA + avfilter_vf_separatefields DATA + avfilter_vf_setdar DATA + avfilter_vf_setfield DATA + avfilter_vf_setpts DATA + avfilter_vf_setsar DATA + avfilter_vf_settb DATA + avfilter_vf_showinfo DATA + avfilter_vf_smartblur DATA + avfilter_vf_split DATA + avfilter_vf_spp DATA + avfilter_vf_stereo3d DATA + avfilter_vf_subtitles DATA + avfilter_vf_super2xsai DATA + avfilter_vf_swapuv DATA + avfilter_vf_telecine DATA + avfilter_vf_thumbnail DATA + avfilter_vf_tile DATA + avfilter_vf_tinterlace DATA + avfilter_vf_transpose DATA + avfilter_vf_trim DATA + avfilter_vf_unsharp DATA + avfilter_vf_vflip DATA + avfilter_vf_vidstabdetect DATA + avfilter_vf_vidstabtransform DATA + avfilter_vf_vignette DATA + avfilter_vf_w3fdif DATA + avfilter_vf_yadif DATA + avfilter_vsink_buffer DATA + avfilter_vsink_ffbuffersink DATA + avfilter_vsink_nullsink DATA + avfilter_vsrc_buffer DATA + avfilter_vsrc_cellauto DATA + avfilter_vsrc_color DATA + avfilter_vsrc_frei0r_src DATA + avfilter_vsrc_haldclutsrc DATA + avfilter_vsrc_life DATA + avfilter_vsrc_mandelbrot DATA + avfilter_vsrc_mptestsrc DATA + avfilter_vsrc_nullsrc DATA + avfilter_vsrc_rgbtestsrc DATA + avfilter_vsrc_smptebars DATA + avfilter_vsrc_smptehdbars DATA + avfilter_vsrc_testsrc DATA + ff_default_query_formats diff --git a/extern/ffmpeg/lib/avfilter.lib b/extern/ffmpeg/lib/avfilter.lib index 9d6633e319..f97719cdae 100644 Binary files a/extern/ffmpeg/lib/avfilter.lib and b/extern/ffmpeg/lib/avfilter.lib differ diff --git a/extern/ffmpeg/lib/avformat-55.def b/extern/ffmpeg/lib/avformat-55.def new file mode 100644 index 0000000000..da8f81ee66 --- /dev/null +++ b/extern/ffmpeg/lib/avformat-55.def @@ -0,0 +1,152 @@ +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_probe_score + av_format_get_subtitle_codec + av_format_get_video_codec + av_format_set_audio_codec + 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_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_register_rdt_dynamic_payload_handlers + av_register_rtp_dynamic_payload_handlers + 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 + 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_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_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_crc_table + get_extension + url_feof diff --git a/extern/ffmpeg/lib/avformat.lib b/extern/ffmpeg/lib/avformat.lib index 19b2292f44..b0d7d00679 100644 Binary files a/extern/ffmpeg/lib/avformat.lib and b/extern/ffmpeg/lib/avformat.lib differ diff --git a/extern/ffmpeg/lib/avutil-52.def b/extern/ffmpeg/lib/avutil-52.def new file mode 100644 index 0000000000..8d1849587a --- /dev/null +++ b/extern/ffmpeg/lib/avutil-52.def @@ -0,0 +1,419 @@ +EXPORTS + av_add_q + 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_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_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_force_cpu_flags + av_frame_alloc + av_frame_clone + 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_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_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_cpuid_test 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 diff --git a/extern/ffmpeg/lib/avutil.lib b/extern/ffmpeg/lib/avutil.lib index 2e0854be87..9ddc02a5a0 100644 Binary files a/extern/ffmpeg/lib/avutil.lib and b/extern/ffmpeg/lib/avutil.lib differ diff --git a/extern/ffmpeg/lib/libavcodec.dll.a b/extern/ffmpeg/lib/libavcodec.dll.a index 67b584899f..775598a2aa 100644 Binary files a/extern/ffmpeg/lib/libavcodec.dll.a and b/extern/ffmpeg/lib/libavcodec.dll.a differ diff --git a/extern/ffmpeg/lib/libavdevice.dll.a b/extern/ffmpeg/lib/libavdevice.dll.a index 237c5475b9..3c0f7d3613 100644 Binary files a/extern/ffmpeg/lib/libavdevice.dll.a and b/extern/ffmpeg/lib/libavdevice.dll.a differ diff --git a/extern/ffmpeg/lib/libavfilter.dll.a b/extern/ffmpeg/lib/libavfilter.dll.a index 8a0625c1ea..38a065607c 100644 Binary files a/extern/ffmpeg/lib/libavfilter.dll.a and b/extern/ffmpeg/lib/libavfilter.dll.a differ diff --git a/extern/ffmpeg/lib/libavformat.dll.a b/extern/ffmpeg/lib/libavformat.dll.a index f77bb7e12f..ab4b7d4455 100644 Binary files a/extern/ffmpeg/lib/libavformat.dll.a and b/extern/ffmpeg/lib/libavformat.dll.a differ diff --git a/extern/ffmpeg/lib/libavutil.dll.a b/extern/ffmpeg/lib/libavutil.dll.a index c7dab90d71..8324ed7063 100644 Binary files a/extern/ffmpeg/lib/libavutil.dll.a and b/extern/ffmpeg/lib/libavutil.dll.a differ diff --git a/extern/ffmpeg/lib/libpostproc.dll.a b/extern/ffmpeg/lib/libpostproc.dll.a index 6f406bbcb5..70bc972acf 100644 Binary files a/extern/ffmpeg/lib/libpostproc.dll.a and b/extern/ffmpeg/lib/libpostproc.dll.a differ diff --git a/extern/ffmpeg/lib/libswresample.dll.a b/extern/ffmpeg/lib/libswresample.dll.a index e3ad0f423a..f35c41084b 100644 Binary files a/extern/ffmpeg/lib/libswresample.dll.a and b/extern/ffmpeg/lib/libswresample.dll.a differ diff --git a/extern/ffmpeg/lib/libswscale.dll.a b/extern/ffmpeg/lib/libswscale.dll.a index 06ba9d1e6c..836b6a89ba 100644 Binary files a/extern/ffmpeg/lib/libswscale.dll.a and b/extern/ffmpeg/lib/libswscale.dll.a differ diff --git a/extern/ffmpeg/lib/postproc-52.def b/extern/ffmpeg/lib/postproc-52.def new file mode 100644 index 0000000000..4d8bbb4b3e --- /dev/null +++ b/extern/ffmpeg/lib/postproc-52.def @@ -0,0 +1,10 @@ +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 diff --git a/extern/ffmpeg/lib/postproc.lib b/extern/ffmpeg/lib/postproc.lib index 4201010902..03000ea36b 100644 Binary files a/extern/ffmpeg/lib/postproc.lib and b/extern/ffmpeg/lib/postproc.lib differ diff --git a/extern/ffmpeg/lib/swresample-0.def b/extern/ffmpeg/lib/swresample-0.def new file mode 100644 index 0000000000..91b4c64a2e --- /dev/null +++ b/extern/ffmpeg/lib/swresample-0.def @@ -0,0 +1,105 @@ +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_next_pts + swr_set_channel_mapping + swr_set_compensation + swr_set_matrix + swresample_configuration + swresample_license + swresample_version diff --git a/extern/ffmpeg/lib/swresample.lib b/extern/ffmpeg/lib/swresample.lib index e85e552cb4..40cad8637b 100644 Binary files a/extern/ffmpeg/lib/swresample.lib and b/extern/ffmpeg/lib/swresample.lib differ diff --git a/extern/ffmpeg/lib/swscale-2.def b/extern/ffmpeg/lib/swscale-2.def new file mode 100644 index 0000000000..d828ee38e9 --- /dev/null +++ b/extern/ffmpeg/lib/swscale-2.def @@ -0,0 +1,37 @@ +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 diff --git a/extern/ffmpeg/lib/swscale.lib b/extern/ffmpeg/lib/swscale.lib index 7b42d2c213..9bbff6f38a 100644 Binary files a/extern/ffmpeg/lib/swscale.lib and b/extern/ffmpeg/lib/swscale.lib differ diff --git a/extern/ffmpeg/licenses/fontconfig.txt b/extern/ffmpeg/licenses/fontconfig.txt new file mode 100644 index 0000000000..2a5d777ff6 --- /dev/null +++ b/extern/ffmpeg/licenses/fontconfig.txt @@ -0,0 +1,27 @@ +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. + diff --git a/extern/ffmpeg/licenses/freetype.txt b/extern/ffmpeg/licenses/freetype.txt index b2fe7b6af3..bbaba33f47 100644 --- a/extern/ffmpeg/licenses/freetype.txt +++ b/extern/ffmpeg/licenses/freetype.txt @@ -1,340 +1,169 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + The FreeType Project LICENSE + ---------------------------- - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, 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. + 2006-Jan-27 - 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. - - 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. - - - Copyright (C) - - 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 St, Fifth Floor, Boston, MA 02110-1301 USA + Copyright 1996-2002, 2006 by + David Turner, Robert Wilhelm, and Werner Lemberg -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: +Introduction +============ - 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 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. -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. + 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. -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: + 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: - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. + o We don't promise that this software works. However, we will be + interested in any kind of bug reports. (`as is' distribution) - , 1 April 1989 - Ty Coon, President of Vice + o You can use this software for whatever you want, in parts or + full form, without having to pay us. (`royalty-free' usage) -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. + 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 © The FreeType + Project (www.freetype.org). All rights reserved. + """ + + Please replace 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 --- diff --git a/extern/ffmpeg/licenses/frei0r.txt b/extern/ffmpeg/licenses/frei0r.txt index 2ac66a73ff..623b6258a1 100644 --- a/extern/ffmpeg/licenses/frei0r.txt +++ b/extern/ffmpeg/licenses/frei0r.txt @@ -337,4 +337,4 @@ 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. \ No newline at end of file +Public License instead of this License. diff --git a/extern/ffmpeg/licenses/ffmpeg.txt b/extern/ffmpeg/licenses/gnutls.txt similarity index 100% rename from extern/ffmpeg/licenses/ffmpeg.txt rename to extern/ffmpeg/licenses/gnutls.txt diff --git a/extern/ffmpeg/licenses/lame.txt b/extern/ffmpeg/licenses/lame.txt index ec33109fe3..f5030495bf 100644 --- a/extern/ffmpeg/licenses/lame.txt +++ b/extern/ffmpeg/licenses/lame.txt @@ -478,4 +478,4 @@ necessary. Here is a sample; alter the names: , 1 April 1990 Ty Coon, President of Vice -That's all there is to it! \ No newline at end of file +That's all there is to it! diff --git a/extern/ffmpeg/licenses/libass.txt b/extern/ffmpeg/licenses/libass.txt new file mode 100644 index 0000000000..8351a30e3a --- /dev/null +++ b/extern/ffmpeg/licenses/libass.txt @@ -0,0 +1,11 @@ +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. diff --git a/extern/ffmpeg/licenses/sdl.txt b/extern/ffmpeg/licenses/libbluray.txt similarity index 98% rename from extern/ffmpeg/licenses/sdl.txt rename to extern/ffmpeg/licenses/libbluray.txt index 2cba2ac74c..20fb9c7da2 100644 --- a/extern/ffmpeg/licenses/sdl.txt +++ b/extern/ffmpeg/licenses/libbluray.txt @@ -1,8 +1,8 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + 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. @@ -10,7 +10,7 @@ as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -55,7 +55,7 @@ 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 @@ -111,8 +111,8 @@ 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 + + GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other @@ -146,7 +146,7 @@ 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 @@ -158,7 +158,7 @@ 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 @@ -216,7 +216,7 @@ 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. @@ -267,7 +267,7 @@ Library will still fall under Section 6.) 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 @@ -329,7 +329,7 @@ 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 @@ -370,7 +370,7 @@ 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 @@ -422,7 +422,7 @@ 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 @@ -432,7 +432,7 @@ 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 + 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. @@ -455,4 +455,4 @@ 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 + END OF TERMS AND CONDITIONS diff --git a/extern/ffmpeg/licenses/libcaca.txt b/extern/ffmpeg/licenses/libcaca.txt new file mode 100644 index 0000000000..2978491d0f --- /dev/null +++ b/extern/ffmpeg/licenses/libcaca.txt @@ -0,0 +1,14 @@ + 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. + diff --git a/extern/ffmpeg/licenses/gsm.txt b/extern/ffmpeg/licenses/libgsm.txt similarity index 98% rename from extern/ffmpeg/licenses/gsm.txt rename to extern/ffmpeg/licenses/libgsm.txt index bebe86faeb..28fbb3ce15 100644 --- a/extern/ffmpeg/licenses/gsm.txt +++ b/extern/ffmpeg/licenses/libgsm.txt @@ -32,4 +32,4 @@ terms, we append this additional permission: Berkeley/Bremen, 05.04.2009 Jutta Degener -Carsten Bormann \ No newline at end of file +Carsten Bormann diff --git a/extern/ffmpeg/licenses/libiconv.txt b/extern/ffmpeg/licenses/libiconv.txt new file mode 100644 index 0000000000..94a9ed024d --- /dev/null +++ b/extern/ffmpeg/licenses/libiconv.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + 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. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 +. + + 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 +. diff --git a/extern/ffmpeg/licenses/libilbc.txt b/extern/ffmpeg/licenses/libilbc.txt new file mode 100644 index 0000000000..4c41b7b251 --- /dev/null +++ b/extern/ffmpeg/licenses/libilbc.txt @@ -0,0 +1,29 @@ +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. diff --git a/extern/ffmpeg/licenses/libmodplug.txt b/extern/ffmpeg/licenses/libmodplug.txt new file mode 100644 index 0000000000..59fbf826c3 --- /dev/null +++ b/extern/ffmpeg/licenses/libmodplug.txt @@ -0,0 +1 @@ +ModPlug-XMMS and libmodplug are now in the public domain. diff --git a/extern/ffmpeg/licenses/theora.txt b/extern/ffmpeg/licenses/libtheora.txt similarity index 99% rename from extern/ffmpeg/licenses/theora.txt rename to extern/ffmpeg/licenses/libtheora.txt index f71b538a50..c8ccce4ffb 100644 --- a/extern/ffmpeg/licenses/theora.txt +++ b/extern/ffmpeg/licenses/libtheora.txt @@ -25,4 +25,4 @@ 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. \ No newline at end of file +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/extern/ffmpeg/licenses/vorbis.txt b/extern/ffmpeg/licenses/libvorbis.txt similarity index 99% rename from extern/ffmpeg/licenses/vorbis.txt rename to extern/ffmpeg/licenses/libvorbis.txt index 2f9af4165d..28de72a970 100644 --- a/extern/ffmpeg/licenses/vorbis.txt +++ b/extern/ffmpeg/licenses/libvorbis.txt @@ -25,4 +25,4 @@ 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. \ No newline at end of file +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/extern/ffmpeg/licenses/libvpx.txt b/extern/ffmpeg/licenses/libvpx.txt index 83e4e6f6d7..1ce44343c4 100644 --- a/extern/ffmpeg/licenses/libvpx.txt +++ b/extern/ffmpeg/licenses/libvpx.txt @@ -1,4 +1,4 @@ -Copyright (c) 2010, Google Inc. All rights reserved. +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 @@ -12,9 +12,10 @@ met: 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. + * 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 @@ -27,3 +28,4 @@ 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. + diff --git a/extern/ffmpeg/licenses/opencore-amr.txt b/extern/ffmpeg/licenses/opencore-amr.txt index 3e4ce883b5..5ec4bf01e7 100644 --- a/extern/ffmpeg/licenses/opencore-amr.txt +++ b/extern/ffmpeg/licenses/opencore-amr.txt @@ -188,4 +188,4 @@ identification within third-party archives. 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. \ No newline at end of file + governing permissions and limitations under the License. diff --git a/extern/ffmpeg/licenses/openjpeg.txt b/extern/ffmpeg/licenses/openjpeg.txt index d1e5b6a533..f578e33a30 100644 --- a/extern/ffmpeg/licenses/openjpeg.txt +++ b/extern/ffmpeg/licenses/openjpeg.txt @@ -1,10 +1,14 @@ /* - * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium - * Copyright (c) 2002-2007, Professor Benoit Macq - * Copyright (c) 2001-2003, David Janssens - * Copyright (c) 2002-2003, Yannick Verschueren - * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * 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 @@ -27,4 +31,4 @@ * 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. - */ \ No newline at end of file + */ diff --git a/extern/ffmpeg/licenses/opus.txt b/extern/ffmpeg/licenses/opus.txt new file mode 100644 index 0000000000..f4159e675a --- /dev/null +++ b/extern/ffmpeg/licenses/opus.txt @@ -0,0 +1,44 @@ +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/ diff --git a/extern/ffmpeg/licenses/rtmpdump.txt b/extern/ffmpeg/licenses/rtmpdump.txt new file mode 100644 index 0000000000..d511905c16 --- /dev/null +++ b/extern/ffmpeg/licenses/rtmpdump.txt @@ -0,0 +1,339 @@ + 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. + + + Copyright (C) + + 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. + + , 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. diff --git a/extern/ffmpeg/licenses/schroedinger.txt b/extern/ffmpeg/licenses/schroedinger.txt index d6b542f997..8a68a0d959 100644 --- a/extern/ffmpeg/licenses/schroedinger.txt +++ b/extern/ffmpeg/licenses/schroedinger.txt @@ -1,22 +1,25 @@ - GNU GENERAL PUBLIC LICENSE + GNU LIBRARY 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 + 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 -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. +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 @@ -27,195 +30,347 @@ 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. +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 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. + 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. - 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. + 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 author's protection and ours, we want to make certain + Also, for each distributor's protection, 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. - +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. + 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. +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. +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. - GNU GENERAL PUBLIC LICENSE + GNU LIBRARY 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". + 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". -Activities other than copying, distribution and modification are not + 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 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. +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. - 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 + 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) You must cause the modified files to carry prominent notices + 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. - 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) 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.) - 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, +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 Program, the distribution of the whole must be on the terms of +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. +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. +collective works based on the Library. -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 +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 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. + 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. - 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. + 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. - 5. You are not required to accept this License, since you have not + 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 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. + + 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 Program or its derivative works. These actions are +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 Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and +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 Program or works based on it. +the Library 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 + 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. - - 7. If, as a consequence of a court judgment or allegation of patent + + 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 Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by +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 Program. +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. +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 +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 @@ -225,54 +380,88 @@ 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 + + 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 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. +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. - 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. + 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 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. +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 - 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. + 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. - 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. \ No newline at end of file + 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. + + + Copyright (C) + + 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. diff --git a/extern/ffmpeg/licenses/soxr.txt b/extern/ffmpeg/licenses/soxr.txt new file mode 100644 index 0000000000..1c618785e9 --- /dev/null +++ b/extern/ffmpeg/licenses/soxr.txt @@ -0,0 +1,24 @@ +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. diff --git a/extern/ffmpeg/licenses/speex.txt b/extern/ffmpeg/licenses/speex.txt index 26284642be..de6fbe2c91 100644 --- a/extern/ffmpeg/licenses/speex.txt +++ b/extern/ffmpeg/licenses/speex.txt @@ -32,4 +32,4 @@ 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. \ No newline at end of file +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/extern/ffmpeg/licenses/rtmp.txt b/extern/ffmpeg/licenses/twolame.txt similarity index 98% rename from extern/ffmpeg/licenses/rtmp.txt rename to extern/ffmpeg/licenses/twolame.txt index bf28f6ff45..b1e3f5a263 100644 --- a/extern/ffmpeg/licenses/rtmp.txt +++ b/extern/ffmpeg/licenses/twolame.txt @@ -1,8 +1,8 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 + 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 + 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. @@ -10,7 +10,7 @@ as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -55,7 +55,7 @@ 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 @@ -111,8 +111,8 @@ 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 + + GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other @@ -146,7 +146,7 @@ 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 @@ -158,7 +158,7 @@ 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 @@ -216,7 +216,7 @@ 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. @@ -267,7 +267,7 @@ Library will still fall under Section 6.) 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 @@ -329,7 +329,7 @@ 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 @@ -370,7 +370,7 @@ 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 @@ -422,7 +422,7 @@ 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 @@ -432,7 +432,7 @@ 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 + 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. @@ -455,8 +455,8 @@ 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 - + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest @@ -485,7 +485,7 @@ convey the exclusion of warranty; and each file should have at least the 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 + 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. @@ -501,3 +501,4 @@ necessary. Here is a sample; alter the names: That's all there is to it! + diff --git a/extern/ffmpeg/licenses/vid.stab.txt b/extern/ffmpeg/licenses/vid.stab.txt new file mode 100644 index 0000000000..a09e1dc74d --- /dev/null +++ b/extern/ffmpeg/licenses/vid.stab.txt @@ -0,0 +1,16 @@ +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. * diff --git a/extern/ffmpeg/licenses/wavpack.txt b/extern/ffmpeg/licenses/wavpack.txt new file mode 100644 index 0000000000..6ffc23b932 --- /dev/null +++ b/extern/ffmpeg/licenses/wavpack.txt @@ -0,0 +1,25 @@ + 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. diff --git a/extern/ffmpeg/licenses/x264.txt b/extern/ffmpeg/licenses/x264.txt index 0f70665a7d..d60c31a97a 100644 --- a/extern/ffmpeg/licenses/x264.txt +++ b/extern/ffmpeg/licenses/x264.txt @@ -55,7 +55,7 @@ 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 @@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions: 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 @@ -168,7 +168,7 @@ 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 @@ -225,7 +225,7 @@ 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 @@ -278,7 +278,7 @@ 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 @@ -337,4 +337,4 @@ 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. \ No newline at end of file +Public License instead of this License. diff --git a/extern/ffmpeg/licenses/xvid.txt b/extern/ffmpeg/licenses/xvid.txt index 16101eeb95..14db8fc79d 100644 --- a/extern/ffmpeg/licenses/xvid.txt +++ b/extern/ffmpeg/licenses/xvid.txt @@ -55,7 +55,7 @@ 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 @@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions: 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 @@ -168,7 +168,7 @@ 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 @@ -225,7 +225,7 @@ 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 @@ -278,7 +278,7 @@ 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 @@ -337,4 +337,4 @@ 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. \ No newline at end of file +Public License instead of this License. diff --git a/extern/ffmpeg/licenses/zlib.txt b/extern/ffmpeg/licenses/zlib.txt index 530fd8385c..efa9848d03 100644 --- a/extern/ffmpeg/licenses/zlib.txt +++ b/extern/ffmpeg/licenses/zlib.txt @@ -1,7 +1,7 @@ - zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.5, April 19th, 2010 +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.7, May 2nd, 2012 - Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler + 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 @@ -19,5 +19,8 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. - Jean-loup Gailly - Mark Adler + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +*/ + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index acc534885d..0ac74512b6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -150,9 +150,9 @@ set_target_properties("${SM_EXE_NAME}" PROPERTIES ) list(APPEND SM_WINDOWS_PROGRAM_DLLS - "${SM_PROGRAM_DIR}/avcodec-53.dll" - "${SM_PROGRAM_DIR}/avformat-53.dll" - "${SM_PROGRAM_DIR}/avutil-51.dll" + "${SM_PROGRAM_DIR}/avcodec-55.dll" + "${SM_PROGRAM_DIR}/avformat-55.dll" + "${SM_PROGRAM_DIR}/avutil-52.dll" "${SM_PROGRAM_DIR}/msvcp100.dll" "${SM_PROGRAM_DIR}/msvcp110.dll" "${SM_PROGRAM_DIR}/msvcr100.dll" @@ -605,9 +605,9 @@ if(NOT APPLE) sm_join("${SM_FULL_INSTALLATION_PATH_LIST}" "/" SM_FULL_INSTALLATION_PATH) # Hardcoding the values for now since the foreach loop is not working as intended. install(TARGETS "${SM_EXE_NAME}" DESTINATION "${SM_FULL_INSTALLATION_PATH}") - install(FILES "${SM_PROGRAM_DIR}/avcodec-53.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}") - install(FILES "${SM_PROGRAM_DIR}/avformat-53.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}") - install(FILES "${SM_PROGRAM_DIR}/avutil-51.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}") + install(FILES "${SM_PROGRAM_DIR}/avcodec-55.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}") + install(FILES "${SM_PROGRAM_DIR}/avformat-55.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}") + install(FILES "${SM_PROGRAM_DIR}/avutil-52.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}") install(FILES "${SM_PROGRAM_DIR}/msvcp100.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}") install(FILES "${SM_PROGRAM_DIR}/msvcp110.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}") install(FILES "${SM_PROGRAM_DIR}/msvcr100.dll" DESTINATION "${SM_FULL_INSTALLATION_PATH}")