diff --git a/.gitattributes b/.gitattributes
index 3b0b5c0a65ff3fcacb8b17939f84afe115c44eab..6a064b0b676ee557b6f42071e4ee54cb7ff6d27a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -35,3 +35,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
bicycle.mp4 filter=lfs diff=lfs merge=lfs -text
cooking.mp4 filter=lfs diff=lfs merge=lfs -text
+ffmpeg/ffmpeg filter=lfs diff=lfs merge=lfs -text
+ffmpeg/ffprobe filter=lfs diff=lfs merge=lfs -text
diff --git a/ffmpeg/GPLv3.txt b/ffmpeg/GPLv3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..94a9ed024d3859793618152ea559a168bbcbb5e2
--- /dev/null
+++ b/ffmpeg/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/ffmpeg b/ffmpeg/ffmpeg
new file mode 100644
index 0000000000000000000000000000000000000000..0bdcbdd4329a0418dd255b365d59fdddbcaee747
--- /dev/null
+++ b/ffmpeg/ffmpeg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2856e9a87be9ab140e199ef06d64ea635a17b2e1246c3f3ac7ce09fbdc412b7c
+size 79822176
diff --git a/ffmpeg/ffprobe b/ffmpeg/ffprobe
new file mode 100644
index 0000000000000000000000000000000000000000..5bb14f9685cb13e320f5beb88263db24682d9cdd
--- /dev/null
+++ b/ffmpeg/ffprobe
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7667d1b4c2bb00e0e355617d79a419ba5a2c166c20072f95ae7513ccd1cabba
+size 79657600
diff --git a/ffmpeg/manpages/ffmpeg-all.txt b/ffmpeg/manpages/ffmpeg-all.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7bc120d771e98957d5ab67ec23fc5de621969dfd
--- /dev/null
+++ b/ffmpeg/manpages/ffmpeg-all.txt
@@ -0,0 +1,51154 @@
+FFMPEG-ALL(1) FFMPEG-ALL(1)
+
+NAME
+ ffmpeg - ffmpeg media converter
+
+SYNOPSIS
+ ffmpeg [global_options] {[input_file_options] -i input_url} ...
+ {[output_file_options] output_url} ...
+
+DESCRIPTION
+ ffmpeg is a universal media converter. It can read a wide variety of
+ inputs - including live grabbing/recording devices - filter, and
+ transcode them into a plethora of output formats.
+
+ 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.
+
+ Some simple examples follow.
+
+ o Convert an input media file to a different format, by re-encoding
+ media streams:
+
+ ffmpeg -i input.avi output.mp4
+
+ o Set the video bitrate of the output file to 64 kbit/s:
+
+ ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4
+
+ o Force the frame rate of the output file to 24 fps:
+
+ ffmpeg -i input.avi -r 24 output.mp4
+
+ o 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.mp4
+
+ 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.
+
+ Loopback decoders
+ While decoders are normally associated with demuxer streams, it is also
+ possible to create "loopback" decoders that decode the output from some
+ encoder and allow it to be fed back to complex filtergraphs. This is
+ done with the "-dec" directive, which takes as a parameter the index of
+ the output stream that should be decoded. Every such directive creates
+ a new loopback decoder, indexed with successive integers starting at
+ zero. These indices should then be used to refer to loopback decoders
+ in complex filtergraph link labels, as described in the documentation
+ for -filter_complex.
+
+ E.g. the following example:
+
+ ffmpeg -i INPUT \
+ -map 0:v:0 -c:v libx264 -crf 45 -f null - \
+ -dec 0:0 -filter_complex '[0:v][dec:0]hstack[stack]' \
+ -map '[stack]' -c:v ffv1 OUTPUT
+
+ reads an input video and
+
+ o (line 2) encodes it with "libx264" at low quality;
+
+ o (line 3) decodes this encoded stream and places it side by side
+ with the original input video;
+
+ o (line 4) combined video is then losslessly encoded and written into
+ OUTPUT.
+
+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.
+
+ Options that take arguments support a special syntax where the argument
+ given on the command line is interpreted as a path to the file from
+ which the actual argument value is loaded. To use this feature, add a
+ forward slash '/' immediately before the option name (after the leading
+ dash). E.g.
+
+ ffmpeg -i INPUT -/filter:v filter.script OUTPUT
+
+ will load a filtergraph description from the file named filter.script.
+
+ 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 stream group specifier or program ID is
+ also specified. In this case it is based on the ordering of the
+ streams in the group or 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.
+
+ g:group_specifier[:additional_stream_specifier]
+ Matches streams which are in the group with the specifier
+ group_specifier. if additional_stream_specifier is used, then it
+ matches streams which both are part of the group and match the
+ additional_stream_specifier. group_specifier may be one of the
+ following:
+
+ group_index
+ Match the stream with this group index.
+
+ #group_id or i:group_id
+ Match the stream with this group id.
+
+ 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.
+
+ -stream_group
+ type=type:st=stream[:st=stream][:stg=stream_group][:id=stream_group_id...]
+ (output)
+ Creates a stream group of the specified type, stream_group_id and
+ adds the specified stream(s) and/or previously defined
+ stream_group(s) to it.
+
+ type can be one of the following:
+
+ iamf_audio_element
+ Groups streams that belong to the same IAMF Audio Element
+
+ For this group type, the following options are available
+
+ audio_element_type
+ The Audio Element type. The following values are supported:
+
+ channel
+ Scalable channel audio representation
+
+ scene
+ Ambisonics representation
+
+ demixing
+ Demixing information used to reconstruct a scalable channel
+ audio representation. This option must be separated from
+ the rest with a ',', and takes the following key=value
+ options
+
+ parameter_id
+ An identifier parameters blocks in frames may refer to
+
+ dmixp_mode
+ A pre-defined combination of demixing parameters
+
+ recon_gain
+ Recon gain information used to reconstruct a scalable
+ channel audio representation. This option must be
+ separated from the rest with a ',', and takes the following
+ key=value options
+
+ parameter_id
+ An identifier parameters blocks in frames may refer to
+
+ layer
+ A layer defining a Channel Layout in the Audio Element.
+ This option must be separated from the rest with a ','.
+ Several ',' separated entries can be defined, and at least
+ one must be set.
+
+ It takes the following ":"-separated key=value options
+
+ ch_layout
+ The layer's channel layout
+
+ flags
+ The following flags are available:
+
+ recon_gain
+ Wether to signal if recon_gain is present as
+ metadata in parameter blocks within frames
+
+ output_gain
+ output_gain_flags
+ Which channels output_gain applies to. The following
+ flags are available:
+
+ FL
+ FR
+ BL
+ BR
+ TFL
+ TFR
+ ambisonics_mode
+ The ambisonics mode. This has no effect if
+ audio_element_type is set to channel.
+
+ The following values are supported:
+
+ mono
+ Each ambisonics channel is coded as an individual
+ mono stream in the group
+
+ default_w
+ Default weight value
+
+ iamf_mix_presentation
+ Groups streams that belong to all IAMF Audio Element the same
+ IAMF Mix Presentation references
+
+ For this group type, the following options are available
+
+ submix
+ A sub-mix within the Mix Presentation. This option must be
+ separated from the rest with a ','. Several ',' separated
+ entries can be defined, and at least one must be set.
+
+ It takes the following ":"-separated key=value options
+
+ parameter_id
+ An identifier parameters blocks in frames may refer to,
+ for post-processing the mixed audio signal to generate
+ the audio signal for playback
+
+ parameter_rate
+ The sample rate duration fields in parameters blocks in
+ frames that refer to this parameter_id are expressed as
+
+ default_mix_gain
+ Default mix gain value to apply when there are no
+ parameter blocks sharing the same parameter_id for a
+ given frame
+
+ element
+ References an Audio Element used in this Mix
+ Presentation to generate the final output audio signal
+ for playback. This option must be separated from the
+ rest with a '|'. Several '|' separated entries can be
+ defined, and at least one must be set.
+
+ It takes the following ":"-separated key=value options:
+
+ stg The stream_group_id for an Audio Element which this
+ sub-mix refers to
+
+ parameter_id
+ An identifier parameters blocks in frames may refer
+ to, for applying any processing to the referenced
+ and rendered Audio Element before being summed with
+ other processed Audio Elements
+
+ parameter_rate
+ The sample rate duration fields in parameters
+ blocks in frames that refer to this parameter_id
+ are expressed as
+
+ default_mix_gain
+ Default mix gain value to apply when there are no
+ parameter blocks sharing the same parameter_id for
+ a given frame
+
+ annotations
+ A key=value string describing the sub-mix element
+ where "key" is a string conforming to BCP-47 that
+ specifies the language for the "value" string.
+ "key" must be the same as the one in the mix's
+ annotations
+
+ headphones_rendering_mode
+ Indicates whether the input channel-based Audio
+ Element is rendered to stereo loudspeakers or
+ spatialized with a binaural renderer when played
+ back on headphones. This has no effect if the
+ referenced Audio Element's audio_element_type is
+ set to channel.
+
+ The following values are supported:
+
+ stereo
+ binaural
+ layout
+ Specifies the layouts for this sub-mix on which the
+ loudness information was measured. This option must be
+ separated from the rest with a '|'. Several '|'
+ separated entries can be defined, and at least one must
+ be set.
+
+ It takes the following ":"-separated key=value options:
+
+ layout_type
+ loudspeakers
+ The layout follows the loudspeaker sound system
+ convention of ITU-2051-3.
+
+ binaural
+ The layout is binaural.
+
+ sound_system
+ Channel layout matching one of Sound Systems A to J
+ of ITU-2051-3, plus 7.1.2 and 3.1.2 This has no
+ effect if layout_type is set to binaural.
+
+ integrated_loudness
+ The program integrated loudness information, as
+ defined in ITU-1770-4.
+
+ digital_peak
+ The digital (sampled) peak value of the audio
+ signal, as defined in ITU-1770-4.
+
+ true_peak
+ The true peak of the audio signal, as defined in
+ ITU-1770-4.
+
+ dialog_anchored_loudness
+ The Dialogue loudness information, as defined in
+ ITU-1770-4.
+
+ album_anchored_loudness
+ The Album loudness information, as defined in
+ ITU-1770-4.
+
+ annotations
+ A key=value string string describing the mix where "key" is
+ a string conforming to BCP-47 that specifies the language
+ for the "value" string. "key" must be the same as the ones
+ in all sub-mix element's annotationss
+
+ -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.
+
+ -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/latency 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 default flags for the libswscale library. These flags are used
+ by automatically inserted "scale" filters and those within simple
+ filtergraphs, if not overridden within the filtergraph definition.
+
+ See the ffmpeg-scaler manual for a list of scaler options.
+
+ -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.
+
+ -vstats
+ Dump video coding statistics to vstats_HHMMSS.log. See the vstats
+ file format section for the format description.
+
+ -vstats_file file
+ Dump video coding statistics to file. See the vstats file format
+ section for the format description.
+
+ -vstats_version file
+ Specify which version of the vstats format to use. Default is 2.
+ See the vstats file format section for the format description.
+
+ -vtag fourcc/tag (output)
+ Force video tag/fourcc. This is an alias for "-tag:v".
+
+ -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 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. 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. If
+ not specified, it will attempt to use the default Direct3D 11
+ display adapter or the first Direct3D 11 display adapter whose
+ hardware VendorId is specified by vendor_id.
+
+ Examples:
+
+ -init_hw_device d3d11va
+ Create a d3d11va device on the default Direct3D 11 display
+ adapter.
+
+ -init_hw_device d3d11va:1
+ Create a d3d11va device on the Direct3D 11 display adapter
+ specified by index 1.
+
+ -init_hw_device d3d11va:,vendor_id=0x8086
+ Create a d3d11va device on the first Direct3D 11 display
+ adapter whose hardware VendorId is 0x8086.
+
+ vaapi
+ device is either an X11 display name, a DRM render node or a
+ DirectX adapter index. If not specified, it will attempt to
+ open the default X11 display ($DISPLAY) and then the first DRM
+ render node (/dev/dri/renderD128), or the default DirectX
+ adapter on Windows.
+
+ The following options are recognized:
+
+ kernel_driver
+ When device is not specified, use this option to specify
+ the name of the kernel driver associated with the desired
+ device. This option is available only when the hardware
+ acceleration method drm and vaapi are enabled.
+
+ Examples:
+
+ -init_hw_device vaapi
+ Create a vaapi device on the default device.
+
+ -init_hw_device vaapi:/dev/dri/renderD129
+ Create a vaapi device on DRM render node
+ /dev/dri/renderD129.
+
+ -init_hw_device vaapi:1
+ Create a vaapi device on DirectX adapter 1.
+
+ -init_hw_device vaapi:,kernel_driver=i915
+ Create a vaapi device on a device associated with kernel
+ driver i915.
+
+ 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.)
+
+ The following options are recognized:
+
+ child_device
+ Specify a DRM render node on Linux or DirectX adapter on
+ Windows.
+
+ child_device_type
+ Choose platform-appropriate subdevice type. On Windows
+ d3d11va is used as default subdevice type when
+ "--enable-libvpl" is specified at configuration time, dxva2
+ is used as default subdevice type when "--enable-libmfx" is
+ specified at configuration time. On Linux user can use
+ vaapi only as subdevice type.
+
+ Examples:
+
+ -init_hw_device qsv:hw,child_device=/dev/dri/renderD129
+ Create a QSV device with MFX_IMPL_HARDWARE on DRM render
+ node /dev/dri/renderD129.
+
+ -init_hw_device qsv:hw,child_device=1
+ Create a QSV device with MFX_IMPL_HARDWARE on DirectX
+ adapter 1.
+
+ -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.
+
+ -init_hw_device qsv:hw,child_device=1,child_device_type=d3d11va
+ Create a QSV device with MFX_IMPL_HARDWARE on DirectX
+ adapter 1 with subdevice type d3d11va.
+
+ -init_hw_device vaapi=va:/dev/dri/renderD129 -init_hw_device
+ qsv=hw1@va
+ Create a VAAPI device called va on /dev/dri/renderD129,
+ then derive a QSV device called hw1 from device va.
+
+ 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".
+
+ -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.
+
+ 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").
+
+ 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_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".
+
+ -readrate_initial_burst seconds
+ Set an initial read burst time, in seconds, after which
+ -re/-readrate will be enforced.
+
+ -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.
+
+ 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.
+
+ -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 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.
+
+ demux
+ Use the timebase from the demuxer.
+
+ filter
+ Use the timebase from the filtergraph.
+
+ a positive number
+ 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 decimal 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 threshold
+ Timestamp discontinuity delta threshold, expressed as a decimal
+ number of seconds.
+
+ The timestamp discontinuity correction enabled by this option is
+ only applied to input formats accepting timestamp discontinuity
+ (for which the "AVFMT_TS_DISCONT" flag is enabled), e.g. MPEG-TS
+ and HLS, and is automatically disabled when employing the "-copyts"
+ option (unless wrapping is detected).
+
+ If a timestamp discontinuity is detected whose absolute value is
+ greater than threshold, ffmpeg will remove the discontinuity by
+ decreasing/increasing the current DTS and PTS by the corresponding
+ delta value.
+
+ The default value is 10.
+
+ -dts_error_threshold threshold
+ Timestamp error delta threshold, expressed as a decimal number of
+ seconds.
+
+ The timestamp correction enabled by this option is only applied to
+ input formats not accepting timestamp discontinuity (for which the
+ "AVFMT_TS_DISCONT" flag is not enabled).
+
+ If a timestamp discontinuity is detected whose absolute value is
+ greater than threshold, ffmpeg will drop the PTS/DTS timestamp
+ value.
+
+ The default value is "3600*30" (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 (input/output,per-stream)
+ Apply bitstream filters to matching streams. The filters are
+ applied to each packet as it is received from the demuxer (when
+ used as an input option) or before it is sent to the muxer (when
+ used as an output option).
+
+ bitstream_filters is a comma-separated list of bitstream filter
+ specifications, each of the form
+
+ [==:=:...]
+
+ Any of the ',=:' characters that are to be a part of an option
+ value need to be escaped with a backslash.
+
+ Use the "-bsfs" option to get the list of bitstream filters.
+
+ E.g.
+
+ ffmpeg -bsf:v h264_mp4toannexb -i h264.mp4 -c:v copy -an out.h264
+
+ applies the "h264_mp4toannexb" bitstream filter (which converts
+ MP4-encapsulated H.264 stream to Annex B) to the input video
+ stream.
+
+ On the other hand,
+
+ ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
+
+ applies the "mov2textsub" bitstream filter (which extracts text
+ from MOV subtitles) to the output subtitle stream. Note, however,
+ that since both examples use "-c copy", it matters little whether
+ the filters are applied on input or output - that would change if
+ transcoding was happening.
+
+ -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 either input streams or loopback
+ decoders. For input streams, use 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.
+
+ For decoders, the link label must be [dec:dec_idx], where dec_idx
+ is the index of the loopback decoder to be connected to given
+ input.
+
+ 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.
+
+ -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 Timebase in which this frame/packet's timestamps are expressed,
+ as a rational number num/den. Note that encoder and muxer may
+ use different timebases.
+
+ 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 (packet)
+ Decoding timestamp of the packet, as an integer. Should be
+ multiplied by the timebase to compute presentation time.
+
+ dt (packet)
+ Decoding time of the frame or packet, as a decimal number.
+ Equal to dts multiplied by tb.
+
+ sn (frame,audio)
+ Number of audio samples sent to the encoder so far.
+
+ samp (frame,audio)
+ Number of audio samples in the frame.
+
+ size (packet)
+ Size of the encoded packet in bytes.
+
+ br (packet)
+ Current bitrate in bits per second.
+
+ abr (packet)
+ Average bitrate for the whole stream so far, in bits per
+ second, -1 if it cannot be determined at this point.
+
+ key (packet)
+ Character 'K' if the packet contains a keyframe, character 'N'
+ otherwise.
+
+ Directives tagged with packet may only be used with
+ -stats_enc_post_fmt and -stats_mux_pre_fmt.
+
+ Directives tagged with frame may only be used with
+ -stats_enc_pre_fmt.
+
+ Directives tagged with audio may only be used with audio streams.
+
+ 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.
+
+ vstats file format
+ The "-vstats" and "-vstats_file" options enable generation of a file
+ containing statistics about the generated video outputs.
+
+ The "-vstats_version" option controls the format version of the
+ generated file.
+
+ With version 1 the format is:
+
+ frame= q= PSNR= f_size= s_size= kB time= br= kbits/s avg_br= kbits/s
+
+ With version 2 the format is:
+
+ out= st= frame= q= f PSNR= f_size= s_size= kB time= br= kbits/s avg_br= kbits/s
+
+ The value corresponding to each key is described below:
+
+ avg_br
+ average bitrate expressed in Kbits/s
+
+ br bitrate expressed in Kbits/s
+
+ frame
+ number of encoded frame
+
+ out out file index
+
+ PSNR
+ Peak Signal to Noise Ratio
+
+ q quality of the frame
+
+ f_size
+ encoded packet size expressed as number of bytes
+
+ s_size
+ stream size expressed in KiB
+
+ st out file stream index
+
+ time
+ time of the packet
+
+ type
+ picture type
+
+ See also the -stats_enc options for an alternative way to show encoding
+ statistics.
+
+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
+
+ 3.1.2
+ FL+FR+FC+LFE+TFL+TFR
+
+ 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
+
+ 5.1.2
+ 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
+
+ 5.1.4
+ FL+FR+FC+LFE+BL+BR+TFL+TFR+TBL+TBR
+
+ 7.1.2
+ FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR
+
+ 7.1.4
+ FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBL+TBR
+
+ 7.2.3
+ FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBC+LFE2
+
+ 9.1.4
+ FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+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(y, x)
+ 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(idx)
+ Return a pseudo random value between 0.0 and 1.0. idx is the index
+ of the internal variable which will be used to save the seed/state.
+
+ randomi(idx, min, max)
+ Return a pseudo random value in the interval between min and max.
+ idx 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)
+ Set the encoder level. This level depends on the specific codec,
+ and might correspond to the profile level. It is set by default to
+ unknown.
+
+ 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)
+ See the Channel Layout section in the ffmpeg-utils(1) manual for
+ the required syntax.
+
+ rc_max_vbv_use float (encoding,video)
+ rc_min_vbv_use float (encoding,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
+ limited
+ MPEG (219*2^(n-8))
+
+ pc
+ jpeg
+ full
+ 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).
+
+ libxevd
+ eXtra-fast Essential Video Decoder (XEVD) MPEG-5 EVC decoder wrapper.
+
+ This decoder requires the presence of the libxevd headers and library
+ during configuration. You need to explicitly configure the build with
+ --enable-libxevd.
+
+ The xevd project website is at .
+
+ Options
+
+ The following options are supported by the libxevd wrapper. The xevd-
+ equivalent options or values are listed in parentheses for easy
+ migration.
+
+ To get a more accurate and extensive documentation of the libxevd
+ options, invoke the command "xevd_app --help" or consult the libxevd
+ documentation.
+
+ threads (threads)
+ Force to use a specific number of threads
+
+ 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.
+
+ libaribcaption
+ Yet another ARIB STD-B24 caption decoder using external libaribcaption
+ library.
+
+ Implements profiles A and C of the Japanse ARIB STD-B24 standard,
+ Brazilian ABNT NBR 15606-1, and Philippines version of ISDB-T.
+
+ Requires the presence of the libaribcaption headers and library
+ () during configuration. You
+ need to explicitly configure the build with "--enable-libaribcaption".
+ If both libaribb24 and libaribcaption are enabled, libaribcaption
+ decoder precedes.
+
+ libaribcaption Decoder Options
+
+ -sub_type subtitle_type
+ Specifies the format of the decoded subtitles.
+
+ bitmap
+ Graphical image.
+
+ ass ASS formatted text.
+
+ text
+ Simple text based output without formatting.
+
+ The default is ass as same as libaribb24 decoder. Some present
+ players (e.g., mpv) expect ASS format for ARIB caption.
+
+ -caption_encoding encoding_scheme
+ Specifies the encoding scheme of input subtitle text.
+
+ auto
+ Automatically detect text encoding (default).
+
+ jis 8bit-char JIS encoding defined in ARIB STD B24. This encoding
+ used in Japan for ISDB captions.
+
+ utf8
+ UTF-8 encoding defined in ARIB STD B24. This encoding is used
+ in Philippines for ISDB-T captions.
+
+ latin
+ Latin character encoding defined in ABNT NBR 15606-1. This
+ encoding is used in South America for SBTVD / ISDB-Tb captions.
+
+ -font font_name[,font_name2,...]
+ Specify comma-separated list of font family names to be used for
+ bitmap or ass type subtitle rendering. Only first font name is
+ used for ass type subtitle.
+
+ If not specified, use internaly defined default font family.
+
+ -ass_single_rect boolean
+ ARIB STD-B24 specifies that some captions may be displayed at
+ different positions at a time (multi-rectangle subtitle). Since
+ some players (e.g., old mpv) can't handle multiple ASS rectangles
+ in a single AVSubtitle, or multiple ASS rectangles of indeterminate
+ duration with the same start timestamp, this option can change the
+ behavior so that all the texts are displayed in a single ASS
+ rectangle.
+
+ The default is false.
+
+ If your player cannot handle AVSubtitles with multiple ASS
+ rectangles properly, set this option to true or define
+ ASS_SINGLE_RECT=1 to change default behavior at compilation.
+
+ -force_outline_text boolean
+ Specify whether always render outline text for all characters
+ regardless of the indication by charactor style.
+
+ The default is false.
+
+ -outline_width number (0.0 - 3.0)
+ Specify width for outline text, in dots (relative).
+
+ The default is 1.5.
+
+ -ignore_background boolean
+ Specify whether to ignore background color rendering.
+
+ The default is false.
+
+ -ignore_ruby boolean
+ Specify whether to ignore rendering for ruby-like (furigana)
+ characters.
+
+ The default is false.
+
+ -replace_drcs boolean
+ Specify whether to render replaced DRCS characters as Unicode
+ characters.
+
+ The default is true.
+
+ -replace_msz_ascii boolean
+ Specify whether to replace MSZ (Middle Size; half width) fullwidth
+ alphanumerics with halfwidth alphanumerics.
+
+ The default is true.
+
+ -replace_msz_japanese boolean
+ Specify whether to replace some MSZ (Middle Size; half width)
+ fullwidth japanese special characters with halfwidth ones.
+
+ The default is true.
+
+ -replace_msz_glyph boolean
+ Specify whether to replace MSZ (Middle Size; half width) characters
+ with halfwidth glyphs if the fonts supports it. This option works
+ under FreeType or DirectWrite renderer with Adobe-Japan1 compliant
+ fonts. e.g., IBM Plex Sans JP, Morisawa BIZ UDGothic, Morisawa BIZ
+ UDMincho, Yu Gothic, Yu Mincho, and Meiryo.
+
+ The default is true.
+
+ -canvas_size image_size
+ Specify the resolution of the canvas to render subtitles to;
+ usually, this should be frame size of input video. This only
+ applies when "-subtitle_type" is set to bitmap.
+
+ The libaribcaption decoder assumes input frame size for bitmap
+ rendering as below:
+
+ 1. PROFILE_A : 1440 x 1080 with SAR (PAR) 4:3
+
+ 2. PROFILE_C : 320 x 180 with SAR (PAR) 1:1
+
+ If actual frame size of input video does not match above
+ assumption, the rendered captions may be distorted. To make the
+ captions undistorted, add "-canvas_size" option to specify actual
+ input video size.
+
+ Note that the "-canvas_size" option is not required for video with
+ different size but same aspect ratio. In such cases, the caption
+ will be stretched or shrunk to actual video size if "-canvas_size"
+ option is not specified. If "-canvas_size" option is specified
+ with different size, the caption will be stretched or shrunk as
+ specified size with calculated SAR.
+
+ libaribcaption decoder usage examples
+
+ Display MPEG-TS file with ARIB subtitle by "ffplay" tool:
+
+ ffplay -sub_type bitmap MPEG.TS
+
+ Display MPEG-TS file with input frame size 1920x1080 by "ffplay" tool:
+
+ ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS
+
+ Embed ARIB subtitle in transcoded video:
+
+ ffmpeg -sub_type bitmap -i src.m2t -filter_complex "[0:v][0:s]overlay" -vcodec h264 dest.mp4
+
+ 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, it's 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.
+
+ frame_length
+ Set the audio frame length in samples. Default value is the
+ internal default of the library. Refer to the library's
+ documentation for information about supported values.
+
+ 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.
+
+ copyright (-c)
+ Set MPEG audio copyright flag when set to 1. The default value is 0
+ (disabled).
+
+ original (-o)
+ Set MPEG audio original flag when set to 1. The default value is 1
+ (enabled).
+
+ 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 by disabling voice-
+ optimized 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). Note that libopus
+ forces a wideband cutoff for bitrates < 15 kbps, unless CELT-only
+ (application set to lowdelay) mode is used.
+
+ 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.
+
+ VP8-specific options
+ screen-content-mode
+ Screen content mode, one of: 0 (off), 1 (screen), 2 (screen
+ with more aggressive rate control).
+
+ 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.
+
+ In the list below, note that the x264 option name is shown in
+ parentheses after the libavcodec corresponding name, in case there is a
+ direct mapping.
+
+ 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)
+ Number of B-frames between I and P-frames
+
+ g (keyint)
+ Maximum GOP size
+
+ 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 0-16.
+
+ level (level)
+ Set the "x264_param_t.i_level_idc" value in case the value is
+ positive, it is ignored otherwise.
+
+ This value can be set using the "AVCodecContext" API (e.g. by
+ setting the "AVCodecContext" value directly), and is specified as
+ an integer mapped on a corresponding level (e.g. the value 31 maps
+ to H.264 level IDC "3.1", as defined in the "x264_levels" table).
+ It is ignored when set to a non positive value.
+
+ Alternatively it can be set as a private option, overriding the
+ value set in "AVCodecContext", and in this case must be specified
+ as the level IDC identifier (e.g. "3.1"), as defined by H.264 Annex
+ A.
+
+ sc_threshold (scenecut)
+ Sets the threshold for the scene change detection.
+
+ trellis (trellis)
+ Performs Trellis quantization to increase efficiency. Enabled by
+ default.
+
+ nr (nr)
+ Noise reduction
+
+ 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)
+ Initial VBV buffer occupancy
+
+ 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 values.
+ 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 opts
+ x264-params opts
+ Override the x264 configuration using a :-separated list of
+ key=value options.
+
+ The argument for both options is a list of key=value couples
+ separated by ":". With x264opts the value can be omitted, and the
+ value 1 is assumed in that case.
+
+ For filter and psy-rd options values 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, the options might be provided as:
+
+ 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
+
+ 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
+
+ To get the complete list of the libx264 options, invoke the command
+ x264 --fullhelp or consult the libx264 documentation.
+
+ 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).
+
+ mb_info boolean
+ Set mb_info data through AVFrameSideData, only useful when used
+ from the API. Default is 0 (off).
+
+ 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
+
+ libxeve
+ eXtra-fast Essential Video Encoder (XEVE) MPEG-5 EVC encoder wrapper.
+ The xeve-equivalent options or values are listed in parentheses for
+ easy migration.
+
+ This encoder requires the presence of the libxeve headers and library
+ during configuration. You need to explicitly configure the build with
+ --enable-libxeve.
+
+ Many libxeve encoder options are mapped to FFmpeg global codec
+ options, while unique encoder options are provided through private
+ options. Additionally the xeve-params private options allows one
+ to pass a list of key=value tuples as accepted by the libxeve
+ "parse_xeve_params" function.
+
+ The xeve project website is at .
+
+ Options
+
+ The following options are supported by the libxeve wrapper. The xeve-
+ 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 libxeve
+ options, invoke the command "xeve_app --help" or consult the
+ libxeve documentation.
+
+ b (bitrate)
+ Set target video bitrate in bits/s. Note that FFmpeg's b option is
+ expressed in bits/s, while xeve's bitrate is in kilobits/s.
+
+ bf (bframes)
+ Set the maximum number of B frames (1,3,7,15).
+
+ g (keyint)
+ Set the GOP size (I-picture period).
+
+ preset (preset)
+ Set the xeve preset. Set the encoder preset value to determine
+ encoding speed [fast, medium, slow, placebo]
+
+ tune (tune)
+ Set the encoder tune parameter [psnr, zerolatency]
+
+ profile (profile)
+ Set the encoder profile [0: baseline; 1: main]
+
+ crf (crf)
+ Set the quality for constant quality mode. Constant rate factor
+ <10..49> [default: 32]
+
+ qp (qp)
+ Set constant quantization rate control method parameter.
+ Quantization parameter qp <0..51> [default: 32]
+
+ threads (threads)
+ Force to use a specific number of threads
+
+ 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.
+
+ qpel
+ Enable quarter-pixel motion compensation.
+
+ cgop
+ Enable closed GOP.
+
+ global_header
+ Place global headers in extradata instead of every keyframe.
+
+ gmc Enable the use of global motion compensation (GMC). Default is 0
+ (disabled).
+
+ me_quality
+ Set motion estimation quality level. Possible values in decreasing
+ order of speed and increasing order of quality:
+
+ 0 Use no motion estimation (default).
+
+ 1, 2
+ Enable advanced diamond zonal search for 16x16 blocks and half-
+ pixel refinement for 16x16 blocks.
+
+ 3, 4
+ Enable all of the things described above, plus advanced diamond
+ zonal search for 8x8 blocks and half-pixel refinement for 8x8
+ blocks, also enable motion estimation on chroma planes for P
+ and B-frames.
+
+ 5, 6
+ 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.
+
+ trellis
+ Set rate-distortion optimal quantization.
+
+ 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).
+
+ Microsoft RLE
+ Microsoft RLE aka MSRLE encoder. Only 8-bit palette mode supported.
+ Compatible with Windows 3.1 and Windows 95.
+
+ Options
+
+ g integer
+ Keyframe interval. A keyframe is inserted at least every "-g"
+ frames, sometimes sooner.
+
+ 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, VP9, AV1)
+
+ 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 when the desired average bitrate is specified with the b
+ option, a bitrate-based mode is used.
+
+ - 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.
+
+ o Otherwise the default ratecontrol method CQP is used.
+
+ 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, hevc_qsv and av1_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.
+
+ blbrc
+ Enable block level rate control, which assigns different bitrate
+ block by block. Invalid for CQP mode.
+
+ Each encoder also has its own specific options:
+
+ av1_vaapi
+ profile sets the value of seq_profile. tier sets the value of
+ seq_tier. level sets the value of seq_level_idx.
+
+ tiles
+ Set the number of tiles to encode the input video with, as
+ columns x rows. (default is auto, which means use minimal tile
+ column/row number).
+
+ tile_groups
+ Set tile groups number. All the tiles will be distributed as
+ evenly as possible to each tile group. (default is 1).
+
+ 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.
+
+ The types used by pass_types and remove_types correspond to NAL unit
+ types (nal_unit_type) in H.264, HEVC and H.266 (see Table 7-1 in the
+ H.264 and HEVC specifications or Table 5 in the H.266 specification),
+ to marker values for JPEG (without 0xFF prefix) and to start codes
+ without start code prefix (i.e. the byte following the 0x000001) for
+ MPEG-2. For VP8 and VP9, every unit has type zero.
+
+ 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
+
+ To remove all user data from a MPEG-2 stream, including Closed
+ Captions:
+
+ ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT
+
+ To remove all SEI from a H264 stream, including Closed Captions:
+
+ ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT
+
+ To remove all prefix and suffix SEI from a HEVC stream, including
+ Closed Captions and dynamic HDR:
+
+ ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|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.
+
+ 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.
+
+ For example, to set PTS equal to DTS (not recommended if B-frames are
+ involved):
+
+ ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv
+
+ showinfo
+ Log basic packet information. Mainly useful for testing, debugging, and
+ development.
+
+ 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 also set. In case the PTS is set, the DTS
+ value is set to NOPTS. This is ignored when the "nofillin" flag
+ 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).
+
+ dvdvideo
+ DVD-Video demuxer, powered by libdvdnav and libdvdread.
+
+ Can directly ingest DVD titles, specifically sequential PGCs, into a
+ conversion pipeline. Menu assets, such as background video or audio,
+ can also be demuxed given the menu's coordinates (at best effort).
+ Seeking is not supported at this time.
+
+ Block devices (DVD drives), ISO files, and directory structures are
+ accepted. Activate with "-f dvdvideo" in front of one of these inputs.
+
+ This demuxer does NOT have decryption code of any kind. You are on your
+ own working with encrypted DVDs, and should not expect support on the
+ matter.
+
+ Underlying playback is handled by libdvdnav, and structure parsing by
+ libdvdread. FFmpeg must be built with GPL library support available as
+ well as the configure switches "--enable-libdvdnav" and
+ "--enable-libdvdread".
+
+ You will need to provide either the desired "title number" or exact
+ PGC/PG coordinates. Many open-source DVD players and tools can aid in
+ providing this information. If not specified, the demuxer will default
+ to title 1 which works for many discs. However, due to the flexibility
+ of the format, it is recommended to check manually. There are many
+ discs that are authored strangely or with invalid headers.
+
+ If the input is a real DVD drive, please note that there are some
+ drives which may silently fail on reading bad sectors from the disc,
+ returning random bits instead which is effectively corrupt data. This
+ is especially prominent on aging or rotting discs. A second pass and
+ integrity checks would be needed to detect the corruption. This is not
+ an FFmpeg issue.
+
+ Background
+
+ DVD-Video is not a directly accessible, linear container format in the
+ traditional sense. Instead, it allows for complex and programmatic
+ playback of carefully muxed MPEG-PS streams that are stored in
+ headerless VOB files. To the end-user, these streams are known simply
+ as "titles", but the actual logical playback sequence is defined by one
+ or more "PGCs", or Program Group Chains, within the title. The PGC is
+ in turn comprised of multiple "PGs", or Programs", which are the actual
+ video segments (and for a typical video feature, sequentially ordered).
+ The PGC structure, along with stream layout and metadata, are stored in
+ IFO files that need to be parsed. PGCs can be thought of as playlists
+ in easier terms.
+
+ An actual DVD player relies on user GUI interaction via menus and an
+ internal VM to drive the direction of demuxing. Generally, the user
+ would either navigate (via menus) or automatically be redirected to the
+ PGC of their choice. During this process and the subsequent playback,
+ the DVD player's internal VM also maintains a state and executes
+ instructions that can create jumps to different sectors during
+ playback. This is why libdvdnav is involved, as a linear read of the
+ MPEG-PS blobs on the disc (VOBs) is not enough to produce the right
+ sequence in many cases.
+
+ There are many other DVD structures (a long subject) that will not be
+ discussed here. NAV packets, in particular, are handled by this
+ demuxer to build accurate timing but not emitted as a stream. For a
+ good high-level understanding, refer to:
+
+
+ Options
+
+ This demuxer accepts the following options:
+
+ title int
+ The title number to play. Must be set if pgc and pg are not set.
+ Not applicable to menus. Default is 0 (auto), which currently only
+ selects the first available title (title 1) and notifies the user
+ about the implications.
+
+ chapter_start int
+ The chapter, or PTT (part-of-title), number to start at. Not
+ applicable to menus. Default is 1.
+
+ chapter_end int
+ The chapter, or PTT (part-of-title), number to end at. Not
+ applicable to menus. Default is 0, which is a special value to
+ signal end at the last possible chapter.
+
+ angle int
+ The video angle number, referring to what is essentially an
+ additional video stream that is composed from alternate frames
+ interleaved in the VOBs. Not applicable to menus. Default is 1.
+
+ region int
+ The region code to use for playback. Some discs may use this to
+ default playback at a particular angle in different regions. This
+ option will not affect the region code of a real DVD drive, if used
+ as an input. Not applicable to menus. Default is 0, "world".
+
+ menu bool
+ Demux menu assets instead of navigating a title. Requires exact
+ coordinates of the menu (menu_lu, menu_vts, pgc, pg). Default is
+ false.
+
+ menu_lu int
+ The menu language to demux. In DVD, menus are grouped by language.
+ Default is 0, the first language unit.
+
+ menu_vts int
+ The VTS where the menu lives, or 0 if it is a VMG menu (root-
+ level). Default is 0, VMG menu.
+
+ pgc int
+ The entry PGC to start playback, in conjunction with pg.
+ Alternative to setting title. Chapter markers are not supported at
+ this time. Must be explicitly set for menus. Default is 0,
+ automatically resolve from value of title.
+
+ pg int
+ The entry PG to start playback, in conjunction with pgc.
+ Alternative to setting title. Chapter markers are not supported at
+ this time. Default is 0, automatically resolve from value of
+ title, or start from the beginning (PG 1) of the menu.
+
+ preindex bool
+ Enable this to have accurate chapter (PTT) markers and duration
+ measurement, which requires a slow second pass read in order to
+ index the chapter marker timestamps from NAV packets. This is non-
+ ideal extra work for real optical drives. It is recommended and
+ faster to use this option with a backup of the DVD structure stored
+ on a hard drive. Not compatible with pgc and pg. Not applicable to
+ menus. Default is 0, false.
+
+ trim bool
+ Skip padding cells (i.e. cells shorter than 1 second) from the
+ beginning. There exist many discs with filler segments at the
+ beginning of the PGC, often with junk data intended for controlling
+ a real DVD player's buffering speed and with no other material data
+ value. Not applicable to menus. Default is 1, true.
+
+ Examples
+
+ o Open title 3 from a given DVD structure:
+
+ ffmpeg -f dvdvideo -title 3 -i ...
+
+ o Open chapters 3-6 from title 1 from a given DVD structure:
+
+ ffmpeg -f dvdvideo -chapter_start 3 -chapter_end 6 -title 1 -i ...
+
+ o Open only chapter 5 from title 1 from a given DVD structure:
+
+ ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i ...
+
+ o Demux menu with language 1 from VTS 1, PGC 1, starting at PG 1:
+
+ ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i ...
+
+ 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, as specified in
+ .
+
+ ffmpeg [-assetmaps ,,...] -i ...
+
+ If "-assetmaps" is not specified, the demuxer looks for a file called
+ ASSETMAP.xml in the same directory as the CPL.
+
+ 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 up to a 10 second dts correction
+ for 48 kHz audio streams while accommodating 99.9% of "uint32"
+ range.
+
+ interleaved_read
+ Interleave packets from multiple tracks at demuxer level. For badly
+ interleaved files, this prevents playback issues caused by large
+ gaps between packets in different tracks, as MOV/MP4 do not have
+ packet placement requirements. However, this can cause excessive
+ seeking on very badly interleaved files, due to seeking between
+ tracks, so disabling it may prevent I/O issues, at the expense of
+ playback.
+
+ 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.
+
+ w64
+ Sony Wave64 Audio demuxer.
+
+ This demuxer accepts the following options:
+
+ max_size
+ See the same option for the wav demuxer.
+
+ wav
+ RIFF Wave Audio demuxer.
+
+ This demuxer accepts the following options:
+
+ max_size
+ Specify the maximum packet size in bytes for the demuxed packets.
+ By default this is set to 0, which means that a sensible value is
+ chosen based on the input format.
+
+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.
+
+ Raw muxers
+ This section covers raw muxers. They 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.
+
+ It comprises the following muxers. The media type and the eventual
+ extensions used to automatically selects the muxer from the output
+ extensions are also shown.
+
+ ac3 audio
+ Dolby Digital, also known as AC-3.
+
+ adx audio
+ 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 audio
+ aptX (Audio Processing Technology for Bluetooth)
+
+ aptx_hd audio (aptxdh)
+ aptX HD (Audio Processing Technology for Bluetooth) audio
+
+ avs2 video (avs, avs2)
+ AVS2-P2 (Audio Video Standard - Second generation - Part 2) / IEEE
+ 1857.4 video
+
+ avs3 video (avs3)
+ AVS3-P2 (Audio Video Standard - Third generation - Part 2) / IEEE
+ 1857.10 video
+
+ cavsvideo video (cavs)
+ Chinese AVS (Audio Video Standard - First generation)
+
+ codec2raw audio
+ Codec 2 audio.
+
+ No extension is registered so format name has to be supplied e.g.
+ with the ffmpeg CLI tool "-f codec2raw".
+
+ data any
+ Generic data muxer.
+
+ This 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".
+
+ dfpwm audio (dfpwm)
+ Raw DFPWM1a (Dynamic Filter Pulse With Modulation) audio muxer.
+
+ dirac video (drc, vc2)
+ BBC Dirac video.
+
+ The Dirac Pro codec is a subset and is standardized as SMPTE VC-2.
+
+ dnxhd video (dnxhd, dnxhr)
+ Avid DNxHD video.
+
+ It is standardized as SMPTE VC-3. Accepts DNxHR streams.
+
+ dts audio
+ DTS Coherent Acoustics (DCA) audio
+
+ eac3 audio
+ Dolby Digital Plus, also known as Enhanced AC-3
+
+ evc video (evc)
+ MPEG-5 Essential Video Coding (EVC) / EVC / MPEG-5 Part 1 EVC video
+
+ g722 audio
+ ITU-T G.722 audio
+
+ g723_1 audio (tco, rco)
+ ITU-T G.723.1 audio
+
+ g726 audio
+ 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 audio
+ 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 audio
+ Global System for Mobile Communications audio
+
+ h261 video
+ ITU-T H.261 video
+
+ h263 video
+ ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2
+ video
+
+ h264 video (h264, 264)
+ 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.
+
+ hevc video (hevc, h265, 265)
+ 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.
+
+ m4v video
+ MPEG-4 Part 2 video
+
+ mjpeg video (mjpg, mjpeg)
+ Motion JPEG video
+
+ mlp audio
+ Meridian Lossless Packing, also known as Packed PCM
+
+ mp2 audio (mp2, m2a, mpa)
+ MPEG-1 Audio Layer II audio
+
+ mpeg1video video (mpg, mpeg, m1v)
+ MPEG-1 Part 2 video.
+
+ mpeg2video video (m2v)
+ ITU-T H.262 / MPEG-2 Part 2 video
+
+ obu video
+ AV1 low overhead Open Bitstream Units muxer.
+
+ Temporal delimiter OBUs will be inserted in all temporal units of
+ the stream.
+
+ rawvideo video (yuv, rgb)
+ Raw uncompressed video.
+
+ sbc audio (sbc, msbc)
+ Bluetooth SIG low-complexity subband codec audio
+
+ truehd audio (thd)
+ Dolby TrueHD audio
+
+ vc1 video
+ SMPTE 421M / VC-1 video
+
+ Examples
+
+ o Store raw video frames with the rawvideo muxer using ffmpeg:
+
+ ffmpeg -f lavfi -i testsrc -t 10 -s hd1080p testsrc.yuv
+
+ Since the rawvideo muxer do not store the information related to
+ size and format, this information must be provided when demuxing
+ the file:
+
+ ffplay -video_size 1920x1080 -pixel_format rgb24 -f rawvideo testsrc.rgb
+
+ Raw PCM muxers
+ This section covers raw PCM (Pulse-Code Modulation) audio muxers.
+
+ They 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.
+
+ It comprises the following muxers. The optional additional extension
+ used to automatically select the muxer from the output extension is
+ also shown in parentheses.
+
+ alaw (al)
+ PCM A-law
+
+ f32be
+ PCM 32-bit floating-point big-endian
+
+ f32le
+ PCM 32-bit floating-point little-endian
+
+ f64be
+ PCM 64-bit floating-point big-endian
+
+ f64le
+ PCM 64-bit floating-point little-endian
+
+ mulaw (ul)
+ PCM mu-law
+
+ s16be
+ PCM signed 16-bit big-endian
+
+ s16le
+ PCM signed 16-bit little-endian
+
+ s24be
+ PCM signed 24-bit big-endian
+
+ s24le
+ PCM signed 24-bit little-endian
+
+ s32be
+ PCM signed 32-bit big-endian
+
+ s32le
+ PCM signed 32-bit little-endian
+
+ s8 (sb)
+ PCM signed 8-bit
+
+ u16be
+ PCM unsigned 16-bit big-endian
+
+ u16le
+ PCM unsigned 16-bit little-endian
+
+ u24be
+ PCM unsigned 24-bit big-endian
+
+ u24le
+ PCM unsigned 24-bit little-endian
+
+ u32be
+ PCM unsigned 32-bit big-endian
+
+ u32le
+ PCM unsigned 32-bit little-endian
+
+ u8 (ub)
+ PCM unsigned 8-bit
+
+ vidc
+ PCM Archimedes VIDC
+
+ MPEG-1/MPEG-2 program stream muxers
+ This section covers formats belonging to the MPEG-1 and MPEG-2 Systems
+ family.
+
+ The MPEG-1 Systems format (also known as ISO/IEEC 11172-1 or MPEG-1
+ program stream) has been adopted for the format of media track stored
+ in VCD (Video Compact Disc).
+
+ The MPEG-2 Systems standard (also known as ISO/IEEC 13818-1) covers two
+ containers formats, one known as transport stream and one known as
+ program stream; only the latter is covered here.
+
+ The MPEG-2 program stream format (also known as VOB due to the
+ corresponding file extension) is an extension of MPEG-1 program stream:
+ in addition to support different codecs for the audio and video
+ streams, it also stores subtitles and navigation metadata. MPEG-2
+ program stream has been adopted for storing media streams in SVCD and
+ DVD storage devices.
+
+ This section comprises the following muxers.
+
+ mpeg (mpg,mpeg)
+ MPEG-1 Systems / MPEG-1 program stream muxer.
+
+ vcd MPEG-1 Systems / MPEG-1 program stream (VCD) muxer.
+
+ This muxer can be used to generate tracks in the format accepted by
+ the VCD (Video Compact Disc) storage devices.
+
+ It is the same as the mpeg muxer with a few differences.
+
+ vob MPEG-2 program stream (VOB) muxer.
+
+ dvd MPEG-2 program stream (DVD VOB) muxer.
+
+ This muxer can be used to generate tracks in the format accepted by
+ the DVD (Digital Versatile Disc) storage devices.
+
+ This is the same as the vob muxer with a few differences.
+
+ svcd (vob)
+ MPEG-2 program stream (SVCD VOB) muxer.
+
+ This muxer can be used to generate tracks in the format accepted by
+ the SVCD (Super Video Compact Disc) storage devices.
+
+ This is the same as the vob muxer with a few differences.
+
+ Options
+
+ muxrate rate
+ Set user-defined mux rate expressed as a number of bits/s. If not
+ specied the automatically computed mux rate is employed. Default
+ value is 0.
+
+ preload delay
+ Set initial demux-decode delay in microseconds. Default value is
+ 500000.
+
+ MOV/MPEG-4/ISOMBFF muxers
+ This section covers formats belonging to the QuickTime / MOV family,
+ including the MPEG-4 Part 14 format and ISO base media file format
+ (ISOBMFF). These formats share a common structure based on the ISO base
+ media file format (ISOBMFF).
+
+ The MOV format was originally developed for use with Apple QuickTime.
+ It was later used as the basis for the MPEG-4 Part 1 (later Part 14)
+ format, also known as ISO/IEC 14496-1. That format was then generalized
+ into ISOBMFF, also named MPEG-4 Part 12 format, ISO/IEC 14496-12, or
+ ISO/IEC 15444-12.
+
+ It comprises the following muxers.
+
+ 3gp Third Generation Partnership Project (3GPP) format for 3G UMTS
+ multimedia services
+
+ 3g2 Third Generation Partnership Project 2 (3GP2 or 3GPP2) format for
+ 3G CDMA2000 multimedia services, similar to 3gp with extensions and
+ limitations
+
+ f4v Adobe Flash Video format
+
+ ipod
+ MPEG-4 audio file format, as MOV/MP4 but limited to contain only
+ audio streams, typically played with the Apple ipod device
+
+ ismv
+ Microsoft IIS (Internet Information Services) Smooth Streaming
+ Audio/Video (ISMV or ISMA) format. This is based on MPEG-4 Part 14
+ format with a few incompatible variants, used to stream media files
+ for the Microsoft IIS server.
+
+ mov QuickTime player format identified by the ".mov" extension
+
+ mp4 MP4 or MPEG-4 Part 14 format
+
+ psp PlayStation Portable MP4/MPEG-4 Part 14 format variant. This is
+ based on MPEG-4 Part 14 format with a few incompatible variants,
+ used to play files on PlayStation devices.
+
+ Fragmentation
+
+ The mov, mp4, and ismv muxers support fragmentation. Normally, a
+ MOV/MP4 file has all the metadata about all packets stored in one
+ location.
+
+ This data is usually written at the end of the file, but it can be
+ moved to the start for better playback by adding "+faststart" to the
+ "-movflags", or using the qt-faststart tool).
+
+ A fragmented file consists of a number of fragments, where packets and
+ metadata about these packets are stored together. Writing a fragmented
+ file has the advantage that the file is decodable even if the writing
+ is interrupted (while a normal MOV/MP4 is undecodable if it is not
+ properly finished), and it requires less memory when writing very long
+ files (since writing normal MOV/MP4 files stores info about every
+ single packet in memory until the file is closed). The downside is that
+ it is less compatible with other applications.
+
+ Fragmentation is enabled by setting one of the options that define how
+ to cut the file into fragments:
+
+ frag_duration
+ frag_size
+ min_frag_duration
+ movflags +frag_keyframe
+ movflags +frag_custom
+
+ If more than one condition is specified, fragments are cut when one of
+ the specified conditions is fulfilled. The exception to this is the
+ option min_frag_duration, which has to be fulfilled for any of the
+ other conditions to apply.
+
+ Options
+
+ brand brand_string
+ Override major brand.
+
+ empty_hdlr_name bool
+ Enable to skip writing the name inside a "hdlr" box. Default is
+ "false".
+
+ encryption_key key
+ set the media encryption key in hexadecimal format
+
+ encryption_kid kid
+ set the media encryption key identifier in hexadecimal format
+
+ encryption_scheme scheme
+ configure the encryption scheme, allowed values are none, and cenc-
+ aes-ctr
+
+ frag_duration duration
+ Create fragments that are duration microseconds long.
+
+ frag_interleave number
+ Interleave samples within fragments (max number of consecutive
+ samples, lower is tighter interleaving, but with more overhead. It
+ is set to 0 by default.
+
+ frag_size size
+ create fragments that contain up to size bytes of payload data
+
+ iods_audio_profile profile
+ specify iods number for the audio profile atom (from -1 to 255),
+ default is "-1"
+
+ iods_video_profile profile
+ specify iods number for the video profile atom (from -1 to 255),
+ default is "-1"
+
+ ism_lookahead num_entries
+ specify number of lookahead entries for ISM files (from 0 to 255),
+ default is 0
+
+ min_frag_duration duration
+ do not create fragments that are shorter than duration microseconds
+ long
+
+ 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.
+
+ mov_gamma gamma
+ specify gamma value for gama atom (as a decimal number from 0 to
+ 10), default is 0.0, must be set together with "+ movflags"
+
+ movflags flags
+ Set various muxing switches. The following flags can be used:
+
+ cmaf
+ write CMAF (Common Media Application Format) compatible
+ fragmented MP4 output
+
+ dash
+ write DASH (Dynamic Adaptive Streaming over HTTP) compatible
+ fragmented MP4 output
+
+ default_base_moof
+ Similarly to the omit_tfhd_offset flag, 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).
+
+ delay_moov
+ delay writing the initial moov until the first fragment is cut,
+ or until the first fragment flush
+
+ 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.
+
+ 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.
+
+ 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.)
+
+ frag_discont
+ signal that the next fragment is discontinuous from earlier
+ ones
+
+ frag_every_frame
+ fragment at every frame
+
+ frag_keyframe
+ start a new fragment at each video keyframe
+
+ global_sidx
+ write a global sidx index at the start of the file
+
+ isml
+ create a live smooth streaming feed (for pushing to a
+ publishing point)
+
+ 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.
+
+ 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.
+
+ prefer_icc
+ If writing colr atom prioritise usage of ICC profile if it
+ exists in stream packet side data.
+
+ rtphint
+ add RTP hinting tracks to the output file
+
+ 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.
+
+ 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 the global_sidx flag is enabled,
+ this option is ignored.
+
+ skip_trailer
+ skip writing the mfra/tfra/mfro trailer for fragmented files
+
+ use_metadata_tags
+ use mdta atom for metadata
+
+ write_colr
+ write colr atom even if the color info is unspecified. This
+ flag is experimental, may be renamed or changed, do not use
+ from scripts.
+
+ write_gama
+ write deprecated gama atom
+
+ movie_timescale scale
+ Set the timescale written in the movie header box ("mvhd"). Range
+ is 1 to INT_MAX. Default is 1000.
+
+ rtpflags flags
+ Add RTP hinting tracks to the output file.
+
+ The following flags can be used:
+
+ h264_mode0
+ use mode 0 for H.264 in RTP
+
+ latm
+ use MP4A-LATM packetization instead of MPEG4-GENERIC for AAC
+
+ rfc2190
+ use RFC 2190 packetization instead of RFC 4629 for H.263
+
+ send_bye
+ send RTCP BYE packets when finishing
+
+ skip_rtcp
+ do not send RTCP sender reports
+
+ skip_iods bool
+ skip writing iods atom (default value is "true")
+
+ use_editlist bool
+ use edit list (default value is "auto")
+
+ use_stream_ids_as_track_ids bool
+ use stream ids as track ids (default value is "false")
+
+ 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.
+
+ 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 option
+ 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.
+
+ write_tmcd bool
+ 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).
+
+ 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.
+
+ Examples
+
+ o Push Smooth Streaming content in real time to a publishing point on
+ IIS with the ismv muxer using ffmpeg:
+
+ ffmpeg -re <> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
+
+ a64
+ A64 Commodore 64 video muxer.
+
+ This muxer accepts a single "a64_multi" or "a64_multi5" codec video
+ stream.
+
+ ac4
+ Raw AC-4 audio muxer.
+
+ This muxer accepts a single "ac4" audio stream.
+
+ Options
+
+ write_crc bool
+ when enabled, write a CRC checksum for each packet to the output,
+ default is "false"
+
+ adts
+ Audio Data Transport Stream muxer.
+
+ It accepts a single AAC stream.
+
+ 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.
+
+ aea
+ MD STUDIO audio muxer.
+
+ This muxer accepts a single ATRAC1 audio stream with either one or two
+ channels and a sample rate of 44100Hz.
+
+ As AEA supports storing the track title, this muxer will also write the
+ title from stream's metadata to the container.
+
+ aiff
+ Audio Interchange File Format muxer.
+
+ Options
+
+ write_id3v2 bool
+ Enable ID3v2 tags writing when set to 1. Default is 0 (disabled).
+
+ id3v2_version bool
+ 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
+ High Voltage Software's Lego Racers game audio muxer.
+
+ It accepts a single ADPCM_IMA_ALP stream with no more than 2 channels
+ and a sample rate not greater than 44100 Hz.
+
+ Extensions: "tun", "pcm"
+
+ Options
+
+ type type
+ Set file type.
+
+ type accepts the following values:
+
+ 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)
+
+ amr
+ 3GPP AMR (Adaptive Multi-Rate) audio muxer.
+
+ It accepts a single audio stream containing an AMR NB stream.
+
+ amv
+ AMV (Actions Media Video) format muxer.
+
+ apm
+ Ubisoft Rayman 2 APM audio muxer.
+
+ It accepts a single ADPCM IMA APM audio stream.
+
+ apng
+ Animated Portable Network Graphics muxer.
+
+ It accepts a single APNG video stream.
+
+ Options
+
+ final_delay delay
+ Force a delay expressed in seconds after the last frame of each
+ repetition. Default value is 0.0.
+
+ plays repetitions
+ specify how many times to play the content, 0 causes an infinte
+ loop, with 1 there is no loop
+
+ Examples
+
+ o Use ffmpeg to generate an APNG output with 2 repetitions, and with
+ a delay of half a second after the first repetition:
+
+ ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng
+
+ argo_asf
+ Argonaut Games ASF audio muxer.
+
+ It accepts a single ADPCM audio stream.
+
+ Options
+
+ version_major version
+ override file major version, specified as an integer, default value
+ is 2
+
+ version_minor version
+ override file minor version, specified as an integer, default value
+ is 1
+
+ name name
+ Embed file name into file, if not specified use the output file
+ name. The name is truncated to 8 characters.
+
+ argo_cvg
+ Argonaut Games CVG audio muxer.
+
+ It accepts a single one-channel ADPCM 22050Hz audio stream.
+
+ The loop and reverb options set the corresponding flags in the header
+ which can be later retrieved to process the audio stream accordingly.
+
+ Options
+
+ skip_rate_check bool
+ skip sample rate check (default is "false")
+
+ loop bool
+ set loop flag (default is "false")
+
+ reverb boolean
+ set reverb flag (default is "true")
+
+ asf, asf_stream
+ Advanced / Active Systems (or Streaming) Format audio muxer.
+
+ The asf_stream variant should be selected for streaming.
+
+ Note that Windows Media Audio (wma) and Windows Media Video (wmv) use
+ this muxer too.
+
+ Options
+
+ packet_size size
+ Set the muxer packet size as a number of bytes. 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 "64Ki".
+
+ ass
+ ASS/SSA (SubStation Alpha) subtitles muxer.
+
+ It accepts a single ASS subtitles stream.
+
+ Options
+
+ ignore_readorder bool
+ Write dialogue events immediately, even if they are out-of-order,
+ default is "false", otherwise they are cached until the expected
+ time event is found.
+
+ ast
+ AST (Audio Stream) muxer.
+
+ This format is used to play audio on some Nintendo Wii games.
+
+ It accepts a single audio stream.
+
+ The loopstart and loopend options can be used to define a section of
+ the file to loop for players honoring such options.
+
+ Options
+
+ loopstart start
+ Specify loop start position expressesd in milliseconds, from "-1"
+ to "INT_MAX", in case "-1" is set then no loop is specified
+ (default -1) and the loopend value is ignored.
+
+ loopend end
+ Specify loop end position expressed in milliseconds, from 0 to
+ "INT_MAX", default is 0, in case 0 is set it assumes the total
+ stream duration.
+
+ au
+ SUN AU audio muxer.
+
+ It accepts a single audio stream.
+
+ avi
+ Audio Video Interleaved muxer.
+
+ AVI is a proprietary format developed by Microsoft, and later formally
+ specified through the Open DML specification.
+
+ Because of differences in players implementations, it might be required
+ to set some options to make sure that the generated output can be
+ correctly played by the target player.
+
+ Options
+
+ flipped_raw_rgb bool
+ 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.
+
+ reserve_index_space size
+ 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.
+
+ Default value is 0.
+
+ write_channel_mask bool
+ 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).
+
+ avif
+ AV1 (Alliance for Open Media Video codec 1) image format muxer.
+
+ This muxers stores images encoded using the AV1 codec.
+
+ It accepts one or two video streams. In case two video streams are
+ provided, the second one shall contain a single plane storing the alpha
+ mask.
+
+ In case more than one image is provided, the generated output is
+ considered an animated AVIF and the number of loops can be specified
+ with the loop option.
+
+ This is based on the specification by Alliance for Open Media at url
+ .
+
+ Options
+
+ loop count
+ number of times to loop an animated AVIF, 0 specify an infinite
+ loop, default is 0
+
+ movie_timescale timescale
+ Set the timescale written in the movie header box ("mvhd"). Range
+ is 1 to INT_MAX. Default is 1000.
+
+ avm2
+ ShockWave Flash (SWF) / ActionScript Virtual Machine 2 (AVM2) format
+ muxer.
+
+ It accepts one audio stream, one video stream, or both.
+
+ bit
+ G.729 (.bit) file format muxer.
+
+ It accepts a single G.729 audio stream.
+
+ caf
+ Apple CAF (Core Audio Format) muxer.
+
+ It accepts a single audio stream.
+
+ codec2
+ Codec2 audio audio muxer.
+
+ It accepts a single codec2 audio stream.
+
+ chromaprint
+ Chromaprint fingerprinter muxers.
+
+ To enable compilation of this filter you need to configure FFmpeg with
+ "--enable-chromaprint".
+
+ 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
+
+ algorithm version
+ Select version of algorithm to fingerprint with. Range is 0 to 4.
+ Version 3 enables silence detection. Default is 1.
+
+ fp_format format
+ Format to output the fingerprint as. Accepts the following options:
+
+ base64
+ Base64 compressed fingerprint (default)
+
+ compressed
+ Binary compressed fingerprint
+
+ raw Binary raw fingerprint
+
+ silence_threshold 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".
+
+ crc
+ CRC (Cyclic Redundancy Check) muxer.
+
+ 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
+
+ o Use ffmpeg to compute the CRC of the input, and store it in the
+ file out.crc:
+
+ ffmpeg -i INPUT -f crc out.crc
+
+ o Use ffmpeg to print the CRC to stdout with the command:
+
+ ffmpeg -i INPUT -f crc -
+
+ o 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.
+
+ This muxer creates segments and manifest files according to the MPEG-
+ DASH standard ISO/IEC 23009-1:2014 and following standard updates.
+
+ For more information see:
+
+ o ISO DASH Specification:
+
+
+ o WebM DASH Specification:
+
+
+ This muxer creates an MPD (Media Presentation Description) manifest
+ file and segment files for each stream. Segment files are placed in the
+ same directory of the MPD manifest file.
+
+ The segment filename might contain pre-defined identifiers used in the
+ manifest "SegmentTemplate" section 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.
+
+ Options
+
+ adaptation_sets adaptation_sets
+ Assign streams to adaptation sets, specified in the MPD manifest
+ "AdaptationSets" section.
+
+ An adaptation set contains a set of one or more streams accessed as
+ a single subset, e.g. corresponding streams encoded at different
+ size selectable by the user depending on the available bandwidth,
+ or to different audio streams with a different language.
+
+ Each adaptation set is specified with the syntax:
+
+ id=,streams=
+
+ where index must be a numerical index, and streams is a sequence of
+ ","-separated stream indices. Multiple adaptation sets can be
+ specified, separated by spaces.
+
+ To map all video (or audio) streams to an adaptation set, "v" (or
+ "a") can be used as stream identifier instead of IDs.
+
+ When no assignment is defined, this defaults to an adaptation set
+ for each stream.
+
+ The following optional fields can also be specified:
+
+ descriptor
+ Define the descriptor as defined by ISO/IEC
+ 23009-1:2014/Amd.2:2015.
+
+ For example:
+
+
+
+ The descriptor string should be a self-closing XML tag.
+
+ frag_duration
+ Override the global fragment duration specified with the
+ frag_duration option.
+
+ frag_type
+ Override the global fragment type specified with the frag_type
+ option.
+
+ seg_duration
+ Override the global segment duration specified with the
+ seg_duration option.
+
+ trick_id
+ Mark an adaptation set as containing streams meant to be used
+ for Trick Mode for the referenced adaptation set.
+
+ A few examples of possible values for the adaptation_sets option
+ follow:
+
+ id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a
+
+ id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1
+
+ dash_segment_type type
+ Set DASH segment files type.
+
+ Possible values:
+
+ auto
+ The dash segment files format will be selected based on the
+ stream codec. This is the default mode.
+
+ mp4 the dash segment files will be in ISOBMFF/MP4 format
+
+ webm
+ the dash segment files will be in WebM format
+
+ extra_window_size size
+ Set the maximum number of segments kept outside of the manifest
+ before removing from disk.
+
+ 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.
+
+ frag_duration duration
+ Set the length in seconds of fragments within segments, fractional
+ value can also be set.
+
+ frag_type type
+ Set the type of interval for fragmentation.
+
+ Possible values:
+
+ auto
+ set one fragment per segment
+
+ every_frame
+ fragment at every frame
+
+ duration
+ fragment at specific time intervals
+
+ pframes
+ fragment at keyframes and following P-Frame reordering (Video
+ only, experimental)
+
+ global_sidx bool
+ Write global "SIDX" atom. Applicable only for single file, mp4
+ output, non-streaming mode.
+
+ hls_master_name file_name
+ HLS master playlist name. Default is master.m3u8.
+
+ hls_playlist bool
+ Generate HLS playlist files. The master playlist is generated with
+ filename specified by the hls_master_name option. One media
+ playlist file is generated for each stream with filenames
+ media_0.m3u8, media_1.m3u8, etc.
+
+ http_opts http_opts
+ Specify a list of ":"-separated key=value options to pass to the
+ underlying HTTP protocol. Applicable only for HTTP output.
+
+ http_persistent bool
+ Use persistent HTTP connections. Applicable only for HTTP output.
+
+ http_user_agent user_agent
+ Override User-Agent field in HTTP header. Applicable only for HTTP
+ output.
+
+ ignore_io_errors bool
+ Ignore IO errors during open and write. Useful for long-duration
+ runs with network output. This is disabled by default.
+
+ index_correction bool
+ Enable or disable segment index correction logic. Applicable only
+ when use_template is enabled and use_timeline is disabled. This is
+ disabled by default.
+
+ 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.
+
+ init_seg_name init_name
+ DASH-templated name to use for the initialization segment. Default
+ is "init-stream$RepresentationID$.$ext$". "$ext$" is replaced with
+ the file name extension specific for the segment format.
+
+ ldash bool
+ Enable Low-latency Dash by constraining the presence and values of
+ some elements. This is disabled by default.
+
+ lhls bool
+ Enable Low-latency HLS (LHLS). Add "#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 at
+ .
+
+ 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
+
+
+ master_m3u8_publish_rate segment_intervals_count
+ Publish master playlist repeatedly every after specified number of
+ segment intervals.
+
+ max_playback_rate 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.
+
+ media_seg_name segment_name
+ DASH-templated name to use 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.
+
+ method method
+ Use the given HTTP method to create output files. Generally set to
+ "PUT" or "POST".
+
+ min_playback_rate 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.
+
+ mpd_profile flags
+ Set one or more MPD manifest profiles.
+
+ Possible values:
+
+ dash
+ MPEG-DASH ISO Base media file format live profile
+
+ dvb_dash
+ DVB-DASH profile
+
+ Default value is "dash".
+
+ remove_at_exit bool
+ Enable or disable removal of all segments when finished. This is
+ disabled by default.
+
+ seg_duration duration
+ Set the segment length in seconds (fractional value can be set).
+ The value is treated as average segment duration when the
+ use_template option is enabled and the use_timeline option is
+ disabled and as minimum segment duration for all the other use
+ cases.
+
+ Default value is 5.
+
+ single_file bool
+ Enable or disable storing all segments in one file, accessed using
+ byte ranges. This is disabled by default.
+
+ The name of the single file can be specified with the
+ single_file_name option, if not specified assume the basename of
+ the manifest file with the output format extension.
+
+ single_file_name file_name
+ DASH-templated name to use for the manifest "baseURL" element.
+ Imply that the single_file option is set to true. In the template,
+ "$ext$" is replaced with the file name extension specific for the
+ segment format.
+
+ streaming bool
+ Enable or disable chunk streaming mode of output. In chunk
+ streaming mode, each frame will be a "moof" fragment which forms a
+ chunk. This is disabled by default.
+
+ target_latency target_latency
+ Set an intended target latency in seconds for serving (fractional
+ value can be set). Applicable only when the streaming and
+ write_prft options are enabled. This is an informative fields
+ clients can use to measure the latency of the service.
+
+ timeout timeout
+ Set timeout for socket I/O operations expressed in seconds
+ (fractional value can be set). Applicable only for HTTP output.
+
+ update_period period
+ Set the MPD update period, for dynamic content. The unit is second.
+ If set to 0, the period is automatically computed.
+
+ Default value is 0.
+
+ use_template bool
+ Enable or disable use of "SegmentTemplate" instead of "SegmentList"
+ in the manifest. This is enabled by default.
+
+ use_timeline bool
+ Enable or disable use of "SegmentTimeline" within the
+ "SegmentTemplate" manifest section. This is enabled by default.
+
+ utc_timing_url url
+ URL of the page that will return the UTC timestamp in ISO format,
+ for example "https://time.akamai.com/?iso"
+
+ window_size size
+ Set the maximum number of segments kept in the manifest, discard
+ the oldest one. This is useful for live streaming.
+
+ If the value is 0, all segments are kept in the manifest. Default
+ value is 0.
+
+ 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 is set to auto by
+ default, in which case the muxer will attempt to enable it only in
+ modes that require it.
+
+ Example
+
+ Generate a DASH output reading from an input source in realtime using
+ ffmpeg.
+
+ Two multimedia streams are generated from the input file, both
+ containing a video stream encoded through libx264, and an audio stream
+ encoded with libfdk_aac. The first multimedia stream contains video
+ with a bitrate of 800k and audio at the default rate, the second with
+ video scaled to 320x170 pixels at 300k and audio resampled at 22005 Hz.
+
+ The window_size option keeps only the latest 5 segments with the
+ default duration of 5 seconds.
+
+ ffmpeg -re -i -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \
+ -b:v:0 800k -profile:v:0 main \
+ -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -ar:a:1 22050 \
+ -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 \
+ -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
+
+ daud
+ D-Cinema audio muxer.
+
+ It accepts a single 6-channels audio stream resampled at 96000 Hz
+ encoded with the pcm_24daud codec.
+
+ Example
+
+ Use ffmpeg to mux input audio to a 5.1 channel layout resampled at
+ 96000Hz:
+
+ ffmpeg -i INPUT -af aresample=96000,pan=5.1 slow.302
+
+ For ffmpeg versions before 7.0 you might have to use the asetnsamples
+ filter to limit the muxed packet size, because this format does not
+ support muxing packets larger than 65535 bytes (3640 samples). For
+ newer ffmpeg versions audio is automatically packetized to 36000 byte
+ (2000 sample) packets.
+
+ dv
+ DV (Digital Video) muxer.
+
+ It accepts exactly one dvvideo video stream and at most two pcm_s16
+ audio streams. More constraints are defined by the property of the
+ video, which must correspond to a DV video supported profile, and on
+ the framerate.
+
+ Example
+
+ Use ffmpeg to convert the input:
+
+ ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv
+
+ ffmetadata
+ FFmpeg metadata muxer.
+
+ This muxer writes the streams metadata in the ffmetadata format.
+
+ See the Metadata chapter for information about the format.
+
+ Example
+
+ Use ffmpeg to extract metadata from an input file to a metadata.ffmeta
+ file in ffmetadata format:
+
+ ffmpeg -i INPUT -f ffmetadata metadata.ffmeta
+
+ fifo
+ FIFO (First-In First-Out) muxer.
+
+ The fifo pseudo-muxer allows the separation of encoding and muxing by
+ using a 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.
+
+ The target muxer is either selected from the output name or specified
+ through the fifo_format option.
+
+ The behavior of the fifo muxer if the queue fills up or if the output
+ fails (e.g. if a packet cannot be written to the output) 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 the FIFO queue fills up.
+
+ API users should be aware that callback functions
+ ("interrupt_callback", "io_open" and "io_close") used within its
+ "AVFormatContext" must be thread-safe.
+
+ Options
+
+ 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 "false".
+
+ drop_pkts_on_overflow bool
+ If set to "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
+ "false", so in such cases the encoder will be blocked until the
+ muxer processes some of the packets and none of them is lost.
+
+ fifo_format format_name
+ Specify the format name. Useful if it cannot be guessed from the
+ output name suffix.
+
+ format_opts options
+ Specify format options for the underlying muxer. Muxer options can
+ be specified as a list of key=value pairs separated by ':'.
+
+ max_recovery_attempts count
+ Set maximum number of successive unsuccessful recovery attempts
+ after which the output fails permanently. By default this option is
+ set to 0 (unlimited).
+
+ queue_size size
+ Specify size of the queue as a number of packets. Default value is
+ 60.
+
+ recover_any_error bool
+ If set to "true", recovery will be attempted regardless of type of
+ the error causing the failure. By default this option is set to
+ "false" and in case of certain (usually permanent) errors the
+ recovery is not attempted even when the attempt_recovery option is
+ set to "true".
+
+ recovery_wait_streamtime bool
+ If set to "false", the real time is used when waiting for the
+ recovery attempt (i.e. the recovery will be attempted after the
+ time specified by the recovery_wait_time option).
+
+ If set to "true", the time of the processed stream is taken into
+ account instead (i.e. the recovery will be attempted after
+ discarding the packets corresponding to the recovery_wait_time
+ option).
+
+ By default this option is set to "false".
+
+ recovery_wait_time duration
+ Specify waiting time in seconds before the next recovery attempt
+ after previous unsuccessful recovery attempt. Default value is 5.
+
+ restart_with_keyframe bool
+ Specify whether to wait for the keyframe after recovering from
+ queue overflow or failure. This option is set to "false" by
+ default.
+
+ timeshift duration
+ Buffer the specified amount of packets and delay writing the
+ output. Note that the value of the queue_size option must be big
+ enough to store the packets for timeshift. At the end of the input
+ the fifo buffer is flushed at realtime speed.
+
+ Example
+
+ Use ffmpeg to stream to an 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 \
+ -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 \
+ -map 0:v -map 0:a rtmp://example.com/live/stream_name
+
+ film_cpk
+ Sega film (.cpk) muxer.
+
+ This format was used as internal format for several Sega games.
+
+ For more information regarding the Sega film file format, visit
+ .
+
+ It accepts at maximum one cinepak or raw video stream, and at maximum
+ one audio stream.
+
+ filmstrip
+ Adobe Filmstrip muxer.
+
+ This format is used by several Adobe tools to store a generated
+ filmstrip export. It accepts a single raw video stream.
+
+ fits
+ Flexible Image Transport System (FITS) muxer.
+
+ This image format is used to store astronomical data.
+
+ For more information regarding the format, visit
+ .
+
+ flac
+ Raw FLAC audio muxer.
+
+ This muxer accepts exactly one FLAC audio stream. Additionally, it is
+ possible to add images with disposition attached_pic.
+
+ Options
+
+ write_header bool
+ write the file header if set to "true", default is "true"
+
+ Example
+
+ Use ffmpeg to store the audio stream from an input file, together with
+ several pictures used with attached_pic disposition:
+
+ ffmpeg -i INPUT -i pic1.png -i pic2.jpg -map 0:a -map 1 -map 2 -disposition:v attached_pic OUTPUT
+
+ flv
+ Adobe Flash Video Format muxer.
+
+ 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.
+
+ Note that the GIF format has a very large time base: the delay between
+ two frames can therefore not be smaller than one centi second.
+
+ Options
+
+ loop bool
+ Set the number of times to loop the output. Use "-1" for no loop, 0
+ for looping indefinitely (default).
+
+ final_delay 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.
+
+ Example
+
+ 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"
+
+ gxf
+ General eXchange Format (GXF) muxer.
+
+ GXF was developed by Grass Valley Group, then standardized by SMPTE as
+ SMPTE 360M and was extended in SMPTE RDD 14-2007 to include high-
+ definition video resolutions.
+
+ It accepts at most one video stream with codec mjpeg, or mpeg1video, or
+ mpeg2video, or dvvideo with resolution 512x480 or 608x576, and several
+ audio streams with rate 48000Hz and codec pcm16_le.
+
+ 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.
+
+ hds
+ HTTP Dynamic Streaming (HDS) muxer.
+
+ HTTP dynamic streaming, or HDS, is an adaptive bitrate streaming method
+ developed by Adobe. HDS delivers MP4 video content over HTTP
+ connections. HDS can be used for on-demand streaming or live streaming.
+
+ This muxer creates an .f4m (Adobe Flash Media Manifest File) manifest,
+ an .abst (Adobe Bootstrap File) for each stream, and segment files in a
+ directory specified as the output.
+
+ These needs to be accessed by an HDS player throuhg HTTPS for it to be
+ able to perform playback on the generated stream.
+
+ Options
+
+ extra_window_size int
+ number of fragments kept outside of the manifest before removing
+ from disk
+
+ min_frag_duration microseconds
+ minimum fragment duration (in microseconds), default value is 1
+ second (10000000)
+
+ remove_at_exit bool
+ remove all fragments when finished when set to "true"
+
+ window_size int
+ number of fragments kept in the manifest, if set to a value
+ different from 0. By default all segments are kept in the output
+ directory.
+
+ Example
+
+ Use ffmpeg to generate HDS files to the output.hds directory in real-
+ time rate:
+
+ ffmpeg -re -i INPUT -f hds -b:v 200k output.hds
+
+ 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 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.
+
+ 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.
+
+ rcwt
+ Raw Captions With Time (RCWT) is a format native to ccextractor, a
+ commonly used open source tool for processing 608/708 closed caption
+ (CC) sources. It can be used to archive the original, raw CC bitstream
+ and to produce a source file for later CC processing or conversion. As
+ a result, it also allows for interopability with ccextractor for
+ processing CC data extracted via ffmpeg. The format is simple to parse
+ and can be used to retain all lines and variants of CC.
+
+ This muxer implements the specification as of 2024-01-05, which has
+ been stable and unchanged for 10 years as of this writing.
+
+ This muxer will have some nuances from the way that ccextractor muxes
+ RCWT. No compatibility issues when processing the output with
+ ccextractor have been observed as a result of this so far, but mileage
+ may vary and outputs will not be a bit-exact match.
+
+ A free specification of RCWT can be found here:
+
+
+ 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=