diff --git a/.gitattributes b/.gitattributes index c010dd25e53fc183af4d411d5dded6ba3db7d386..812fb0013c4dd08e55670ed9c0fef6255f372ca6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -27,3 +27,5 @@ results/tts_Shengshuyan_auto_sovits_pm_2.wav filter=lfs diff=lfs merge=lfs -text results/vocals_Shengshuyan_0key_sovits_pm.wav filter=lfs diff=lfs merge=lfs -text logs/44k/G_600.pth filter=lfs diff=lfs merge=lfs -text logs/44k/kmeans_10000.pt filter=lfs diff=lfs merge=lfs -text +ffmpeg/bin/ffmpeg filter=lfs diff=lfs merge=lfs -text +ffmpeg/bin/ffprobe filter=lfs diff=lfs merge=lfs -text diff --git a/ffmpeg/bin/GPLv3.txt b/ffmpeg/bin/GPLv3.txt new file mode 100644 index 0000000000000000000000000000000000000000..94a9ed024d3859793618152ea559a168bbcbb5e2 --- /dev/null +++ b/ffmpeg/bin/GPLv3.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/ffmpeg/bin/ffmpeg b/ffmpeg/bin/ffmpeg new file mode 100644 index 0000000000000000000000000000000000000000..6a667bf74fa4ef686f8344002357767cc4824839 --- /dev/null +++ b/ffmpeg/bin/ffmpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed652b2f32e0851d1946894fb8333f5b677c1b2ce6b9d187910a67f8b99da028 +size 78683840 diff --git a/ffmpeg/bin/ffprobe b/ffmpeg/bin/ffprobe new file mode 100644 index 0000000000000000000000000000000000000000..a84df80bf4dae52019628f920570d6338b79374f --- /dev/null +++ b/ffmpeg/bin/ffprobe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a339171d90f7482b2db02234e261b9e00d51526391f87fa633d5da7b98a28cf4 +size 78557440 diff --git a/ffmpeg/bin/manpages/ffmpeg-all.txt b/ffmpeg/bin/manpages/ffmpeg-all.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e09d7563940c641b2427032da28818535a105fa --- /dev/null +++ b/ffmpeg/bin/manpages/ffmpeg-all.txt @@ -0,0 +1,47755 @@ +FFMPEG-ALL(1) FFMPEG-ALL(1) + +NAME + ffmpeg - ffmpeg video converter + +SYNOPSIS + ffmpeg [global_options] {[input_file_options] -i input_url} ... + {[output_file_options] output_url} ... + +DESCRIPTION + ffmpeg is a very fast video and audio converter that can also grab from + a live audio/video source. It can also convert between arbitrary sample + rates and resize video on the fly with a high quality polyphase filter. + + ffmpeg reads from an arbitrary number of input "files" (which can be + regular files, pipes, network streams, grabbing devices, etc.), + specified by the "-i" option, and writes to an arbitrary number of + output "files", which are specified by a plain output url. Anything + found on the command line which cannot be interpreted as an option is + considered to be an output url. + + Each input or output url 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 within a file are referred to by their indices. E.g. + "2:3" refers to the 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 option on the + command line multiple times. Each occurrence is then applied to the + next input or output file. Exceptions from this rule are the global + options (e.g. verbosity level), which should be specified first. + + Do not mix input and output files -- first specify all input files, + then all output files. Also do not mix options which belong to + different files. All options apply ONLY to the next input or output + file and are reset between files. + + o To set the video bitrate of the output file to 64 kbit/s: + + ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi + + o To force the frame rate of the output file to 24 fps: + + ffmpeg -i input.avi -r 24 output.avi + + o To force the frame rate of the input file (valid for raw formats + only) to 1 fps and the frame rate of the output file to 24 fps: + + ffmpeg -r 1 -i input.m2v -r 24 output.avi + + The format option may be needed for raw input files. + +DETAILED DESCRIPTION + The transcoding process in ffmpeg for each output can be described by + the following diagram: + + _______ ______________ + | | | | + | input | demuxer | encoded data | decoder + | file | ---------> | packets | -----+ + |_______| |______________| | + v + _________ + | | + | decoded | + | frames | + |_________| + ________ ______________ | + | | | | | + | output | <-------- | encoded data | <----+ + | file | muxer | packets | encoder + |________| |______________| + + 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. + + 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. + + 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 | | encoded data | + | frames |\ _ | packets | + |_________| \ /||______________| + \ __________ / + simple _\|| | / encoder + filtergraph | filtered |/ + | frames | + |__________| + + 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 | ---> | 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. + + 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. + + 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. + +STREAM SELECTION + ffmpeg provides the "-map" option for manual control of stream + selection in each output file. Users can skip "-map" and let ffmpeg + perform automatic stream selection as described below. The "-vn / -an / + -sn / -dn" options can be used to skip inclusion of video, audio, + subtitle and data streams respectively, whether manually mapped or + automatically selected, except for those streams which are outputs of + complex filtergraphs. + + Description + The sub-sections that follow describe the various rules that are + involved in stream selection. The examples that follow next show how + these rules are applied in practice. + + While every effort is made to accurately reflect the behavior of the + program, FFmpeg is under continuous development and the code may have + changed since the time of this writing. + + Automatic stream selection + + In the absence of any map options for a particular output file, ffmpeg + inspects the output format to check which type of streams can be + included in it, viz. video, audio and/or subtitles. For each acceptable + stream type, ffmpeg will pick one stream, when available, from among + all the inputs. + + It will select that stream based upon the following criteria: + + o for video, it is the stream with the highest resolution, + + o for audio, it is the stream with the most channels, + + o for subtitles, it is the first subtitle stream found but there's a + caveat. The output format's default subtitle encoder can be either + text-based or image-based, and only a subtitle stream of the same + type will be chosen. + + In the case where several streams of the same type rate equally, the + stream with the lowest index is chosen. + + Data or attachment streams are not automatically selected and can only + be included using "-map". + + Manual stream selection + + When "-map" is used, only user-mapped streams are included in that + output file, with one possible exception for filtergraph outputs + described below. + + Complex filtergraphs + + If there are any complex filtergraph output streams with unlabeled + pads, they will be added to the first output file. This will lead to a + fatal error if the stream type is not supported by the output format. + In the absence of the map option, the inclusion of these streams leads + to the automatic stream selection of their types being skipped. If map + options are present, these filtergraph streams are included in addition + to the mapped streams. + + Complex filtergraph output streams with labeled pads must be mapped + once and exactly once. + + Stream handling + + Stream handling is independent of stream selection, with an exception + for subtitles described below. Stream handling is set via the "-codec" + option addressed to streams within a specific output file. In + particular, codec options are applied by ffmpeg after the stream + selection process and thus do not influence the latter. If no "-codec" + option is specified for a stream type, ffmpeg will select the default + encoder registered by the output file muxer. + + An exception exists for subtitles. If a subtitle encoder is specified + for an output file, the first subtitle stream found of any type, text + or image, will be included. ffmpeg does not validate if the specified + encoder can convert the selected stream or if the converted stream is + acceptable within the output format. This applies generally as well: + when the user sets an encoder manually, the stream selection process + cannot check if the encoded stream can be muxed into the output file. + If it cannot, ffmpeg will abort and all output files will fail to be + processed. + + Examples + The following examples illustrate the behavior, quirks and limitations + of ffmpeg's stream selection methods. + + They assume the following three input files. + + input file 'A.avi' + stream 0: video 640x360 + stream 1: audio 2 channels + + input file 'B.mp4' + stream 0: video 1920x1080 + stream 1: audio 2 channels + stream 2: subtitles (text) + stream 3: audio 5.1 channels + stream 4: subtitles (text) + + input file 'C.mkv' + stream 0: video 1280x720 + stream 1: audio 2 channels + stream 2: subtitles (image) + + Example: automatic stream selection + + ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov + + There are three output files specified, and for the first two, no + "-map" options are set, so ffmpeg will select streams for these two + files automatically. + + out1.mkv is a Matroska container file and accepts video, audio and + subtitle streams, so ffmpeg will try to select one of each type.For + video, it will select "stream 0" from B.mp4, which has the highest + resolution among all the input video streams.For audio, it will select + "stream 3" from B.mp4, since it has the greatest number of channels.For + subtitles, it will select "stream 2" from B.mp4, which is the first + subtitle stream from among A.avi and B.mp4. + + out2.wav accepts only audio streams, so only "stream 3" from B.mp4 is + selected. + + For out3.mov, since a "-map" option is set, no automatic stream + selection will occur. The "-map 1:a" option will select all audio + streams from the second input B.mp4. No other streams will be included + in this output file. + + For the first two outputs, all included streams will be transcoded. The + encoders chosen will be the default ones registered by each output + format, which may not match the codec of the selected input streams. + + For the third output, codec option for audio streams has been set to + "copy", so no decoding-filtering-encoding operations will occur, or can + occur. Packets of selected streams shall be conveyed from the input + file and muxed within the output file. + + Example: automatic subtitles selection + + ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv + + Although out1.mkv is a Matroska container file which accepts subtitle + streams, only a video and audio stream shall be selected. The subtitle + stream of C.mkv is image-based and the default subtitle encoder of the + Matroska muxer is text-based, so a transcode operation for the + subtitles is expected to fail and hence the stream isn't selected. + However, in out2.mkv, a subtitle encoder is specified in the command + and so, the subtitle stream is selected, in addition to the video + stream. The presence of "-an" disables audio stream selection for + out2.mkv. + + Example: unlabeled filtergraph outputs + + ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt + + A filtergraph is setup here using the "-filter_complex" option and + consists of a single video filter. The "overlay" filter requires + exactly two video inputs, but none are specified, so the first two + available video streams are used, those of A.avi and C.mkv. The output + pad of the filter has no label and so is sent to the first output file + out1.mp4. Due to this, automatic selection of the video stream is + skipped, which would have selected the stream in B.mp4. The audio + stream with most channels viz. "stream 3" in B.mp4, is chosen + automatically. No subtitle stream is chosen however, since the MP4 + format has no default subtitle encoder registered, and the user hasn't + specified a subtitle encoder. + + The 2nd output file, out2.srt, only accepts text-based subtitle + streams. So, even though the first subtitle stream available belongs to + C.mkv, it is image-based and hence skipped. The selected stream, + "stream 2" in B.mp4, is the first text-based subtitle stream. + + Example: labeled filtergraph outputs + + ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \ + -map '[outv]' -an out1.mp4 \ + out2.mkv \ + -map '[outv]' -map 1:a:0 out3.mkv + + The above command will fail, as the output pad labelled "[outv]" has + been mapped twice. None of the output files shall be processed. + + ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \ + -an out1.mp4 \ + out2.mkv \ + -map 1:a:0 out3.mkv + + This command above will also fail as the hue filter output has a label, + "[outv]", and hasn't been mapped anywhere. + + The command should be modified as follows, + + ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \ + -map '[outv1]' -an out1.mp4 \ + out2.mkv \ + -map '[outv2]' -map 1:a:0 out3.mkv + + The video stream from B.mp4 is sent to the hue filter, whose output is + cloned once using the split filter, and both outputs labelled. Then a + copy each is mapped to the first and third output files. + + The overlay filter, requiring two video inputs, uses the first two + unused video streams. Those are the streams from A.avi and C.mkv. The + overlay output isn't labelled, so it is sent to the first output file + out1.mp4, regardless of the presence of the "-map" option. + + The aresample filter is sent the first unused audio stream, that of + A.avi. Since this filter output is also unlabelled, it too is mapped to + the first output file. The presence of "-an" only suppresses automatic + or manual stream selection of audio streams, not outputs sent from + filtergraphs. Both these mapped streams shall be ordered before the + mapped stream in out1.mp4. + + The video, audio and subtitle streams mapped to "out2.mkv" are entirely + determined by automatic stream selection. + + out3.mkv consists of the cloned video output from the hue filter and + the first audio stream from B.mp4. + +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 multiples, 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. + + 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. If stream_index is + used as an additional stream specifier (see below), then it selects + stream number stream_index from the matching streams. Stream + numbering is based on the order of the streams as detected by + libavformat except when a program ID is also specified. In this + case it is based on the ordering of the streams in the program. + + stream_type[:additional_stream_specifier] + stream_type is one of following: 'v' or 'V' for video, 'a' for + audio, 's' for subtitle, 'd' for data, and 't' for attachments. 'v' + matches all video streams, 'V' only matches video streams which are + not attached pictures, video thumbnails or cover arts. If + additional_stream_specifier is used, then it matches streams which + both have this type and match the additional_stream_specifier. + Otherwise, it matches all streams of the specified type. + + p:program_id[:additional_stream_specifier] + Matches streams which are in the program with the id program_id. If + additional_stream_specifier is used, then it matches streams which + both are part of the program and match the + additional_stream_specifier. + + #stream_id or i:stream_id + Match the stream by stream id (e.g. PID in MPEG-TS container). + + m:key[:value] + Matches streams with the metadata tag key having the specified + value. If value is not given, matches streams that contain the + given tag with any value. + + u Matches streams with usable configuration, the codec must be + defined and the essential information such as video dimension or + audio sample rate must be present. + + Note that in ffmpeg, matching by metadata will only work properly + for input files. + + 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 named filter_name. + Use the -filters option to get a list of all filters. + + bsf=bitstream_filter_name + Print detailed information about the bitstream filter named + bitstream_filter_name. Use the -bsfs option to get a list of + all bitstream filters. + + protocol=protocol_name + Print detailed information about the protocol named + protocol_name. Use the -protocols option to get a list of all + protocols. + + -version + Show version. + + -buildconf + Show the build configuration, one option per line. + + -formats + Show available formats (including devices). + + -demuxers + Show available demuxers. + + -muxers + Show available muxers. + + -devices + Show available devices. + + -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. + + -dispositions + Show stream dispositions. + + -colors + Show recognized color names. + + -sources device[,opt1=val1[,opt2=val2]...] + Show autodetected sources of the input device. Some devices may + provide system-dependent source names that cannot be autodetected. + The returned list cannot be assumed to be always complete. + + ffmpeg -sources pulse,server=192.168.0.4 + + -sinks device[,opt1=val1[,opt2=val2]...] + Show autodetected sinks of the output device. Some devices may + provide system-dependent sink names that cannot be autodetected. + The returned list cannot be assumed to be always complete. + + ffmpeg -sinks pulse,server=192.168.0.4 + + -loglevel [flags+]loglevel | -v [flags+]loglevel + Set logging level and flags used by the library. + + The optional flags prefix can consist of the following values: + + 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. + + level + Indicates that log output should add a "[level]" prefix to each + message line. This can be used as an alternative to log + coloring, e.g. when dumping the log to file. + + Flags can also be used alone by adding a '+'/'-' prefix to + set/reset a single flag without affecting other flags or changing + loglevel. When setting both flags and loglevel, a '+' separator is + expected between the last flags value and before loglevel. + + loglevel is a string or a number containing one of the following + values: + + quiet, -8 + Show nothing at all; be silent. + + panic, 0 + Only show fatal errors which could lead the process to crash, + such as an assertion failure. This is not currently used for + anything. + + fatal, 8 + Only show fatal errors. These are errors after which the + process absolutely cannot continue. + + error, 16 + Show all errors, including ones which can be recovered from. + + warning, 24 + Show all warnings and errors. Any message related to possibly + incorrect or unexpected events will be shown. + + info, 32 + Show informative messages during processing. This is in + addition to warnings and errors. This is the default value. + + verbose, 40 + Same as "info", except more verbose. + + debug, 48 + Show everything, including debugging information. + + trace, 56 + + For example to enable repeated log output, add the "level" prefix, + and set loglevel to "verbose": + + ffmpeg -loglevel repeat+level+verbose -i input output + + Another example that enables repeated log output without affecting + current state of "level" prefix flag or loglevel: + + ffmpeg [...] -loglevel +repeat + + 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 can be forced setting the environment + variable AV_LOG_FORCE_COLOR. + + -report + Dump full command line and log 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 debug". + + 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; option 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 options are 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 "%" + + level + set the log verbosity level using a numerical value (see + "-loglevel"). + + For example, to output a report to a file named ffreport.log using + a log level of 32 (alias for log level "info"): + + FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output + + Errors in parsing the environment variable are not fatal, and will + not appear in the report. + + -hide_banner + Suppress printing banner. + + All FFmpeg tools will normally show a copyright notice, build + options and library versions. This option can be used to suppress + printing this information. + + -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 + avx2 + xop + fma3 + fma4 + 3dnow + 3dnowext + bmi1 + bmi2 + cmov + ARM + armv5te + armv6 + armv6t2 + vfp + vfpv3 + neon + setend + AArch64 + armv8 + vfp + neon + PowerPC + altivec + Specific Processors + pentium2 + pentium3 + pentium4 + k6 + k62 + athlon + athlonxp + k8 + -cpucount count (global) + Override detection of CPU count. This option is intended for + testing. Do not use it unless you know what you're doing. + + ffmpeg -cpucount 2 + + -max_alloc bytes + Set the maximum size limit for allocating a block on the heap by + ffmpeg's family of malloc functions. Exercise extreme caution when + using this option. Don't use if you do not understand the full + consequence of doing so. Default is INT_MAX. + + 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: + + ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4 + + In the above example, a multichannel audio stream is mapped twice for + output. The first instance is encoded with codec ac3 and bitrate 640k. + The second instance is downmixed to 2 channels and encoded with codec + aac. A bitrate of 128k is specified for it using absolute index of the + output stream. + + 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. + + Main options + -f fmt (input/output) + Force input or output file format. The format is normally auto + detected for input files and guessed from the file extension for + output files, so this option is not needed in most cases. + + -i url (input) + input file url + + -y (global) + Overwrite output files without asking. + + -n (global) + Do not overwrite output files, and exit immediately if a specified + output file already exists. + + -stream_loop number (input) + Set number of times input stream shall be looped. Loop 0 means no + loop, loop -1 means infinite loop. + + -recast_media (global) + Allow forcing a decoder of a different media type than the one + detected or designated by the demuxer. Useful for decoding media + data muxed as data streams. + + -c[:stream_specifier] codec (input/output,per-stream) + -codec[:stream_specifier] codec (input/output,per-stream) + Select an encoder (when used before an output file) or a decoder + (when used before an input file) for one or more streams. codec is + the name of a decoder/encoder or a special value "copy" (output + only) to indicate that the stream is not to be re-encoded. + + For example + + ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT + + encodes all video streams with libx264 and copies all audio + streams. + + For each stream, the last matching "c" option is applied, so + + ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT + + will copy all the streams except the second video, which will be + encoded with libx264, and the 138th audio, which will be encoded + with libvorbis. + + -t duration (input/output) + When used as an input option (before "-i"), limit the duration of + data read from the input file. + + When used as an output option (before an output url), stop writing + the output after its duration reaches duration. + + duration must be a time duration specification, see the Time + duration section in the ffmpeg-utils(1) manual. + + -to and -t are mutually exclusive and -t has priority. + + -to position (input/output) + Stop writing the output or reading the input at position. position + must be a time duration specification, see the Time duration + section in the ffmpeg-utils(1) manual. + + -to and -t are mutually exclusive and -t has priority. + + -fs limit_size (output) + Set the file size limit, expressed in bytes. No further chunk of + bytes is written after the limit is exceeded. The size of the + output file is slightly more than the requested file size. + + -ss position (input/output) + When used as an input option (before "-i"), seeks in this input + file to position. Note that 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 url), decodes but + discards input until the timestamps reach position. + + position must be a time duration specification, see the Time + duration section in the ffmpeg-utils(1) manual. + + -sseof position (input) + Like the "-ss" option but relative to the "end of file". That is + negative values are earlier in the file, 0 is at EOF. + + -isync input_index (input) + Assign an input as a sync source. + + This will take the difference between the start times of the target + and reference inputs and offset the timestamps of the target file + by that difference. The source timestamps of the two inputs should + derive from the same clock source for expected results. If "copyts" + is set then "start_at_zero" must also be set. If either of the + inputs has no starting timestamp then no sync adjustment is made. + + Acceptable values are those that refer to a valid ffmpeg input + index. If the sync reference is the target index itself or -1, then + no adjustment is made to target timestamps. A sync reference may + not itself be synced to any other input. + + Default value is -1. + + -itsoffset offset (input) + Set the input time offset. + + offset must be a time duration specification, see the Time duration + section in the ffmpeg-utils(1) manual. + + The offset is added to the timestamps of the input files. + Specifying a positive offset means that the corresponding streams + are delayed by the time duration specified in offset. + + -itsscale scale (input,per-stream) + Rescale input timestamps. scale should be a floating point number. + + -timestamp date (output) + Set the recording timestamp in the container. + + date must be a date specification, see the Date section in the + ffmpeg-utils(1) manual. + + -metadata[:metadata_specifier] key=value (output,per-metadata) + Set a metadata key/value pair. + + An optional metadata_specifier may be given to set metadata on + streams, chapters or programs. See "-map_metadata" documentation + for details. + + This option overrides metadata set with "-map_metadata". It is also + possible to delete metadata by using an empty value. + + For example, for setting the title in the output file: + + ffmpeg -i in.avi -metadata title="my title" out.flv + + To set the language of the first audio stream: + + ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT + + -disposition[:stream_specifier] value (output,per-stream) + Sets the disposition for a stream. + + By default, the disposition is copied from the input stream, unless + the output stream this option applies to is fed by a complex + filtergraph - in that case the disposition is unset by default. + + value is a sequence of items separated by '+' or '-'. The first + item may also be prefixed with '+' or '-', in which case this + option modifies the default value. Otherwise (the first item is not + prefixed) this options overrides the default value. A '+' prefix + adds the given disposition, '-' removes it. It is also possible to + clear the disposition by setting it to 0. + + If no "-disposition" options were specified for an output file, + ffmpeg will automatically set the 'default' disposition on the + first stream of each type, when there are multiple streams of this + type in the output file and no stream of that type is already + marked as default. + + The "-dispositions" option lists the known dispositions. + + For example, to make the second audio stream the default stream: + + ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv + + To make the second subtitle stream the default stream and remove + the default disposition from the first subtitle stream: + + ffmpeg -i in.mkv -c copy -disposition:s:0 0 -disposition:s:1 default out.mkv + + To add an embedded cover/thumbnail: + + ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4 + + Not all muxers support embedded thumbnails, and those who do, only + support a few formats, like JPEG or PNG. + + -program + [title=title:][program_num=program_num:]st=stream[:st=stream...] + (output) + Creates a program with the specified title, program_num and adds + the specified stream(s) to it. + + -target type (output) + Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50"). type + may be prefixed with "pal-", "ntsc-" or "film-" to use the + corresponding standard. All the format options (bitrate, codecs, + buffer sizes) are then set automatically. You can just type: + + ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg + + Nevertheless you can specify additional options as long as you know + they do not conflict with the standard, as in: + + ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg + + The parameters set for each target are as follows. + + VCD + + : + -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324 + -s 352x288 -r 25 + -codec:v mpeg1video -g 15 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680 + -ar 44100 -ac 2 + -codec:a mp2 -b:a 224k + + : + -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324 + -s 352x240 -r 30000/1001 + -codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680 + -ar 44100 -ac 2 + -codec:a mp2 -b:a 224k + + : + -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324 + -s 352x240 -r 24000/1001 + -codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680 + -ar 44100 -ac 2 + -codec:a mp2 -b:a 224k + + SVCD + + : + -f svcd -packetsize 2324 + -s 480x576 -pix_fmt yuv420p -r 25 + -codec:v mpeg2video -g 15 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1 + -ar 44100 + -codec:a mp2 -b:a 224k + + : + -f svcd -packetsize 2324 + -s 480x480 -pix_fmt yuv420p -r 30000/1001 + -codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1 + -ar 44100 + -codec:a mp2 -b:a 224k + + : + -f svcd -packetsize 2324 + -s 480x480 -pix_fmt yuv420p -r 24000/1001 + -codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1 + -ar 44100 + -codec:a mp2 -b:a 224k + + DVD + + : + -f dvd -muxrate 10080k -packetsize 2048 + -s 720x576 -pix_fmt yuv420p -r 25 + -codec:v mpeg2video -g 15 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008 + -ar 48000 + -codec:a ac3 -b:a 448k + + : + -f dvd -muxrate 10080k -packetsize 2048 + -s 720x480 -pix_fmt yuv420p -r 30000/1001 + -codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008 + -ar 48000 + -codec:a ac3 -b:a 448k + + : + -f dvd -muxrate 10080k -packetsize 2048 + -s 720x480 -pix_fmt yuv420p -r 24000/1001 + -codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008 + -ar 48000 + -codec:a ac3 -b:a 448k + + DV + + : + -f dv + -s 720x576 -pix_fmt yuv420p -r 25 + -ar 48000 -ac 2 + + : + -f dv + -s 720x480 -pix_fmt yuv411p -r 30000/1001 + -ar 48000 -ac 2 + + : + -f dv + -s 720x480 -pix_fmt yuv411p -r 24000/1001 + -ar 48000 -ac 2 + + The "dv50" target is identical to the "dv" target except that the + pixel format set is "yuv422p" for all three standards. + + Any user-set value for a parameter above will override the target + preset value. In that case, the output may not comply with the + target standard. + + -dn (input/output) + As an input option, blocks all data streams of a file from being + filtered or being automatically selected or mapped for any output. + See "-discard" option to disable streams individually. + + As an output option, disables data recording i.e. automatic + selection or mapping of any data stream. For full manual control + see the "-map" option. + + -dframes number (output) + Set the number of data frames to output. This is an obsolete alias + for "-frames:d", which you should use instead. + + -frames[:stream_specifier] framecount (output,per-stream) + Stop writing to the stream after framecount frames. + + -q[:stream_specifier] q (output,per-stream) + -qscale[:stream_specifier] q (output,per-stream) + Use fixed quality scale (VBR). The meaning of q/qscale is codec- + dependent. If qscale is used without a stream_specifier then it + applies only to the video stream, this is to maintain compatibility + with previous behavior and as specifying the same codec specific + value to 2 different codecs that is audio and video generally is + not what is intended when no stream_specifier is used. + + -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. + + -reinit_filter[:stream_specifier] integer (input,per-stream) + This boolean option determines if the filtergraph(s) to which this + stream is fed gets reinitialized when input frame parameters change + mid-stream. This option is enabled by default as most video and all + audio filters cannot handle deviation in input frame properties. + Upon reinitialization, existing filter state is lost, like e.g. the + frame count "n" reference available in some filters. Any frames + buffered at time of reinitialization are lost. The properties + where a change triggers reinitialization are, for video, frame + resolution or pixel format; for audio, sample format, sample rate, + channel count or channel layout. + + -filter_threads nb_threads (global) + Defines how many threads are used to process a filter pipeline. + Each pipeline will produce a thread pool with this many threads + available for parallel processing. The default is the number of + available CPUs. + + -pre[:stream_specifier] preset_name (output,per-stream) + Specify the preset for matching stream(s). + + -stats (global) + Print encoding progress/statistics. It is on by default, to + explicitly disable it you need to specify "-nostats". + + -stats_period time (global) + Set period at which encoding progress/statistics are updated. + Default is 0.5 seconds. + + -progress url (global) + Send program-friendly progress information to url. + + Progress information is written periodically 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". + + The update period is set using "-stats_period". + + -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) + Add an attachment to the output file. This is supported by a few + formats like Matroska for e.g. fonts used in rendering subtitles. + Attachments are implemented as a specific type of stream, so this + option will add a new stream to the file. It is then possible to + use per-stream options on this stream in the usual way. Attachment + streams created with this option will be created after all the + other streams (i.e. those created with "-map" or automatic + mappings). + + Note that for Matroska you also have to set the mimetype metadata + tag: + + ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv + + (assuming that the attachment stream will be third in the output + file). + + -dump_attachment[:stream_specifier] filename (input,per-stream) + Extract the matching attachment stream into a file named filename. + If filename is empty, then the value of the "filename" metadata tag + will be used. + + E.g. to extract the first attachment to a file named 'out.ttf': + + ffmpeg -dump_attachment:t:0 out.ttf -i INPUT + + To extract all attachments to files determined by the "filename" + tag: + + ffmpeg -dump_attachment:t "" -i INPUT + + Technical note -- attachments are implemented as codec extradata, + so this option can actually be used to extract extradata from any + stream, not just attachments. + + Video Options + -vframes number (output) + Set the number of video frames to output. This is an obsolete alias + for "-frames:v", which you should use instead. + + -r[:stream_specifier] fps (input/output,per-stream) + 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. This + is not the same as the -framerate option used for some input + formats like image2 or v4l2 (it used to be the same in older + versions of FFmpeg). If in doubt use -framerate instead of the + input option -r. + + As an output option: + + video encoding + Duplicate or drop frames right before encoding them to achieve + constant output frame rate fps. + + video streamcopy + Indicate to the muxer that fps is the stream frame rate. No + data is dropped or duplicated in this case. This may produce + invalid files if fps does not match the actual stream frame + rate as determined by packet timestamps. See also the "setts" + bitstream filter. + + -fpsmax[:stream_specifier] fps (output,per-stream) + Set maximum frame rate (Hz value, fraction or abbreviation). + + Clamps output frame rate when output framerate is auto-set and is + higher than this value. Useful in batch processing or when input + framerate is wrongly detected as very high. It cannot be set + together with "-r". It is ignored during streamcopy. + + -s[:stream_specifier] size (input/output,per-stream) + 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. + + aspect can be a floating point number string, or a string of the + form num:den, where num and den are the numerator and denominator + of the aspect ratio. For example "4:3", "16:9", "1.3333", and + "1.7777" are valid argument values. + + 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. + + -display_rotation[:stream_specifier] rotation (input,per-stream) + Set video rotation metadata. + + rotation is a decimal number specifying the amount in degree by + which the video should be rotated counter-clockwise before being + displayed. + + This option overrides the rotation/display transform metadata + stored in the file, if any. When the video is being transcoded + (rather than copied) and "-autorotate" is enabled, the video will + be rotated at the filtering stage. Otherwise, the metadata will be + written into the output file if the muxer supports it. + + If the "-display_hflip" and/or "-display_vflip" options are given, + they are applied after the rotation specified by this option. + + -display_hflip[:stream_specifier] (input,per-stream) + Set whether on display the image should be horizontally flipped. + + See the "-display_rotation" option for more details. + + -display_vflip[:stream_specifier] (input,per-stream) + Set whether on display the image should be vertically flipped. + + See the "-display_rotation" option for more details. + + -vn (input/output) + As an input option, blocks all video streams of a file from being + filtered or being automatically selected or mapped for any output. + See "-discard" option to disable streams individually. + + As an output option, disables video recording i.e. automatic + selection or mapping of any video stream. For full manual control + see the "-map" option. + + -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), and in the + second pass that log file is used to generate the video at the + exact requested bitrate. On pass 1, you may just deactivate audio + and set output to null, examples for Windows and Unix: + + ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL + ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null + + -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 stream + + -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. + + -autorotate + Automatically rotate the video according to file metadata. Enabled + by default, use -noautorotate to disable it. + + -autoscale + Automatically scale the video according to the resolution of first + frame. Enabled by default, use -noautoscale to disable it. When + autoscale is disabled, all output frames of filter graph might not + be in the same resolution and may be inadequate for some + encoder/muxer. Therefore, it is not recommended to disable it + unless you really know what you are doing. Disable autoscale at + your own risk. + + 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. + + -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. + + -psnr + Calculate PSNR of compressed frames. This option is deprecated, + pass the PSNR flag to the encoder instead, using "-flags +psnr". + + -vstats + Dump video coding statistics to vstats_HHMMSS.log. + + -vstats_file file + Dump video coding statistics to file. + + -vstats_version file + Specifies which version of the vstats format to use. Default is 2. + + version = 1 : + + "frame= %5d q= %2.1f PSNR= %6.2f f_size= %6d s_size= %8.0fkB time= + %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s" + + version > 1: + + "out= %2d st= %2d frame= %5d q= %2.1f PSNR= %6.2f f_size= %6d + s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s" + + -top[:stream_specifier] n (output,per-stream) + top=1/bottom=0/auto=-1 field first + + -vtag fourcc/tag (output) + Force video tag/fourcc. This is an alias for "-tag:v". + + -qphist (global) + Show QP histogram + + -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[:stream_specifier] source (output,per-stream) + -force_key_frames[:stream_specifier] source_no_drop (output,per-stream) + force_key_frames can take arguments of the following form: + + time[,time...] + If the argument consists of timestamps, ffmpeg will round the + specified times to the nearest output timestamp as per the + encoder time base and force a keyframe at the first frame + having timestamp equal or greater than the computed timestamp. + Note that if the encoder time base is too coarse, then the + keyframes may be forced on frames with timestamps lower than + the specified time. The default encoder time base is the + inverse of the output framerate but may be set otherwise via + "-enc_time_base". + + 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. + + 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 + + expr:expr + 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. + + 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)) + + source + If the argument is "source", ffmpeg will force a key frame if + the current frame being encoded is marked as a key frame in its + source. + + source_no_drop + If the argument is "source_no_drop", ffmpeg will force a key + frame if the current frame being encoded is marked as a key + frame in its source. In cases where this particular source + frame has to be dropped, enforce the next available frame to + become a key frame instead. + + 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) + When doing stream copy, copy also non-key frames found at the + beginning. + + -init_hw_device type[=name][:device[,key=value...]] + Initialise a new hardware device of type type called name, using + the given device parameters. If no name is specified it will + receive a default name of the form "type%d". + + The meaning of device and the following arguments depends on the + device type: + + cuda + device is the number of the CUDA device. + + The following options are recognized: + + primary_ctx + If set to 1, uses the primary device context instead of + creating a new one. + + Examples: + + -init_hw_device cuda:1 + Choose the second device on the system. + + -init_hw_device cuda:0,primary_ctx=1 + Choose the first device and use the primary device context. + + dxva2 + device is the number of the Direct3D 9 display adapter. + + d3d11va + device is the number of the Direct3D 11 display adapter. + + vaapi + device is either an X11 display name or a DRM render node. If + not specified, it will attempt to open the default X11 display + ($DISPLAY) and then the first DRM render node + (/dev/dri/renderD128). + + vdpau + device is an X11 display name. If not specified, it will + attempt to open the default X11 display ($DISPLAY). + + qsv device selects a value in MFX_IMPL_*. Allowed values are: + + auto + sw + hw + auto_any + hw_any + hw2 + hw3 + hw4 + + If not specified, auto_any is used. (Note that it may be + easier to achieve the desired result for QSV by creating the + platform-appropriate subdevice (dxva2 or d3d11va or vaapi) and + then deriving a QSV device from that.) + + Alternatively, child_device_type helps to choose platform- + appropriate subdevice type. On Windows d3d11va is used as + default subdevice type. + + Examples: + + -init_hw_device qsv:hw,child_device_type=d3d11va + Choose the GPU subdevice with type d3d11va and create QSV + device with MFX_IMPL_HARDWARE. + + -init_hw_device qsv:hw,child_device_type=dxva2 + Choose the GPU subdevice with type dxva2 and create QSV + device with MFX_IMPL_HARDWARE. + + opencl + device selects the platform and device as + platform_index.device_index. + + The set of devices can also be filtered using the key-value + pairs to find only devices matching particular platform or + device strings. + + The strings usable as filters are: + + platform_profile + platform_version + platform_name + platform_vendor + platform_extensions + device_name + device_vendor + driver_version + device_version + device_profile + device_extensions + device_type + + The indices and filters must together uniquely select a device. + + Examples: + + -init_hw_device opencl:0.1 + Choose the second device on the first platform. + + -init_hw_device opencl:,device_name=Foo9000 + Choose the device with a name containing the string + Foo9000. + + -init_hw_device + opencl:1,device_type=gpu,device_extensions=cl_khr_fp16 + Choose the GPU device on the second platform supporting the + cl_khr_fp16 extension. + + vulkan + If device is an integer, it selects the device by its index in + a system-dependent list of devices. If device is any other + string, it selects the first device with a name containing that + string as a substring. + + The following options are recognized: + + debug + If set to 1, enables the validation layer, if installed. + + linear_images + If set to 1, images allocated by the hwcontext will be + linear and locally mappable. + + instance_extensions + A plus separated list of additional instance extensions to + enable. + + device_extensions + A plus separated list of additional device extensions to + enable. + + Examples: + + -init_hw_device vulkan:1 + Choose the second device on the system. + + -init_hw_device vulkan:RADV + Choose the first device with a name containing the string + RADV. + + -init_hw_device + vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface + Choose the first device and enable the Wayland and XCB + instance extensions. + + -init_hw_device type[=name]@source + Initialise a new hardware device of type type called name, deriving + it from the existing device with the name source. + + -init_hw_device list + List all hardware device types supported in this build of ffmpeg. + + -filter_hw_device name + Pass the hardware device called name to all filters in any filter + graph. This can be used to set the device to upload to with the + "hwupload" filter, or the device to map to with the "hwmap" filter. + Other filters may also make use of this parameter when they require + a hardware device. Note that this is typically only required when + the input is not already in hardware frames - when it is, filters + will derive the device they require from the context of the frames + they receive as input. + + This is a global setting, so all filters will receive the same + device. + + -hwaccel[:stream_specifier] hwaccel (input,per-stream) + Use hardware acceleration to decode the matching stream(s). The + allowed values of hwaccel are: + + none + Do not use any hardware acceleration (the default). + + auto + Automatically select the hardware acceleration method. + + vdpau + Use VDPAU (Video Decode and Presentation API for Unix) hardware + acceleration. + + dxva2 + Use DXVA2 (DirectX Video Acceleration) hardware acceleration. + + d3d11va + Use D3D11VA (DirectX Video Acceleration) hardware acceleration. + + vaapi + Use VAAPI (Video Acceleration API) hardware acceleration. + + qsv Use the Intel QuickSync Video acceleration for video + transcoding. + + Unlike most other values, this option does not enable + accelerated decoding (that is used automatically whenever a qsv + decoder is selected), but accelerated transcoding, without + copying the frames into the system memory. + + For it to work, both the decoder and the encoder must support + QSV acceleration and no filters must be used. + + This option has no effect if the selected hwaccel is not available + or not supported by the chosen decoder. + + Note that most acceleration methods are intended for playback and + will not be faster than software decoding on modern CPUs. + Additionally, ffmpeg will usually need to copy the decoded frames + from the GPU memory into the system memory, resulting in further + performance loss. This option is thus mainly useful for testing. + + -hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream) + Select a device to use for hardware acceleration. + + This option only makes sense when the -hwaccel option is also + specified. It can either refer to an existing device created with + -init_hw_device by name, or it can create a new device as if + -init_hw_device type:hwaccel_device were called immediately before. + + -hwaccels + List all hardware acceleration components enabled in this build of + ffmpeg. Actual runtime availability depends on the hardware and + its suitable driver being installed. + + -fix_sub_duration_heartbeat[:stream_specifier] + Set a specific output video stream as the heartbeat stream + according to which to split and push through currently in-progress + subtitle upon receipt of a random access packet. + + This lowers the latency of subtitles for which the end packet or + the following subtitle has not yet been received. As a drawback, + this will most likely lead to duplication of subtitle events in + order to cover the full duration, so when dealing with use cases + where latency of when the subtitle event is passed on to output is + not relevant this option should not be utilized. + + Requires -fix_sub_duration to be set for the relevant input + subtitle stream for this to have any effect, as well as for the + input subtitle stream having to be directly mapped to the same + output in which the heartbeat stream resides. + + Audio Options + -aframes number (output) + Set the number of audio frames to output. This is an obsolete alias + for "-frames:a", which you should use instead. + + -ar[:stream_specifier] freq (input/output,per-stream) + Set the audio sampling frequency. For output streams it is set by + default to the frequency of the corresponding input stream. For + input streams this option only makes sense for audio grabbing + devices and raw demuxers and is mapped to the corresponding demuxer + options. + + -aq q (output) + Set the audio quality (codec-specific, VBR). This is an alias for + -q:a. + + -ac[:stream_specifier] channels (input/output,per-stream) + Set the number of audio channels. For output streams it is set by + default to the number of input audio channels. For input streams + this option only makes sense for audio grabbing devices and raw + demuxers and is mapped to the corresponding demuxer options. + + -an (input/output) + As an input option, blocks all audio streams of a file from being + filtered or being automatically selected or mapped for any output. + See "-discard" option to disable streams individually. + + As an output option, disables audio recording i.e. automatic + selection or mapping of any audio stream. For full manual control + see the "-map" option. + + -acodec codec (input/output) + Set the audio codec. This is an alias for "-codec:a". + + -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. + + Advanced Audio options + -atag fourcc/tag (output) + Force audio tag/fourcc. This is an alias for "-tag:a". + + -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. + + Subtitle options + -scodec codec (input/output) + Set the subtitle codec. This is an alias for "-codec:s". + + -sn (input/output) + As an input option, blocks all subtitle streams of a file from + being filtered or being automatically selected or mapped for any + output. See "-discard" option to disable streams individually. + + As an output option, disables subtitle recording i.e. automatic + selection or mapping of any subtitle stream. For full manual + control see the "-map" option. + + -sbsf bitstream_filter + Deprecated, see -bsf + + Advanced Subtitle options + -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. + + Advanced options + -map [-]input_file_id[:stream_specifier][?] | [linklabel] (output) + Create one or more streams in the output file. This option has two + forms for specifying the data source(s): the first selects one or + more streams from some input file (specified with "-i"), the second + takes an output from some complex filtergraph (specified with + "-filter_complex" or "-filter_complex_script"). + + In the first form, an output stream is created for every stream + from the input file with the index input_file_id. If + stream_specifier is given, only those streams that match the + specifier are used (see the Stream specifiers section for the + stream_specifier syntax). + + A "-" character before the stream identifier creates a "negative" + mapping. It disables matching streams from already created + mappings. + + A trailing "?" after the stream index will allow the map to be + optional: if the map matches no streams the map will be ignored + instead of failing. Note the map will still fail if an invalid + input file index is used; such as if the map refers to a non- + existent input. + + 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. + + This option may be specified multiple times, each adding more + streams to the output file. Any given input stream may also be + mapped any number of times as a source for different output + streams, e.g. in order to use different encoding options and/or + filters. The streams are created in the output in the same order in + which the "-map" options are given on the commandline. + + Using this option disables the default mappings for this output + file. + + Examples: + + map everything + To map ALL streams from the first input file to output + + ffmpeg -i INPUT -map 0 output + + select specific stream + If you have two audio streams in the first input file, these + streams are identified by 0:0 and 0:1. You can use "-map" to + select which streams to place in an output file. For example: + + ffmpeg -i INPUT -map 0:1 out.wav + + will map the second input stream in INPUT to the (single) + output stream in out.wav. + + create multiple streams + To select the stream with index 2 from input file a.mov + (specified by the identifier 0:2), and stream with index 6 from + input b.mov (specified by the identifier 1:6), and copy them to + the output file out.mov: + + ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov + + create multiple streams 2 + To select all video and the third audio stream from an input + file: + + ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT + + negative map + To map all the streams except the second audio, use negative + mappings + + ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT + + optional map + To map the video and audio streams from the first input, and + using the trailing "?", ignore the audio mapping if no audio + streams exist in the first input: + + ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT + + map by language + To pick the English audio stream: + + ffmpeg -i INPUT -map 0:m:language:eng OUTPUT + + -ignore_unknown + Ignore input streams with unknown type instead of failing if + copying such streams is attempted. + + -copy_unknown + Allow input streams with unknown type to be copied instead of + failing if copying such streams is attempted. + + -map_channel + [input_file_id.stream_specifier.channel_id|-1][?][:output_file_id.stream_specifier] + This option is deprecated and will be removed. It can be replaced + by the pan filter. In some cases it may be easier to use some + combination of the channelsplit, channelmap, or amerge filters. + + Map an audio channel from a given input to an output. If + output_file_id.stream_specifier is not set, the audio channel will + be mapped on all the audio streams. + + Using "-1" instead of input_file_id.stream_specifier.channel_id + will map a muted channel. + + A trailing "?" will allow the map_channel to be optional: if the + map_channel matches no channel the map_channel will be ignored + instead of failing. + + For example, assuming INPUT is a stereo audio file, you can switch + the two audio channels with the following command: + + ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT + + If you want to mute the first channel and keep the second: + + ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT + + The order of the "-map_channel" option specifies the order of the + channels in the output stream. The output channel layout is guessed + from the number of channels mapped (mono if one "-map_channel", + stereo if two, etc.). Using "-ac" in combination of "-map_channel" + makes the channel gain levels to be updated if 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 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 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 input stream; you can't for example use + "-map_channel" to pick multiple input audio channels contained in + different streams (from the same or different files) and merge them + into a single output stream. It is therefore not currently + possible, for example, to turn two separate mono streams into a + single stereo stream. However splitting a stereo stream into two + single channel mono streams is possible. + + 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 + + To map the first two audio channels from the first input, and using + the trailing "?", ignore the audio channel mapping if the first + input is mono instead of stereo: + + ffmpeg -i INPUT -map_channel 0.0.0 -map_channel 0.0.1? OUTPUT + + -map_metadata[:metadata_spec_out] infile[:metadata_spec_in] + (output,per-metadata) + Set metadata information of the next output file from infile. Note + that those are file indices (zero-based), not filenames. Optional + metadata_spec_in/out parameters specify, which metadata to copy. A + metadata specifier can have the following forms: + + g global metadata, i.e. metadata that applies to the whole file + + s[:stream_spec] + per-stream metadata. stream_spec is a stream specifier as + described in the Stream specifiers chapter. In an input + metadata specifier, the first matching stream is copied from. + In an output metadata specifier, all matching streams are + copied to. + + c:chapter_index + per-chapter metadata. chapter_index is the zero-based chapter + index. + + p:program_index + per-program metadata. program_index is the zero-based program + index. + + If metadata specifier is omitted, it defaults to global. + + By default, global metadata is copied from the first input file, + per-stream and per-chapter metadata is copied along with + streams/chapters. These default mappings are disabled by creating + any mapping of the relevant type. A negative file index can be used + to create a dummy mapping that just disables automatic copying. + + For example to copy metadata from the first stream of the input + file to global metadata of the output file: + + ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3 + + To do the reverse, i.e. copy global metadata to all audio streams: + + ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv + + Note that simple 0 would work as well in this example, since global + metadata is assumed by default. + + -map_chapters input_file_index (output) + Copy chapters from input file with index input_file_index to the + next output file. If no chapter mapping is specified, then chapters + are copied from the first input file with at least one chapter. Use + a negative file index to disable any chapter copying. + + -benchmark (global) + Show benchmarking information at the end of an encode. Shows real, + system and user 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 real, + system and user time used in various steps (audio/video + encode/decode). + + -timelimit duration (global) + Exit after ffmpeg has been running for duration seconds in CPU user + time. + + -dump (global) + Dump each input packet to stderr. + + -hex (global) + When dumping packets, also dump the payload. + + -readrate speed (input) + Limit input read speed. + + Its value is a floating-point positive number which represents the + maximum duration of media, in seconds, that should be ingested in + one second of wallclock time. Default value is zero and represents + no imposed limitation on speed of ingestion. Value 1 represents + real-time speed and is equivalent to "-re". + + Mainly used to simulate a capture device or live input stream (e.g. + when reading from a file). Should not be used with a low value + when input is an actual capture device or live stream as it may + cause packet loss. + + It is useful for when flow speed of output packets is important, + such as live streaming. + + -re (input) + Read input at native frame rate. This is equivalent to setting + "-readrate 1". + + -vsync parameter (global) + -fps_mode[:stream_specifier] parameter (output,per-stream) + Set video sync method / framerate mode. vsync is applied to all + output video streams but can be overridden for a stream by setting + fps_mode. vsync is deprecated and will be removed in the future. + + For compatibility reasons some of the values for vsync can be + specified as numbers (shown in parentheses in the following table). + + passthrough (0) + Each frame is passed with its timestamp from the demuxer to the + muxer. + + cfr (1) + Frames will be duplicated and dropped to achieve exactly the + requested constant frame rate. + + vfr (2) + 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. + + auto (-1) + Chooses between cfr and vfr 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. + + -frame_drop_threshold parameter + Frame drop threshold, which specifies how much behind video frames + can be before they are dropped. In frame rate units, so 1.0 is one + frame. The default is -1.1. One possible usecase is to avoid + framedrops in case of noisy timestamps or to increase frame drop + precision in case of exact timestamps. + + -adrift_threshold time + 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 (add/drop) and soft (squeeze/stretch) compensation. + "-async" must be set to a positive value. + + -apad parameters (output,per-stream) + Pad the output audio stream(s). This is the same as applying "-af + apad". Argument is a string of filter parameters composed the same + as with the "apad" filter. "-shortest" must be set for this output + for the option to take effect. + + -copyts + 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. + + -start_at_zero + When used with copyts, shift input timestamps so they start at + zero. + + This means that using e.g. "-ss 50" will make output timestamps + start at 50 seconds, regardless of what timestamp the input file + started at. + + -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. + + Default value is -1. + + -enc_time_base[:stream_specifier] timebase (output,per-stream) + Set the encoder timebase. timebase is a floating point number, and + can assume one of the following values: + + 0 Assign a default value according to the media type. + + For video - use 1/framerate, for audio - use 1/samplerate. + + -1 Use the input stream timebase when possible. + + If an input stream is not available, the default timebase will + be used. + + >0 Use the provided number as the timebase. + + This field can be provided as a ratio of two integers (e.g. + 1:24, 1:48000) or as a floating point number (e.g. 0.04166, + 2.0833e-5) + + Default value is 0. + + -bitexact (input/output) + Enable bitexact mode for (de)muxer and (de/en)coder + + -shortest (output) + Finish encoding when the shortest output stream ends. + + Note that this option may require buffering frames, which + introduces extra latency. The maximum amount of this latency may be + controlled with the "-shortest_buf_duration" option. + + -shortest_buf_duration duration (output) + The "-shortest" option may require buffering potentially large + amounts of data when at least one of the streams is "sparse" (i.e. + has large gaps between frames X this is typically the case for + subtitles). + + This option controls the maximum duration of buffered frames in + seconds. Larger values may allow the "-shortest" option to produce + more accurate results, but increase memory use and latency. + + The default value is 10 seconds. + + -dts_delta_threshold + Timestamp discontinuity delta threshold. + + -dts_error_threshold seconds + Timestamp error delta threshold. This threshold use to discard + crazy/damaged timestamps and the default is 30 hours which is + arbitrarily picked and quite conservative. + + -muxdelay seconds (output) + Set the maximum demux-decode delay. + + -muxpreload seconds (output) + Set the initial demux-decode delay. + + -streamid output-stream-index:new-value (output) + Assign a new stream-id value to an output stream. This option + should be specified prior to the output filename to which it + applies. For the situation where multiple output files exist, a + streamid may be reassigned to a different value. + + For example, to set the stream 0 PID to 33 and the stream 1 PID to + 36 for an output mpegts file: + + ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts + + -bsf[:stream_specifier] bitstream_filters (output,per-stream) + 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 -bsf:v h264_mp4toannexb -an out.h264 + + ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt + + -tag[:stream_specifier] codec_tag (input/output,per-stream) + Force a tag/fourcc for matching streams. + + -timecode hh:mm:ssSEPff + Specify Timecode for writing. SEP is ':' for non drop timecode and + ';' (or '.') for drop. + + ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg + + -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 + + 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) + + To generate 5 seconds of pure red video using lavfi "color" source: + + ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv + + -filter_complex_threads nb_threads (global) + Defines how many threads are used to process a filter_complex + graph. Similar to filter_threads but used for "-filter_complex" + graphs only. The default is the number of available CPUs. + + -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. + + -seek_timestamp (input) + This option enables or disables seeking by timestamp in input files + with the -ss option. It is disabled by default. If enabled, the + argument to the -ss option is considered an actual timestamp, and + is not offset by the start time of the file. This matters only for + files which do not start from timestamp 0, such as transport + streams. + + -thread_queue_size size (input/output) + For input, this option sets the maximum number of queued packets + when reading from the file or device. With low latency / high rate + live streams, packets may be discarded if they are not read in a + timely manner; setting this value can force ffmpeg to use a + separate input thread and read packets as soon as they arrive. By + default ffmpeg only does this if multiple inputs are specified. + + For output, this option specified the maximum number of packets + that may be queued to each muxing thread. + + -sdp_file file (global) + Print sdp information for an output stream to file. This allows + dumping sdp information when at least one output isn't an rtp + stream. (Requires at least one of the output formats to be rtp). + + -discard (input) + Allows discarding specific streams or frames from streams. Any + input stream can be fully discarded, using value "all" whereas + selective discarding of frames from a stream occurs at the demuxer + and is not supported by all demuxers. + + none + Discard no frame. + + default + Default, which discards no frames. + + noref + Discard all non-reference frames. + + bidir + Discard all bidirectional frames. + + nokey + Discard all frames excepts keyframes. + + all Discard all frames. + + -abort_on flags (global) + Stop and abort on various conditions. The following flags are + available: + + empty_output + No packets were passed to the muxer, the output is empty. + + empty_output_stream + No packets were passed to the muxer in some of the output + streams. + + -max_error_rate (global) + Set fraction of decoding frame failures across all inputs which + when crossed ffmpeg will return exit code 69. Crossing this + threshold does not terminate processing. Range is a floating-point + number between 0 to 1. Default is 2/3. + + -xerror (global) + Stop and exit on error + + -max_muxing_queue_size packets (output,per-stream) + When transcoding audio and/or video streams, ffmpeg will not begin + writing into the output until it has one packet for each such + stream. While waiting for that to happen, packets for other streams + are buffered. This option sets the size of this buffer, in packets, + for the matching output stream. + + The default value of this option should be high enough for most + uses, so only touch this option if you are sure that you need it. + + -muxing_queue_data_threshold bytes (output,per-stream) + This is a minimum threshold until which the muxing queue size is + not taken into account. Defaults to 50 megabytes per stream, and is + based on the overall size of packets passed to the muxer. + + -auto_conversion_filters (global) + Enable automatically inserting format conversion filters in all + filter graphs, including those defined by -vf, -af, -filter_complex + and -lavfi. If filter format negotiation requires a conversion, the + initialization of the filters will fail. Conversions can still be + performed by inserting the relevant conversion filter (scale, + aresample) in the graph. On by default, to explicitly disable it + you need to specify "-noauto_conversion_filters". + + -bits_per_raw_sample[:stream_specifier] value (output,per-stream) + Declare the number of bits per raw sample in the given output + stream to be value. Note that this option sets the information + provided to the encoder/muxer, it does not change the stream to + conform to this value. Setting values that do not match the stream + properties may result in encoding failures or invalid output files. + + -stats_enc_pre[:stream_specifier] path (output,per-stream) + -stats_enc_post[:stream_specifier] path (output,per-stream) + -stats_mux_pre[:stream_specifier] path (output,per-stream) + Write per-frame encoding information about the matching streams + into the file given by path. + + -stats_enc_pre writes information about raw video or audio frames + right before they are sent for encoding, while -stats_enc_post + writes information about encoded packets as they are received from + the encoder. -stats_mux_pre writes information about packets just + as they are about to be sent to the muxer. Every frame or packet + produces one line in the specified file. The format of this line is + controlled by -stats_enc_pre_fmt / -stats_enc_post_fmt / + -stats_mux_pre_fmt. + + When stats for multiple streams are written into a single file, the + lines corresponding to different streams will be interleaved. The + precise order of this interleaving is not specified and not + guaranteed to remain stable between different invocations of the + program, even with the same options. + + -stats_enc_pre_fmt[:stream_specifier] format_spec (output,per-stream) + -stats_enc_post_fmt[:stream_specifier] format_spec (output,per-stream) + -stats_mux_pre_fmt[:stream_specifier] format_spec (output,per-stream) + Specify the format for the lines written with -stats_enc_pre / + -stats_enc_post / -stats_mux_pre. + + format_spec is a string that may contain directives of the form + {fmt}. format_spec is backslash-escaped --- use \{, \}, and \\ to + write a literal {, }, or \, respectively, into the output. + + The directives given with fmt may be one of the following: + + fidx + Index of the output file. + + sidx + Index of the output stream in the file. + + n Frame number. Pre-encoding: number of frames sent to the + encoder so far. Post-encoding: number of packets received from + the encoder so far. Muxing: number of packets submitted to the + muxer for this stream so far. + + ni Input frame number. Index of the input frame (i.e. output by a + decoder) that corresponds to this output frame or packet. -1 if + unavailable. + + tb Encoder timebase, as a rational number num/den. Note that this + may be different from the timebase used by the muxer. + + tbi Timebase for ptsi, as a rational number num/den. Available when + ptsi is available, 0/1 otherwise. + + pts Presentation timestamp of the frame or packet, as an integer. + Should be multiplied by the timebase to compute presentation + time. + + ptsi + Presentation timestamp of the input frame (see ni), as an + integer. Should be multiplied by tbi to compute presentation + time. Printed as (2^63 - 1 = 9223372036854775807) when not + available. + + t Presentation time of the frame or packet, as a decimal number. + Equal to pts multiplied by tb. + + ti Presentation time of the input frame (see ni), as a decimal + number. Equal to ptsi multiplied by tbi. Printed as inf when + not available. + + dts Decoding timestamp of the packet, as an integer. Should be + multiplied by the timebase to compute presentation time. Post- + encoding only. + + dt Decoding time of the frame or packet, as a decimal number. + Equal to dts multiplied by tb. + + sn Number of audio samples sent to the encoder so far. Audio and + pre-encoding only. + + samp + Number of audio samples in the frame. Audio and pre-encoding + only. + + size + Size of the encoded packet in bytes. Post-encoding only. + + br Current bitrate in bits per second. Post-encoding only. + + abr Average bitrate for the whole stream so far, in bits per + second, -1 if it cannot be determined at this point. Post- + encoding only. + + The default format strings are: + + pre-encoding + {fidx} {sidx} {n} {t} + + post-encoding + {fidx} {sidx} {n} {t} + + In the future, new items may be added to the end of the default + formatting strings. Users who depend on the format staying exactly + the same, should prescribe it manually. + + Note that stats for different streams written into the same file + may have different formats. + + 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 ('#') + character are ignored and are used to provide comments. Check the + presets directory in the FFmpeg source tree for examples. + + There are two types of preset files: ffpreset and avpreset files. + + ffpreset files + + ffpreset files are specified with the "vpre", "apre", "spre", and + "fpre" options. The "fpre" option takes the filename of the preset + instead of a preset name as input and can be used for any kind of + codec. For the "vpre", "apre", and "spre" options, the options + specified in a preset file are applied to the currently selected codec + of the same type as the preset option. + + The argument passed to the "vpre", "apre", and "spre" preset options + identifies the preset file to use according to the following rules: + + First ffmpeg searches for a file named arg.ffpreset in the directories + $FFMPEG_DATADIR (if set), and $HOME/.ffmpeg, and in the datadir defined + at configuration time (usually PREFIX/share/ffmpeg) or in a ffpresets + folder along the executable on win32, in that order. For example, if + the argument is "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 libvpx" and use "-vpre 1080p", then it will search for the + file libvpx-1080p.ffpreset. + + avpreset files + + avpreset files are specified with the "pre" option. They work similar + to ffpreset files, but they only allow encoder- specific options. + Therefore, an option=value pair specifying an encoder cannot be used. + + When the "pre" option is specified, ffmpeg will look for files with the + suffix .avpreset in the directories $AVCONV_DATADIR (if set), and + $HOME/.avconv, and in the datadir defined at configuration time + (usually PREFIX/share/ffmpeg), in that order. + + First ffmpeg searches for a file named codec_name-arg.avpreset 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 libvpx" and use "-pre 1080p", then + it will search for the file libvpx-1080p.avpreset. + + If no such file is found, then ffmpeg will search for a file named + arg.avpreset in the same directories. + +EXAMPLES + Video and Audio grabbing + If you specify the input format and device then ffmpeg can grab video + and audio directly. + + ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg + + Or with an ALSA audio source (mono input, card id 1) instead of OSS: + + ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg + + Note that you must activate the right video source and channel before + launching ffmpeg with any TV viewer such as + by Gerd Knorr. You also have to set + the audio recording levels correctly with a standard mixer. + + X11 grabbing + Grab the X11 display with ffmpeg via + + 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 -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. + + Video and Audio file format conversion + Any supported file format and protocol can serve as input to ffmpeg: + + Examples: + + o You can use YUV files as input: + + ffmpeg -i /tmp/test%d.Y /tmp/out.mpg + + It will use the files: + + /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V, + /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc... + + The Y files use twice the resolution of the U and V files. They are + raw files, without header. They can be generated by all decent + video decoders. You must specify the size of the image with the -s + option if ffmpeg cannot guess it. + + o You can input from a raw YUV420P file: + + ffmpeg -i /tmp/test.yuv /tmp/out.avi + + test.yuv is a file containing raw YUV planar data. Each frame is + composed of the Y plane followed by the U and V planes at half + vertical and horizontal resolution. + + o You can output to a raw YUV420P file: + + ffmpeg -i mydivx.avi hugefile.yuv + + o You can set several input files and output files: + + ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg + + Converts the audio file a.wav and the raw YUV video file a.yuv to + MPEG file a.mpg. + + o You can also do audio and video conversions at the same time: + + ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2 + + Converts a.wav to MPEG audio at 22050 Hz sample rate. + + o You can encode to several formats at the same time and define a + mapping from input stream to output streams: + + ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2 + + Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. + '-map file:index' specifies which input stream is used for each + output stream, in the order of the definition of output streams. + + o You can transcode decrypted VOBs: + + ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi + + This is a typical DVD ripping example; the input is a VOB file, the + output an AVI file with MPEG-4 video and MP3 audio. Note that in + this command we use B-frames so the MPEG-4 stream is DivX5 + compatible, and GOP size is 300 which means one intra frame every + 10 seconds for 29.97fps input video. Furthermore, the audio stream + is MP3-encoded so you need to enable LAME support by passing + "--enable-libmp3lame" to configure. The mapping is particularly + useful for DVD transcoding to get the desired audio language. + + NOTE: To see the supported input formats, use "ffmpeg -demuxers". + + o You can extract images from a video, or create a video from many + images: + + For extracting images from a video: + + ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg + + This will extract one video frame per second from the video and + will output them in files named foo-001.jpeg, foo-002.jpeg, etc. + Images will be rescaled to fit the new WxH values. + + If you want to extract just a limited number of frames, you can use + the above command in combination with the "-frames:v" or "-t" + option, or in combination with -ss to start extracting from a + certain point in time. + + For creating a video from many images: + + ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi + + The syntax "foo-%03d.jpeg" specifies to use a decimal number + composed of three digits padded with zeroes to express the sequence + number. It is the same syntax supported by the C printf function, + but only formats accepting a normal integer are suitable. + + 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 -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi + + o You can put many streams of the same type in the output: + + ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut + + The resulting output file test12.nut will contain the first four + streams from the input files in reverse order. + + o To force CBR video output: + + ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v + + o 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 + +SYNTAX + This section documents the syntax and formats employed by the FFmpeg + libraries and tools. + + Quoting and escaping + FFmpeg adopts the following quoting and escaping mechanism, unless + explicitly specified. The following rules are applied: + + o ' 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. + + o A special character is escaped by prefixing it with a \. + + o 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. + + o 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. + + Examples + + o Escape the string "Crime d'Amour" containing the "'" special + character: + + Crime d\'Amour + + o The string above contains a quote, so the "'" needs to be escaped + when quoting it: + + 'Crime d'\''Amour' + + o Include leading or trailing whitespaces using quoting: + + ' this string starts and ends with whitespaces ' + + o Escaping and quoting can be mixed together: + + ' The string '\'string\'' is a string ' + + o To include a literal \ you can use either escaping or quoting: + + 'c:\foo' can be written as c:\\foo + + 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. + + Time duration + There are two accepted syntaxes for expressing time duration. + + [-][:]:[....] + + 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|ms|us] + + S expresses the number of seconds, with the optional decimal part m. + The optional literal suffixes s, ms or us indicate to interpret the + value as seconds, milliseconds or microseconds, respectively. + + In both expressions, the optional - indicates negative duration. + + Examples + + The following examples are all valid time duration: + + 55 55 seconds + + 0.2 0.2 seconds + + 200ms + 200 milliseconds, that's 0.2s + + 200000us + 200000 microseconds, that's 0.2s + + 12:03:45 + 12 hours, 03 minutes and 45 seconds + + 23.189 + 23.189 seconds + + 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 + + 2kdci + 2048x1080 + + 4kdci + 4096x2160 + + uhd2160 + 3840x2160 + + uhd4320 + 7680x4320 + + 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 + + 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. + + 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 + + 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 + + 7.1(top) + FL+FR+FC+LFE+BL+BR+TFL+TFR + + octagonal + FL+FR+FC+BL+BR+BC+SL+SR + + cube + FL+FR+BL+BR+TFL+TFR+TBL+TBR + + hexadecagonal + FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR + + downmix + DL+DR + + 22.2 + FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+LFE2+TSL+TSR+BFC+BFL+BFR + + A custom channel layout can be specified as a sequence of terms, + separated by '+'. Each term can be: + + o the name of a single channel (e.g. FL, FR, FC, LFE, etc.), each + optionally containing a custom name after a '@', (e.g. FL@Left, + FR@Right, FC@Center, LFE@Low_Frequency, etc.) + + A standard channel layout can be specified by the following: + + o the name of a single channel (e.g. FL, FR, FC, LFE, etc.) + + o the name of a standard channel layout (e.g. mono, stereo, 4.0, + quad, 5.0, etc.) + + o a number of channels, in decimal, followed by 'c', yielding the + default channel layout for that number of channels (see the + function "av_channel_layout_default"). Note that not all channel + counts have a default layout. + + o a number of channels, in decimal, followed by 'C', yielding an + unknown channel layout with the specified number of channels. Note + that not all channel layout specification strings support unknown + channel layouts. + + o a channel layout mask, in hexadecimal starting with "0x" (see the + "AV_CH_*" macros in libavutil/channel_layout.h. + + Before libavutil version 53 the trailing character "c" to specify a + number of channels was optional, but now it is required, while a + channel layout mask can also be specified as a decimal number (if and + only if not followed by "c" or "C"). + + See also the function "av_channel_layout_from_string" defined in + libavutil/channel_layout.h. + +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. + + atan2(x, y) + Compute principal value of the arc tangent of y/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". + + clip(x, min, max) + Return the value of x clipped between min and max. + + 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) + Load the value of the internal variable with number var, which was + previously stored with st(var, expr). The function returns the + loaded value. + + lerp(x, y, z) + Return linear interpolation between x and y by amount of z. + + 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 minimum 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. + + round(expr) + Round the value of expression expr to the nearest integer. For + example, "round(1.5)" is "2.0". + + sgn(x) + Compute sign of x. + + 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) + 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^50 + + E 10^18 / 2^60 + + Z 10^21 / 2^70 + + Y 10^24 / 2^80 + +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 nonsensical 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. + + pass1 + Use internal 2pass ratecontrol in first pass mode. + + pass2 + Use internal 2pass ratecontrol in second pass mode. + + gray + Only decode/encode grayscale. + + psnr + Set error[?] variables during encoding. + + truncated + Input bitstream might be randomly truncated. + + drop_changed + Don't output frames whose parameters differ from first decoded + frame in stream. Error AVERROR_INPUT_CHANGED is returned when + a frame is dropped. + + ildct + Use interlaced DCT. + + low_delay + Force low delay. + + global_header + Place global headers in extradata instead of every keyframe. + + bitexact + Only write platform-, build- and time-independent data. (except + (I)DCT). This ensures that file and data checksums are + reproducible and match between platforms. Its primary use is + for regression testing. + + aic Apply H263 advanced intra coding / mpeg4 ac prediction. + + ilme + Apply interlaced motion estimation. + + cgop + Use closed gop. + + output_corrupt + Output even potentially corrupted frames. + + 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 (GOP) 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. (Supported only by selected encoders, see + their respective documentation sections.) + + 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 between non-B-frames. + + Must be an integer between -1 and 16. 0 means that B-frames are + disabled. If a value of -1 is used, it will choose an automatic + value depending on the encoder. + + Default value is 0. + + b_qfactor float (encoding,video) + Set qp factor between P and B frames. + + codec_tag integer + bug flags (decoding,video) + Workaround not auto detected encoder bugs. + + Possible values: + + autodetect + xvid_ilace + Xvid interlacing bug (autodetected if fourcc==XVIX) + + ump4 + (autodetected if fourcc==UMP4) + + no_padding + padding bug (autodetected) + + amv + 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 + + strict integer (decoding/encoding,audio,video) + Specify how strictly to follow the standards. + + Possible values: + + very + strictly conform to an 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 + + ignore_err + ignore decoding errors, and continue decoding. This is useful + if you want to analyze the content of a video and thus want + everything to be decoded no matter what. This option will not + result in a video that is pleasing to watch in case of errors. + + 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 + rc_override_count integer + 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). + + 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. + + 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 + simpleauto + Automatically pick a IDCT compatible with the simple one + + arm + altivec + sh4 + simplearm + simplearmv5te + simplearmv6 + simpleneon + xvid + 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 + + favor_inter + favor predicting from the previous frame instead of the current + + bits_per_coded_sample integer + aspect rational number (encoding,video) + Set sample aspect ratio. + + sar rational number (encoding,video) + Set sample aspect ratio. Alias to aspect. + + 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) + + dct_coeff + green_metadata + display complexity metadata for the upcoming frame, GoP or for + a given duration. + + skip + startcode + er error recognition + + mmco + memory management control operations (H.264) + + bugs + buffers + picture buffer allocations + + thread_ops + threading operations + + nomc + skip motion compensation + + 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. + + (1024, INT_MAX) + full motion estimation(slowest) + + (768, 1024] + umh motion estimation + + (512, 768] + hex motion estimation + + (256, 512] + l2s diamond motion estimation + + [2,256] + var diamond motion estimation + + (-1, 2) + small diamond motion estimation + + -1 funny diamond motion estimation + + (INT_MIN, -1) + sab diamond motion estimation + + last_pred integer (encoding,video) + Set amount of motion predictors from the previous frame. + + 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. + + me_range integer (encoding,video) + Set limit motion vectors range (1023 for DivX player). + + global_quality integer (encoding,audio,video) + slice_flags 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 + + 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,subtitles) + Possible values: + + fast + Allow non spec compliant speedup tricks. + + 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. + + export_mvs + Export motion vectors into frame side-data (see + "AV_FRAME_DATA_MOTION_VECTORS") for codecs that support it. See + also doc/examples/export_mvs.c. + + skip_manual + Do not skip samples and export skip information as frame side + data. + + ass_ro_flush_noop + Do not reset ASS ReadOrder field on flush. + + icc_profiles + Generate/parse embedded ICC profiles from/to colorimetry tags. + + export_side_data flags (decoding/encoding,audio,video,subtitles) + Possible values: + + mvs Export motion vectors into frame side-data (see + "AV_FRAME_DATA_MOTION_VECTORS") for codecs that support it. See + also doc/examples/export_mvs.c. + + prft + Export encoder Producer Reference Time into packet side-data + (see "AV_PKT_DATA_PRFT") for codecs that support it. + + venc_params + Export video encoding parameters through frame side data (see + "AV_FRAME_DATA_VIDEO_ENC_PARAMS") for codecs that support it. + At present, those are H.264 and VP9. + + film_grain + Export film grain parameters through frame side data (see + "AV_FRAME_DATA_FILM_GRAIN_PARAMS"). Supported at present by + AV1 decoders. + + threads integer (decoding/encoding,video) + Set the number of threads to be used, in case the selected codec + implementation supports multi-threading. + + Possible values: + + auto, 0 + automatically select the number of threads to set + + Default value is auto. + + 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) + Set encoder codec profile. Default value is unknown. Encoder + specific profiles are documented in the relevant encoder + documentation. + + 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. + + mblmin integer (encoding,video) + Set min macroblock lagrange factor (VBR). + + mblmax integer (encoding,video) + Set max macroblock lagrange factor (VBR). + + 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. + + nointra + Discard all frames except I frames. + + all Discard all frames. + + Default value is default. + + bidir_refine integer (encoding,video) + Refine the two motion vectors used in bidirectional macroblocks. + + keyint_min integer (encoding,video) + Set minimum interval between IDR-frames. + + refs integer (encoding,video) + Set reference frames to consider for motion compensation. + + trellis integer (encoding,audio,video) + Set rate-distortion optimal quantization. + + mv0_threshold integer (encoding,video) + compression_level integer (encoding,audio,video) + 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) + Possible values: + + bt709 + BT.709 + + bt470m + BT.470 M + + bt470bg + BT.470 BG + + smpte170m + SMPTE 170 M + + smpte240m + SMPTE 240 M + + film + Film + + bt2020 + BT.2020 + + smpte428 + smpte428_1 + SMPTE ST 428-1 + + smpte431 + SMPTE 431-2 + + smpte432 + SMPTE 432-1 + + jedec-p22 + JEDEC P22 + + color_trc integer (decoding/encoding,video) + Possible values: + + bt709 + BT.709 + + gamma22 + BT.470 M + + gamma28 + BT.470 BG + + smpte170m + SMPTE 170 M + + smpte240m + SMPTE 240 M + + linear + Linear + + log + log100 + Log + + log_sqrt + log316 + Log square root + + iec61966_2_4 + iec61966-2-4 + IEC 61966-2-4 + + bt1361 + bt1361e + BT.1361 + + iec61966_2_1 + iec61966-2-1 + IEC 61966-2-1 + + bt2020_10 + bt2020_10bit + BT.2020 - 10 bit + + bt2020_12 + bt2020_12bit + BT.2020 - 12 bit + + smpte2084 + SMPTE ST 2084 + + smpte428 + smpte428_1 + SMPTE ST 428-1 + + arib-std-b67 + ARIB STD-B67 + + colorspace integer (decoding/encoding,video) + Possible values: + + rgb RGB + + bt709 + BT.709 + + fcc FCC + + bt470bg + BT.470 BG + + smpte170m + SMPTE 170 M + + smpte240m + SMPTE 240 M + + ycocg + YCOCG + + bt2020nc + bt2020_ncl + BT.2020 NCL + + bt2020c + bt2020_cl + BT.2020 CL + + smpte2085 + SMPTE 2085 + + chroma-derived-nc + Chroma-derived NCL + + chroma-derived-c + Chroma-derived CL + + ictcp + ICtCp + + color_range integer (decoding/encoding,video) + If used as input parameter, it serves as a hint to the decoder, + which color_range the input has. Possible values: + + tv + mpeg + MPEG (219*2^(n-8)) + + pc + jpeg + JPEG (2^n-1) + + chroma_sample_location integer (decoding/encoding,video) + Possible values: + + left + center + topleft + top + bottomleft + bottom + 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 which multithreading methods to use. + + Use of frame will increase decoding delay by one frame per thread, + so clients which cannot provide future frames should not use it. + + Possible values: + + slice + Decode more than one part of a single frame at once. + + Multithreading using slices works only when the video was + encoded with slices. + + frame + Decode more than one frame at once. + + Default value is 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 bool (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. + + codec_whitelist list (input) + "," separated list of allowed decoders. By default all are allowed. + + dump_separator string (input) + Separator used to separate the fields printed on the command line + about the Stream parameters. For example, to separate the fields + with newlines and indentation: + + ffprobe -dump_separator " + " -i ~/videos/matrixbench_mpeg2.mpg + + max_pixels integer (decoding/encoding,video) + Maximum number of pixels per image. This value can be used to avoid + out of memory failures due to large images. + + apply_cropping bool (decoding,video) + Enable cropping if cropping parameters are multiples of the + required alignment for the left and top parameters. If the + alignment is not met the cropping will be partially applied to + maintain alignment. Default is 1 (enabled). Note: The required + alignment depends on if "AV_CODEC_FLAG_UNALIGNED" is set and the + CPU. "AV_CODEC_FLAG_UNALIGNED" cannot be changed from the command + line. Also hardware decoders will not apply left/top Cropping. + +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 "-decoders" of the ff* tools will display the list of + enabled decoders. + +VIDEO DECODERS + A description of some of the currently available video decoders + follows. + + av1 + AOMedia Video 1 (AV1) decoder. + + Options + + operating_point + Select an operating point of a scalable AV1 bitstream (0 - 31). + Default is 0. + + rawvideo + Raw video decoder. + + This decoder decodes rawvideo streams. + + 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 + + libdav1d + dav1d AV1 decoder. + + libdav1d allows libavcodec to decode the AOMedia Video 1 (AV1) codec. + Requires the presence of the libdav1d headers and library during + configuration. You need to explicitly configure the build with + "--enable-libdav1d". + + Options + + The following options are supported by the libdav1d wrapper. + + framethreads + Set amount of frame threads to use during decoding. The default + value is 0 (autodetect). This option is deprecated for libdav1d >= + 1.0 and will be removed in the future. Use the option + "max_frame_delay" and the global option "threads" instead. + + tilethreads + Set amount of tile threads to use during decoding. The default + value is 0 (autodetect). This option is deprecated for libdav1d >= + 1.0 and will be removed in the future. Use the global option + "threads" instead. + + max_frame_delay + Set max amount of frames the decoder may buffer internally. The + default value is 0 (autodetect). + + filmgrain + Apply film grain to the decoded video if present in the bitstream. + Defaults to the internal default of the library. This option is + deprecated and will be removed in the future. See the global option + "export_side_data" to export Film Grain parameters instead of + applying it. + + oppoint + Select an operating point of a scalable AV1 bitstream (0 - 31). + Defaults to the internal default of the library. + + alllayers + Output all spatial layers of a scalable AV1 bitstream. The default + value is false. + + libdavs2 + AVS2-P2/IEEE1857.4 video decoder wrapper. + + This decoder allows libavcodec to decode AVS2 streams with davs2 + library. + + libuavs3d + AVS3-P2/IEEE1857.10 video decoder. + + libuavs3d allows libavcodec to decode AVS3 streams. Requires the + presence of the libuavs3d headers and library during configuration. + You need to explicitly configure the build with "--enable-libuavs3d". + + Options + + The following option is supported by the libuavs3d wrapper. + + frame_threads + Set amount of frame threads to use during decoding. The default + value is 0 (autodetect). + + QSV Decoders + The family of Intel QuickSync Video decoders (VC1, MPEG-2, H.264, HEVC, + JPEG/MJPEG, VP8, VP9, AV1). + + Common Options + + The following options are supported by all qsv decoders. + + async_depth + Internal parallelization depth, the higher the value the higher the + latency. + + gpu_copy + A GPU-accelerated copy between video and system memory + + default + on + off + + HEVC Options + + Extra options for hevc_qsv. + + load_plugin + A user plugin to load in an internal session + + none + hevc_sw + hevc_hw + load_plugins + A :-separate list of hexadecimal plugin UIDs to load in an internal + session + + v210 + Uncompressed 4:2:2 10-bit decoder. + + Options + + custom_stride + Set the line size of the v210 data in bytes. The default value is 0 + (autodetect). You can use the special -1 value for a strideless + v210 as seen in BOXX files. + +AUDIO DECODERS + A description of some of the currently available audio decoders + follows. + + ac3 + AC-3 audio decoder. + + This decoder implements part of ATSC A/52:2010 and ETSI TS 102 366, as + well as the undocumented RealAudio 3 (a.k.a. dnet). + + AC-3 Decoder Options + + -drc_scale value + Dynamic Range Scale Factor. The factor to apply to dynamic range + values from the AC-3 stream. This factor is applied exponentially. + The default value is 1. There are 3 notable scale factor ranges: + + drc_scale == 0 + DRC disabled. Produces full range audio. + + 0 < drc_scale <= 1 + DRC enabled. Applies a fraction of the stream DRC value. + Audio reproduction is between full range and full compression. + + drc_scale > 1 + DRC enabled. Applies drc_scale asymmetrically. Loud sounds are + fully compressed. Soft sounds are enhanced. + + flac + FLAC audio decoder. + + This decoder aims to implement the complete FLAC specification from + Xiph. + + FLAC Decoder options + + -use_buggy_lpc + The lavc FLAC encoder used to produce buggy streams with high lpc + values (like the default value). This option makes it possible to + decode such streams correctly by using lavc's old buggy lpc logic + for decoding. + + ffwavesynth + Internal wave synthesizer. + + 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. + + 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". + + 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. + + 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". + + 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). + + 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. + + 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. + + 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". + + An FFmpeg native decoder for Opus exists, so users can decode Opus + without this library. + +SUBTITLES DECODERS + libaribb24 + ARIB STD-B24 caption decoder. + + Implements profiles A and C of the ARIB STD-B24 standard. + + libaribb24 Decoder Options + + -aribb24-base-path path + Sets the base path for the libaribb24 library. This is utilized for + reading of configuration files (for custom unicode conversions), + and for dumping of non-text symbols as images under that location. + + Unset by default. + + -aribb24-skip-ruby-text boolean + Tells the decoder wrapper to skip text blocks that contain half- + height ruby text. + + Enabled by default. + + dvbsub + Options + + compute_clut + -2 Compute clut once if no matching CLUT is in the stream. + + -1 Compute clut if no matching CLUT is in the stream. + + 0 Never compute CLUT + + 1 Always compute CLUT and override the one provided in the + stream. + + dvb_substream + Selects the dvb substream, or all substreams if -1 which is + default. + + 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. + + 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 commas, for + example "0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, + 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, + 7c127b". + + ifo_palette + Specify the IFO file from which the global palette is obtained. + (experimental) + + forced_subs_only + Only decode subtitle entries marked as forced. Some titles have + forced and non-forced subtitles in the same track. Setting this + flag to 1 will only keep the forced subtitles. Default value is 0. + + 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". + + Options + + txt_page + List of teletext page numbers to decode. Pages that do not match + the specified list are dropped. You may use the special "*" string + to match all pages, or "subtitle" to match all subtitle pages. + Default value is *. + + txt_default_region + Set default character set used for decoding, a value between 0 and + 87 (see ETS 300 706, Section 15, Table 32). Default value is -1, + which does not override the libzvbi default. This option is needed + for some legacy level 1.0 transmissions which cannot signal the + proper charset. + + txt_chop_top + Discards the top teletext line. Default value is 1. + + txt_format + Specifies the format of the decoded subtitles. + + bitmap + The default format, you should use this for teletext pages, + because certain graphics and colors cannot be expressed in + simple text or even ASS. + + text + Simple text based output without formatting. + + ass Formatted ASS output, subtitle pages and teletext pages are + returned in different styles, subtitle pages are stripped down + to text, but an effort is made to keep the text alignment and + the formatting. + + 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 characters. Default value is 1. + + txt_duration + Sets the display duration of the decoded teletext pages or + subtitles in milliseconds. Default value is -1 which means infinity + or until the next subtitle event comes. + + txt_transparent + Force transparent background of the generated teletext bitmaps. + Default value is 0 which means an opaque background. + + txt_opacity + Sets the opacity (0-255) of the teletext background. If + txt_transparent is not set, it only affects characters between a + start box and an end box, typically subtitles. Default value is 0 + if txt_transparent is set, 255 otherwise. + +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 "-encoders" of the ff* tools will display the list of + enabled encoders. + +AUDIO ENCODERS + A description of some of the currently available audio encoders + follows. + + aac + Advanced Audio Coding (AAC) encoder. + + This encoder is the default AAC encoder, natively implemented into + FFmpeg. + + Options + + b Set bit rate in bits/s. Setting this automatically activates + constant bit rate (CBR) mode. If this option is unspecified it is + set to 128kbps. + + 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. + + cutoff + Set cutoff frequency. If unspecified will allow the encoder to + dynamically adjust the cutoff to improve clarity on low bitrates. + + aac_coder + Set AAC encoder coding method. Possible values: + + twoloop + Two loop searching (TLS) method. This is the default 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. Will tune itself based on + whether aac_is, aac_ms and aac_pns are enabled. + + anmr + Average noise to mask ratio (ANMR) trellis-based solution. + + This is an experimental coder which currently produces a lower + quality, is more unstable and is slower than the default + twoloop coder but has potential. Currently has no support for + the aac_is or aac_pns options. Not currently recommended. + + fast + Constant quantizer method. + + Uses a cheaper version of twoloop algorithm that doesn't try to + do as many clever adjustments. Worse with low bitrates (less + than 64kbps), but is better and much faster at higher bitrates. + + aac_ms + Sets mid/side coding mode. The default value of "auto" will + automatically use M/S with bands which will benefit from such + coding. Can be forced for all bands using the value "enable", which + is mainly useful for debugging or disabled using "disable". + + aac_is + Sets intensity stereo coding tool usage. By default, it's enabled + and will automatically toggle IS for similar pairs of stereo bands + if it's beneficial. Can be disabled for debugging by setting the + value to "disable". + + aac_pns + Uses perceptual noise substitution to replace low entropy high + frequency bands with imperceptible white noise during the decoding + process. By default, it's enabled, but can be disabled for + debugging purposes by using "disable". + + aac_tns + Enables the use of a multitap FIR filter which spans through the + high frequency bands to hide quantization noise during the encoding + process and is reverted by the decoder. As well as decreasing + unpleasant artifacts in the high range this also reduces the + entropy in the high bands and allows for more bits to be used by + the mid-low bands. By default it's enabled but can be disabled for + debugging by setting the option to "disable". + + aac_ltp + Enables the use of the long term prediction extension which + increases coding efficiency in very low bandwidth situations such + as encoding of voice or solo piano music by extending constant + harmonic peaks in bands throughout frames. This option is implied + by profile:a aac_low and is incompatible with aac_pred. Use in + conjunction with -ar to decrease the samplerate. + + aac_pred + Enables the use of a more traditional style of prediction where the + spectral coefficients transmitted are replaced by the difference of + the current coefficients minus the previous "predicted" + coefficients. In theory and sometimes in practice this can improve + quality for low to mid bitrate audio. This option implies the + aac_main profile and is incompatible with aac_ltp. + + profile + Sets the encoding profile, possible values: + + aac_low + The default, AAC "Low-complexity" profile. Is the most + compatible and produces decent quality. + + mpeg2_aac_low + Equivalent to "-profile:a aac_low -aac_pns 0". PNS was + introduced with the MPEG4 specifications. + + aac_ltp + Long term prediction profile, is enabled by and will enable the + aac_ltp option. Introduced in MPEG4. + + aac_main + Main-type prediction profile, is enabled by and will enable the + aac_pred option. Introduced in MPEG2. + + If this option is unspecified it is set to aac_low. + + 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 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. + + 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. + + *<> + *<> + *<> + *<> + + 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. + + 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) + + 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 + + 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) + + 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. + + 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) + + 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 + + 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. + + cutoff frequency + Set lowpass cutoff frequency. If unspecified, the encoder selects a + default determined by various other encoding parameters. + + 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) + + flac + FLAC (Free Lossless Audio Codec) Encoder + + Options + + The following options are supported by FFmpeg's flac encoder. + + compression_level + Sets the compression level, which chooses defaults for many other + options if they are not set explicitly. Valid values are from 0 to + 12, 5 is the default. + + frame_size + Sets the size of the frames in samples per channel. + + lpc_coeff_precision + Sets the LPC coefficient precision, valid values are from 1 to 15, + 15 is the default. + + lpc_type + Sets the first stage LPC algorithm + + none + LPC is not used + + fixed + fixed LPC coefficients + + levinson + cholesky + lpc_passes + Number of passes to use for Cholesky factorization during LPC + analysis + + min_partition_order + The minimum partition order + + max_partition_order + The maximum partition order + + prediction_order_method + estimation + 2level + 4level + 8level + search + Bruteforce search + + log + ch_mode + Channel mode + + auto + The mode is chosen automatically for each frame + + indep + Channels are independently coded + + left_side + right_side + mid_side + exact_rice_parameters + Chooses if rice parameters are calculated exactly or approximately. + if set to 1 then they are chosen exactly, which slows the code down + slightly and improves compression slightly. + + multi_dim_quant + Multi Dimensional Quantization. If set to 1 then a 2nd stage LPC + algorithm is applied after the first stage to finetune the + coefficients. This is quite slow and slightly improves compression. + + opus + Opus encoder. + + This is a native FFmpeg encoder for the Opus format. Currently its in + development and only implements the CELT part of the codec. Its quality + is usually worse and at best is equal to the libopus encoder. + + Options + + b Set bit rate in bits/s. If unspecified it uses the number of + channels and the layout to make a good guess. + + opus_delay + Sets the maximum delay in milliseconds. Lower delays than 20ms will + very quickly decrease quality. + + libfdk_aac + libfdk-aac AAC (Advanced Audio Coding) encoder wrapper. + + The libfdk-aac library is based on the Fraunhofer FDK AAC code from the + Android project. + + Requires the presence of the libfdk-aac headers and library during + configuration. You need to explicitly configure the build with + "--enable-libfdk-aac". The library is also incompatible with GPL, so if + you allow the use of GPL, you should configure with "--enable-gpl + --enable-nonfree --enable-libfdk-aac". + + This encoder has support for the AAC-HE profiles. + + VBR encoding, enabled through the vbr or flags +qscale options, is + experimental and only works with some combinations of parameters. + + Support for encoding 7.1 audio is only available with libfdk-aac 0.1.3 + or higher. + + For more information see the fdk-aac project at + . + + Options + + The following options are mapped on the shared FFmpeg codec options. + + b Set bit rate in bits/s. If the bitrate is not explicitly specified, + it is automatically set to a suitable value depending on the + selected profile. + + In case VBR mode is enabled the option is ignored. + + ar Set audio sampling rate (in Hz). + + channels + Set the number of audio channels. + + flags +qscale + Enable fixed quality, VBR (Variable Bit Rate) mode. Note that VBR + is implicitly enabled when the vbr value is positive. + + cutoff + Set cutoff frequency. If not specified (or explicitly set to 0) it + will use a value automatically computed by the library. Default + value is 0. + + profile + Set audio profile. + + The following profiles are recognized: + + aac_low + Low Complexity AAC (LC) + + aac_he + High Efficiency AAC (HE-AAC) + + aac_he_v2 + High Efficiency AAC version 2 (HE-AACv2) + + aac_ld + Low Delay AAC (LD) + + aac_eld + Enhanced Low Delay AAC (ELD) + + If not specified it is set to aac_low. + + The following are private options of the libfdk_aac encoder. + + afterburner + Enable afterburner feature if set to 1, disabled if set to 0. This + improves the quality but also the required processing power. + + Default value is 1. + + eld_sbr + Enable SBR (Spectral Band Replication) for ELD if set to 1, + disabled if set to 0. + + Default value is 0. + + eld_v2 + Enable ELDv2 (LD-MPS extension for ELD stereo signals) for ELDv2 if + set to 1, disabled if set to 0. + + Note that option is available when fdk-aac version + (AACENCODER_LIB_VL0.AACENCODER_LIB_VL1.AACENCODER_LIB_VL2) > + (4.0.0). + + Default value is 0. + + signaling + Set SBR/PS signaling style. + + It can assume one of the following values: + + default + choose signaling implicitly (explicit hierarchical by default, + implicit if global header is disabled) + + implicit + implicit backwards compatible signaling + + explicit_sbr + explicit SBR, implicit PS signaling + + explicit_hierarchical + explicit hierarchical signaling + + Default value is default. + + latm + Output LATM/LOAS encapsulated data if set to 1, disabled if set to + 0. + + Default value is 0. + + header_period + Set StreamMuxConfig and PCE repetition period (in frames) for + sending in-band configuration buffers within LATM/LOAS transport + layer. + + Must be a 16-bits non-negative integer. + + Default value is 0. + + vbr Set VBR mode, from 1 to 5. 1 is lowest quality (though still pretty + good) and 5 is highest quality. A value of 0 will disable VBR, and + CBR (Constant Bit Rate) is enabled. + + Currently only the aac_low profile supports VBR encoding. + + VBR modes 1-5 correspond to roughly the following average bit + rates: + + 1 32 kbps/channel + + 2 40 kbps/channel + + 3 48-56 kbps/channel + + 4 64 kbps/channel + + 5 about 80-96 kbps/channel + + Default value is 0. + + Examples + + o Use ffmpeg to convert an audio file to VBR AAC in an M4A (MP4) + container: + + ffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a + + o Use ffmpeg to convert an audio file to CBR 64k kbps AAC, using the + High-Efficiency AAC profile: + + ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a + + 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. + + 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 or ABR. 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. + + cutoff (--lowpass) + Set lowpass cutoff frequency. If unspecified, the encoder + dynamically adjusts the cutoff. + + reservoir + Enable use of bit reservoir when set to 1. Default value is 1. LAME + has this enabled by default, but can be overridden by use --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. + + abr (--abr) + Enable the encoder to use ABR when set to 1. The lame --abr sets + the target bitrate, while this options only tells FFmpeg to use ABR + still relies on b to set bitrate. + + 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. + + 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). + + 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". + + Option Mapping + + Most libopus options are modelled 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 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. + + fec (n/a) + Enable inband forward error correction. packet_loss must be non- + zero to take advantage - frequency of FEC 'side-data' is + proportional to expected packet loss. Default is disabled. + + 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). + + mapping_family (mapping_family) + Set channel mapping family to be used by the encoder. The default + value of -1 uses mapping family 0 for mono and stereo inputs, and + mapping family 1 otherwise. The default also disables the surround + masking and LFE bandwidth optimzations in libopus, and requires + that the input contains 8 channels or fewer. + + Other values include 0 for mono and stereo, 1 for surround sound + with masking and LFE bandwidth optimizations, and 255 for + independent streams with an unspecified channel layout. + + apply_phase_inv (N.A.) (requires libopus >= 1.2) + If set to 0, disables the use of phase inversion for intensity + stereo, improving the quality of mono downmixes, but slightly + reducing normal stereo quality. The default is 1 (phase inversion + enabled). + + 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 + . We only support the + updated fork by the Savonet/Liquidsoap project at + . + + Requires the presence of the libshine headers and library during + configuration. You need to explicitly configure the build with + "--enable-libshine". + + See also libmp3lame. + + 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. + + 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". + + 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. twolame b 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). + + 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. + + 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). + + 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". + + 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 + , , 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. + + mjpeg + Motion JPEG encoder. + + Options + + huffman + Set the huffman encoding strategy. Possible values: + + default + Use the default huffman tables. This is the default strategy. + + optimal + Compute and use optimal huffman tables. + + wavpack + WavPack lossless audio encoder. + + Options + + The equivalent options for wavpack command line utility are listed in + parentheses. + + Shared options + + The following shared options are effective for this encoder. Only + special notes about this particular encoder will be documented here. + For the general meaning of the options, see the Codec Options chapter. + + frame_size (--blocksize) + For this encoder, the range for this option is between 128 and + 131072. Default is automatically decided based on sample rate and + number of channel. + + For the complete formula of calculating default, see + libavcodec/wavpackenc.c. + + compression_level (-f, -h, -hh, and -x) + + Private options + + joint_stereo (-j) + Set whether to enable joint stereo. Valid values are: + + on (1) + Force mid/side audio encoding. + + off (0) + Force left/right audio encoding. + + auto + Let the encoder decide automatically. + + optimize_mono + Set whether to enable optimization for mono. This option is only + effective for non-mono streams. Available values: + + on enabled + + off disabled + +VIDEO ENCODERS + A description of some of the currently available video encoders + follows. + + a64_multi, a64_multi5 + A64 / Commodore 64 multicolor charset encoder. "a64_multi5" is extended + with 5th color (colram). + + Cinepak + Cinepak aka CVID encoder. Compatible with Windows 3.1 and vintage + MacOS. + + Options + + g integer + Keyframe interval. A keyframe is inserted at least every "-g" + frames, sometimes sooner. + + q:v integer + Quality factor. Lower is better. Higher gives lower bitrate. The + following table lists bitrates when encoding akiyo_cif.y4m for + various values of "-q:v" with "-g 100": + + "-q:v 1" 1918 kb/s + "-q:v 2" 1735 kb/s + "-q:v 4" 1500 kb/s + "-q:v 10" 1041 kb/s + "-q:v 20" 826 kb/s + "-q:v 40" 553 kb/s + "-q:v 100" 394 kb/s + "-q:v 200" 312 kb/s + "-q:v 400" 266 kb/s + "-q:v 1000" 237 kb/s + max_extra_cb_iterations integer + Max extra codebook recalculation passes, more is better and slower. + + skip_empty_cb boolean + Avoid wasting bytes, ignore vintage MacOS decoder. + + max_strips integer + min_strips integer + The minimum and maximum number of strips to use. Wider range + sometimes improves quality. More strips is generally better + quality but costs more bits. Fewer strips tend to yield more + keyframes. Vintage compatible is 1..3. + + strip_number_adaptivity integer + How much number of strips is allowed to change between frames. + Higher is better but slower. + + GIF + GIF image/animation encoder. + + Options + + gifflags integer + Sets the flags used for GIF encoding. + + offsetting + Enables picture offsetting. + + Default is enabled. + + transdiff + Enables transparency detection between frames. + + Default is enabled. + + gifimage integer + Enables encoding one full GIF image per frame, rather than an + animated GIF. + + Default value is 0. + + global_palette integer + Writes a palette to the global GIF header where feasible. + + If disabled, every frame will always have a palette written, even + if there is a global palette supplied. + + Default value is 1. + + Hap + Vidvox Hap video encoder. + + Options + + format integer + Specifies the Hap format to encode. + + hap + hap_alpha + hap_q + + Default value is hap. + + chunks integer + Specifies the number of chunks to split frames into, between 1 and + 64. This permits multithreaded decoding of large frames, + potentially at the cost of data-rate. The encoder may modify this + value to divide frames evenly. + + Default value is 1. + + compressor integer + Specifies the second-stage compressor to use. If set to none, + chunks will be limited to 1, as chunked uncompressed frames offer + no benefit. + + none + snappy + + Default value is snappy. + + jpeg2000 + The native jpeg 2000 encoder is lossy by default, the "-q:v" option can + be used to set the encoding quality. Lossless encoding can be selected + with "-pred 1". + + Options + + format integer + Can be set to either "j2k" or "jp2" (the default) that makes it + possible to store non-rgb pix_fmts. + + tile_width integer + Sets tile width. Range is 1 to 1073741824. Default is 256. + + tile_height integer + Sets tile height. Range is 1 to 1073741824. Default is 256. + + pred integer + Allows setting the discrete wavelet transform (DWT) type + + dwt97int (Lossy) + dwt53 (Lossless) + + Default is "dwt97int" + + sop boolean + Enable this to add SOP marker at the start of each packet. Disabled + by default. + + eph boolean + Enable this to add EPH marker at the end of each packet header. + Disabled by default. + + prog integer + Sets the progression order to be used by the encoder. Possible + values are: + + lrcp + rlcp + rpcl + pcrl + cprl + + Set to "lrcp" by default. + + layer_rates string + By default, when this option is not used, compression is done using + the quality metric. This option allows for compression using + compression ratio. The compression ratio for each level could be + specified. The compression ratio of a layer "l" species the what + ratio of total file size is contained in the first "l" layers. + + Example usage: + + ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k + + This would compress the image to contain 3 layers, where the data + contained in the first layer would be compressed by 1000 times, + compressed by 100 in the first two layers, and shall contain all + data while using all 3 layers. + + librav1e + rav1e AV1 encoder wrapper. + + Requires the presence of the rav1e headers and library during + configuration. You need to explicitly configure the build with + "--enable-librav1e". + + Options + + qmax + Sets the maximum quantizer to use when using bitrate mode. + + qmin + Sets the minimum quantizer to use when using bitrate mode. + + qp Uses quantizer mode to encode at the given quantizer (0-255). + + speed + Selects the speed preset (0-10) to encode with. + + tiles + Selects how many tiles to encode with. + + tile-rows + Selects how many rows of tiles to encode with. + + tile-columns + Selects how many columns of tiles to encode with. + + rav1e-params + Set rav1e options using a list of key=value pairs separated by ":". + See rav1e --help for a list of options. + + For example to specify librav1e encoding options with + -rav1e-params: + + ffmpeg -i input -c:v librav1e -b:v 500K -rav1e-params speed=5:low_latency=true output.mp4 + + libaom-av1 + libaom AV1 encoder wrapper. + + Requires the presence of the libaom headers and library during + configuration. You need to explicitly configure the build with + "--enable-libaom". + + Options + + The wrapper supports the following standard libavcodec options: + + b Set bitrate target in bits/second. By default this will use + variable-bitrate mode. If maxrate and minrate are also set to the + same value then it will use constant-bitrate mode, otherwise if crf + is set as well then it will use constrained-quality mode. + + g keyint_min + Set key frame placement. The GOP size sets the maximum distance + between key frames; if zero the output stream will be intra-only. + The minimum distance is ignored unless it is the same as the GOP + size, in which case key frames will always appear at a fixed + interval. Not set by default, so without this option the library + has completely free choice about where to place key frames. + + qmin qmax + Set minimum/maximum quantisation values. Valid range is from 0 to + 63 (warning: this does not match the quantiser values actually used + by AV1 - divide by four to map real quantiser values to this + range). Defaults to min/max (no constraint). + + minrate maxrate bufsize rc_init_occupancy + Set rate control buffering parameters. Not used if not set - + defaults to unconstrained variable bitrate. + + threads + Set the number of threads to use while encoding. This may require + the tiles or row-mt options to also be set to actually use the + specified number of threads fully. Defaults to the number of + hardware threads supported by the host machine. + + profile + Set the encoding profile. Defaults to using the profile which + matches the bit depth and chroma subsampling of the input. + + The wrapper also has some specific options: + + cpu-used + Set the quality/encoding speed tradeoff. Valid range is from 0 to + 8, higher numbers indicating greater speed and lower quality. The + default value is 1, which will be slow and high quality. + + auto-alt-ref + Enable use of alternate reference frames. Defaults to the internal + default of the library. + + arnr-max-frames (frames) + Set altref noise reduction max frame count. Default is -1. + + arnr-strength (strength) + Set altref noise reduction filter strength. Range is -1 to 6. + Default is -1. + + aq-mode (aq-mode) + Set adaptive quantization mode. Possible values: + + none (0) + Disabled. + + variance (1) + Variance-based. + + complexity (2) + Complexity-based. + + cyclic (3) + Cyclic refresh. + + tune (tune) + Set the distortion metric the encoder is tuned with. Default is + "psnr". + + psnr (0) + ssim (1) + lag-in-frames + Set the maximum number of frames which the encoder may keep in + flight at any one time for lookahead purposes. Defaults to the + internal default of the library. + + error-resilience + Enable error resilience features: + + default + Improve resilience against losses of whole frames. + + Not enabled by default. + + crf Set the quality/size tradeoff for constant-quality (no bitrate + target) and constrained-quality (with maximum bitrate target) + modes. Valid range is 0 to 63, higher numbers indicating lower + quality and smaller output size. Only used if set; by default only + the bitrate target is used. + + static-thresh + Set a change threshold on blocks below which they will be skipped + by the encoder. Defined in arbitrary units as a nonnegative + integer, defaulting to zero (no blocks are skipped). + + drop-threshold + Set a threshold for dropping frames when close to rate control + bounds. Defined as a percentage of the target buffer - when the + rate control buffer falls below this percentage, frames will be + dropped until it has refilled above the threshold. Defaults to + zero (no frames are dropped). + + denoise-noise-level (level) + Amount of noise to be removed for grain synthesis. Grain synthesis + is disabled if this option is not set or set to 0. + + denoise-block-size (pixels) + Block size used for denoising for grain synthesis. If not set, AV1 + codec uses the default value of 32. + + undershoot-pct (pct) + Set datarate undershoot (min) percentage of the target bitrate. + Range is -1 to 100. Default is -1. + + overshoot-pct (pct) + Set datarate overshoot (max) percentage of the target bitrate. + Range is -1 to 1000. Default is -1. + + minsection-pct (pct) + Minimum percentage variation of the GOP bitrate from the target + bitrate. If minsection-pct is not set, the libaomenc wrapper + computes it as follows: "(minrate * 100 / bitrate)". Range is -1 + to 100. Default is -1 (unset). + + maxsection-pct (pct) + Maximum percentage variation of the GOP bitrate from the target + bitrate. If maxsection-pct is not set, the libaomenc wrapper + computes it as follows: "(maxrate * 100 / bitrate)". Range is -1 + to 5000. Default is -1 (unset). + + frame-parallel (boolean) + Enable frame parallel decodability features. Default is true. + + tiles + Set the number of tiles to encode the input video with, as columns + x rows. Larger numbers allow greater parallelism in both encoding + and decoding, but may decrease coding efficiency. Defaults to the + minimum number of tiles required by the size of the input video + (this is 1x1 (that is, a single tile) for sizes up to and including + 4K). + + tile-columns tile-rows + Set the number of tiles as log2 of the number of tile rows and + columns. Provided for compatibility with libvpx/VP9. + + row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2) + Enable row based multi-threading. Disabled by default. + + enable-cdef (boolean) + Enable Constrained Directional Enhancement Filter. The libaom-av1 + encoder enables CDEF by default. + + enable-restoration (boolean) + Enable Loop Restoration Filter. Default is true for libaom-av1. + + enable-global-motion (boolean) + Enable the use of global motion for block prediction. Default is + true. + + enable-intrabc (boolean) + Enable block copy mode for intra block prediction. This mode is + useful for screen content. Default is true. + + enable-rect-partitions (boolean) (Requires libaom >= v2.0.0) + Enable rectangular partitions. Default is true. + + enable-1to4-partitions (boolean) (Requires libaom >= v2.0.0) + Enable 1:4/4:1 partitions. Default is true. + + enable-ab-partitions (boolean) (Requires libaom >= v2.0.0) + Enable AB shape partitions. Default is true. + + enable-angle-delta (boolean) (Requires libaom >= v2.0.0) + Enable angle delta intra prediction. Default is true. + + enable-cfl-intra (boolean) (Requires libaom >= v2.0.0) + Enable chroma predicted from luma intra prediction. Default is + true. + + enable-filter-intra (boolean) (Requires libaom >= v2.0.0) + Enable filter intra predictor. Default is true. + + enable-intra-edge-filter (boolean) (Requires libaom >= v2.0.0) + Enable intra edge filter. Default is true. + + enable-smooth-intra (boolean) (Requires libaom >= v2.0.0) + Enable smooth intra prediction mode. Default is true. + + enable-paeth-intra (boolean) (Requires libaom >= v2.0.0) + Enable paeth predictor in intra prediction. Default is true. + + enable-palette (boolean) (Requires libaom >= v2.0.0) + Enable palette prediction mode. Default is true. + + enable-flip-idtx (boolean) (Requires libaom >= v2.0.0) + Enable extended transform type, including FLIPADST_DCT, + DCT_FLIPADST, FLIPADST_FLIPADST, ADST_FLIPADST, FLIPADST_ADST, + IDTX, V_DCT, H_DCT, V_ADST, H_ADST, V_FLIPADST, H_FLIPADST. Default + is true. + + enable-tx64 (boolean) (Requires libaom >= v2.0.0) + Enable 64-pt transform. Default is true. + + reduced-tx-type-set (boolean) (Requires libaom >= v2.0.0) + Use reduced set of transform types. Default is false. + + use-intra-dct-only (boolean) (Requires libaom >= v2.0.0) + Use DCT only for INTRA modes. Default is false. + + use-inter-dct-only (boolean) (Requires libaom >= v2.0.0) + Use DCT only for INTER modes. Default is false. + + use-intra-default-tx-only (boolean) (Requires libaom >= v2.0.0) + Use Default-transform only for INTRA modes. Default is false. + + enable-ref-frame-mvs (boolean) (Requires libaom >= v2.0.0) + Enable temporal mv prediction. Default is true. + + enable-reduced-reference-set (boolean) (Requires libaom >= v2.0.0) + Use reduced set of single and compound references. Default is + false. + + enable-obmc (boolean) (Requires libaom >= v2.0.0) + Enable obmc. Default is true. + + enable-dual-filter (boolean) (Requires libaom >= v2.0.0) + Enable dual filter. Default is true. + + enable-diff-wtd-comp (boolean) (Requires libaom >= v2.0.0) + Enable difference-weighted compound. Default is true. + + enable-dist-wtd-comp (boolean) (Requires libaom >= v2.0.0) + Enable distance-weighted compound. Default is true. + + enable-onesided-comp (boolean) (Requires libaom >= v2.0.0) + Enable one sided compound. Default is true. + + enable-interinter-wedge (boolean) (Requires libaom >= v2.0.0) + Enable interinter wedge compound. Default is true. + + enable-interintra-wedge (boolean) (Requires libaom >= v2.0.0) + Enable interintra wedge compound. Default is true. + + enable-masked-comp (boolean) (Requires libaom >= v2.0.0) + Enable masked compound. Default is true. + + enable-interintra-comp (boolean) (Requires libaom >= v2.0.0) + Enable interintra compound. Default is true. + + enable-smooth-interintra (boolean) (Requires libaom >= v2.0.0) + Enable smooth interintra mode. Default is true. + + aom-params + Set libaom options using a list of key=value pairs separated by + ":". For a list of supported options, see aomenc --help under the + section "AV1 Specific Options". + + For example to specify libaom encoding options with -aom-params: + + ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4 + + libsvtav1 + SVT-AV1 encoder wrapper. + + Requires the presence of the SVT-AV1 headers and library during + configuration. You need to explicitly configure the build with + "--enable-libsvtav1". + + Options + + profile + Set the encoding profile. + + main + high + professional + level + Set the operating point level. For example: '4.0' + + hielevel + Set the Hierarchical prediction levels. + + 3level + 4level + This is the default. + + tier + Set the operating point tier. + + main + This is the default. + + high + qmax + Set the maximum quantizer to use when using a bitrate mode. + + qmin + Set the minimum quantizer to use when using a bitrate mode. + + crf Constant rate factor value used in crf rate control mode (0-63). + + qp Set the quantizer used in cqp rate control mode (0-63). + + sc_detection + Enable scene change detection. + + la_depth + Set number of frames to look ahead (0-120). + + preset + Set the quality-speed tradeoff, in the range 0 to 13. Higher + values are faster but lower quality. + + tile_rows + Set log2 of the number of rows of tiles to use (0-6). + + tile_columns + Set log2 of the number of columns of tiles to use (0-4). + + svtav1-params + Set SVT-AV1 options using a list of key=value pairs separated by + ":". See the SVT-AV1 encoder user guide for a list of accepted + parameters. + + libjxl + libjxl JPEG XL encoder wrapper. + + Requires the presence of the libjxl headers and library during + configuration. You need to explicitly configure the build with + "--enable-libjxl". + + Options + + The libjxl wrapper supports the following options: + + distance + Set the target Butteraugli distance. This is a quality setting: + lower distance yields higher quality, with distance=1.0 roughly + comparable to libjpeg Quality 90 for photographic content. Setting + distance=0.0 yields true lossless encoding. Valid values range + between 0.0 and 15.0, and sane values rarely exceed 5.0. Setting + distance=0.1 usually attains transparency for most input. The + default is 1.0. + + effort + Set the encoding effort used. Higher effort values produce more + consistent quality and usually produces a better quality/bpp curve, + at the cost of more CPU time required. Valid values range from 1 to + 9, and the default is 7. + + modular + Force the encoder to use Modular mode instead of choosing + automatically. The default is to use VarDCT for lossy encoding and + Modular for lossless. VarDCT is generally superior to Modular for + lossy encoding but does not support lossless encoding. + + libkvazaar + Kvazaar H.265/HEVC encoder. + + Requires the presence of the libkvazaar headers and library during + configuration. You need to explicitly configure the build with + --enable-libkvazaar. + + Options + + b Set target video bitrate in bit/s and enable rate control. + + kvazaar-params + Set kvazaar parameters as a list of name=value pairs separated by + commas (,). See kvazaar documentation for a list of options. + + libopenh264 + Cisco libopenh264 H.264/MPEG-4 AVC encoder wrapper. + + This encoder requires the presence of the libopenh264 headers and + library during configuration. You need to explicitly configure the + build with "--enable-libopenh264". The library is detected using pkg- + config. + + For more information about the library see . + + Options + + The following FFmpeg global options affect the configurations of the + libopenh264 encoder. + + b Set the bitrate (as a number of bits per second). + + g Set the GOP size. + + maxrate + Set the max bitrate (as a number of bits per second). + + flags +global_header + Set global header in the bitstream. + + slices + Set the number of slices, used in parallelized encoding. Default + value is 0. This is only used when slice_mode is set to fixed. + + loopfilter + Enable loop filter, if set to 1 (automatically enabled). To disable + set a value of 0. + + profile + Set profile restrictions. If set to the value of main enable CABAC + (set the "SEncParamExt.iEntropyCodingModeFlag" flag to 1). + + max_nal_size + Set maximum NAL size in bytes. + + allow_skip_frames + Allow skipping frames to hit the target bitrate if set to 1. + + libtheora + libtheora Theora encoder wrapper. + + Requires the presence of the libtheora headers and library during + configuration. You need to explicitly configure the build with + "--enable-libtheora". + + For more information about the libtheora project see + . + + 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 in bit/s for CBR (Constant Bit Rate) mode. + In case VBR (Variable Bit Rate) mode is enabled this option is + ignored. + + flags + Used to enable constant quality mode (VBR) encoding through the + qscale flag, and to enable the "pass1" and "pass2" modes. + + g Set the GOP size. + + global_quality + Set the global quality as an integer in lambda units. + + Only relevant when VBR mode is enabled with "flags +qscale". The + value is converted to QP units by dividing it by "FF_QP2LAMBDA", + clipped in the [0 - 10] range, and then multiplied by 6.3 to get a + value in the native libtheora range [0-63]. A higher value + corresponds to a higher quality. + + q Enable VBR mode when set to a non-negative value, and set constant + quality value as a double floating point value in QP units. + + The value is clipped in the [0-10] range, and then multiplied by + 6.3 to get a value in the native libtheora range [0-63]. + + This option is valid only using the ffmpeg command-line tool. For + library interface users, use global_quality. + + Examples + + o Set maximum constant quality (VBR) encoding with ffmpeg: + + ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg + + o Use ffmpeg to convert a CBR 1000 kbps Theora video stream: + + ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg + + libvpx + VP8/VP9 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". + + Options + + The following options are supported by the libvpx wrapper. The + vpxenc-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 more documentation of the libvpx options, invoke the command + ffmpeg -h encoder=libvpx, ffmpeg -h encoder=libvpx-vp9 or vpxenc + --help. Further information is available in the libvpx API + documentation. + + b (target-bitrate) + Set bitrate in bits/s. Note that FFmpeg's b option is expressed in + bits/s, while vpxenc's target-bitrate is in kilobits/s. + + g (kf-max-dist) + keyint_min (kf-min-dist) + qmin (min-q) + Minimum (Best Quality) Quantizer. + + qmax (max-q) + Maximum (Worst Quality) Quantizer. Can be changed per-frame. + + bufsize (buf-sz, buf-optimal-sz) + Set ratecontrol buffer size (in bits). Note vpxenc's options are + specified in milliseconds, the libvpx wrapper converts this value + as follows: "buf-sz = bufsize * 1000 / bitrate", "buf-optimal-sz = + bufsize * 1000 / bitrate * 5 / 6". + + rc_init_occupancy (buf-initial-sz) + Set number of bits which should be loaded into the rc buffer before + decoding starts. Note vpxenc's option is specified in milliseconds, + the libvpx wrapper converts this value as follows: + "rc_init_occupancy * 1000 / bitrate". + + undershoot-pct + Set datarate undershoot (min) percentage of the target bitrate. + + overshoot-pct + Set datarate overshoot (max) percentage of the target bitrate. + + skip_threshold (drop-frame) + qcomp (bias-pct) + maxrate (maxsection-pct) + Set GOP max bitrate in bits/s. Note vpxenc's option is specified as + a percentage of the target bitrate, the libvpx wrapper converts + this value as follows: "(maxrate * 100 / bitrate)". + + minrate (minsection-pct) + Set GOP min bitrate in bits/s. Note vpxenc's option is specified as + a percentage of the target bitrate, the libvpx wrapper converts + this value as follows: "(minrate * 100 / bitrate)". + + minrate, maxrate, b end-usage=cbr + "(minrate == maxrate == bitrate)". + + crf (end-usage=cq, cq-level) + tune (tune) + psnr (psnr) + ssim (ssim) + quality, deadline (deadline) + best + Use best quality deadline. Poorly named and quite slow, this + option should be avoided as it may give worse quality output + than good. + + good + Use good quality deadline. This is a good trade-off between + speed and quality when used with the cpu-used option. + + realtime + Use realtime quality deadline. + + speed, cpu-used (cpu-used) + Set quality/speed ratio modifier. Higher values speed up the encode + at the cost of quality. + + nr (noise-sensitivity) + static-thresh + Set a change threshold on blocks below which they will be skipped + by the encoder. + + slices (token-parts) + Note that FFmpeg's slices option gives the total number of + partitions, while vpxenc's token-parts is given as + "log2(partitions)". + + max-intra-rate + Set maximum I-frame bitrate as a percentage of the target bitrate. + A value of 0 means unlimited. + + force_key_frames + "VPX_EFLAG_FORCE_KF" + + Alternate reference frame related + auto-alt-ref + Enable use of alternate reference frames (2-pass only). Values + greater than 1 enable multi-layer alternate reference frames + (VP9 only). + + arnr-maxframes + Set altref noise reduction max frame count. + + arnr-type + Set altref noise reduction filter type: backward, forward, + centered. + + arnr-strength + Set altref noise reduction filter strength. + + rc-lookahead, lag-in-frames (lag-in-frames) + Set number of frames to look ahead for frametype and + ratecontrol. + + min-gf-interval + Set minimum golden/alternate reference frame interval (VP9 + only). + + error-resilient + Enable error resiliency features. + + sharpness integer + Increase sharpness at the expense of lower PSNR. The valid range + is [0, 7]. + + ts-parameters + Sets the temporal scalability configuration using a :-separated + list of key=value pairs. For example, to specify temporal + scalability parameters with "ffmpeg": + + ffmpeg -i INPUT -c:v libvpx -ts-parameters ts_number_layers=3:\ + ts_target_bitrate=250,500,1000:ts_rate_decimator=4,2,1:\ + ts_periodicity=4:ts_layer_id=0,2,1,2:ts_layering_mode=3 OUTPUT + + Below is a brief explanation of each of the parameters, please + refer to "struct vpx_codec_enc_cfg" in "vpx/vpx_encoder.h" for more + details. + + ts_number_layers + Number of temporal coding layers. + + ts_target_bitrate + Target bitrate for each temporal layer (in kbps). (bitrate + should be inclusive of the lower temporal layer). + + ts_rate_decimator + Frame rate decimation factor for each temporal layer. + + ts_periodicity + Length of the sequence defining frame temporal layer + membership. + + ts_layer_id + Template defining the membership of frames to temporal layers. + + ts_layering_mode + (optional) Selecting the temporal structure from a set of pre- + defined temporal layering modes. Currently supports the + following options. + + 0 No temporal layering flags are provided internally, relies + on flags being passed in using "metadata" field in + "AVFrame" with following keys. + + vp8-flags + Sets the flags passed into the encoder to indicate the + referencing scheme for the current frame. Refer to + function "vpx_codec_encode" in "vpx/vpx_encoder.h" for + more details. + + temporal_id + Explicitly sets the temporal id of the current frame to + encode. + + 2 Two temporal layers. 0-1... + + 3 Three temporal layers. 0-2-1-2...; with single reference + frame. + + 4 Same as option "3", except there is a dependency between + the two temporal layer 2 frames within the temporal period. + + VP9-specific options + lossless + Enable lossless mode. + + tile-columns + Set number of tile columns to use. Note this is given as + "log2(tile_columns)". For example, 8 tile columns would be + requested by setting the tile-columns option to 3. + + tile-rows + Set number of tile rows to use. Note this is given as + "log2(tile_rows)". For example, 4 tile rows would be requested + by setting the tile-rows option to 2. + + frame-parallel + Enable frame parallel decodability features. + + aq-mode + Set adaptive quantization mode (0: off (default), 1: variance + 2: complexity, 3: cyclic refresh, 4: equator360). + + colorspace color-space + Set input color space. The VP9 bitstream supports signaling the + following colorspaces: + + rgb sRGB + bt709 bt709 + unspecified unknown + bt470bg bt601 + smpte170m smpte170 + smpte240m smpte240 + bt2020_ncl bt2020 + row-mt boolean + Enable row based multi-threading. + + tune-content + Set content type: default (0), screen (1), film (2). + + corpus-complexity + Corpus VBR mode is a variant of standard VBR where the + complexity distribution midpoint is passed in rather than + calculated for a specific clip or chunk. + + The valid range is [0, 10000]. 0 (default) uses standard VBR. + + enable-tpl boolean + Enable temporal dependency model. + + ref-frame-config + Using per-frame metadata, set members of the structure + "vpx_svc_ref_frame_config_t" in "vpx/vp8cx.h" to fine-control + referencing schemes and frame buffer management. Use a + :-separated list of key=value pairs. For example, + + av_dict_set(&av_frame->metadata, "ref-frame-config", \ + "rfc_update_buffer_slot=7:rfc_lst_fb_idx=0:rfc_gld_fb_idx=1:rfc_alt_fb_idx=2:rfc_reference_last=0:rfc_reference_golden=0:rfc_reference_alt_ref=0"); + + rfc_update_buffer_slot + Indicates the buffer slot number to update + + rfc_update_last + Indicates whether to update the LAST frame + + rfc_update_golden + Indicates whether to update GOLDEN frame + + rfc_update_alt_ref + Indicates whether to update ALT_REF frame + + rfc_lst_fb_idx + LAST frame buffer index + + rfc_gld_fb_idx + GOLDEN frame buffer index + + rfc_alt_fb_idx + ALT_REF frame buffer index + + rfc_reference_last + Indicates whether to reference LAST frame + + rfc_reference_golden + Indicates whether to reference GOLDEN frame + + rfc_reference_alt_ref + Indicates whether to reference ALT_REF frame + + rfc_reference_duration + Indicates frame duration + + For more information about libvpx see: + + libwebp + libwebp WebP Image encoder wrapper + + libwebp is Google's official encoder for WebP images. It can encode in + either lossy or lossless mode. Lossy images are essentially a wrapper + around a VP8 frame. Lossless images are a separate codec developed by + Google. + + Pixel Format + + Currently, libwebp only supports YUV420 for lossy and RGB for lossless + due to limitations of the format and libwebp. Alpha is supported for + either mode. Because of API limitations, if RGB is passed in when + encoding lossy or YUV is passed in for encoding lossless, the pixel + format will automatically be converted using functions from libwebp. + This is not ideal and is done only for convenience. + + Options + + -lossless boolean + Enables/Disables use of lossless mode. Default is 0. + + -compression_level integer + For lossy, this is a quality/speed tradeoff. Higher values give + better quality for a given size at the cost of increased encoding + time. For lossless, this is a size/speed tradeoff. Higher values + give smaller size at the cost of increased encoding time. More + specifically, it controls the number of extra algorithms and + compression tools used, and varies the combination of these tools. + This maps to the method option in libwebp. The valid range is 0 to + 6. Default is 4. + + -quality float + For lossy encoding, this controls image quality. For lossless + encoding, this controls the effort and time spent in compression. + Range is 0 to 100. Default is 75. + + -preset type + Configuration preset. This does some automatic settings based on + the general type of the image. + + none + Do not use a preset. + + default + Use the encoder default. + + picture + Digital picture, like portrait, inner shot + + photo + Outdoor photograph, with natural lighting + + drawing + Hand or line drawing, with high-contrast details + + icon + Small-sized colorful images + + text + Text-like + + libx264, libx264rgb + 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 one to + pass a list of key=value tuples as accepted by the libx264 + "x264_param_parse" function. + + The x264 project website is at + . + + The libx264rgb encoder is the same as libx264, except it accepts packed + RGB pixel formats as input instead of YUV. + + Supported Pixel Formats + + x264 supports 8- to 10-bit color spaces. The exact bit depth is + controlled at x264's configure time. + + 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 --fullhelp 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) + qmin (qpmin) + Minimum quantizer scale. + + qmax (qpmax) + Maximum quantizer scale. + + qdiff (qpstep) + Maximum difference between quantizer scales. + + qblur (qblur) + Quantizer curve blur + + qcomp (qcomp) + Quantizer curve compression factor + + refs (ref) + Number of reference frames each P-frame can use. The range is from + 0-16. + + sc_threshold (scenecut) + Sets the threshold for the scene change detection. + + trellis (trellis) + Performs Trellis quantization to increase efficiency. Enabled by + default. + + nr (nr) + me_range (merange) + Maximum range of the motion search in pixels. + + 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). + + forced-idr + Normally, when forcing a I-frame type, the encoder can select any + type of I-frame. This option forces it to choose an IDR-frame. + + subq (subme) + Sub-pixel motion estimation method. + + b_strategy (b-adapt) + Adaptive B-frame placement decision algorithm. Use only on first- + pass. + + keyint_min (min-keyint) + Minimum GOP size. + + 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 comparison 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) + Number of encoding 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. + + avcintra-class (class) + Configure the encoder to generate AVC-Intra. Valid values are + 50,100 and 200 + + 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 -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv + + a53cc boolean + Import closed captions (which must be ATSC compatible format) into + output. Only the mpeg2 and h264 decoders provide these. Default is + 1 (on). + + udu_sei boolean + Import user data unregistered SEI if available into output. Default + is 0 (off). + + 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 compatibility 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). + + libx265 + x265 H.265/HEVC encoder wrapper. + + This encoder requires the presence of the libx265 headers and library + during configuration. You need to explicitly configure the build with + --enable-libx265. + + Options + + b Sets target video bitrate. + + bf + g Set the GOP size. + + keyint_min + Minimum GOP size. + + refs + Number of reference frames each P-frame can use. The range is from + 1-16. + + preset + Set the x265 preset. + + tune + Set the x265 tune parameter. + + profile + Set profile restrictions. + + crf Set the quality for constant quality mode. + + qp Set constant quantization rate control method parameter. + + qmin + Minimum quantizer scale. + + qmax + Maximum quantizer scale. + + qdiff + Maximum difference between quantizer scales. + + qblur + Quantizer curve blur + + qcomp + Quantizer curve compression factor + + i_qfactor + b_qfactor + forced-idr + Normally, when forcing a I-frame type, the encoder can select any + type of I-frame. This option forces it to choose an IDR-frame. + + udu_sei boolean + Import user data unregistered SEI if available into output. Default + is 0 (off). + + x265-params + Set x265 options using a list of key=value couples separated by + ":". See x265 --help for a list of options. + + For example to specify libx265 encoding options with -x265-params: + + ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4 + + libxavs2 + xavs2 AVS2-P2/IEEE1857.4 encoder wrapper. + + This encoder requires the presence of the libxavs2 headers and library + during configuration. You need to explicitly configure the build with + --enable-libxavs2. + + The following standard libavcodec options are used: + + o b / bit_rate + + o g / gop_size + + o bf / max_b_frames + + The encoder also has its own specific options: + + Options + + lcu_row_threads + Set the number of parallel threads for rows from 1 to 8 (default + 5). + + initial_qp + Set the xavs2 quantization parameter from 1 to 63 (default 34). + This is used to set the initial qp for the first frame. + + qp Set the xavs2 quantization parameter from 1 to 63 (default 34). + This is used to set the qp value under constant-QP mode. + + max_qp + Set the max qp for rate control from 1 to 63 (default 55). + + min_qp + Set the min qp for rate control from 1 to 63 (default 20). + + speed_level + Set the Speed level from 0 to 9 (default 0). Higher is better but + slower. + + log_level + Set the log level from -1 to 3 (default 0). -1: none, 0: error, 1: + warning, 2: info, 3: debug. + + xavs2-params + Set xavs2 options using a list of key=value couples separated by + ":". + + For example to specify libxavs2 encoding options with + -xavs2-params: + + ffmpeg -i input -c:v libxavs2 -xavs2-params RdoqLevel=0 output.avs2 + + 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. + + 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. + + MediaFoundation + This provides wrappers to encoders (both audio and video) in the + MediaFoundation framework. It can access both SW and HW encoders. + Video encoders can take input in either of nv12 or yuv420p form (some + encoders support both, some support only either - in practice, nv12 is + the safer choice, especially among HW encoders). + + mpeg2 + MPEG-2 video encoder. + + Options + + profile + Select the mpeg2 profile to encode: + + 422 + high + ss Spatially Scalable + + snr SNR Scalable + + main + simple + level + Select the mpeg2 level to encode: + + high + high1440 + main + low + seq_disp_ext integer + Specifies if the encoder should write a sequence_display_extension + to the output. + + -1 + auto + Decide automatically to write it or not (this is the default) + by checking if the data to be written is different from the + default or unspecified values. + + 0 + never + Never write it. + + 1 + always + Always write it. + + video_format integer + Specifies the video_format written into the sequence display + extension indicating the source of the video pictures. The default + is unspecified, can be component, pal, ntsc, secam or mac. For + maximum compatibility, use component. + + a53cc boolean + Import closed captions (which must be ATSC compatible format) into + output. Default is 1 (on). + + png + PNG image encoder. + + 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 + + ProRes + Apple ProRes encoder. + + FFmpeg contains 2 ProRes encoders, the prores-aw and prores-ks encoder. + The used encoder can be chosen with the "-vcodec" option. + + Private Options for prores-ks + + profile integer + Select the ProRes profile to encode + + proxy + lt + standard + hq + 4444 + 4444xq + 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. + + Speed considerations + + In the default mode of operation the encoder has to honor frame + constraints (i.e. not produce 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. + + QSV Encoders + The family of Intel QuickSync Video encoders (MPEG-2, H.264, HEVC, + JPEG/MJPEG and VP9) + + Ratecontrol Method + + The ratecontrol method is selected as follows: + + o When global_quality is specified, a quality-based mode is used. + Specifically this means either + + - CQP - constant quantizer scale, when the qscale codec flag is + also set (the -qscale ffmpeg option). + + - LA_ICQ - intelligent constant quality with lookahead, when the + look_ahead option is also set. + + - ICQ -- intelligent constant quality otherwise. For the ICQ + modes, global quality range is 1 to 51, with 1 being the best + quality. + + o Otherwise, a bitrate-based mode is used. For all of those, you + should specify at least the desired average bitrate with the b + option. + + - LA - VBR with lookahead, when the look_ahead option is + specified. + + - VCM - video conferencing mode, when the vcm option is set. + + - CBR - constant bitrate, when maxrate is specified and equal to + the average bitrate. + + - VBR - variable bitrate, when maxrate is specified, but is + higher than the average bitrate. + + - AVBR - average VBR mode, when maxrate is not specified, both + avbr_accuracy and avbr_convergence are set to non-zero. This + mode is available for H264 and HEVC on Windows. + + Note that depending on your system, a different mode than the one you + specified may be selected by the encoder. Set the verbosity level to + verbose or higher to see the actual settings used by the QSV runtime. + + Global Options -> MSDK Options + + Additional libavcodec global options are mapped to MSDK options as + follows: + + o g/gop_size -> GopPicSize + + o bf/max_b_frames+1 -> GopRefDist + + o rc_init_occupancy/rc_initial_buffer_occupancy -> InitialDelayInKB + + o slices -> NumSlice + + o refs -> NumRefFrame + + o b_strategy/b_frame_strategy -> BRefType + + o cgop/CLOSED_GOP codec flag -> GopOptFlag + + o For the CQP mode, the i_qfactor/i_qoffset and b_qfactor/b_qoffset + set the difference between QPP and QPI, and QPP and QPB + respectively. + + o Setting the coder option to the value vlc will make the H.264 + encoder use CAVLC instead of CABAC. + + Common Options + + Following options are used by all qsv encoders. + + async_depth + Specifies how many asynchronous operations an application performs + before the application explicitly synchronizes the result. If zero, + the value is not specified. + + preset + This option itemizes a range of choices from veryfast (best speed) + to veryslow (best quality). + + veryfast + faster + fast + medium + slow + slower + veryslow + forced_idr + Forcing I frames as IDR frames. + + low_power + For encoders set this flag to ON to reduce power consumption and + GPU usage. + + Runtime Options + + Following options can be used durning qsv encoding. + + global_quality + i_quant_factor + i_quant_offset + b_quant_factor + b_quant_offset + Supported in h264_qsv and hevc_qsv. Change these value to reset + qsv codec's qp configuration. + + max_frame_size + Supported in h264_qsv and hevc_qsv. Change this value to reset qsv + codec's MaxFrameSize configuration. + + gop_size + Change this value to reset qsv codec's gop configuration. + + int_ref_type + int_ref_cycle_size + int_ref_qp_delta + int_ref_cycle_dist + Supported in h264_qsv and hevc_qsv. Change these value to reset + qsv codec's Intra Refresh configuration. + + qmax + qmin + max_qp_i + min_qp_i + max_qp_p + min_qp_p + max_qp_b + min_qp_b + Supported in h264_qsv. Change these value to reset qsv codec's + max/min qp configuration. + + low_delay_brc + Supported in h264_qsv and hevc_qsv. Change this value to reset qsv + codec's low_delay_brc configuration. + + framerate + Change this value to reset qsv codec's framerate configuration. + + bit_rate + rc_buffer_size + rc_initial_buffer_occupancy + rc_max_rate + Change these value to reset qsv codec's bitrate control + configuration. + + pic_timing_sei + Supported in h264_qsv and hevc_qsv. Change this value to reset qsv + codec's pic_timing_sei configuration. + + H264 options + + These options are used by h264_qsv + + extbrc + Extended bitrate control. + + recovery_point_sei + Set this flag to insert the recovery point SEI message at the + beginning of every intra refresh cycle. + + rdo Enable rate distortion optimization. + + max_frame_size + Maximum encoded frame size in bytes. + + max_frame_size_i + Maximum encoded frame size for I frames in bytes. If this value is + set as larger than zero, then for I frames the value set by + max_frame_size is ignored. + + max_frame_size_p + Maximum encoded frame size for P frames in bytes. If this value is + set as larger than zero, then for P frames the value set by + max_frame_size is ignored. + + max_slice_size + Maximum encoded slice size in bytes. + + bitrate_limit + Toggle bitrate limitations. Modifies bitrate to be in the range + imposed by the QSV encoder. Setting this flag off may lead to + violation of HRD conformance. Mind that specifying bitrate below + the QSV encoder range might significantly affect quality. If on + this option takes effect in non CQP modes: if bitrate is not in the + range imposed by the QSV encoder, it will be changed to be in the + range. + + mbbrc + Setting this flag enables macroblock level bitrate control that + generally improves subjective visual quality. Enabling this flag + may have negative impact on performance and objective visual + quality metric. + + low_delay_brc + Setting this flag turns on or off LowDelayBRC feautre in qsv + plugin, which provides more accurate bitrate control to minimize + the variance of bitstream size frame by frame. Value: -1-default + 0-off 1-on + + adaptive_i + This flag controls insertion of I frames by the QSV encoder. Turn + ON this flag to allow changing of frame type from P and B to I. + + adaptive_b + This flag controls changing of frame type from B to P. + + p_strategy + Enable P-pyramid: 0-default 1-simple 2-pyramid(bf need to be set to + 0). + + b_strategy + This option controls usage of B frames as reference. + + dblk_idc + This option disable deblocking. It has value in range 0~2. + + cavlc + If set, CAVLC is used; if unset, CABAC is used for encoding. + + vcm Video conferencing mode, please see ratecontrol method. + + idr_interval + Distance (in I-frames) between IDR frames. + + pic_timing_sei + Insert picture timing SEI with pic_struct_syntax element. + + single_sei_nal_unit + Put all the SEI messages into one NALU. + + max_dec_frame_buffering + Maximum number of frames buffered in the DPB. + + look_ahead + Use VBR algorithm with look ahead. + + look_ahead_depth + Depth of look ahead in number frames. + + look_ahead_downsampling + Downscaling factor for the frames saved for the lookahead analysis. + + unknown + auto + off + 2x + 4x + int_ref_type + Specifies intra refresh type. The major goal of intra refresh is + improvement of error resilience without significant impact on + encoded bitstream size caused by I frames. The SDK encoder achieves + this by encoding part of each frame in refresh cycle using intra + MBs. none means no refresh. vertical means vertical refresh, by + column of MBs. horizontal means horizontal refresh, by rows of MBs. + slice means horizontal refresh by slices without overlapping. In + case of slice, in_ref_cycle_size is ignored. To enable intra + refresh, B frame should be set to 0. + + int_ref_cycle_size + Specifies number of pictures within refresh cycle starting from 2. + 0 and 1 are invalid values. + + int_ref_qp_delta + Specifies QP difference for inserted intra MBs. This is signed + value in [-51, 51] range if target encoding bit-depth for luma + samples is 8 and this range is [-63, 63] for 10 bit-depth or [-75, + 75] for 12 bit-depth respectively. + + int_ref_cycle_dist + Distance between the beginnings of the intra-refresh cycles in + frames. + + profile + unknown + baseline + main + high + a53cc + Use A53 Closed Captions (if available). + + aud Insert the Access Unit Delimiter NAL. + + mfmode + Multi-Frame Mode. + + off + auto + repeat_pps + Repeat pps for every frame. + + max_qp_i + Maximum video quantizer scale for I frame. + + min_qp_i + Minimum video quantizer scale for I frame. + + max_qp_p + Maximum video quantizer scale for P frame. + + min_qp_p + Minimum video quantizer scale for P frame. + + max_qp_b + Maximum video quantizer scale for B frame. + + min_qp_b + Minimum video quantizer scale for B frame. + + scenario + Provides a hint to encoder about the scenario for the encoding + session. + + unknown + displayremoting + videoconference + archive + livestreaming + cameracapture + videosurveillance + gamestreaming + remotegaming + avbr_accuracy + Accuracy of the AVBR ratecontrol (unit of tenth of percent). + + avbr_convergence + Convergence of the AVBR ratecontrol (unit of 100 frames) + + The parameters avbr_accuracy and avbr_convergence are for the + average variable bitrate control (AVBR) algorithm. The algorithm + focuses on overall encoding quality while meeting the specified + bitrate, target_bitrate, within the accuracy range avbr_accuracy, + after a avbr_Convergence period. This method does not follow HRD + and the instant bitrate is not capped or padded. + + skip_frame + Use per-frame metadata "qsv_skip_frame" to skip frame when + encoding. This option defines the usage of this metadata. + + no_skip + Frame skipping is disabled. + + insert_dummy + Encoder inserts into bitstream frame where all macroblocks are + encoded as skipped. + + insert_nothing + Similar to insert_dummy, but encoder inserts nothing into + bitstream. The skipped frames are still used in brc. For + example, gop still include skipped frames, and the frames after + skipped frames will be larger in size. + + brc_only + skip_frame metadata indicates the number of missed frames + before the current frame. + + HEVC Options + + These options are used by hevc_qsv + + extbrc + Extended bitrate control. + + recovery_point_sei + Set this flag to insert the recovery point SEI message at the + beginning of every intra refresh cycle. + + rdo Enable rate distortion optimization. + + max_frame_size + Maximum encoded frame size in bytes. + + max_frame_size_i + Maximum encoded frame size for I frames in bytes. If this value is + set as larger than zero, then for I frames the value set by + max_frame_size is ignored. + + max_frame_size_p + Maximum encoded frame size for P frames in bytes. If this value is + set as larger than zero, then for P frames the value set by + max_frame_size is ignored. + + max_slice_size + Maximum encoded slice size in bytes. + + mbbrc + Setting this flag enables macroblock level bitrate control that + generally improves subjective visual quality. Enabling this flag + may have negative impact on performance and objective visual + quality metric. + + low_delay_brc + Setting this flag turns on or off LowDelayBRC feautre in qsv + plugin, which provides more accurate bitrate control to minimize + the variance of bitstream size frame by frame. Value: -1-default + 0-off 1-on + + adaptive_i + This flag controls insertion of I frames by the QSV encoder. Turn + ON this flag to allow changing of frame type from P and B to I. + + adaptive_b + This flag controls changing of frame type from B to P. + + p_strategy + Enable P-pyramid: 0-default 1-simple 2-pyramid(bf need to be set to + 0). + + b_strategy + This option controls usage of B frames as reference. + + dblk_idc + This option disable deblocking. It has value in range 0~2. + + idr_interval + Distance (in I-frames) between IDR frames. + + begin_only + Output an IDR-frame only at the beginning of the stream. + + load_plugin + A user plugin to load in an internal session. + + none + hevc_sw + hevc_hw + load_plugins + A :-separate list of hexadecimal plugin UIDs to load in an internal + session. + + look_ahead_depth + Depth of look ahead in number frames, available when extbrc option + is enabled. + + profile + Set the encoding profile (scc requires libmfx >= 1.32). + + unknown + main + main10 + mainsp + rext + scc + tier + Set the encoding tier (only level >= 4 can support high tier). + This option only takes effect when the level option is specified. + + main + high + gpb 1: GPB (generalized P/B frame) + + 0: regular P frame. + + tile_cols + Number of columns for tiled encoding. + + tile_rows + Number of rows for tiled encoding. + + aud Insert the Access Unit Delimiter NAL. + + pic_timing_sei + Insert picture timing SEI with pic_struct_syntax element. + + transform_skip + Turn this option ON to enable transformskip. It is supported on + platform equal or newer than ICL. + + int_ref_type + Specifies intra refresh type. The major goal of intra refresh is + improvement of error resilience without significant impact on + encoded bitstream size caused by I frames. The SDK encoder achieves + this by encoding part of each frame in refresh cycle using intra + MBs. none means no refresh. vertical means vertical refresh, by + column of MBs. horizontal means horizontal refresh, by rows of MBs. + slice means horizontal refresh by slices without overlapping. In + case of slice, in_ref_cycle_size is ignored. To enable intra + refresh, B frame should be set to 0. + + int_ref_cycle_size + Specifies number of pictures within refresh cycle starting from 2. + 0 and 1 are invalid values. + + int_ref_qp_delta + Specifies QP difference for inserted intra MBs. This is signed + value in [-51, 51] range if target encoding bit-depth for luma + samples is 8 and this range is [-63, 63] for 10 bit-depth or [-75, + 75] for 12 bit-depth respectively. + + int_ref_cycle_dist + Distance between the beginnings of the intra-refresh cycles in + frames. + + max_qp_i + Maximum video quantizer scale for I frame. + + min_qp_i + Minimum video quantizer scale for I frame. + + max_qp_p + Maximum video quantizer scale for P frame. + + min_qp_p + Minimum video quantizer scale for P frame. + + max_qp_b + Maximum video quantizer scale for B frame. + + min_qp_b + Minimum video quantizer scale for B frame. + + scenario + Provides a hint to encoder about the scenario for the encoding + session. + + unknown + displayremoting + videoconference + archive + livestreaming + cameracapture + videosurveillance + gamestreaming + remotegaming + avbr_accuracy + Accuracy of the AVBR ratecontrol (unit of tenth of percent). + + avbr_convergence + Convergence of the AVBR ratecontrol (unit of 100 frames) + + The parameters avbr_accuracy and avbr_convergence are for the + average variable bitrate control (AVBR) algorithm. The algorithm + focuses on overall encoding quality while meeting the specified + bitrate, target_bitrate, within the accuracy range avbr_accuracy, + after a avbr_Convergence period. This method does not follow HRD + and the instant bitrate is not capped or padded. + + skip_frame + Use per-frame metadata "qsv_skip_frame" to skip frame when + encoding. This option defines the usage of this metadata. + + no_skip + Frame skipping is disabled. + + insert_dummy + Encoder inserts into bitstream frame where all macroblocks are + encoded as skipped. + + insert_nothing + Similar to insert_dummy, but encoder inserts nothing into + bitstream. The skipped frames are still used in brc. For + example, gop still include skipped frames, and the frames after + skipped frames will be larger in size. + + brc_only + skip_frame metadata indicates the number of missed frames + before the current frame. + + MPEG2 Options + + These options are used by mpeg2_qsv + + profile + unknown + simple + main + high + + VP9 Options + + These options are used by vp9_qsv + + profile + unknown + profile0 + profile1 + profile2 + profile3 + tile_cols + Number of columns for tiled encoding (requires libmfx >= 1.29). + + tile_rows + Number of rows for tiled encoding (requires libmfx >= 1.29). + + AV1 Options + + These options are used by av1_qsv (requires libvpl). + + profile + unknown + main + tile_cols + Number of columns for tiled encoding. + + tile_rows + Number of rows for tiled encoding. + + adaptive_i + This flag controls insertion of I frames by the QSV encoder. Turn + ON this flag to allow changing of frame type from P and B to I. + + adaptive_b + This flag controls changing of frame type from B to P. + + b_strategy + This option controls usage of B frames as reference. + + extbrc + Extended bitrate control. + + look_ahead_depth + Depth of look ahead in number frames, available when extbrc option + is enabled. + + low_delay_brc + Setting this flag turns on or off LowDelayBRC feautre in qsv + plugin, which provides more accurate bitrate control to minimize + the variance of bitstream size frame by frame. Value: -1-default + 0-off 1-on + + max_frame_size + Set the allowed max size in bytes for each frame. If the frame size + exceeds the limitation, encoder will adjust the QP value to control + the frame size. Invalid in CQP rate control mode. + + snow + Options + + iterative_dia_size + dia size for the iterative motion estimation + + VAAPI encoders + Wrappers for hardware encoders accessible via VAAPI. + + These encoders only accept input in VAAPI hardware surfaces. If you + have input in software frames, use the hwupload filter to upload them + to the GPU. + + The following standard libavcodec options are used: + + o g / gop_size + + o bf / max_b_frames + + o profile + + If not set, this will be determined automatically from the format + of the input frames and the profiles supported by the driver. + + o level + + o b / bit_rate + + o maxrate / rc_max_rate + + o bufsize / rc_buffer_size + + o rc_init_occupancy / rc_initial_buffer_occupancy + + o compression_level + + Speed / quality tradeoff: higher values are faster / worse quality. + + o q / global_quality + + Size / quality tradeoff: higher values are smaller / worse quality. + + o qmin + + o qmax + + o i_qfactor / i_quant_factor + + o i_qoffset / i_quant_offset + + o b_qfactor / b_quant_factor + + o b_qoffset / b_quant_offset + + o slices + + All encoders support the following options: + + low_power + Some drivers/platforms offer a second encoder for some codecs + intended to use less power than the default encoder; setting this + option will attempt to use that encoder. Note that it may support + a reduced feature set, so some other options may not be available + in this mode. + + idr_interval + Set the number of normal intra frames between full-refresh (IDR) + frames in open-GOP mode. The intra frames are still IRAPs, but + will not include global headers and may have non-decodable leading + pictures. + + b_depth + Set the B-frame reference depth. When set to one (the default), + all B-frames will refer only to P- or I-frames. When set to + greater values multiple layers of B-frames will be present, frames + in each layer only referring to frames in higher layers. + + async_depth + Maximum processing parallelism. Increase this to improve single + channel performance. This option doesn't work if driver doesn't + implement vaSyncBuffer function. Please make sure there are enough + hw_frames allocated if a large number of async_depth is used. + + max_frame_size + Set the allowed max size in bytes for each frame. If the frame size + exceeds the limitation, encoder will adjust the QP value to control + the frame size. Invalid in CQP rate control mode. + + rc_mode + Set the rate control mode to use. A given driver may only support + a subset of modes. + + Possible modes: + + auto + Choose the mode automatically based on driver support and the + other options. This is the default. + + CQP Constant-quality. + + CBR Constant-bitrate. + + VBR Variable-bitrate. + + ICQ Intelligent constant-quality. + + QVBR + Quality-defined variable-bitrate. + + AVBR + Average variable bitrate. + + Each encoder also has its own specific options: + + h264_vaapi + profile sets the value of profile_idc and the + constraint_set*_flags. level sets the value of level_idc. + + coder + Set entropy encoder (default is cabac). Possible values: + + ac + cabac + Use CABAC. + + vlc + cavlc + Use CAVLC. + + aud Include access unit delimiters in the stream (not included by + default). + + sei Set SEI message types to include. Some combination of the + following values: + + identifier + Include a user_data_unregistered message containing + information about the encoder. + + timing + Include picture timing parameters (buffering_period and + pic_timing messages). + + recovery_point + Include recovery points where appropriate (recovery_point + messages). + + hevc_vaapi + profile and level set the values of general_profile_idc and + general_level_idc respectively. + + aud Include access unit delimiters in the stream (not included by + default). + + tier + Set general_tier_flag. This may affect the level chosen for + the stream if it is not explicitly specified. + + sei Set SEI message types to include. Some combination of the + following values: + + hdr Include HDR metadata if the input frames have it + (mastering_display_colour_volume and content_light_level + messages). + + tiles + Set the number of tiles to encode the input video with, as + columns x rows. Larger numbers allow greater parallelism in + both encoding and decoding, but may decrease coding efficiency. + + mjpeg_vaapi + Only baseline DCT encoding is supported. The encoder always uses + the standard quantisation and huffman tables - global_quality + scales the standard quantisation table (range 1-100). + + For YUV, 4:2:0, 4:2:2 and 4:4:4 subsampling modes are supported. + RGB is also supported, and will create an RGB JPEG. + + jfif + Include JFIF header in each frame (not included by default). + + huffman + Include standard huffman tables (on by default). Turning this + off will save a few hundred bytes in each output frame, but may + lose compatibility with some JPEG decoders which don't fully + handle MJPEG. + + mpeg2_vaapi + profile and level set the value of profile_and_level_indication. + + vp8_vaapi + B-frames are not supported. + + global_quality sets the q_idx used for non-key frames (range + 0-127). + + loop_filter_level + loop_filter_sharpness + Manually set the loop filter parameters. + + vp9_vaapi + global_quality sets the q_idx used for P-frames (range 0-255). + + loop_filter_level + loop_filter_sharpness + Manually set the loop filter parameters. + + B-frames are supported, but the output stream is always in encode + order rather than display order. If B-frames are enabled, it may + be necessary to use the vp9_raw_reorder bitstream filter to modify + the output stream to display frames in the correct order. + + Only normal frames are produced - the vp9_superframe bitstream + filter may be required to produce a stream usable with all + decoders. + + vbn + Vizrt Binary Image encoder. + + This format is used by the broadcast vendor Vizrt for quick texture + streaming. Advanced features of the format such as LZW compression of + texture data or generation of mipmaps are not supported. + + Options + + format string + Sets the texture compression used by the VBN file. Can be dxt1, + dxt5 or raw. Default is dxt5. + + vc2 + SMPTE VC-2 (previously BBC Dirac Pro). This codec was primarily aimed + at professional broadcasting but since it supports yuv420, yuv422 and + yuv444 at 8 (limited range or full range), 10 or 12 bits, this makes it + suitable for other tasks which require low overhead and low compression + (like screen recording). + + Options + + b Sets target video bitrate. Usually that's around 1:6 of the + uncompressed video bitrate (e.g. for 1920x1080 50fps yuv422p10 + that's around 400Mbps). Higher values (close to the uncompressed + bitrate) turn on lossless compression mode. + + field_order + Enables field coding when set (e.g. to tt - top field first) for + interlaced inputs. Should increase compression with interlaced + content as it splits the fields and encodes each separately. + + wavelet_depth + Sets the total amount of wavelet transforms to apply, between 1 and + 5 (default). Lower values reduce compression and quality. Less + capable decoders may not be able to handle values of wavelet_depth + over 3. + + wavelet_type + Sets the transform type. Currently only 5_3 (LeGall) and 9_7 + (Deslauriers-Dubuc) are implemented, with 9_7 being the one with + better compression and thus is the default. + + slice_width + slice_height + Sets the slice size for each slice. Larger values result in better + compression. For compatibility with other more limited decoders + use slice_width of 32 and slice_height of 8. + + tolerance + Sets the undershoot tolerance of the rate control system in + percent. This is to prevent an expensive search from being run. + + qm Sets the quantization matrix preset to use by default or when + wavelet_depth is set to 5 + + - default Uses the default quantization matrix from the + specifications, extended with values for the fifth level. This + provides a good balance between keeping detail and omitting + artifacts. + + - flat Use a completely zeroed out quantization matrix. This + increases PSNR but might reduce perception. Use in bogus + benchmarks. + + - color Reduces detail but attempts to preserve color at + extremely low bitrates. + +SUBTITLES ENCODERS + dvdsub + This codec encodes the bitmap subtitle format that is used in DVDs. + Typically they are stored in VOBSUB file pairs (*.idx + *.sub), and + they can also be used in Matroska files. + + Options + + palette + Specify the global palette used by the bitmaps. + + The format for this option is a string containing 16 24-bits + hexadecimal numbers (without 0x prefix) separated by commas, for + example "0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, + 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, + 7c127b". + + even_rows_fix + When set to 1, enable a work-around that makes the number of pixel + rows even in all subtitles. This fixes a problem with some players + that cut off the bottom row if the number is odd. The work-around + just adds a fully transparent row if needed. The overhead is low, + typically one byte per subtitle on average. + + By default, this work-around is disabled. + +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. + + The ff* tools have a -bsf option applied per stream, taking a comma- + separated list of filters, whose parameters follow the filter name + after a '='. + + ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT + + Below is a description of the currently available bitstream filters, + with their parameters, if any. + + aac_adtstoasc + Convert MPEG-2/4 AAC ADTS to an MPEG-4 Audio Specific Configuration + bitstream. + + This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4 ADTS + header and removes the ADTS header. + + This filter is required for example when copying an AAC stream from a + raw ADTS AAC or an MPEG-TS container to MP4A-LATM, to an FLV file, or + to MOV/MP4 files and related formats such as 3GP or M4A. Please note + that it is auto-inserted for MP4A-LATM and MOV/MP4 and related formats. + + av1_metadata + Modify metadata embedded in an AV1 stream. + + td Insert or remove temporal delimiter OBUs in all temporal units of + the stream. + + insert + Insert a TD at the beginning of every TU which does not already + have one. + + remove + Remove the TD from the beginning of every TU which has one. + + color_primaries + transfer_characteristics + matrix_coefficients + Set the color description fields in the stream (see AV1 section + 6.4.2). + + color_range + Set the color range in the stream (see AV1 section 6.4.2; note that + this cannot be set for streams using BT.709 primaries, sRGB + transfer characteristic and identity (RGB) matrix coefficients). + + tv Limited range. + + pc Full range. + + chroma_sample_position + Set the chroma sample location in the stream (see AV1 section + 6.4.2). This can only be set for 4:2:0 streams. + + vertical + Left position (matching the default in MPEG-2 and H.264). + + colocated + Top-left position. + + tick_rate + Set the tick rate (time_scale / num_units_in_display_tick) in the + timing info in the sequence header. + + num_ticks_per_picture + Set the number of ticks in each picture, to indicate that the + stream has a fixed framerate. Ignored if tick_rate is not also + set. + + delete_padding + Deletes Padding OBUs. + + chomp + Remove zero padding at the end of a packet. + + dca_core + Extract the core from a DCA/DTS stream, dropping extensions such as + DTS-HD. + + dump_extra + Add extradata to the beginning of the filtered packets except when said + packets already exactly begin with the extradata that is intended to be + added. + + freq + The additional argument specifies which packets should be filtered. + It accepts the values: + + k + keyframe + add extradata to all key packets + + e + all 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 + + dv_error_marker + Blocks in DV which are marked as damaged are replaced by blocks of the + specified color. + + color + The color to replace damaged blocks by + + sta A 16 bit mask which specifies which of the 16 possible error status + values are to be replaced by colored blocks. 0xFFFE is the default + which replaces all non 0 error status values. + + ok No error, no concealment + + err Error, No concealment + + res Reserved + + notok + Error or concealment + + notres + Not reserved + + Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru + The specific error status code + + see page 44-46 or section 5.5 of + + + eac3_core + Extract the core from a E-AC-3 stream, dropping extra channels. + + extract_extradata + Extract the in-band extradata. + + Certain codecs allow the long-term headers (e.g. MPEG-2 sequence + headers, or H.264/HEVC (VPS/)SPS/PPS) to be transmitted either "in- + band" (i.e. as a part of the bitstream containing the coded frames) or + "out of band" (e.g. on the container level). This latter form is called + "extradata" in FFmpeg terminology. + + This bitstream filter detects the in-band headers and makes them + available as extradata. + + remove + When this option is enabled, the long-term headers are removed from + the bitstream after extraction. + + filter_units + Remove units with types in or not in a given set from the stream. + + pass_types + List of unit types or ranges of unit types to pass through while + removing all others. This is specified as a '|'-separated list of + unit type values or ranges of values with '-'. + + remove_types + Identical to pass_types, except the units in the given set removed + and all others passed through. + + Extradata is unchanged by this transformation, but note that if the + stream contains inline parameter sets then the output may be unusable + if they are removed. + + For example, to remove all non-VCL NAL units from an H.264 stream: + + ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT + + To remove all AUDs, SEI and filler from an H.265 stream: + + ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT + + hapqa_extract + Extract Rgb or Alpha part of an HAPQA file, without recompression, in + order to create an HAPQ or an HAPAlphaOnly file. + + texture + Specifies the texture to keep. + + color + alpha + + Convert HAPQA to HAPQ + + ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov + + Convert HAPQA to HAPAlphaOnly + + ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov + + h264_metadata + Modify metadata embedded in an H.264 stream. + + aud Insert or remove AUD NAL units in all access units of the stream. + + pass + insert + remove + + Default is pass. + + sample_aspect_ratio + Set the sample aspect ratio of the stream in the VUI parameters. + See H.264 table E-1. + + overscan_appropriate_flag + Set whether the stream is suitable for display using overscan or + not (see H.264 section E.2.1). + + video_format + video_full_range_flag + Set the video format in the stream (see H.264 section E.2.1 and + table E-2). + + colour_primaries + transfer_characteristics + matrix_coefficients + Set the colour description in the stream (see H.264 section E.2.1 + and tables E-3, E-4 and E-5). + + chroma_sample_loc_type + Set the chroma sample location in the stream (see H.264 section + E.2.1 and figure E-1). + + tick_rate + Set the tick rate (time_scale / num_units_in_tick) in the VUI + parameters. This is the smallest time unit representable in the + stream, and in many cases represents the field rate of the stream + (double the frame rate). + + fixed_frame_rate_flag + Set whether the stream has fixed framerate - typically this + indicates that the framerate is exactly half the tick rate, but the + exact meaning is dependent on interlacing and the picture structure + (see H.264 section E.2.1 and table E-6). + + zero_new_constraint_set_flags + Zero constraint_set4_flag and constraint_set5_flag in the SPS. + These bits were reserved in a previous version of the H.264 spec, + and thus some hardware decoders require these to be zero. The + result of zeroing this is still a valid bitstream. + + crop_left + crop_right + crop_top + crop_bottom + Set the frame cropping offsets in the SPS. These values will + replace the current ones if the stream is already cropped. + + These fields are set in pixels. Note that some sizes may not be + representable if the chroma is subsampled or the stream is + interlaced (see H.264 section 7.4.2.1.1). + + sei_user_data + Insert a string as SEI unregistered user data. The argument must + be of the form UUID+string, where the UUID is as hex digits + possibly separated by hyphens, and the string can be anything. + + For example, 086f3693-b7b3-4f2c-9653-21492feee5b8+hello will insert + the string ``hello'' associated with the given UUID. + + delete_filler + Deletes both filler NAL units and filler SEI messages. + + display_orientation + Insert, extract or remove Display orientation SEI messages. See + H.264 section D.1.27 and D.2.27 for syntax and semantics. + + pass + insert + remove + extract + + Default is pass. + + Insert mode works in conjunction with "rotate" and "flip" options. + Any pre-existing Display orientation messages will be removed in + insert or remove mode. Extract mode attaches the display matrix to + the packet as side data. + + rotate + Set rotation in display orientation SEI (anticlockwise angle in + degrees). Range is -360 to +360. Default is NaN. + + flip + Set flip in display orientation SEI. + + horizontal + vertical + + Default is unset. + + level + Set the level in the SPS. Refer to H.264 section A.3 and tables + A-1 to A-5. + + The argument must be the name of a level (for example, 4.2), a + level_idc value (for example, 42), or the special name auto + indicating that the filter should attempt to guess the level from + the input stream properties. + + 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 (muxer "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 + + Please note that this filter is auto-inserted for MPEG-TS (muxer + "mpegts") and raw H.264 (muxer "h264") output formats. + + h264_redundant_pps + This applies a specific fixup to some Blu-ray streams which contain + redundant PPSs modifying irrelevant parameters of the stream which + confuse other transformations which require correct extradata. + + hevc_metadata + Modify metadata embedded in an HEVC stream. + + aud Insert or remove AUD NAL units in all access units of the stream. + + insert + remove + sample_aspect_ratio + Set the sample aspect ratio in the stream in the VUI parameters. + + video_format + video_full_range_flag + Set the video format in the stream (see H.265 section E.3.1 and + table E.2). + + colour_primaries + transfer_characteristics + matrix_coefficients + Set the colour description in the stream (see H.265 section E.3.1 + and tables E.3, E.4 and E.5). + + chroma_sample_loc_type + Set the chroma sample location in the stream (see H.265 section + E.3.1 and figure E.1). + + tick_rate + Set the tick rate in the VPS and VUI parameters (time_scale / + num_units_in_tick). Combined with num_ticks_poc_diff_one, this can + set a constant framerate in the stream. Note that it is likely to + be overridden by container parameters when the stream is in a + container. + + num_ticks_poc_diff_one + Set poc_proportional_to_timing_flag in VPS and VUI and use this + value to set num_ticks_poc_diff_one_minus1 (see H.265 sections + 7.4.3.1 and E.3.1). Ignored if tick_rate is not also set. + + crop_left + crop_right + crop_top + crop_bottom + Set the conformance window cropping offsets in the SPS. These + values will replace the current ones if the stream is already + cropped. + + These fields are set in pixels. Note that some sizes may not be + representable if the chroma is subsampled (H.265 section + 7.4.3.2.1). + + level + Set the level in the VPS and SPS. See H.265 section A.4 and tables + A.6 and A.7. + + The argument must be the name of a level (for example, 5.1), a + general_level_idc value (for example, 153 for level 5.1), or the + special name auto indicating that the filter should attempt to + guess the level from the input stream properties. + + hevc_mp4toannexb + Convert an HEVC/H.265 bitstream from length prefixed mode to start code + prefixed mode (as defined in the Annex B of the ITU-T H.265 + specification). + + This is required by some streaming formats, typically the MPEG-2 + transport stream format (muxer "mpegts"). + + For example to remux an MP4 file containing an HEVC stream to mpegts + format with ffmpeg, you can use the command: + + ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts + + Please note that this filter is auto-inserted for MPEG-TS (muxer + "mpegts") and raw HEVC/H.265 (muxer "h265" or "hevc") output formats. + + imxdump + Modifies the bitstream to fit in MOV and to be usable by the Final Cut + Pro decoder. This filter only applies to the mpeg2video codec, and is + likely not needed for Final Cut Pro 7 and newer with the appropriate + -tag:v. + + For example, to remux 30 MB/sec NTSC IMX to MOV: + + ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov + + 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 + : + + 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 + + mjpegadump + Add an MJPEG A header to the bitstream, to enable decoding by + Quicktime. + + mov2textsub + Extract a representable text file from MOV subtitles, stripping the + metadata header from each subtitle packet. + + See also the text2movsub filter. + + mp3decomp + Decompress non-standard compressed MP3 audio headers. + + mpeg2_metadata + Modify metadata embedded in an MPEG-2 stream. + + display_aspect_ratio + Set the display aspect ratio in the stream. + + The following fixed values are supported: + + 4/3 + 16/9 + 221/100 + + Any other value will result in square pixels being signalled + instead (see H.262 section 6.3.3 and table 6-3). + + frame_rate + Set the frame rate in the stream. This is constructed from a table + of known values combined with a small multiplier and divisor - if + the supplied value is not exactly representable, the nearest + representable value will be used instead (see H.262 section 6.3.3 + and table 6-4). + + video_format + Set the video format in the stream (see H.262 section 6.3.6 and + table 6-6). + + colour_primaries + transfer_characteristics + matrix_coefficients + Set the colour description in the stream (see H.262 section 6.3.6 + and tables 6-7, 6-8 and 6-9). + + mpeg4_unpack_bframes + Unpack DivX-style packed B-frames. + + DivX-style packed B-frames are not valid MPEG-4 and were only a + workaround for the broken Video for Windows subsystem. They use more + space, can cause minor AV sync issues, require more CPU power to decode + (unless the player has some decoded picture queue to compensate the + 2,0,2,0 frame per packet style) and cause trouble if copied into a + standard container like mp4 or mpeg-ps/ts, because MPEG-4 decoders may + not be able to decode them, since they are not valid MPEG-4. + + For example to fix an AVI file containing an MPEG-4 stream with DivX- + style packed B-frames using ffmpeg, you can use the command: + + ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi + + noise + Damages the contents of packets or simply drops them without damaging + the container. Can be used for fuzzing or testing error + resilience/concealment. + + Parameters: + + amount + Accepts an expression whose evaluation per-packet determines how + often bytes in that packet will be modified. A value below 0 will + result in a variable frequency. Default is 0 which results in no + modification. However, if neither amount nor drop is specified, + amount will be set to -1. See below for accepted variables. + + drop + Accepts an expression evaluated per-packet whose value determines + whether that packet is dropped. Evaluation to a positive value + results in the packet being dropped. Evaluation to a negative value + results in a variable chance of it being dropped, roughly inverse + in proportion to the magnitude of the value. Default is 0 which + results in no drops. See below for accepted variables. + + dropamount + Accepts a non-negative integer, which assigns a variable chance of + it being dropped, roughly inverse in proportion to the value. + Default is 0 which results in no drops. This option is kept for + backwards compatibility and is equivalent to setting drop to a + negative value with the same magnitude i.e. "dropamount=4" is the + same as "drop=-4". Ignored if drop is also specified. + + Both "amount" and "drop" accept expressions containing the following + variables: + + n The index of the packet, starting from zero. + + tb The timebase for packet timestamps. + + pts Packet presentation timestamp. + + dts Packet decoding timestamp. + + nopts + Constant representing AV_NOPTS_VALUE. + + startpts + First non-AV_NOPTS_VALUE PTS seen in the stream. + + startdts + First non-AV_NOPTS_VALUE DTS seen in the stream. + + duration + d Packet duration, in timebase units. + + pos Packet position in input; may be -1 when unknown or not set. + + size + Packet size, in bytes. + + key Whether packet is marked as a keyframe. + + state + A pseudo random integer, primarily derived from the content of + packet payload. + + Examples + + Apply modification to every byte but don't drop any packets. + + ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv + + Drop every video packet not marked as a keyframe after timestamp 30s + but do not modify any of the remaining packets. + + ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' output.mkv + + Drop one second of audio every 10 seconds and add some random noise to + the rest. + + ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' output.mkv + + null + This bitstream filter passes the packets through unchanged. + + pcm_rechunk + Repacketize PCM audio to a fixed number of samples per packet or a + fixed packet rate per second. This is similar to the asetnsamples audio + filter but works on audio packets instead of audio frames. + + nb_out_samples, n + Set the number of samples per each output audio packet. 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 packet with + silence, so that it will contain the same number of samples (or + roughly the same number of samples, see frame_rate) as the previous + ones. Default value is 1. + + frame_rate, r + This option makes the filter output a fixed number of packets per + second instead of a fixed number of samples per packet. If the + audio sample rate is not divisible by the frame rate then the + number of samples will not be constant but will vary slightly so + that each packet will start as close to the frame boundary as + possible. Using this option has precedence over nb_out_samples. + + You can generate the well known 1602-1601-1602-1601-1602 pattern of + 48kHz audio for NTSC frame rate using the frame_rate option. + + ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc - + + pgs_frame_merge + Merge a sequence of PGS Subtitle segments ending with an "end of + display set" segment into a single packet. + + This is required by some containers that support PGS subtitles (muxer + "matroska"). + + prores_metadata + Modify color property metadata embedded in prores stream. + + color_primaries + Set the color primaries. Available values are: + + auto + Keep the same color primaries property (default). + + unknown + bt709 + bt470bg + BT601 625 + + smpte170m + BT601 525 + + bt2020 + smpte431 + DCI P3 + + smpte432 + P3 D65 + + transfer_characteristics + Set the color transfer. Available values are: + + auto + Keep the same transfer characteristics property (default). + + unknown + bt709 + BT 601, BT 709, BT 2020 + + smpte2084 + SMPTE ST 2084 + + arib-std-b67 + ARIB STD-B67 + + matrix_coefficients + Set the matrix coefficient. Available values are: + + auto + Keep the same colorspace property (default). + + unknown + bt709 + smpte170m + BT 601 + + bt2020nc + + Set Rec709 colorspace for each frame of the file + + ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov + + Set Hybrid Log-Gamma parameters for each frame of the file + + ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov + + remove_extra + Remove extradata from packets. + + It accepts the following parameter: + + freq + Set which frame types to remove extradata from. + + k Remove extradata from non-keyframes only. + + keyframe + Remove extradata from keyframes only. + + e, all + Remove extradata from all frames. + + setts + Set PTS and DTS in packets. + + It accepts the following parameters: + + ts + pts + dts Set expressions for PTS, DTS or both. + + duration + Set expression for duration. + + time_base + Set output time base. + + The expressions are evaluated through the eval API and can contain the + following constants: + + N The count of the input packet. Starting from 0. + + TS The demux timestamp in input in case of "ts" or "dts" option or + presentation timestamp in case of "pts" option. + + POS The original position in the file of the packet, or undefined if + undefined for the current packet + + DTS The demux timestamp in input. + + PTS The presentation timestamp in input. + + DURATION + The duration in input. + + STARTDTS + The DTS of the first packet. + + STARTPTS + The PTS of the first packet. + + PREV_INDTS + The previous input DTS. + + PREV_INPTS + The previous input PTS. + + PREV_INDURATION + The previous input duration. + + PREV_OUTDTS + The previous output DTS. + + PREV_OUTPTS + The previous output PTS. + + PREV_OUTDURATION + The previous output duration. + + NEXT_DTS + The next input DTS. + + NEXT_PTS + The next input PTS. + + NEXT_DURATION + The next input duration. + + TB The timebase of stream packet belongs. + + TB_OUT + The output timebase. + + SR The sample rate of stream packet belongs. + + NOPTS + The AV_NOPTS_VALUE constant. + + text2movsub + Convert text subtitles to MOV subtitles (as used by the "mov_text" + codec) with metadata headers. + + See also the mov2textsub filter. + + trace_headers + Log trace output containing all syntax elements in the coded stream + headers (everything above the level of individual coded blocks). This + can be useful for debugging low-level stream issues. + + Supports AV1, H.264, H.265, (M)JPEG, MPEG-2 and VP9, but depending on + the build only a subset of these may be available. + + truehd_core + Extract the core from a TrueHD stream, dropping ATMOS data. + + vp9_metadata + Modify metadata embedded in a VP9 stream. + + color_space + Set the color space value in the frame header. Note that any frame + set to RGB will be implicitly set to PC range and that RGB is + incompatible with profiles 0 and 2. + + unknown + bt601 + bt709 + smpte170 + smpte240 + bt2020 + rgb + color_range + Set the color range value in the frame header. Note that any value + imposed by the color space will take precedence over this value. + + tv + pc + + vp9_superframe + Merge VP9 invisible (alt-ref) frames back into VP9 superframes. This + fixes merging of split/segmented VP9 streams where the alt-ref frame + was split from its visible counterpart. + + vp9_superframe_split + Split VP9 superframes into single frames. + + vp9_raw_reorder + Given a VP9 stream with correct timestamps but possibly out of order, + insert additional show-existing-frame packets to correct the ordering. + +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 enable detecting 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. + + max_probe_packets integer (input) + Set the maximum number of buffered packets when probing a codec. + Default is 2500 packets. + + packetsize integer (output) + Set packet size. + + fflags flags + Set format flags. Some are implemented for a limited number of + formats. + + Possible values for input files: + + discardcorrupt + Discard corrupted packets. + + fastseek + Enable fast, but inaccurate seeks for some formats. + + genpts + Generate missing PTS if DTS is present. + + igndts + Ignore DTS if PTS is set. Inert when nofillin is set. + + ignidx + Ignore index. + + nobuffer + Reduce the latency introduced by buffering during initial input + streams analysis. + + nofillin + Do not fill in missing values in packet fields that can be + exactly calculated. + + noparse + Disable AVParsers, this needs "+nofillin" too. + + sortdts + Try to interleave output packets by DTS. At present, available + only for AVIs with an index. + + Possible values for output files: + + autobsf + Automatically apply bitstream filters as required by the output + format. Enabled by default. + + bitexact + Only write platform-, build- and time-independent data. This + ensures that file and data checksums are reproducible and match + between platforms. Its primary use is for regression testing. + + flush_packets + Write out packets immediately. + + shortest + Stop muxing at the end of the shortest stream. It may be + needed to increase max_interleave_delta to avoid flushing the + longer streams before EOF. + + 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 enable detecting 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. + + max_interleave_delta integer (output) + Set maximum buffering duration for interleaving. The duration is + expressed in microseconds, and defaults to 10000000 (10 seconds). + + To ensure all the streams are interleaved correctly, libavformat + will wait until it has at least one packet for each stream before + actually writing any packets to the output file. When some streams + are "sparse" (i.e. there are large gaps between successive + packets), this can result in excessive buffering. + + This field specifies the maximum difference between the timestamps + of the first and the last packet in the muxing queue, above which + libavformat will output a packet regardless of whether it has + queued a packet for all the streams. + + If set to 0, libavformat will continue buffering packets until it + has a packet for each stream, regardless of the maximum timestamp + difference between the buffered packets. + + use_wallclock_as_timestamps integer (input) + Use wallclock as timestamps if set to 1. Default is 0. + + avoid_negative_ts integer (output) + Possible values: + + make_non_negative + Shift timestamps to make them non-negative. Also note that + this affects only leading negative timestamps, and not non- + monotonic negative timestamps. + + make_zero + Shift timestamps so that the first timestamp is 0. + + auto (default) + Enables shifting when required by the target format. + + disabled + Disables shifting of timestamp. + + 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. + + 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 is -1 + (auto), which means that the underlying protocol will decide, 1 + enables it, and has the effect of reducing the latency, 0 disables + it and may increase IO throughput in some cases. + + output_ts_offset offset (output) + Set the output time offset. + + offset must be a time duration specification, see the Time duration + section in the ffmpeg-utils(1) manual. + + The offset is added by the muxer to the output timestamps. + + Specifying a positive offset means that the corresponding streams + are delayed bt the time duration specified in offset. Default value + is 0 (meaning that no offset is applied). + + format_whitelist list (input) + "," separated list of allowed demuxers. By default all are allowed. + + dump_separator string (input) + Separator used to separate the fields printed on the command line + about the Stream parameters. For example, to separate the fields + with newlines and indentation: + + ffprobe -dump_separator " + " -i ~/videos/matrixbench_mpeg2.mpg + + max_streams integer (input) + Specifies the maximum number of streams. This can be used to reject + files that would require too many resources due to a large number + of streams. + + skip_estimate_duration_from_pts bool (input) + Skip estimation of input duration when calculated using PTS. At + present, applicable for MPEG-PS and MPEG-TS. + + strict, f_strict integer (input/output) + Specify how strictly to follow the standards. "f_strict" is + deprecated and should be used only via the ffmpeg tool. + + Possible values: + + very + strictly conform to an 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. + + Format stream specifiers + Format stream specifiers allow selection of one or more streams that + match specific properties. + + The exact semantics of stream specifiers is defined by the + "avformat_match_stream_specifier()" function declared in the + libavformat/avformat.h header and documented in the Stream specifiers + section in the ffmpeg(1) manual. + +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 "-demuxers" of the ff* tools will display the list of + enabled demuxers. Use "-formats" to view a combined list of enabled + demuxers and muxers. + + The description of some of the currently available demuxers follows. + + aa + Audible Format 2, 3, and 4 demuxer. + + This demuxer is used to demux Audible Format 2, 3, and 4 (.aa) files. + + aac + Raw Audio Data Transport Stream AAC demuxer. + + This demuxer is used to demux an ADTS input containing a single AAC + stream alongwith any ID3v1/2 or APE tags in it. + + apng + Animated Portable Network Graphics demuxer. + + This demuxer is used to demux APNG files. All headers, but the PNG + signature, up to (but not including) the first fcTL chunk are + transmitted as extradata. Frames are then split as being all the + chunks between two fcTL ones, or between the last fcTL and IEND chunks. + + -ignore_loop bool + Ignore the loop variable in the file if set. Default is enabled. + + -max_fps int + Maximum framerate in frames per second. Default of 0 imposes no + limit. + + -default_fps int + Default framerate in frames per second when none is specified in + the file (0 meaning as fast as possible). Default is 15. + + 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. + + 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 packets 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. + + 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 file-related directives apply to that file. + + "ffconcat version 1.0" + Identify the script type and version. + + To make FFmpeg recognize the format automatically, this directive + must appear 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. + + "inpoint timestamp" + In point of the file. When the demuxer opens the file it instantly + seeks to the specified timestamp. Seeking is done so that all + streams can be presented successfully at In point. + + This directive works best with intra frame codecs, because for non- + intra frame ones you will usually get extra packets before the + actual In point and the decoded content will most likely contain + frames before In point too. + + For each file, packets before the file In point will have + timestamps less than the calculated start timestamp of the file + (negative in case of the first file), and the duration of the files + (if not specified by the "duration" directive) will be reduced + based on their specified In point. + + Because of potential packets before the specified In point, packet + timestamps may overlap between two concatenated files. + + "outpoint timestamp" + Out point of the file. When the demuxer reaches the specified + decoding timestamp in any of the streams, it handles it as an end + of file condition and skips the current and all the remaining + packets from all streams. + + Out point is exclusive, which means that the demuxer will not + output packets with a decoding timestamp greater or equal to Out + point. + + This directive works best with intra frame codecs and formats where + all streams are tightly interleaved. For non-intra frame codecs you + will usually get additional packets with presentation timestamp + after Out point therefore the decoded content will most likely + contain frames after Out point too. If your streams are not tightly + interleaved you may not get all the packets from all streams before + Out point and you may only will be able to decode the earliest + stream until Out point. + + The duration of the files (if not specified by the "duration" + directive) will be reduced based on their specified Out point. + + "file_packet_metadata key=value" + Metadata of the packets of the file. The specified metadata will be + set for each file packet. You can specify this directive multiple + times to add multiple metadata entries. This directive is + deprecated, use "file_packet_meta" instead. + + "file_packet_meta key value" + Metadata of the packets of the file. The specified metadata will be + set for each file packet. You can specify this directive multiple + times to add multiple metadata entries. + + "option key value" + Option to access, open and probe the file. Can be present multiple + times. + + "stream" + Introduce a stream in the virtual file. All subsequent stream- + related directives apply to the last introduced stream. Some + streams properties must be set in order to allow identifying the + matching streams in the subfiles. If no streams are defined in the + script, the streams from the first file are copied. + + "exact_stream_id id" + Set the id of the stream. If this directive is given, the string + with the corresponding id in the subfiles will be used. This is + especially useful for MPEG-PS (VOB) files, where the order of the + streams is not reliable. + + "stream_meta key value" + Metadata for the stream. Can be present multiple times. + + "stream_codec value" + Codec for the stream. + + "stream_extradata hex_string" + Extradata for the string, encoded in hexadecimal. + + "chapter id start end" + Add a chapter. id is an unique identifier, possibly small and + consecutive. + + Options + + This demuxer accepts the following option: + + safe + If set to 1, reject unsafe file paths and directives. 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. + + auto_convert + If set to 1, try to perform automatic conversions on packet data to + make the streams concatenable. The default is 1. + + Currently, the only conversion is adding the h264_mp4toannexb + bitstream filter to H.264 streams in MP4 format. This is necessary + in particular if there are resolution changes. + + segment_time_metadata + If set to 1, every packet will contain the lavf.concat.start_time + and the lavf.concat.duration packet metadata values which are the + start_time and the duration of the respective file segments in the + concatenated output expressed in microseconds. The duration + metadata is only set if it is known based on the concat file. The + default is 0. + + Examples + + o Use absolute filenames and include some comments: + + # my first filename + file /mnt/share/file-1.wav + # my second filename including whitespace + file '/mnt/share/file 2.wav' + # my third filename including whitespace plus single quote + file '/mnt/share/file 3'\''.wav' + + o Allow for input format auto-probing, use safe filenames and set the + duration of the first file: + + ffconcat version 1.0 + + file file-1.wav + duration 20.0 + + file subdir/file-2.wav + + dash + Dynamic Adaptive Streaming over HTTP demuxer. + + This demuxer presents all AVStreams found in the manifest. By setting + the discard flags on AVStreams the caller can decide which streams to + actually receive. Each stream mirrors the "id" and "bandwidth" + properties from the "" as metadata keys named "id" and + "variant_bitrate" respectively. + + Options + + This demuxer accepts the following option: + + cenc_decryption_key + 16-byte key, in hex, to decrypt files encrypted using ISO Common + Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). + + ea + Electronic Arts Multimedia format demuxer. + + This format is used by various Electronic Arts games. + + Options + + merge_alpha bool + Normally the VP6 alpha channel (if exists) is returned as a + secondary video stream, by setting this option you can make the + demuxer return a single video stream which contains the alpha + channel in addition to the ordinary video. + + imf + Interoperable Master Format demuxer. + + This demuxer presents audio and video streams found in an IMF + Composition. + + flv, live_flv, kux + Adobe Flash Video Format demuxer. + + This demuxer is used to demux FLV files and RTMP network streams. In + case of live network streams, if you force format, you may use live_flv + option instead of flv to survive timestamp discontinuities. KUX is a + flv variant used on the Youku platform. + + ffmpeg -f flv -i myfile.flv ... + ffmpeg -f live_flv -i rtmp:///anything/key .... + + -flv_metadata bool + Allocate the streams according to the onMetaData array content. + + -flv_ignore_prevtag bool + Ignore the size of previous tag value. + + -flv_full_metadata bool + Output all context of the onMetadata. + + gif + Animated GIF demuxer. + + It accepts the following options: + + min_delay + Set the minimum valid delay between frames in hundredths of + seconds. Range is 0 to 6000. Default value is 2. + + max_gif_delay + Set the maximum valid delay between frames in hundredth of seconds. + Range is 0 to 65535. Default value is 65535 (nearly eleven + minutes), the maximum value allowed by the specification. + + default_delay + Set the default delay between frames in hundredths of seconds. + Range is 0 to 6000. Default value is 10. + + ignore_loop + GIF files can contain information to loop a certain number of times + (or infinitely). If ignore_loop is set to 1, then the loop setting + from the input will be ignored and looping will not occur. If set + to 0, then looping will occur and will cycle the number of times + according to the GIF. Default value is 1. + + For example, with the overlay filter, place an infinitely looping GIF + over another video: + + ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv + + Note that in the above example the shortest option for overlay filter + is used to end the output video at the length of the shortest input + file, which in this case is input.mp4 as the GIF in this example loops + infinitely. + + hls + HLS demuxer + + 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". + + It accepts the following options: + + live_start_index + segment index to start live streams at (negative values are from + the end). + + prefer_x_start + prefer to use #EXT-X-START if it's in playlist instead of + live_start_index. + + allowed_extensions + ',' separated list of file extensions that hls is allowed to + access. + + max_reload + Maximum number of times a insufficient list is attempted to be + reloaded. Default value is 1000. + + m3u8_hold_counters + The maximum number of times to load m3u8 when it refreshes without + new segments. Default value is 1000. + + http_persistent + Use persistent HTTP connections. Applicable only for HTTP streams. + Enabled by default. + + http_multiple + Use multiple HTTP connections for downloading HTTP segments. + Enabled by default for HTTP/1.1 servers. + + http_seekable + Use HTTP partial requests for downloading HTTP segments. 0 = + disable, 1 = enable, -1 = auto, Default is auto. + + seg_format_options + Set options for the demuxer of media segments using a list of + key=value pairs separated by ":". + + seg_max_retry + Maximum number of times to reload a segment on error, useful when + segment skip on network error is not desired. Default value is 0. + + 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. + + none + Disable pattern matching, therefore the video will only contain + the specified image. You should use this option if you do not + want to create sequences from multiple images and your + filenames may contain special pattern characters. + + 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. If + set to 2, will set frame timestamp to the modification time of the + image file in nanosecond precision. + + 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. + + export_path_metadata + If set to 1, will add two extra fields to the metadata found in + input, making them also available for other filters (see drawtext + filter for examples). Default value is 0. The extra fields are + described below: + + lavf.image2dec.source_path + Corresponds to the full path to the input file being read. + + lavf.image2dec.source_basename + Corresponds to the name of the file being read. + + Examples + + o 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 + + o 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 + + o 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 + + libgme + The Game Music Emu library is a collection of video game music file + emulators. + + See for more + information. + + It accepts the following options: + + track_index + Set the index of which track to demux. The demuxer can only export + one track. Track indexes start at 0. Default is to pick the first + track. Number of tracks is exported as tracks metadata entry. + + sample_rate + Set the sampling rate of the exported track. Range is 1000 to + 999999. Default is 44100. + + max_size (bytes) + The demuxer buffers the entire file into memory. Adjust this value + to set the maximum buffer size, which in turn, acts as a ceiling + for the size of files that can be read. Default is 50 MiB. + + libmodplug + ModPlug based module demuxer + + See + + It will export one 2-channel 16-bit 44.1 kHz audio stream. Optionally, + a "pal8" 16-color video stream can be exported with or without printed + metadata. + + It accepts the following options: + + noise_reduction + Apply a simple low-pass filter. Can be 1 (on) or 0 (off). Default + is 0. + + reverb_depth + Set amount of reverb. Range 0-100. Default is 0. + + reverb_delay + Set delay in ms, clamped to 40-250 ms. Default is 0. + + bass_amount + Apply bass expansion a.k.a. XBass or megabass. Range is 0 (quiet) + to 100 (loud). Default is 0. + + bass_range + Set cutoff i.e. upper-bound for bass frequencies. Range is 10-100 + Hz. Default is 0. + + surround_depth + Apply a Dolby Pro-Logic surround effect. Range is 0 (quiet) to 100 + (heavy). Default is 0. + + surround_delay + Set surround delay in ms, clamped to 5-40 ms. Default is 0. + + max_size + The demuxer buffers the entire file into memory. Adjust this value + to set the maximum buffer size, which in turn, acts as a ceiling + for the size of files that can be read. Range is 0 to 100 MiB. 0 + removes buffer size limit (not recommended). Default is 5 MiB. + + video_stream_expr + String which is evaluated using the eval API to assign colors to + the generated video stream. Variables which can be used are "x", + "y", "w", "h", "t", "speed", "tempo", "order", "pattern" and "row". + + video_stream + Generate video stream. Can be 1 (on) or 0 (off). Default is 0. + + video_stream_w + Set video frame width in 'chars' where one char indicates 8 pixels. + Range is 20-512. Default is 30. + + video_stream_h + Set video frame height in 'chars' where one char indicates 8 + pixels. Range is 20-512. Default is 30. + + video_stream_ptxt + Print metadata on video stream. Includes "speed", "tempo", "order", + "pattern", "row" and "ts" (time in ms). Can be 1 (on) or 0 (off). + Default is 1. + + libopenmpt + libopenmpt based module demuxer + + See for more information. + + Some files have multiple subsongs (tracks) this can be set with the + subsong option. + + It accepts the following options: + + subsong + Set the subsong index. This can be either 'all', 'auto', or the + index of the subsong. Subsong indexes start at 0. The default is + 'auto'. + + The default value is to let libopenmpt choose. + + layout + Set the channel layout. Valid values are 1, 2, and 4 channel + layouts. The default value is STEREO. + + sample_rate + Set the sample rate for libopenmpt to output. Range is from 1000 + to INT_MAX. The value default is 48000. + + mov/mp4/3gp + Demuxer for Quicktime File Format & ISO/IEC Base Media File Format + (ISO/IEC 14496-12 or MPEG-4 Part 12, ISO/IEC 15444-12 or JPEG 2000 Part + 12). + + Registered extensions: mov, mp4, m4a, 3gp, 3g2, mj2, psp, m4b, ism, + ismv, isma, f4v + + Options + + This demuxer accepts the following options: + + enable_drefs + Enable loading of external tracks, disabled by default. Enabling + this can theoretically leak information in some use cases. + + use_absolute_path + Allows loading of external tracks via absolute paths, disabled by + default. Enabling this poses a security risk. It should only be + enabled if the source is known to be non-malicious. + + seek_streams_individually + When seeking, identify the closest point in each stream + individually and demux packets in that stream from identified + point. This can lead to a different sequence of packets compared to + demuxing linearly from the beginning. Default is true. + + ignore_editlist + Ignore any edit list atoms. The demuxer, by default, modifies the + stream index to reflect the timeline described by the edit list. + Default is false. + + advanced_editlist + Modify the stream index to reflect the timeline described by the + edit list. "ignore_editlist" must be set to false for this option + to be effective. If both "ignore_editlist" and this option are set + to false, then only the start of the stream index is modified to + reflect initial dwell time or starting timestamp described by the + edit list. Default is true. + + ignore_chapters + Don't parse chapters. This includes GoPro 'HiLight' tags/moments. + Note that chapters are only parsed when input is seekable. Default + is false. + + use_mfra_for + For seekable fragmented input, set fragment's starting timestamp + from media fragment random access box, if present. + + Following options are available: + + auto + Auto-detect whether to set mfra timestamps as PTS or DTS + (default) + + dts Set mfra timestamps as DTS + + pts Set mfra timestamps as PTS + + 0 Don't use mfra box to set timestamps + + use_tfdt + For fragmented input, set fragment's starting timestamp to + "baseMediaDecodeTime" from the "tfdt" box. Default is enabled, + which will prefer to use the "tfdt" box to set DTS. Disable to use + the "earliest_presentation_time" from the "sidx" box. In either + case, the timestamp from the "mfra" box will be used if it's + available and "use_mfra_for" is set to pts or dts. + + export_all + Export unrecognized boxes within the udta box as metadata entries. + The first four characters of the box type are set as the key. + Default is false. + + export_xmp + Export entire contents of XMP_ box and uuid box as a string with + key "xmp". Note that if "export_all" is set and this option isn't, + the contents of XMP_ box are still exported but with key "XMP_". + Default is false. + + activation_bytes + 4-byte key required to decrypt Audible AAX and AAX+ files. See + Audible AAX subsection below. + + audible_fixed_key + Fixed key used for handling Audible AAX/AAX+ files. It has been + pre-set so should not be necessary to specify. + + decryption_key + 16-byte key, in hex, to decrypt files encrypted using ISO Common + Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). + + max_stts_delta + Very high sample deltas written in a trak's stts box may + occasionally be intended but usually they are written in error or + used to store a negative value for dts correction when treated as + signed 32-bit integers. This option lets the user set an upper + limit, beyond which the delta is clamped to 1. Values greater than + the limit if negative when cast to int32 are used to adjust onward + dts. + + Unit is the track time scale. Range is 0 to UINT_MAX. Default is + "UINT_MAX - 48000*10" which allows upto a 10 second dts correction + for 48 kHz audio streams while accommodating 99.9% of "uint32" + range. + + Audible AAX + + Audible AAX files are encrypted M4B files, and they can be decrypted by + specifying a 4 byte activation secret. + + ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4 + + mpegts + MPEG-2 transport stream demuxer. + + This demuxer accepts the following options: + + resync_size + Set size limit for looking up a new synchronization. Default value + is 65536. + + skip_unknown_pmt + Skip PMTs for programs not defined in the PAT. Default value is 0. + + fix_teletext_pts + Override 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. + + ts_packetsize + Output option carrying the raw packet size in bytes. Show the + detected raw packet size, cannot be set by the user. + + scan_all_pmts + Scan and combine all PMTs. The value is an integer with value from + -1 to 1 (-1 means automatic setting, 1 means enabled, 0 means + disabled). Default value is -1. + + merge_pmt_versions + Re-use existing streams when a PMT's version is updated and + elementary streams move to different PIDs. Default value is 0. + + max_packet_size + Set maximum size, in bytes, of packet emitted by the demuxer. + Payloads above this size are split across multiple packets. Range + is 1 to INT_MAX/2. Default is 204800 bytes. + + mpjpeg + MJPEG encapsulated in multi-part MIME demuxer. + + This demuxer allows reading of MJPEG, where each frame is represented + as a part of multipart/x-mixed-replace stream. + + strict_mime_boundary + Default implementation applies a relaxed standard to multi-part + MIME boundary detection, to prevent regression with numerous + existing endpoints not generating a proper MIME MJPEG stream. + Turning this option on by setting it to 1 will result in a stricter + check of the boundary value. + + rawvideo + Raw video demuxer. + + This demuxer allows one to read raw video data. Since there is no + header specifying the assumed video parameters, the user must specify + them in order to be able to decode the data correctly. + + 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 + + sbg + SBaGen script demuxer. + + This demuxer reads the script language used by 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. + + tedcaptions + JSON captions used for . + + 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 + + vapoursynth + Vapoursynth wrapper. + + Due to security concerns, Vapoursynth scripts will not be autodetected + so the input format has to be forced. For ff* CLI tools, add "-f + vapoursynth" before the input "-i yourscript.vpy". + + This demuxer accepts the following option: + + max_script_size + The demuxer buffers the entire script into memory. Adjust this + value to set the maximum buffer size, which in turn, acts as a + ceiling for the size of scripts that can be read. Default is 1 + MiB. + +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 "-muxers" of the ff* tools will display the list of enabled + muxers. Use "-formats" to view a combined list of enabled demuxers and + muxers. + + A description of some of the currently available muxers follows. + + a64 + A64 muxer for Commodore 64 video. Accepts a single "a64_multi" or + "a64_multi5" codec video stream. + + adts + Audio Data Transport Stream muxer. It accepts a single AAC stream. + + Options + + It accepts the following options: + + write_id3v2 bool + Enable to write ID3v2.4 tags at the start of the stream. Default is + disabled. + + write_apetag bool + Enable to write APE tags at the end of the stream. Default is + disabled. + + write_mpeg2 bool + Enable to set MPEG version bit in the ADTS frame header to 1 which + indicates MPEG-2. Default is 0, which indicates MPEG-4. + + aiff + Audio Interchange File Format muxer. + + Options + + 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. + + alp + Muxer for audio of High Voltage Software's Lego Racers game. It accepts + a single ADPCM_IMA_ALP stream with no more than 2 channels nor a sample + rate greater than 44100 Hz. + + Extensions: tun, pcm + + Options + + It accepts the following options: + + type type + Set file type. + + tun Set file type as music. Must have a sample rate of 22050 Hz. + + pcm Set file type as sfx. + + auto + Set file type as per output file extension. ".pcm" results in + type "pcm" else type "tun" is set. (default) + + asf + Advanced Systems Format muxer. + + Note that Windows Media Audio (wma) and Windows Media Video (wmv) use + this muxer too. + + Options + + It accepts the following options: + + packet_size + Set the muxer packet size. By tuning this setting you may reduce + data fragmentation or muxer overhead depending on your source. + Default value is 3200, minimum is 100, maximum is 64k. + + avi + Audio Video Interleaved muxer. + + Options + + It accepts the following options: + + reserve_index_space + Reserve the specified amount of bytes for the OpenDML master index + of each stream within the file header. By default additional master + indexes are embedded within the data packets if there is no space + left in the first master index and are linked together as a chain + of indexes. This index structure can cause problems for some use + cases, e.g. third-party software strictly relying on the OpenDML + index specification or when file seeking is slow. Reserving enough + index space in the file header avoids these problems. + + The required index space depends on the output file size and should + be about 16 bytes per gigabyte. When this option is omitted or set + to zero the necessary index space is guessed. + + write_channel_mask + Write the channel layout mask into the audio stream header. + + This option is enabled by default. Disabling the channel mask can + be useful in specific scenarios, e.g. when merging multiple audio + streams into one for compatibility with software that only supports + a single audio stream in AVI (see the "amerge" section in the + ffmpeg-filters manual). + + flipped_raw_rgb + If set to true, store positive height for raw RGB bitmaps, which + indicates bitmap is stored bottom-up. Note that this option does + not flip the bitmap which has to be done manually beforehand, e.g. + by using the vflip filter. Default is false and indicates bitmap + is stored top down. + + chromaprint + Chromaprint fingerprinter. + + This muxer feeds audio data to the Chromaprint library, which generates + a fingerprint for the provided audio data. See + + + It takes a single signed native-endian 16-bit raw audio stream of at + most 2 channels. + + Options + + silence_threshold + Threshold for detecting silence. Range is from -1 to 32767, where + -1 disables silence detection. Silence detection can only be used + with version 3 of the algorithm. Silence detection must be + disabled for use with the AcoustID service. Default is -1. + + algorithm + Version of algorithm to fingerprint with. Range is 0 to 4. Version + 3 enables silence detection. Default is 1. + + fp_format + Format to output the fingerprint as. Accepts the following options: + + raw Binary raw fingerprint + + compressed + Binary compressed fingerprint + + base64 + Base64 compressed fingerprint (default) + + 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. + + See also the framecrc muxer. + + Examples + + 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 - + + dash + Dynamic Adaptive Streaming over HTTP (DASH) muxer that creates segments + and manifest files according to the MPEG-DASH standard ISO/IEC + 23009-1:2014. + + For more information see: + + o ISO DASH Specification: + + + o WebM DASH Specification: + + + It creates a MPD manifest file and segment files for each stream. + + The segment filename might contain pre-defined identifiers used with + SegmentTemplate as defined in section 5.3.9.4.4 of the standard. + Available identifiers are "$RepresentationID$", "$Number$", + "$Bandwidth$" and "$Time$". In addition to the standard identifiers, + an ffmpeg-specific "$ext$" identifier is also supported. When + specified ffmpeg will replace $ext$ in the file name with muxing + format's extensions such as mp4, webm etc., + + ffmpeg -re -i -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \ + -b:v:0 800k -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline \ + -profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 \ + -b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 \ + -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" \ + -f dash /path/to/out.mpd + + seg_duration duration + Set the segment length in seconds (fractional value can be set). + The value is treated as average segment duration when use_template + is enabled and use_timeline is disabled and as minimum segment + duration for all the other use cases. + + frag_duration duration + Set the length in seconds of fragments within segments (fractional + value can be set). + + frag_type type + Set the type of interval for fragmentation. + + window_size size + Set the maximum number of segments kept in the manifest. + + extra_window_size size + Set the maximum number of segments kept outside of the manifest + before removing from disk. + + remove_at_exit remove + Enable (1) or disable (0) removal of all segments when finished. + + use_template template + Enable (1) or disable (0) use of SegmentTemplate instead of + SegmentList. + + use_timeline timeline + Enable (1) or disable (0) use of SegmentTimeline in + SegmentTemplate. + + single_file single_file + Enable (1) or disable (0) storing all segments in one file, + accessed using byte ranges. + + single_file_name file_name + DASH-templated name to be used for baseURL. Implies single_file set + to "1". In the template, "$ext$" is replaced with the file name + extension specific for the segment format. + + init_seg_name init_name + DASH-templated name to used for the initialization segment. Default + is "init-stream$RepresentationID$.$ext$". "$ext$" is replaced with + the file name extension specific for the segment format. + + media_seg_name segment_name + DASH-templated name to used for the media segments. Default is + "chunk-stream$RepresentationID$-$Number%05d$.$ext$". "$ext$" is + replaced with the file name extension specific for the segment + format. + + utc_timing_url utc_url + URL of the page that will return the UTC timestamp in ISO format. + Example: "https://time.akamai.com/?iso" + + method method + Use the given HTTP method to create output files. Generally set to + PUT or POST. + + http_user_agent user_agent + Override User-Agent field in HTTP header. Applicable only for HTTP + output. + + http_persistent http_persistent + Use persistent HTTP connections. Applicable only for HTTP output. + + hls_playlist hls_playlist + Generate HLS playlist files as well. The master playlist is + generated with the filename hls_master_name. One media playlist + file is generated for each stream with filenames media_0.m3u8, + media_1.m3u8, etc. + + hls_master_name file_name + HLS master playlist name. Default is "master.m3u8". + + streaming streaming + Enable (1) or disable (0) chunk streaming mode of output. In chunk + streaming mode, each frame will be a moof fragment which forms a + chunk. + + adaptation_sets adaptation_sets + Assign streams to AdaptationSets. Syntax is "id=x,streams=a,b,c + id=y,streams=d,e" with x and y being the IDs of the adaptation sets + and a,b,c,d and e are the indices of the mapped streams. + + To map all video (or audio) streams to an AdaptationSet, "v" (or + "a") can be used as stream identifier instead of IDs. + + When no assignment is defined, this defaults to an AdaptationSet + for each stream. + + Optional syntax is + "id=x,seg_duration=x,frag_duration=x,frag_type=type,descriptor=descriptor_string,streams=a,b,c + id=y,seg_duration=y,frag_type=type,streams=d,e" and so on, + descriptor is useful to the scheme defined by ISO/IEC + 23009-1:2014/Amd.2:2015. For example, -adaptation_sets + "id=0,descriptor=,streams=v". Please note that descriptor + string should be a self-closing xml tag. seg_duration, + frag_duration and frag_type override the global option values for + each adaptation set. For example, -adaptation_sets + "id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v + id=1,seg_duration=2,frag_type=none,streams=a" type_id marks an + adaptation set as containing streams meant to be used for Trick + Mode for the referenced adaptation set. For example, + -adaptation_sets "id=0,seg_duration=2,frag_type=none,streams=0 + id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1" + + timeout timeout + Set timeout for socket I/O operations. Applicable only for HTTP + output. + + index_correction index_correction + Enable (1) or Disable (0) segment index correction logic. + Applicable only when use_template is enabled and use_timeline is + disabled. + + When enabled, the logic monitors the flow of segment indexes. If a + streams's segment index value is not at the expected real time + position, then the logic corrects that index value. + + Typically this logic is needed in live streaming use cases. The + network bandwidth fluctuations are common during long run + streaming. Each fluctuation can cause the segment indexes fall + behind the expected real time position. + + format_options options_list + Set container format (mp4/webm) options using a ":" separated list + of key=value parameters. Values containing ":" special characters + must be escaped. + + global_sidx global_sidx + Write global SIDX atom. Applicable only for single file, mp4 + output, non-streaming mode. + + dash_segment_type dash_segment_type + Possible values: + + auto + If this flag is set, the dash segment files format will be + selected based on the stream codec. This is the default mode. + + mp4 If this flag is set, the dash segment files will be in in + ISOBMFF format. + + webm + If this flag is set, the dash segment files will be in in WebM + format. + + ignore_io_errors ignore_io_errors + Ignore IO errors during open and write. Useful for long-duration + runs with network output. + + lhls lhls + Enable Low-latency HLS(LHLS). Adds #EXT-X-PREFETCH tag with current + segment's URI. hls.js player folks are trying to standardize an + open LHLS spec. The draft spec is available in + https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md + This option tries to comply with the above open spec. It enables + streaming and hls_playlist options automatically. This is an + experimental feature. + + Note: This is not Apple's version LHLS. See + + + ldash ldash + Enable Low-latency Dash by constraining the presence and values of + some elements. + + master_m3u8_publish_rate master_m3u8_publish_rate + Publish master playlist repeatedly every after specified number of + segment intervals. + + write_prft write_prft + Write Producer Reference Time elements on supported streams. This + also enables writing prft boxes in the underlying muxer. Applicable + only when the utc_url option is enabled. It's set to auto by + default, in which case the muxer will attempt to enable it only in + modes that require it. + + mpd_profile mpd_profile + Set one or more manifest profiles. + + http_opts http_opts + A :-separated list of key=value options to pass to the underlying + HTTP protocol. Applicable only for HTTP output. + + target_latency target_latency + Set an intended target latency in seconds (fractional value can be + set) for serving. Applicable only when streaming and write_prft + options are enabled. This is an informative fields clients can use + to measure the latency of the service. + + min_playback_rate min_playback_rate + Set the minimum playback rate indicated as appropriate for the + purposes of automatically adjusting playback latency and buffer + occupancy during normal playback by clients. + + max_playback_rate max_playback_rate + Set the maximum playback rate indicated as appropriate for the + purposes of automatically adjusting playback latency and buffer + occupancy during normal playback by clients. + + update_period update_period + Set the mpd update period ,for dynamic content. + The unit is second. + + fifo + The fifo pseudo-muxer allows the separation of encoding and muxing by + using first-in-first-out queue and running the actual muxer in a + separate thread. This is especially useful in combination with the tee + muxer and can be used to send data to several destinations with + different reliability/writing speed/latency. + + API users should be aware that callback functions (interrupt_callback, + io_open and io_close) used within its AVFormatContext must be thread- + safe. + + The behavior of the fifo muxer if the queue fills up or if the output + fails is selectable, + + o output can be transparently restarted with configurable delay + between retries based on real time or time of the processed stream. + + o encoding can be blocked during temporary failure, or continue + transparently dropping packets in case fifo queue fills up. + + fifo_format + Specify the format name. Useful if it cannot be guessed from the + output name suffix. + + queue_size + Specify size of the queue (number of packets). Default value is 60. + + format_opts + Specify format options for the underlying muxer. Muxer options can + be specified as a list of key=value pairs separated by ':'. + + drop_pkts_on_overflow bool + If set to 1 (true), in case the fifo queue fills up, packets will + be dropped rather than blocking the encoder. This makes it possible + to continue streaming without delaying the input, at the cost of + omitting part of the stream. By default this option is set to 0 + (false), so in such cases the encoder will be blocked until the + muxer processes some of the packets and none of them is lost. + + attempt_recovery bool + If failure occurs, attempt to recover the output. This is + especially useful when used with network output, since it makes it + possible to restart streaming transparently. By default this + option is set to 0 (false). + + max_recovery_attempts + Sets maximum number of successive unsuccessful recovery attempts + after which the output fails permanently. By default this option is + set to 0 (unlimited). + + recovery_wait_time duration + Waiting time before the next recovery attempt after previous + unsuccessful recovery attempt. Default value is 5 seconds. + + recovery_wait_streamtime bool + If set to 0 (false), the real time is used when waiting for the + recovery attempt (i.e. the recovery will be attempted after at + least recovery_wait_time seconds). If set to 1 (true), the time of + the processed stream is taken into account instead (i.e. the + recovery will be attempted after at least recovery_wait_time + seconds of the stream is omitted). By default, this option is set + to 0 (false). + + recover_any_error bool + If set to 1 (true), recovery will be attempted regardless of type + of the error causing the failure. By default this option is set to + 0 (false) and in case of certain (usually permanent) errors the + recovery is not attempted even when attempt_recovery is set to 1. + + restart_with_keyframe bool + Specify whether to wait for the keyframe after recovering from + queue overflow or failure. This option is set to 0 (false) by + default. + + timeshift duration + Buffer the specified amount of packets and delay writing the + output. Note that queue_size must be big enough to store the + packets for timeshift. At the end of the input the fifo buffer is + flushed at realtime speed. + + Examples + + o Stream something to rtmp server, continue processing the stream at + real-time rate even in case of temporary failure (network outage) + and attempt to recover streaming every second indefinitely. + + ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv -map 0:v -map 0:a + -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 rtmp://example.com/live/stream_name + + flv + Adobe Flash Video Format muxer. + + This muxer accepts the following options: + + flvflags flags + Possible values: + + aac_seq_header_detect + Place AAC sequence header based on audio stream data. + + no_sequence_end + Disable sequence end tag. + + no_metadata + Disable metadata tag. + + no_duration_filesize + Disable duration and filesize in metadata when they are equal + to zero at the end of stream. (Be used to non-seekable living + stream). + + add_keyframe_index + Used to facilitate seeking; particularly for HTTP pseudo + streaming. + + 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: + + , , , , , 0x + + CRC is a hexadecimal number 0-padded to 8 digits containing the CRC of + the packet. + + Examples + + 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. + + framehash + Per-packet hash testing format. + + This muxer computes and prints a cryptographic hash for each audio and + video packet. This can be used for packet-by-packet equality checks + without having to individually do a binary comparison on each. + + By default audio frames are converted to signed 16-bit raw audio and + video frames to raw video before computing the hash, but the output of + explicit conversions to other codecs can also be used. It uses the + SHA-256 cryptographic hash function by default, but supports several + other algorithms. + + The output of the muxer consists of a line for each audio and video + packet of the form: + + , , , , , + + hash is a hexadecimal number representing the computed hash for the + packet. + + hash algorithm + Use the cryptographic hash function specified by the string + algorithm. Supported values include "MD5", "murmur3", "RIPEMD128", + "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA160", "SHA224", "SHA256" + (default), "SHA512/224", "SHA512/256", "SHA384", "SHA512", "CRC32" + and "adler32". + + Examples + + To compute the SHA-256 hash of the audio and video frames in INPUT, + converted to raw audio and video packets, and store it in the file + out.sha256: + + ffmpeg -i INPUT -f framehash out.sha256 + + To print the information to stdout, using the MD5 hash function, use + the command: + + ffmpeg -i INPUT -f framehash -hash md5 - + + See also the hash muxer. + + framemd5 + Per-packet MD5 testing format. + + This is a variant of the framehash muxer. Unlike that muxer, it + defaults to using the MD5 hash function. + + Examples + + To compute the MD5 hash 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 framehash and md5 muxers. + + gif + Animated GIF muxer. + + It accepts the following options: + + loop + Set the number of times to loop the output. Use "-1" for no loop, 0 + for looping indefinitely (default). + + final_delay + Force the delay (expressed in centiseconds) after the last frame. + Each frame ends with a delay until the next frame. The default is + "-1", which is a special value to tell the muxer to re-use the + previous delay. In case of a loop, you might want to customize this + value to mark a pause for instance. + + For example, to encode a gif looping 10 times, with a 5 seconds delay + between the loops: + + ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif + + Note 1: if you wish to extract the frames into separate GIF files, you + need to force the image2 muxer: + + ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif" + + Note 2: the GIF format has a very large time base: the delay between + two frames can therefore not be smaller than one centi second. + + hash + Hash testing format. + + This muxer computes and prints a cryptographic hash of all the input + audio and video frames. This can be used for equality checks without + having to do a complete binary comparison. + + By default audio frames are converted to signed 16-bit raw audio and + video frames to raw video before computing the hash, but the output of + explicit conversions to other codecs can also be used. Timestamps are + ignored. It uses the SHA-256 cryptographic hash function by default, + but supports several other algorithms. + + The output of the muxer consists of a single line of the form: + algo=hash, where algo is a short string representing the hash function + used, and hash is a hexadecimal number representing the computed hash. + + hash algorithm + Use the cryptographic hash function specified by the string + algorithm. Supported values include "MD5", "murmur3", "RIPEMD128", + "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA160", "SHA224", "SHA256" + (default), "SHA512/224", "SHA512/256", "SHA384", "SHA512", "CRC32" + and "adler32". + + Examples + + To compute the SHA-256 hash of the input converted to raw audio and + video, and store it in the file out.sha256: + + ffmpeg -i INPUT -f hash out.sha256 + + To print an MD5 hash to stdout use the command: + + ffmpeg -i INPUT -f hash -hash md5 - + + See also the framehash muxer. + + hls + Apple HTTP Live Streaming muxer that segments MPEG-TS according to the + HTTP Live Streaming (HLS) specification. + + It creates a playlist file, and one or more segment files. The output + filename specifies the playlist filename. + + By default, the muxer creates a file for each segment produced. These + files have the same name as the playlist, followed by a sequential + number and a .ts extension. + + Make sure to require a closed GOP when encoding and to set the GOP size + to fit your segment time constraint. + + For example, to convert an input file with ffmpeg: + + ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8 + + This example will produce the playlist, out.m3u8, and segment files: + out0.ts, out1.ts, out2.ts, etc. + + See also the segment muxer, which provides a more generic and flexible + implementation of a segmenter, and can be used to perform HLS + segmentation. + + Options + + This muxer supports the following options: + + hls_init_time duration + Set the initial target segment length. Default value is 0. + + duration must be a time duration specification, see the Time + duration section in the ffmpeg-utils(1) manual. + + Segment will be cut on the next key frame after this time has + passed on the first m3u8 list. After the initial playlist is + filled ffmpeg will cut segments at duration equal to "hls_time" + + hls_time duration + Set the target segment length. Default value is 2. + + duration must be a time duration specification, see the Time + duration section in the ffmpeg-utils(1) manual. Segment will be + cut on the next key frame after this time has passed. + + hls_list_size size + Set the maximum number of playlist entries. If set to 0 the list + file will contain all the segments. Default value is 5. + + hls_delete_threshold size + Set the number of unreferenced segments to keep on disk before + "hls_flags delete_segments" deletes them. Increase this to allow + continue clients to download segments which were recently + referenced in the playlist. Default value is 1, meaning segments + older than "hls_list_size+1" will be deleted. + + hls_start_number_source + Start the playlist sequence number ("#EXT-X-MEDIA-SEQUENCE") + according to the specified source. Unless "hls_flags single_file" + is set, it also specifies source of starting sequence numbers of + segment and subtitle filenames. In any case, if "hls_flags + append_list" is set and read playlist sequence number is greater + than the specified start sequence number, then that value will be + used as start value. + + It accepts the following values: + + generic (default) + Set the starting sequence numbers according to start_number + option value. + + epoch + The start number will be the seconds since epoch (1970-01-01 + 00:00:00) + + epoch_us + The start number will be the microseconds since epoch + (1970-01-01 00:00:00) + + datetime + The start number will be based on the current date/time as + YYYYmmddHHMMSS. e.g. 20161231235759. + + start_number number + Start the playlist sequence number ("#EXT-X-MEDIA-SEQUENCE") from + the specified number when hls_start_number_source value is generic. + (This is the default case.) Unless "hls_flags single_file" is set, + it also specifies starting sequence numbers of segment and subtitle + filenames. Default value is 0. + + hls_allow_cache allowcache + Explicitly set whether the client MAY (1) or MUST NOT (0) cache + media segments. + + hls_base_url baseurl + Append baseurl to every entry in the playlist. Useful to generate + playlists with absolute paths. + + Note that the playlist sequence number must be unique for each + segment and it is not to be confused with the segment filename + sequence number which can be cyclic, for example if the wrap option + is specified. + + hls_segment_filename filename + Set the segment filename. Unless "hls_flags single_file" is set, + filename is used as a string format with the segment number: + + ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8 + + This example will produce the playlist, out.m3u8, and segment + files: file000.ts, file001.ts, file002.ts, etc. + + filename may contain full path or relative path specification, but + only the file name part without any path info will be contained in + the m3u8 segment list. Should a relative path be specified, the + path of the created segment files will be relative to the current + working directory. When strftime_mkdir is set, the whole expanded + value of filename will be written into the m3u8 segment list. + + When "var_stream_map" is set with two or more variant streams, the + filename pattern must contain the string "%v", this string + specifies the position of variant stream index in the generated + segment file names. + + ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ + -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ + -hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8 + + This example will produce the playlists segment file sets: + file_0_000.ts, file_0_001.ts, file_0_002.ts, etc. and + file_1_000.ts, file_1_001.ts, file_1_002.ts, etc. + + The string "%v" may be present in the filename or in the last + directory name containing the file, but only in one of them. + (Additionally, %v may appear multiple times in the last sub- + directory or filename.) If the string %v is present in the + directory name, then sub-directories are created after expanding + the directory name pattern. This enables creation of segments + corresponding to different variant streams in subdirectories. + + ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ + -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ + -hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8 + + This example will produce the playlists segment file sets: + vs0/file_000.ts, vs0/file_001.ts, vs0/file_002.ts, etc. and + vs1/file_000.ts, vs1/file_001.ts, vs1/file_002.ts, etc. + + strftime + Use strftime() on filename to expand the segment filename with + localtime. The segment number is also available in this mode, but + to use it, you need to specify second_level_segment_index hls_flag + and %%d will be the specifier. + + ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8 + + This example will produce the playlist, out.m3u8, and segment + files: file-20160215-1455569023.ts, file-20160215-1455569024.ts, + etc. Note: On some systems/environments, the %s specifier is not + available. See + "strftime()" documentation. + + ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8 + + This example will produce the playlist, out.m3u8, and segment + files: file-20160215-0001.ts, file-20160215-0002.ts, etc. + + strftime_mkdir + Used together with -strftime_mkdir, it will create all + subdirectories which is expanded in filename. + + ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8 + + This example will create a directory 201560215 (if it does not + exist), and then produce the playlist, out.m3u8, and segment files: + 20160215/file-20160215-1455569023.ts, + 20160215/file-20160215-1455569024.ts, etc. + + ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8 + + This example will create a directory hierarchy 2016/02/15 (if any + of them do not exist), and then produce the playlist, out.m3u8, and + segment files: 2016/02/15/file-20160215-1455569023.ts, + 2016/02/15/file-20160215-1455569024.ts, etc. + + hls_segment_options options_list + Set output format options using a :-separated list of key=value + parameters. Values containing ":" special characters must be + escaped. + + hls_key_info_file key_info_file + Use the information in key_info_file for segment encryption. The + first line of key_info_file specifies the key URI written to the + playlist. The key URL is used to access the encryption key during + playback. The second line specifies the path to the key file used + to obtain the key during the encryption process. The key file is + read as a single packed array of 16 octets in binary format. The + optional third line specifies the initialization vector (IV) as a + hexadecimal string to be used instead of the segment sequence + number (default) for encryption. Changes to key_info_file will + result in segment encryption with the new key/IV and an entry in + the playlist for the new key URI/IV if "hls_flags periodic_rekey" + is enabled. + + Key info file format: + + + + (optional) + + Example key URIs: + + http://server/file.key + /path/to/file.key + file.key + + Example key file paths: + + file.key + /path/to/file.key + + Example IV: + + 0123456789ABCDEF0123456789ABCDEF + + Key info file example: + + http://server/file.key + /path/to/file.key + 0123456789ABCDEF0123456789ABCDEF + + Example shell script: + + #!/bin/sh + BASE_URL=${1:-'.'} + openssl rand 16 > file.key + echo $BASE_URL/file.key > file.keyinfo + echo file.key >> file.keyinfo + echo $(openssl rand -hex 16) >> file.keyinfo + ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \ + -hls_key_info_file file.keyinfo out.m3u8 + + -hls_enc enc + Enable (1) or disable (0) the AES128 encryption. When enabled + every segment generated is encrypted and the encryption key is + saved as playlist name.key. + + -hls_enc_key key + 16-octet key to encrypt the segments, by default it is randomly + generated. + + -hls_enc_key_url keyurl + If set, keyurl is prepended instead of baseurl to the key filename + in the playlist. + + -hls_enc_iv iv + 16-octet initialization vector for every segment instead of the + autogenerated ones. + + hls_segment_type flags + Possible values: + + mpegts + Output segment files in MPEG-2 Transport Stream format. This is + compatible with all HLS versions. + + fmp4 + Output segment files in fragmented MP4 format, similar to MPEG- + DASH. fmp4 files may be used in HLS version 7 and above. + + hls_fmp4_init_filename filename + Set filename to the fragment files header file, default filename is + init.mp4. + + Use "-strftime 1" on filename to expand the segment filename with + localtime. + + ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8 + + This will produce init like this 1602678741_init.mp4 + + hls_fmp4_init_resend + Resend init file after m3u8 file refresh every time, default is 0. + + When "var_stream_map" is set with two or more variant streams, the + filename pattern must contain the string "%v", this string + specifies the position of variant stream index in the generated + init file names. The string "%v" may be present in the filename or + in the last directory name containing the file. If the string is + present in the directory name, then sub-directories are created + after expanding the directory name pattern. This enables creation + of init files corresponding to different variant streams in + subdirectories. + + hls_flags flags + Possible values: + + single_file + If this flag is set, the muxer will store all segments in a + single MPEG-TS file, and will use byte ranges in the playlist. + HLS playlists generated with this way will have the version + number 4. For example: + + ffmpeg -i in.nut -hls_flags single_file out.m3u8 + + Will produce the playlist, out.m3u8, and a single segment file, + out.ts. + + delete_segments + Segment files removed from the playlist are deleted after a + period of time equal to the duration of the segment plus the + duration of the playlist. + + append_list + Append new segments into the end of old segment list, and + remove the "#EXT-X-ENDLIST" from the old segment list. + + round_durations + Round the duration info in the playlist file segment info to + integer values, instead of using floating point. If there are + no other features requiring higher HLS versions be used, then + this will allow ffmpeg to output a HLS version 2 m3u8. + + discont_start + Add the "#EXT-X-DISCONTINUITY" tag to the playlist, before the + first segment's information. + + omit_endlist + Do not append the "EXT-X-ENDLIST" tag at the end of the + playlist. + + periodic_rekey + The file specified by "hls_key_info_file" will be checked + periodically and detect updates to the encryption info. Be sure + to replace this file atomically, including the file containing + the AES encryption key. + + independent_segments + Add the "#EXT-X-INDEPENDENT-SEGMENTS" to playlists that has + video segments and when all the segments of that playlist are + guaranteed to start with a Key frame. + + iframes_only + Add the "#EXT-X-I-FRAMES-ONLY" to playlists that has video + segments and can play only I-frames in the "#EXT-X-BYTERANGE" + mode. + + split_by_time + Allow segments to start on frames other than keyframes. This + improves behavior on some players when the time between + keyframes is inconsistent, but may make things worse on others, + and can cause some oddities during seeking. This flag should be + used with the "hls_time" option. + + program_date_time + Generate "EXT-X-PROGRAM-DATE-TIME" tags. + + second_level_segment_index + Makes it possible to use segment indexes as %%d in + hls_segment_filename expression besides date/time values when + strftime is on. To get fixed width numbers with trailing + zeroes, %%0xd format is available where x is the required + width. + + second_level_segment_size + Makes it possible to use segment sizes (counted in bytes) as + %%s in hls_segment_filename expression besides date/time values + when strftime is on. To get fixed width numbers with trailing + zeroes, %%0xs format is available where x is the required + width. + + second_level_segment_duration + Makes it possible to use segment duration (calculated in + microseconds) as %%t in hls_segment_filename expression besides + date/time values when strftime is on. To get fixed width + numbers with trailing zeroes, %%0xt format is available where x + is the required width. + + ffmpeg -i sample.mpeg \ + -f hls -hls_time 3 -hls_list_size 5 \ + -hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \ + -strftime 1 -strftime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8 + + This will produce segments like this: + segment_20170102194334_0003_00122200_0000003000000.ts, + segment_20170102194334_0004_00120072_0000003000000.ts etc. + + temp_file + Write segment data to filename.tmp and rename to filename only + once the segment is complete. A webserver serving up segments + can be configured to reject requests to *.tmp to prevent access + to in-progress segments before they have been added to the m3u8 + playlist. This flag also affects how m3u8 playlist files are + created. If this flag is set, all playlist files will written + into temporary file and renamed after they are complete, + similarly as segments are handled. But playlists with "file" + protocol and with type ("hls_playlist_type") other than "vod" + are always written into temporary file regardless of this flag. + Master playlist files ("master_pl_name"), if any, with "file" + protocol, are always written into temporary file regardless of + this flag if "master_pl_publish_rate" value is other than zero. + + hls_playlist_type event + Emit "#EXT-X-PLAYLIST-TYPE:EVENT" in the m3u8 header. Forces + hls_list_size to 0; the playlist can only be appended to. + + hls_playlist_type vod + Emit "#EXT-X-PLAYLIST-TYPE:VOD" in the m3u8 header. Forces + hls_list_size to 0; the playlist must not change. + + method + Use the given HTTP method to create the hls files. + + ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8 + + This example will upload all the mpegts segment files to the HTTP + server using the HTTP PUT method, and update the m3u8 files every + "refresh" times using the same method. Note that the HTTP server + must support the given method for uploading files. + + http_user_agent + Override User-Agent field in HTTP header. Applicable only for HTTP + output. + + var_stream_map + Map string which specifies how to group the audio, video and + subtitle streams into different variant streams. The variant stream + groups are separated by space. Expected string format is like this + "a:0,v:0 a:1,v:1 ....". Here a:, v:, s: are the keys to specify + audio, video and subtitle streams respectively. Allowed values are + 0 to 9 (limited just based on practical usage). + + When there are two or more variant streams, the output filename + pattern must contain the string "%v", this string specifies the + position of variant stream index in the output media playlist + filenames. The string "%v" may be present in the filename or in the + last directory name containing the file. If the string is present + in the directory name, then sub-directories are created after + expanding the directory name pattern. This enables creation of + variant streams in subdirectories. + + ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ + -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ + http://example.com/live/out_%v.m3u8 + + This example creates two hls variant streams. The first variant + stream will contain video stream of bitrate 1000k and audio stream + of bitrate 64k and the second variant stream will contain video + stream of bitrate 256k and audio stream of bitrate 32k. Here, two + media playlist with file names out_0.m3u8 and out_1.m3u8 will be + created. If you want something meaningful text instead of indexes + in result names, you may specify names for each or some of the + variants as in the following example. + + ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ + -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0,name:my_hd v:1,a:1,name:my_sd" \ + http://example.com/live/out_%v.m3u8 + + This example creates two hls variant streams as in the previous + one. But here, the two media playlist with file names + out_my_hd.m3u8 and out_my_sd.m3u8 will be created. + + ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \ + -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \ + http://example.com/live/out_%v.m3u8 + + This example creates three hls variant streams. The first variant + stream will be a video only stream with video bitrate 1000k, the + second variant stream will be an audio only stream with bitrate 64k + and the third variant stream will be a video only stream with + bitrate 256k. Here, three media playlist with file names + out_0.m3u8, out_1.m3u8 and out_2.m3u8 will be created. + + ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ + -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ + http://example.com/live/vs_%v/out.m3u8 + + This example creates the variant streams in subdirectories. Here, + the first media playlist is created at + http://example.com/live/vs_0/out.m3u8 and the second one at + http://example.com/live/vs_1/out.m3u8. + + ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k \ + -map 0:a -map 0:a -map 0:v -map 0:v -f hls \ + -var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \ + -master_pl_name master.m3u8 \ + http://example.com/live/out_%v.m3u8 + + This example creates two audio only and two video only variant + streams. In addition to the #EXT-X-STREAM-INF tag for each variant + stream in the master playlist, #EXT-X-MEDIA tag is also added for + the two audio only variant streams and they are mapped to the two + video only variant streams with audio group names 'aud_low' and + 'aud_high'. + + By default, a single hls variant containing all the encoded streams + is created. + + ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ + -map 0:a -map 0:a -map 0:v -f hls \ + -var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \ + -master_pl_name master.m3u8 \ + http://example.com/live/out_%v.m3u8 + + This example creates two audio only and one video only variant + streams. In addition to the #EXT-X-STREAM-INF tag for each variant + stream in the master playlist, #EXT-X-MEDIA tag is also added for + the two audio only variant streams and they are mapped to the one + video only variant streams with audio group name 'aud_low', and the + audio group have default stat is NO or YES. + + By default, a single hls variant containing all the encoded streams + is created. + + ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ + -map 0:a -map 0:a -map 0:v -f hls \ + -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \ + -master_pl_name master.m3u8 \ + http://example.com/live/out_%v.m3u8 + + This example creates two audio only and one video only variant + streams. In addition to the #EXT-X-STREAM-INF tag for each variant + stream in the master playlist, #EXT-X-MEDIA tag is also added for + the two audio only variant streams and they are mapped to the one + video only variant streams with audio group name 'aud_low', and the + audio group have default stat is NO or YES, and one audio have and + language is named ENG, the other audio language is named CHN. + + By default, a single hls variant containing all the encoded streams + is created. + + ffmpeg -y -i input_with_subtitle.mkv \ + -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \ + -b:a:0 256k \ + -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \ + -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle" \ + -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \ + 10 -master_pl_publish_rate 10 -hls_flags \ + delete_segments+discont_start+split_by_time ./tmp/video.m3u8 + + This example adds "#EXT-X-MEDIA" tag with "TYPE=SUBTITLES" in the + master playlist with webvtt subtitle group name 'subtitle'. Please + make sure the input file has one text subtitle stream at least. + + cc_stream_map + Map string which specifies different closed captions groups and + their attributes. The closed captions stream groups are separated + by space. Expected string format is like this "ccgroup:,instreamid:,language: ....". + 'ccgroup' and 'instreamid' are mandatory attributes. 'language' is + an optional attribute. The closed captions groups configured using + this option are mapped to different variant streams by providing + the same 'ccgroup' name in the "var_stream_map" string. If + "var_stream_map" is not set, then the first available ccgroup in + "cc_stream_map" is mapped to the output variant stream. The + examples for these two use cases are given below. + + ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \ + -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \ + -master_pl_name master.m3u8 \ + http://example.com/live/out.m3u8 + + This example adds "#EXT-X-MEDIA" tag with "TYPE=CLOSED-CAPTIONS" in + the master playlist with group name 'cc', language 'en' (english) + and INSTREAM-ID 'CC1'. Also, it adds "CLOSED-CAPTIONS" attribute + with group name 'cc' for the output variant stream. + + ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ + -a53cc:0 1 -a53cc:1 1\ + -map 0:v -map 0:a -map 0:v -map 0:a -f hls \ + -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \ + -var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \ + -master_pl_name master.m3u8 \ + http://example.com/live/out_%v.m3u8 + + This example adds two "#EXT-X-MEDIA" tags with + "TYPE=CLOSED-CAPTIONS" in the master playlist for the INSTREAM-IDs + 'CC1' and 'CC2'. Also, it adds "CLOSED-CAPTIONS" attribute with + group name 'cc' for the two output variant streams. + + master_pl_name + Create HLS master playlist with the given name. + + ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8 + + This example creates HLS master playlist with name master.m3u8 and + it is published at http://example.com/live/ + + master_pl_publish_rate + Publish master play list repeatedly every after specified number of + segment intervals. + + ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 \ + -hls_time 2 -master_pl_publish_rate 30 http://example.com/live/out.m3u8 + + This example creates HLS master playlist with name master.m3u8 and + keep publishing it repeatedly every after 30 segments i.e. every + after 60s. + + http_persistent + Use persistent HTTP connections. Applicable only for HTTP output. + + timeout + Set timeout for socket I/O operations. Applicable only for HTTP + output. + + -ignore_io_errors + Ignore IO errors during open, write and delete. Useful for long- + duration runs with network output. + + headers + Set custom HTTP headers, can override built in default headers. + Applicable only for HTTP output. + + ico + ICO file muxer. + + Microsoft's icon file format (ICO) has some strict limitations that + should be noted: + + o Size cannot exceed 256 pixels in any dimension + + o Only BMP and PNG images can be stored + + o 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 + + o If a BMP image is used, it must use the BITMAPINFOHEADER DIB header + + o If a PNG image is used, it must use the rgba pixel format + + 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 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. + + Options + + frame_pts + If set to 1, expand the filename with pts from pkt->pts. Default + value is 0. + + start_number + Start the sequence from the specified number. Default value is 1. + + update + If set to 1, the filename will always be interpreted as just a + filename, not a pattern, and the corresponding file will be + continuously overwritten with new images. Default value is 0. + + strftime + If set to 1, expand the filename with date and time information + from "strftime()". Default value is 0. + + atomic_writing + Write output to a temporary file, which is renamed to target + filename once writing is completed. Default is disabled. + + protocol_opts options_list + Set protocol options as a :-separated list of key=value parameters. + Values containing the ":" special character must be escaped. + + Examples + + 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 cfr -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 cfr -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 start of + the input video you can employ the command: + + ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg + + The strftime option allows you to expand the filename with date and + time information. Check the documentation of the "strftime()" function + for the syntax. + + For example to generate image files from the "strftime()" + "%Y-%m-%d_%H-%M-%S" pattern, the following ffmpeg command can be used: + + ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg" + + You can set the file name with current frame's PTS: + + ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg" + + A more complex example is to publish contents of your desktop directly + to a WebDAV server every second: + + ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg + + matroska + Matroska container muxer. + + This muxer implements the matroska and webm container specs. + + Metadata + + The recognized metadata settings in this muxer are: + + title + Set title name provided to a single track. This gets mapped to the + FileDescription element for a stream written as attachment. + + language + Specify the language of the track in the Matroska languages form. + + The language can be either the 3 letters bibliographic ISO-639-2 + (ISO 639-2/B) form (like "fre" for French), or a language code + mixed with a country code for specialities in languages (like "fre- + ca" for Canadian French). + + stereo_mode + Set stereo 3D video layout of two views in a single video track. + + The following values are recognized: + + 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 + + Options + + 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 reserved space does not + suffice, no Cues will be written, the file will be finalized and + writing the trailer will return an error. 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. + + cues_to_front + If set, the muxer will write the index at the beginning of the file + by shifting the main data if necessary. This can be combined with + reserve_index_space in which case the data is only shifted if the + initially reserved space turns out to be insufficient. + + This option is ignored if the output is unseekable. + + default_mode + This option controls how the FlagDefault of the output tracks will + be set. It influences which tracks players should play by default. + The default mode is passthrough. + + infer + Every track with disposition default will have the FlagDefault + set. Additionally, for each type of track (audio, video or + subtitle), if no track with disposition default of this type + exists, then the first track of this type will be marked as + default (if existing). This ensures that the default flag is + set in a sensible way even if the input originated from + containers that lack the concept of default tracks. + + infer_no_subs + This mode is the same as infer except that if no subtitle track + with disposition default exists, no subtitle track will be + marked as default. + + passthrough + In this mode the FlagDefault is set if and only if the + AV_DISPOSITION_DEFAULT flag is set in the disposition of the + corresponding stream. + + flipped_raw_rgb + If set to true, store positive height for raw RGB bitmaps, which + indicates bitmap is stored bottom-up. Note that this option does + not flip the bitmap which has to be done manually beforehand, e.g. + by using the vflip filter. Default is false and indicates bitmap + is stored top down. + + md5 + MD5 testing format. + + This is a variant of the hash muxer. Unlike that muxer, it defaults to + using the MD5 hash function. + + Examples + + 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 hash and framemd5 muxers. + + mov, mp4, ismv + MOV/MP4/ISMV (Smooth Streaming) muxer. + + 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. + + Options + + 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. + + 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 skip_sidx + Skip writing of sidx atom. When bitrate overhead due to sidx atom + is high, this option could be used for cases where sidx atom is not + mandatory. When global_sidx flag is enabled, this option will be + ignored. + + -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. + + -movflags disable_chpl + Disable Nero chapter markers (chpl atom). Normally, both Nero + chapters and a QuickTime chapter track are written to the file. + With this option set, only the QuickTime chapter track will be + written. Nero chapters can cause failures when the file is + reprocessed with certain tagging programs, like mp3Tag 2.61a and + iTunes 11.3, most likely other versions are affected as well. + + -movflags omit_tfhd_offset + Do not write any absolute base_data_offset in tfhd atoms. This + avoids tying fragments to absolute byte positions in the + file/streams. + + -movflags default_base_moof + Similarly to the omit_tfhd_offset, this flag avoids writing the + absolute base_data_offset field in tfhd atoms, but does so by using + the new default-base-is-moof flag instead. This flag is new from + 14496-12:2012. This may make the fragments easier to parse in + certain circumstances (avoiding basing track fragment location + calculations on the implicit end of the previous track fragment). + + -write_tmcd + Specify "on" to force writing a timecode track, "off" to disable it + and "auto" to write a timecode track only for mov and mp4 output + (default). + + -movflags negative_cts_offsets + Enables utilization of version 1 of the CTTS box, in which the CTS + offsets can be negative. This enables the initial sample to have + DTS/CTS of zero, and reduces the need for edit lists for some cases + such as video tracks with B-frames. Additionally, eases conformance + with the DASH-IF interoperability guidelines. + + This option is implicitly set when writing ismv (Smooth Streaming) + files. + + -write_btrt bool + Force or disable writing bitrate box inside stsd box of a track. + The box contains decoding buffer size (in bytes), maximum bitrate + and average bitrate for the track. The box will be skipped if none + of these values can be computed. Default is "-1" or "auto", which + will write the box only in MP4 mode. + + -write_prft + Write producer time reference box (PRFT) with a specified time + source for the NTP field in the PRFT box. Set value as wallclock to + specify timesource as wallclock time and pts to specify timesource + as input packets' PTS values. + + Setting value to pts is applicable only for a live encoding use + case, where PTS values are set as as wallclock time at the source. + For example, an encoding use case with decklink capture source + where video_pts and audio_pts are set to abs_wallclock. + + -empty_hdlr_name bool + Enable to skip writing the name inside a "hdlr" box. Default is + "false". + + -movie_timescale scale + Set the timescale written in the movie header box ("mvhd"). Range + is 1 to INT_MAX. Default is 1000. + + -video_track_timescale scale + Set the timescale used for video tracks. Range is 0 to INT_MAX. If + set to 0, the timescale is automatically set based on the native + stream time base. Default is 0. + + Example + + Smooth Streaming content can be pushed in real time to a publishing + point on IIS with this muxer. Example: + + ffmpeg -re <> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1) + + mp3 + The MP3 muxer writes a raw MP3 stream with the following optional + features: + + o An ID3v2 metadata header at the beginning (enabled by default). + Versions 2.3 and 2.4 are supported, the "id3v2_version" private + option controls which one is used (3 or 4). Setting "id3v2_version" + to 0 disables the ID3v2 header completely. + + The muxer supports writing attached pictures (APIC frames) to the + ID3v2 header. 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 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. + + o A Xing/LAME frame right after the ID3v2 header (if present). It is + enabled by default, but will be written only if the output is + seekable. The "write_xing" private option can be used to disable + it. The frame contains various information that may be useful to + the decoder, like the audio duration or encoder delay. + + o A legacy ID3v1 tag at the end of the file (disabled by default). It + may be enabled with the "write_id3v1" private option, but as its + capabilities are very limited, its usage is not recommended. + + 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 + + Write a "clean" MP3 without any extra features: + + ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3 + + mpegts + MPEG transport stream muxer. + + This muxer implements ISO 13818-1 and part of ETSI EN 300 468. + + 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. + + Options + + The muxer options are: + + mpegts_transport_stream_id integer + Set the transport_stream_id. This identifies a transponder in DVB. + Default is 0x0001. + + mpegts_original_network_id integer + Set the original_network_id. 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. Default + is 0x0001. + + mpegts_service_id integer + Set the service_id, also known as program in DVB. Default is + 0x0001. + + mpegts_service_type integer + Set the program service_type. Default is "digital_tv". Accepts the + following options: + + hex_value + Any hexadecimal value between 0x01 and 0xff as defined in ETSI + 300 468. + + digital_tv + Digital TV service. + + digital_radio + Digital Radio service. + + teletext + Teletext service. + + advanced_codec_digital_radio + Advanced Codec Digital Radio service. + + mpeg2_digital_hdtv + MPEG2 Digital HDTV service. + + advanced_codec_digital_sdtv + Advanced Codec Digital SDTV service. + + advanced_codec_digital_hdtv + Advanced Codec Digital HDTV service. + + mpegts_pmt_start_pid integer + Set the first PID for PMTs. Default is 0x1000, minimum is 0x0020, + maximum is 0x1ffa. This option has no effect in m2ts mode where the + PMT PID is fixed 0x0100. + + mpegts_start_pid integer + Set the first PID for elementary streams. Default is 0x0100, + minimum is 0x0020, maximum is 0x1ffa. This option has no effect in + m2ts mode where the elementary stream PIDs are fixed. + + mpegts_m2ts_mode boolean + Enable m2ts mode if set to 1. Default value is "-1" which disables + m2ts mode. + + muxrate integer + Set a constant muxrate. Default is VBR. + + pes_payload_size integer + Set minimum PES packet payload in bytes. Default is 2930. + + mpegts_flags flags + Set mpegts flags. Accepts the following options: + + resend_headers + Reemit PAT/PMT before writing the next packet. + + latm + Use LATM packetization for AAC. + + pat_pmt_at_frames + Reemit PAT and PMT at each video frame. + + system_b + Conform to System B (DVB) instead of System A (ATSC). + + initial_discontinuity + Mark the initial packet of each stream as discontinuity. + + nit Emit NIT table. + + omit_rai + Disable writing of random access indicator. + + mpegts_copyts boolean + Preserve original timestamps, if value is set to 1. Default value + is "-1", which results in shifting timestamps so that they start + from 0. + + omit_video_pes_length boolean + Omit the PES packet length for video packets. Default is 1 (true). + + pcr_period integer + Override the default PCR retransmission time in milliseconds. + Default is "-1" which means that the PCR interval will be + determined automatically: 20 ms is used for CBR streams, the + highest multiple of the frame duration which is less than 100 ms is + used for VBR streams. + + pat_period duration + Maximum time in seconds between PAT/PMT tables. Default is 0.1. + + sdt_period duration + Maximum time in seconds between SDT tables. Default is 0.5. + + nit_period duration + Maximum time in seconds between NIT tables. Default is 0.5. + + tables_version integer + Set PAT, PMT, SDT and NIT 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 + ... + + Example + + ffmpeg -i file.mpg -c copy \ + -mpegts_original_network_id 0x1122 \ + -mpegts_transport_stream_id 0x3344 \ + -mpegts_service_id 0x5566 \ + -mpegts_pmt_start_pid 0x1500 \ + -mpegts_start_pid 0x150 \ + -metadata service_provider="Some provider" \ + -metadata service_name="Some Channel" \ + out.ts + + mxf, mxf_d10, mxf_opatom + MXF muxer. + + Options + + The muxer options are: + + store_user_comments bool + Set if user comments should be stored if available or never. IRT + D-10 does not allow user comments. The default is thus to write + them for mxf and mxf_opatom but not for mxf_d10 + + 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 - + + nut + -syncpoints flags + Change the syncpoint usage in nut: + + default use the normal low-overhead seeking aids. + none do not use the syncpoints at all, reducing the overhead but + making the stream non-seekable; + Use of this option is not recommended, as the resulting files are very damage + sensitive and seeking is not possible. Also in general the overhead from + syncpoints is negligible. Note, -C 0 can be used to disable + all growing data tables, allowing to mux endless streams with limited memory + and without these disadvantages. + + timestamped extend the syncpoint with a wallclock field. + + The none and timestamped flags are experimental. + + -write_index bool + Write index at the end, the default is to write an index. + + ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor + + 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. + + -serial_offset value + Serial value from which to set the streams serial number. Setting + it to different and sufficiently large values ensures that the + produced ogg files can be safely chained. + + raw muxers + Raw muxers accept a single stream matching the designated codec. They + do not store timestamps or metadata. The recognized extension is the + same as the muxer name unless indicated otherwise. + + ac3 + + Dolby Digital, also known as AC-3, audio. + + adx + + CRI Middleware ADX audio. + + This muxer will write out the total sample count near the start of the + first packet when the output is seekable and the count can be stored in + 32 bits. + + aptx + + aptX (Audio Processing Technology for Bluetooth) audio. + + aptx_hd + + aptX HD (Audio Processing Technology for Bluetooth) audio. + + Extensions: aptxhd + + avs2 + + AVS2-P2/IEEE1857.4 video. + + Extensions: avs, avs2 + + cavsvideo + + Chinese AVS (Audio Video Standard) video. + + Extensions: cavs + + codec2raw + + Codec 2 audio. + + No extension is registered so format name has to be supplied e.g. with + the ffmpeg CLI tool "-f codec2raw". + + data + + Data muxer accepts a single stream with any codec of any type. The + input stream has to be selected using the "-map" option with the ffmpeg + CLI tool. + + No extension is registered so format name has to be supplied e.g. with + the ffmpeg CLI tool "-f data". + + dirac + + BBC Dirac video. The Dirac Pro codec is a subset and is standardized as + SMPTE VC-2. + + Extensions: drc, vc2 + + dnxhd + + Avid DNxHD video. It is standardized as SMPTE VC-3. Accepts DNxHR + streams. + + Extensions: dnxhd, dnxhr + + dts + + DTS Coherent Acoustics (DCA) audio. + + eac3 + + Dolby Digital Plus, also known as Enhanced AC-3, audio. + + g722 + + ITU-T G.722 audio. + + g723_1 + + ITU-T G.723.1 audio. + + Extensions: tco, rco + + g726 + + ITU-T G.726 big-endian ("left-justified") audio. + + No extension is registered so format name has to be supplied e.g. with + the ffmpeg CLI tool "-f g726". + + g726le + + ITU-T G.726 little-endian ("right-justified") audio. + + No extension is registered so format name has to be supplied e.g. with + the ffmpeg CLI tool "-f g726le". + + gsm + + Global System for Mobile Communications audio. + + h261 + + ITU-T H.261 video. + + h263 + + ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 video. + + h264 + + ITU-T H.264 / MPEG-4 Part 10 AVC video. Bitstream shall be converted to + Annex B syntax if it's in length-prefixed mode. + + Extensions: h264, 264 + + hevc + + ITU-T H.265 / MPEG-H Part 2 HEVC video. Bitstream shall be converted to + Annex B syntax if it's in length-prefixed mode. + + Extensions: hevc, h265, 265 + + m4v + + MPEG-4 Part 2 video. + + mjpeg + + Motion JPEG video. + + Extensions: mjpg, mjpeg + + mlp + + Meridian Lossless Packing, also known as Packed PCM, audio. + + mp2 + + MPEG-1 Audio Layer II audio. + + Extensions: mp2, m2a, mpa + + mpeg1video + + MPEG-1 Part 2 video. + + Extensions: mpg, mpeg, m1v + + mpeg2video + + ITU-T H.262 / MPEG-2 Part 2 video. + + Extensions: m2v + + obu + + AV1 low overhead Open Bitstream Units muxer. Temporal delimiter OBUs + will be inserted in all temporal units of the stream. + + rawvideo + + Raw uncompressed video. + + Extensions: yuv, rgb + + sbc + + Bluetooth SIG low-complexity subband codec audio. + + Extensions: sbc, msbc + + truehd + + Dolby TrueHD audio. + + Extensions: thd + + vc1 + + SMPTE 421M / VC-1 video. + + segment, stream_segment, ssegment + Basic stream segmenter. + + This muxer outputs streams to a number of separate files of nearly + fixed duration. Output filename pattern can be set in a fashion similar + to image2, or by using a "strftime" template if the strftime option is + enabled. + + "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 entry filenames in the segment list are + set by default to the basename of the corresponding segment files. + + See also the hls muxer, which provides a more specific implementation + for HLS segmentation. + + Options + + The segment muxer supports the following options: + + increment_tc 1|0 + if set to 1, increment timecode between each segment If this is + selected, the input need to have a timecode in the first video + stream. Default value is 0. + + reference_stream specifier + Set the reference stream, as specified by the string specifier. If + specifier is set to "auto", the reference is chosen automatically. + Otherwise it must be a stream specifier (see the ``Stream + specifiers'' chapter in the ffmpeg manual) which specifies the + reference stream. The default value is "auto". + + segment_format format + Override the inner container format, by default it is guessed by + the filename extension. + + segment_format_options options_list + Set output format options using a :-separated list of key=value + parameters. Values containing the ":" special character must be + escaped. + + 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. + + segment_list_size size + Update the list file so that it contains at most size segments. If + 0 the list file will contain all the segments. Default value is 0. + + segment_list_entry_prefix prefix + Prepend prefix to each entry. Useful to generate absolute paths. + By default no prefix is applied. + + segment_list_type type + Select the listing format. + + 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 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 + . + + 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. + + min_seg_duration time + Set minimum segment duration to time, the value must be a duration + specification. This prevents the muxer ending segments at a + duration below this value. Only effective with "segment_time". + Default value is "0". + + segment_atclocktime 1|0 + If set to "1" split at regular clock time intervals starting from + 00:00 o'clock. The time value specified in segment_time is used for + setting the length of the splitting interval. + + For example with segment_time set to "900" this makes it possible + to create files at 12:00 o'clock, 12:15, 12:30, etc. + + Default value is "0". + + segment_clocktime_offset duration + Delay the segment splitting times with the specified duration when + using segment_atclocktime. + + For example with segment_time set to "900" and + segment_clocktime_offset set to "300" this makes it possible to + create files at 12:05, 12:20, 12:35, etc. + + Default value is "0". + + segment_clocktime_wrap_duration duration + Force the segmenter to only start a new segment if a packet reaches + the muxer within the specified duration after the segmenting clock + time. This way you can make the segmenter more resilient to + backward local time jumps, such as leap seconds or transition to + standard time from daylight savings time. + + Default is the maximum possible duration which means starting a new + segment regardless of the elapsed time since the last clock time. + + 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. + + strftime 1|0 + Use the "strftime" function to define the name of the new segments + to write. If this is selected, the output segment name must contain + a "strftime" function template. Default value is 0. + + break_non_keyframes 1|0 + If enabled, allow segments to start on frames other than keyframes. + This improves behavior on some players when the time between + keyframes is inconsistent, but may make things worse on others, and + can cause some oddities during seeking. Defaults to 0. + + reset_timestamps 1|0 + Reset timestamps at the beginning 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. + + write_empty_segments 1|0 + If enabled, write an empty segment if there are no packets during + the period a segment would usually span. Otherwise, the segment + will be filled with the next packet written. Defaults to 0. + + Make sure to require a closed GOP when encoding and to set the GOP size + to fit your segment time constraint. + + Examples + + o 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 hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut + + o Segment input and set output format options for the output + segments: + + ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4 + + o 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 + + o Use the ffmpeg force_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. + + o 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 + + o Convert the in.mkv to TS segments using the "libx264" and "aac" + encoders: + + ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts + + o 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 + + smoothstreaming + Smooth Streaming muxer generates a set of files (Manifest, chunks) + suitable for serving with conventional web server. + + window_size + Specify the number of fragments kept in the manifest. Default 0 + (keep all). + + extra_window_size + Specify the number of fragments kept outside of the manifest before + removing from disk. Default 5. + + lookahead_count + Specify the number of lookahead fragments. Default 2. + + min_frag_duration + Specify the minimum fragment duration (in microseconds). Default + 5000000. + + remove_at_exit + Specify whether to remove all fragments when finished. Default 0 + (do not remove). + + streamhash + Per stream hash testing format. + + This muxer computes and prints a cryptographic hash of all the input + frames, on a per-stream basis. This can be used for equality checks + without having to do a complete binary comparison. + + By default audio frames are converted to signed 16-bit raw audio and + video frames to raw video before computing the hash, but the output of + explicit conversions to other codecs can also be used. Timestamps are + ignored. It uses the SHA-256 cryptographic hash function by default, + but supports several other algorithms. + + The output of the muxer consists of one line per stream of the form: + streamindex,streamtype,algo=hash, where streamindex is the index of the + mapped stream, streamtype is a single character indicating the type of + stream, algo is a short string representing the hash function used, and + hash is a hexadecimal number representing the computed hash. + + hash algorithm + Use the cryptographic hash function specified by the string + algorithm. Supported values include "MD5", "murmur3", "RIPEMD128", + "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA160", "SHA224", "SHA256" + (default), "SHA512/224", "SHA512/256", "SHA384", "SHA512", "CRC32" + and "adler32". + + Examples + + To compute the SHA-256 hash of the input converted to raw audio and + video, and store it in the file out.sha256: + + ffmpeg -i INPUT -f streamhash out.sha256 + + To print an MD5 hash to stdout use the command: + + ffmpeg -i INPUT -f streamhash -hash md5 - + + See also the hash and framehash muxers. + + tee + The tee muxer can be used to write the same data to several outputs, + such as files or streams. It can be used, for example, to stream a + video over a network and save it to disk at the same time. + + It is different from specifying several outputs to the ffmpeg command- + line tool. With the tee muxer, the audio and video data will be encoded + only once. With conventional multiple outputs, multiple encoding + operations in parallel are initiated, which can be a very expensive + process. The tee muxer is not useful when using the libavformat API + directly because it is then possible to feed the same packets to + several muxers directly. + + Since the tee muxer does not represent any particular output format, + ffmpeg cannot auto-select output streams. So all streams intended for + output must be specified using "-map". See the examples below. + + Some encoders may need different options depending on the output + format; the auto-detection of this can not work with the tee muxer, so + they need to be explicitly specified. The main example is the + global_header flag. + + 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, those must be + escaped (see the "Quoting and escaping" section in the ffmpeg-utils(1) + manual). + + Options + + use_fifo bool + If set to 1, slave outputs will be processed in separate threads + using the fifo muxer. This allows to compensate for different + speed/latency/reliability of outputs and setup transparent + recovery. By default this feature is turned off. + + fifo_options + Options to pass to fifo pseudo-muxer instances. See fifo. + + 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. Required if it cannot be guessed from the + output URL. + + 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 + "/". spec must be a stream specifier (see Format stream + specifiers). + + If the stream specifier is not specified, the bitstream filters + will be applied to all streams in the output. This will cause that + output operation to fail if the output contains streams to which + the bitstream filter cannot be applied e.g. "h264_mp4toannexb" + being applied to an output containing an audio stream. + + Options for a bitstream filter must be specified in the form of + "opt=value". + + Several bitstream filters can be specified, separated by ",". + + use_fifo bool + This allows to override tee muxer use_fifo option for individual + slave muxer. + + fifo_options + This allows to override tee muxer fifo_options for individual slave + muxer. See fifo. + + 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 mapped streams. This will cause that output operation to + fail if the output format does not accept all mapped streams. + + You may use multiple stream specifiers separated by commas (",") + e.g.: "a:0,v" + + onfail + Specify behaviour on output failure. This can be set to either + "abort" (which is default) or "ignore". "abort" will cause whole + process to fail in case of failure on this slave output. "ignore" + will ignore failure on this output, so other outputs will continue + without being affected. + + Examples + + o Encode something and both archive it in a WebM file and stream it + as MPEG-TS over UDP: + + 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/" + + o As above, but continue streaming even if output to local file fails + (for example local drive fills up): + + ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a + "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" + + o 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 + -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac" + + o As above, but select only stream "a:1" for the audio output. Note + that a second level escaping must be performed, as ":" is a special + character used to separate options. + + ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac + -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac" + + webm_chunk + WebM Live Chunk Muxer. + + This muxer writes out WebM headers and chunks as separate files which + can be consumed by clients that support WebM Live streams via DASH. + + Options + + This muxer supports the following options: + + chunk_start_index + Index of the first chunk (defaults to 0). + + header + Filename of the header where the initialization data will be + written. + + audio_chunk_duration + Duration of each audio chunk in milliseconds (defaults to 5000). + + Example + + ffmpeg -f v4l2 -i /dev/video0 \ + -f alsa -i hw:0 \ + -map 0:0 \ + -c:v libvpx-vp9 \ + -s 640x360 -keyint_min 30 -g 30 \ + -f webm_chunk \ + -header webm_live_video_360.hdr \ + -chunk_start_index 1 \ + webm_live_video_360_%d.chk \ + -map 1:0 \ + -c:a libvorbis \ + -b:a 128k \ + -f webm_chunk \ + -header webm_live_audio_128.hdr \ + -chunk_start_index 1 \ + -audio_chunk_duration 1000 \ + webm_live_audio_128_%d.chk + + webm_dash_manifest + WebM DASH Manifest muxer. + + This muxer implements the WebM DASH Manifest specification to generate + the DASH manifest XML. It also supports manifest generation for DASH + live streams. + + For more information see: + + o WebM DASH Specification: + + + o ISO DASH Specification: + + + Options + + This muxer supports the following options: + + adaptation_sets + This option has the following syntax: "id=x,streams=a,b,c + id=y,streams=d,e" where x and y are the unique identifiers of the + adaptation sets and a,b,c,d and e are the indices of the + corresponding audio and video streams. Any number of adaptation + sets can be added using this option. + + live + Set this to 1 to create a live stream DASH Manifest. Default: 0. + + chunk_start_index + Start index of the first chunk. This will go in the startNumber + attribute of the SegmentTemplate element in the manifest. Default: + 0. + + chunk_duration_ms + Duration of each chunk in milliseconds. This will go in the + duration attribute of the SegmentTemplate element in the manifest. + Default: 1000. + + utc_timing_url + URL of the page that will return the UTC timestamp in ISO format. + This will go in the value attribute of the UTCTiming element in the + manifest. Default: None. + + time_shift_buffer_depth + Smallest time (in seconds) shifting buffer for which any + Representation is guaranteed to be available. This will go in the + timeShiftBufferDepth attribute of the MPD element. Default: 60. + + minimum_update_period + Minimum update period (in seconds) of the manifest. This will go in + the minimumUpdatePeriod attribute of the MPD element. Default: 0. + + Example + + ffmpeg -f webm_dash_manifest -i video1.webm \ + -f webm_dash_manifest -i video2.webm \ + -f webm_dash_manifest -i audio1.webm \ + -f webm_dash_manifest -i audio2.webm \ + -map 0 -map 1 -map 2 -map 3 \ + -c copy \ + -f webm_dash_manifest \ + -adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \ + manifest.xml + +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 nanoseconds. + + 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 + +PROTOCOL OPTIONS + The libavformat library provides some generic global options, which can + be set on all the protocols. In addition each protocol 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: + + protocol_whitelist list (input) + Set a ","-separated list of allowed protocols. "ALL" matches all + protocols. Protocols prefixed by "-" are disabled. All protocols + are allowed by default but protocols used by an another protocol + (nested protocols) are restricted to a per protocol subset. + +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. + + All protocols accept the following options: + + rw_timeout + Maximum time to wait for (network) read/write operations to + complete, in microseconds. + + A description of the currently available protocols follows. + + amqp + Advanced Message Queueing Protocol (AMQP) version 0-9-1 is a broker + based publish-subscribe communication protocol. + + FFmpeg must be compiled with --enable-librabbitmq to support AMQP. A + separate AMQP broker must also be run. An example open-source AMQP + broker is RabbitMQ. + + After starting the broker, an FFmpeg client may stream data to the + broker using the command: + + ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost] + + Where hostname and port (default is 5672) is the address of the broker. + The client may also set a user/password for authentication. The default + for both fields is "guest". Name of virtual host on broker can be set + with vhost. The default value is "/". + + Muliple subscribers may stream from the broker using the command: + + ffplay amqp://[[user]:[password]@]hostname[:port][/vhost] + + In RabbitMQ all data published to the broker flows through a specific + exchange, and each subscribing client has an assigned queue/buffer. + When a packet arrives at an exchange, it may be copied to a client's + queue depending on the exchange and routing_key fields. + + The following options are supported: + + exchange + Sets the exchange to use on the broker. RabbitMQ has several + predefined exchanges: "amq.direct" is the default exchange, where + the publisher and subscriber must have a matching routing_key; + "amq.fanout" is the same as a broadcast operation (i.e. the data is + forwarded to all queues on the fanout exchange independent of the + routing_key); and "amq.topic" is similar to "amq.direct", but + allows for more complex pattern matching (refer to the RabbitMQ + documentation). + + routing_key + Sets the routing key. The default value is "amqp". The routing key + is used on the "amq.direct" and "amq.topic" exchanges to decide + whether packets are written to the queue of a subscriber. + + pkt_size + Maximum size of each packet sent/received to the broker. Default is + 131072. Minimum is 4096 and max is any large value (representable + by an int). When receiving packets, this sets an internal buffer + size in FFmpeg. It should be equal to or greater than the size of + the published packets to the broker. Otherwise the received message + may be truncated causing decoding errors. + + connection_timeout + The timeout in seconds during the initial connection to the broker. + The default value is rw_timeout, or 5 seconds if rw_timeout is not + set. + + delivery_mode mode + Sets the delivery mode of each message sent to broker. The + following values are accepted: + + persistent + Delivery mode set to "persistent" (2). This is the default + value. Messages may be written to the broker's disk depending + on its setup. + + non-persistent + Delivery mode set to "non-persistent" (1). Messages will stay + in broker's memory unless the broker is under memory pressure. + + async + Asynchronous data filling wrapper for input stream. + + Fill data in a background thread, to decouple I/O operation from demux + thread. + + async: + async:http://host/resource + async:cache:http://host/resource + + 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 + + cache + Caching wrapper for input stream. + + Cache the input stream to temporary file. It brings seeking capability + to live streams. + + The accepted options are: + + read_ahead_limit + Amount in bytes that may be read ahead when seeking isn't + supported. Range is -1 to INT_MAX. -1 for unlimited. Default is + 65536. + + URL Syntax is + + cache: + + concat + Physical concatenation protocol. + + Read and seek from many resources in sequence as if they were a unique + resource. + + A URL accepted by this protocol has the syntax: + + concat:||...| + + 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. + + concatf + Physical concatenation protocol using a line break delimited list of + resources. + + Read and seek from many resources in sequence as if they were a unique + resource. + + A URL accepted by this protocol has the syntax: + + concatf: + + where URL is the url containing a line break delimited list of + resources to be concatenated, each one possibly specifying a distinct + protocol. Special characters must be escaped with backslash or single + quotes. See the "Quoting and escaping" section in the ffmpeg-utils(1) + manual. + + For example to read a sequence of files split1.mpeg, split2.mpeg, + split3.mpeg listed in separate lines within a file split.txt with + ffplay use the command: + + ffplay concatf:split.txt + + Where split.txt contains the lines: + + split1.mpeg + split2.mpeg + split3.mpeg + + 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: + crypto+ + + data + Data in-line in the URI. See + . + + For example, to convert a GIF file given inline with ffmpeg: + + ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png + + fd + File descriptor access protocol. + + The accepted syntax is: + + fd: -fd + + If fd is not specified, by default the stdout file descriptor will be + used for writing, stdin for reading. Unlike the pipe protocol, fd + protocol has seek support if it corresponding to a regular file. fd + protocol doesn't support pass file descriptor via URL for security. + + 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. + + fd Set file descriptor. + + file + File access protocol. + + Read from or write to a file. + + A file URL can have the form: + + file: + + where filename is the path of the file to read. + + An URL that does not have a protocol prefix will be assumed to be a + file URL. Depending on the build, an URL that looks like a Windows path + with the drive letter at the beginning will also be assumed to be a + file URL (usually not the case in builds for unix-like systems). + + For example to read from a file input.mpeg with ffmpeg use the command: + + ffmpeg -i file:input.mpeg output.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. + + follow + If set to 1, the protocol will retry reading at the end of the + file, allowing reading files that still are being written. In order + for this to terminate, you either need to use the rw_timeout + option, or use the interrupt callback (for API users). + + seekable + Controls if seekability is advertised on the file. 0 means non- + seekable, -1 means auto (seekable for normal files, non-seekable + for named pipes). + + Many demuxers handle seekable and non-seekable resources + differently, overriding this might speed up opening certain files + at the cost of losing some features (e.g. accurate seeking). + + ftp + FTP (File Transfer Protocol). + + 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 in microseconds 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-user + Set a user to be used for authenticating to the FTP server. This is + overridden by the user in the FTP URL. + + ftp-password + Set a password to be used for authenticating to the FTP server. + This is overridden by the password in the FTP URL, or by ftp- + anonymous-password if no user is set. + + 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. + + gopher + Gopher protocol. + + gophers + Gophers protocol. + + The Gopher protocol with TLS encapsulation. + + 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. + + 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. + + content_type + Set a specific content type for the POST messages or for listen + mode. + + http_proxy + set HTTP proxy to tunnel through e.g. http://example.com:1234 + + headers + Set custom HTTP headers, can override built in default headers. The + value must be a string encoding the headers. + + multiple_requests + Use persistent connections if set to 1, default is 0. + + post_data + Set custom HTTP post data. + + referer + Set the Referer header. Include 'Referer: URL' header in HTTP + request. + + user_agent + Override the User-Agent header. If not specified the protocol will + use a string describing the libavformat build. ("Lavf/") + + reconnect_at_eof + If set then eof is treated like an error and causes reconnection, + this is useful for live / endless streams. + + reconnect_streamed + If set then even streamed/non seekable streams will be reconnected + on errors. + + reconnect_on_network_error + Reconnect automatically in case of TCP/TLS errors during connect. + + reconnect_on_http_error + A comma separated list of HTTP status codes to reconnect on. The + list can include specific status codes (e.g. '503') or the strings + '4xx' / '5xx'. + + reconnect_delay_max + Sets the maximum delay in seconds after which to give up + reconnecting + + mime_type + Export the MIME type. + + http_version + Exports the HTTP response version number. Usually "1.0" or "1.1". + + 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 1. + + icy_metadata_headers + If the server supports ICY metadata, this contains the ICY-specific + HTTP reply headers, separated by 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. It + should be polled in regular intervals by applications interested in + mid-stream metadata updates. + + 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. + + offset + Set initial byte offset. + + end_offset + Try to limit the request to bytes preceding this offset. + + method + When used as a client option it sets the HTTP method for the + request. + + When used as a server option it sets the HTTP method that is going + to be expected from the client(s). If the expected and the + received HTTP method do not match the client will be given a Bad + Request response. When unset the HTTP method is not checked for + now. This will be replaced by autodetection in the future. + + listen + If set to 1 enables experimental HTTP server. This can be used to + send data when used as an output option, or read data from a client + with HTTP POST when used as an input option. If set to 2 enables + experimental multi-client HTTP server. This is not yet implemented + in ffmpeg.c and thus must not be used as a command line option. + + # Server side (sending): + ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://: + + # Client side (receiving): + ffmpeg -i http://: -c copy somefile.ogg + + # Client can also be done with wget: + wget http://: -O somefile.ogg + + # Server side (receiving): + ffmpeg -listen 1 -i http://: -c copy somefile.ogg + + # Client side (sending): + ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://: + + # Client can also be done with wget: + wget --post-file=somefile.ogg http://: + + send_expect_100 + Send an Expect: 100-continue header for POST. If set to 1 it will + send, if set to 0 it won't, if set to -1 it will try to send if it + is applicable. Default value is -1. + + auth_type + Set HTTP authentication type. No option for Digest, since this + method requires getting nonce parameters from the server first and + can't be used straight away like Basic. + + none + Choose the HTTP authentication type automatically. This is the + default. + + basic + Choose the HTTP basic authentication. + + Basic authentication sends a Base64-encoded string that + contains a user name and password for the client. Base64 is not + a form of encryption and should be considered the same as + sending the user name and password in clear text (Base64 is a + reversible encoding). If a resource needs to be protected, + strongly consider using an authentication scheme other than + basic authentication. HTTPS/TLS should be used with basic + authentication. Without these additional security + enhancements, basic authentication should not be used to + protect sensitive or valuable information. + + 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 + + Icecast + Icecast protocol (stream to Icecast servers) + + This protocol accepts the following options: + + ice_genre + Set the stream genre. + + ice_name + Set the stream name. + + ice_description + Set the stream description. + + ice_url + Set the stream website URL. + + ice_public + Set if the stream should be public. The default is 0 (not public). + + user_agent + Override the User-Agent header. If not specified a string of the + form "Lavf/" will be used. + + password + Set the Icecast mountpoint password. + + content_type + Set the stream content type. This must be set if it is different + from audio/mpeg. + + legacy_icecast + This enables support for Icecast versions < 2.4.0, that do not + support the HTTP PUT method but the SOURCE method. + + tls Establish a TLS (HTTPS) connection to Icecast. + + icecast://[[:]@]:/ + + ipfs + InterPlanetary File System (IPFS) protocol support. One can access + files stored on the IPFS network through so-called gateways. These are + http(s) endpoints. This protocol wraps the IPFS native protocols + (ipfs:// and ipns://) to be sent to such a gateway. Users can (and + should) host their own node which means this protocol will use one's + local gateway to access files on the IPFS network. + + This protocol accepts the following options: + + gateway + Defines the gateway to use. When not set, the protocol will first + try locating the local gateway by looking at $IPFS_GATEWAY, + $IPFS_PATH and "$HOME/.ipfs/", in that order. + + One can use this protocol in 2 ways. Using IPFS: + + ffplay ipfs:// + + Or the IPNS protocol (IPNS is mutable IPFS): + + ffplay ipns:// + + mmst + MMS (Microsoft Media Server) protocol over TCP. + + mmsh + MMS (Microsoft Media Server) protocol over HTTP. + + The required syntax is: + + mmsh://[:][/][/] + + 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. + + pipe + UNIX pipe access protocol. + + Read and write from UNIX pipes. + + The accepted syntax is: + + pipe:[] + + If fd isn't specified, 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. + + fd Set file descriptor. + + Note that some formats (typically MOV), require the output protocol to + be seekable, so they will fail with the pipe output protocol. + + prompeg + Pro-MPEG Code of Practice #3 Release 2 FEC protocol. + + The Pro-MPEG CoP#3 FEC is a 2D parity-check forward error correction + mechanism for MPEG-2 Transport Streams sent over RTP. + + This protocol must be used in conjunction with the "rtp_mpegts" muxer + and the "rtp" protocol. + + The required syntax is: + + -f rtp_mpegts -fec prompeg=