gargaman07 commited on
Commit
d086b80
·
verified ·
1 Parent(s): bc30ce2

Upload 48 files

Browse files
Files changed (48) hide show
  1. .dockerfile +36 -0
  2. .gitattributes +2 -35
  3. .gitignore +3 -0
  4. client_script.py +45 -0
  5. ffmpeg-master-latest-win64-gpl/LICENSE.txt +674 -0
  6. ffmpeg-master-latest-win64-gpl/bin/ffmpeg.exe +3 -0
  7. ffmpeg-master-latest-win64-gpl/bin/ffplay.exe +3 -0
  8. ffmpeg-master-latest-win64-gpl/bin/ffprobe.exe +3 -0
  9. ffmpeg-master-latest-win64-gpl/doc/bootstrap.min.css +0 -0
  10. ffmpeg-master-latest-win64-gpl/doc/community.html +227 -0
  11. ffmpeg-master-latest-win64-gpl/doc/default.css +165 -0
  12. ffmpeg-master-latest-win64-gpl/doc/developer.html +1149 -0
  13. ffmpeg-master-latest-win64-gpl/doc/faq.html +821 -0
  14. ffmpeg-master-latest-win64-gpl/doc/fate.html +390 -0
  15. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-all.html +0 -0
  16. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-bitstream-filters.html +1290 -0
  17. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-codecs.html +0 -0
  18. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-devices.html +0 -0
  19. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-filters.html +0 -0
  20. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-formats.html +0 -0
  21. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-protocols.html +0 -0
  22. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-resampler.html +350 -0
  23. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-scaler.html +254 -0
  24. ffmpeg-master-latest-win64-gpl/doc/ffmpeg-utils.html +1547 -0
  25. ffmpeg-master-latest-win64-gpl/doc/ffmpeg.html +0 -0
  26. ffmpeg-master-latest-win64-gpl/doc/ffplay-all.html +0 -0
  27. ffmpeg-master-latest-win64-gpl/doc/ffplay.html +914 -0
  28. ffmpeg-master-latest-win64-gpl/doc/ffprobe-all.html +0 -0
  29. ffmpeg-master-latest-win64-gpl/doc/ffprobe.html +1267 -0
  30. ffmpeg-master-latest-win64-gpl/doc/general.html +0 -0
  31. ffmpeg-master-latest-win64-gpl/doc/git-howto.html +562 -0
  32. ffmpeg-master-latest-win64-gpl/doc/libavcodec.html +74 -0
  33. ffmpeg-master-latest-win64-gpl/doc/libavdevice.html +71 -0
  34. ffmpeg-master-latest-win64-gpl/doc/libavfilter.html +70 -0
  35. ffmpeg-master-latest-win64-gpl/doc/libavformat.html +74 -0
  36. ffmpeg-master-latest-win64-gpl/doc/libavutil.html +93 -0
  37. ffmpeg-master-latest-win64-gpl/doc/libswresample.html +93 -0
  38. ffmpeg-master-latest-win64-gpl/doc/libswscale.html +87 -0
  39. ffmpeg-master-latest-win64-gpl/doc/mailing-list-faq.html +443 -0
  40. ffmpeg-master-latest-win64-gpl/doc/nut.html +214 -0
  41. ffmpeg-master-latest-win64-gpl/doc/platform.html +390 -0
  42. ffmpeg-master-latest-win64-gpl/doc/style.min.css +23 -0
  43. index.html +615 -0
  44. main.py +500 -0
  45. models/neural_networks.h5 +3 -0
  46. readme.md +3 -0
  47. requirements.txt +10 -0
  48. yamnet_class_map.csv +522 -0
.dockerfile ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use an official Python runtime as a parent image
2
+ FROM python:3.9-slim-bullseye
3
+
4
+ # Set the working directory in the container
5
+ WORKDIR /app
6
+
7
+ # Install system dependencies
8
+ # - git: for installing python packages from git
9
+ # - ffmpeg: for audio processing with pydub/librosa
10
+ RUN apt-get update && \
11
+ apt-get install -y --no-install-recommends git ffmpeg && \
12
+ rm -rf /var/lib/apt/lists/*
13
+
14
+ # Copy the requirements file into the container
15
+ COPY requirements.txt .
16
+
17
+ # Install Python dependencies
18
+ # Using --no-cache-dir to reduce image size
19
+ RUN pip install --no-cache-dir -r requirements.txt
20
+
21
+ # Copy the rest of the application code into the container
22
+ COPY main.py .
23
+ COPY index.html .
24
+ COPY yamnet_class_map.csv .
25
+ COPY ./models ./models
26
+
27
+ # Make port 7860 available to the world outside this container
28
+ # Hugging Face Spaces often use this port by default
29
+ EXPOSE 7860
30
+
31
+ # Define environment variable for the port (optional, uvicorn command below sets it)
32
+ ENV PORT 7860
33
+
34
+ # Run the application
35
+ # Use 0.0.0.0 to allow external connections
36
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
.gitattributes CHANGED
@@ -1,35 +1,2 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ *.exe filter=lfs diff=lfs merge=lfs -text
2
+ models/neural_networks.h5 filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Ignore virtual environments
2
+ .venv/
3
+
client_script.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import os
3
+
4
+ import requests
5
+
6
+
7
+ def recognize_song_from_file(server_url: str, file_path: str):
8
+ """
9
+ Sends a local audio file to the song recognition server and prints the response.
10
+
11
+ Args:
12
+ server_url (str): The base URL of the FastAPI server (e.g., http://127.0.0.1:8000).
13
+ file_path (str): The local path to the audio file.
14
+ """
15
+ if not os.path.exists(file_path):
16
+ print(f"Error: File not found at {file_path}")
17
+ return
18
+
19
+ recognize_endpoint = f"{server_url.rstrip('/')}/recognize/"
20
+
21
+ try:
22
+ with open(file_path, 'rb') as f:
23
+ files = {
24
+ 'file': (os.path.basename(file_path), f, 'audio/mpeg') # Adjust content type if needed
25
+ }
26
+ print(f"Sending {file_path} to {recognize_endpoint}...")
27
+ response = requests.post(recognize_endpoint, files=files, timeout=30)
28
+ response.raise_for_status()
29
+
30
+ print("Response from server:")
31
+ print(response.json())
32
+
33
+ except requests.exceptions.RequestException as e:
34
+ print(f"Error connecting to server or during request: {e}")
35
+ except Exception as e:
36
+ print(f"An unexpected error occurred: {e}")
37
+
38
+ if __name__ == "__main__":
39
+ parser = argparse.ArgumentParser(description="Client script to recognize a song by sending an audio file to the recognition server.")
40
+ parser.add_argument("file_path", type=str, help="The path to the audio file to recognize.")
41
+ parser.add_argument("--server_url", type=str, default="http://127.0.0.1:8000", help="The base URL of the FastAPI recognition server.")
42
+
43
+ args = parser.parse_args()
44
+
45
+ recognize_song_from_file(args.server_url, args.file_path)
ffmpeg-master-latest-win64-gpl/LICENSE.txt ADDED
@@ -0,0 +1,674 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU General Public License is a free, copyleft license for
11
+ software and other kinds of works.
12
+
13
+ The licenses for most software and other practical works are designed
14
+ to take away your freedom to share and change the works. By contrast,
15
+ the GNU General Public License is intended to guarantee your freedom to
16
+ share and change all versions of a program--to make sure it remains free
17
+ software for all its users. We, the Free Software Foundation, use the
18
+ GNU General Public License for most of our software; it applies also to
19
+ any other work released this way by its authors. You can apply it to
20
+ your programs, too.
21
+
22
+ When we speak of free software, we are referring to freedom, not
23
+ price. Our General Public Licenses are designed to make sure that you
24
+ have the freedom to distribute copies of free software (and charge for
25
+ them if you wish), that you receive source code or can get it if you
26
+ want it, that you can change the software or use pieces of it in new
27
+ free programs, and that you know you can do these things.
28
+
29
+ To protect your rights, we need to prevent others from denying you
30
+ these rights or asking you to surrender the rights. Therefore, you have
31
+ certain responsibilities if you distribute copies of the software, or if
32
+ you modify it: responsibilities to respect the freedom of others.
33
+
34
+ For example, if you distribute copies of such a program, whether
35
+ gratis or for a fee, you must pass on to the recipients the same
36
+ freedoms that you received. You must make sure that they, too, receive
37
+ or can get the source code. And you must show them these terms so they
38
+ know their rights.
39
+
40
+ Developers that use the GNU GPL protect your rights with two steps:
41
+ (1) assert copyright on the software, and (2) offer you this License
42
+ giving you legal permission to copy, distribute and/or modify it.
43
+
44
+ For the developers' and authors' protection, the GPL clearly explains
45
+ that there is no warranty for this free software. For both users' and
46
+ authors' sake, the GPL requires that modified versions be marked as
47
+ changed, so that their problems will not be attributed erroneously to
48
+ authors of previous versions.
49
+
50
+ Some devices are designed to deny users access to install or run
51
+ modified versions of the software inside them, although the manufacturer
52
+ can do so. This is fundamentally incompatible with the aim of
53
+ protecting users' freedom to change the software. The systematic
54
+ pattern of such abuse occurs in the area of products for individuals to
55
+ use, which is precisely where it is most unacceptable. Therefore, we
56
+ have designed this version of the GPL to prohibit the practice for those
57
+ products. If such problems arise substantially in other domains, we
58
+ stand ready to extend this provision to those domains in future versions
59
+ of the GPL, as needed to protect the freedom of users.
60
+
61
+ Finally, every program is threatened constantly by software patents.
62
+ States should not allow patents to restrict development and use of
63
+ software on general-purpose computers, but in those that do, we wish to
64
+ avoid the special danger that patents applied to a free program could
65
+ make it effectively proprietary. To prevent this, the GPL assures that
66
+ patents cannot be used to render the program non-free.
67
+
68
+ The precise terms and conditions for copying, distribution and
69
+ modification follow.
70
+
71
+ TERMS AND CONDITIONS
72
+
73
+ 0. Definitions.
74
+
75
+ "This License" refers to version 3 of the GNU General Public License.
76
+
77
+ "Copyright" also means copyright-like laws that apply to other kinds of
78
+ works, such as semiconductor masks.
79
+
80
+ "The Program" refers to any copyrightable work licensed under this
81
+ License. Each licensee is addressed as "you". "Licensees" and
82
+ "recipients" may be individuals or organizations.
83
+
84
+ To "modify" a work means to copy from or adapt all or part of the work
85
+ in a fashion requiring copyright permission, other than the making of an
86
+ exact copy. The resulting work is called a "modified version" of the
87
+ earlier work or a work "based on" the earlier work.
88
+
89
+ A "covered work" means either the unmodified Program or a work based
90
+ on the Program.
91
+
92
+ To "propagate" a work means to do anything with it that, without
93
+ permission, would make you directly or secondarily liable for
94
+ infringement under applicable copyright law, except executing it on a
95
+ computer or modifying a private copy. Propagation includes copying,
96
+ distribution (with or without modification), making available to the
97
+ public, and in some countries other activities as well.
98
+
99
+ To "convey" a work means any kind of propagation that enables other
100
+ parties to make or receive copies. Mere interaction with a user through
101
+ a computer network, with no transfer of a copy, is not conveying.
102
+
103
+ An interactive user interface displays "Appropriate Legal Notices"
104
+ to the extent that it includes a convenient and prominently visible
105
+ feature that (1) displays an appropriate copyright notice, and (2)
106
+ tells the user that there is no warranty for the work (except to the
107
+ extent that warranties are provided), that licensees may convey the
108
+ work under this License, and how to view a copy of this License. If
109
+ the interface presents a list of user commands or options, such as a
110
+ menu, a prominent item in the list meets this criterion.
111
+
112
+ 1. Source Code.
113
+
114
+ The "source code" for a work means the preferred form of the work
115
+ for making modifications to it. "Object code" means any non-source
116
+ form of a work.
117
+
118
+ A "Standard Interface" means an interface that either is an official
119
+ standard defined by a recognized standards body, or, in the case of
120
+ interfaces specified for a particular programming language, one that
121
+ is widely used among developers working in that language.
122
+
123
+ The "System Libraries" of an executable work include anything, other
124
+ than the work as a whole, that (a) is included in the normal form of
125
+ packaging a Major Component, but which is not part of that Major
126
+ Component, and (b) serves only to enable use of the work with that
127
+ Major Component, or to implement a Standard Interface for which an
128
+ implementation is available to the public in source code form. A
129
+ "Major Component", in this context, means a major essential component
130
+ (kernel, window system, and so on) of the specific operating system
131
+ (if any) on which the executable work runs, or a compiler used to
132
+ produce the work, or an object code interpreter used to run it.
133
+
134
+ The "Corresponding Source" for a work in object code form means all
135
+ the source code needed to generate, install, and (for an executable
136
+ work) run the object code and to modify the work, including scripts to
137
+ control those activities. However, it does not include the work's
138
+ System Libraries, or general-purpose tools or generally available free
139
+ programs which are used unmodified in performing those activities but
140
+ which are not part of the work. For example, Corresponding Source
141
+ includes interface definition files associated with source files for
142
+ the work, and the source code for shared libraries and dynamically
143
+ linked subprograms that the work is specifically designed to require,
144
+ such as by intimate data communication or control flow between those
145
+ subprograms and other parts of the work.
146
+
147
+ The Corresponding Source need not include anything that users
148
+ can regenerate automatically from other parts of the Corresponding
149
+ Source.
150
+
151
+ The Corresponding Source for a work in source code form is that
152
+ same work.
153
+
154
+ 2. Basic Permissions.
155
+
156
+ All rights granted under this License are granted for the term of
157
+ copyright on the Program, and are irrevocable provided the stated
158
+ conditions are met. This License explicitly affirms your unlimited
159
+ permission to run the unmodified Program. The output from running a
160
+ covered work is covered by this License only if the output, given its
161
+ content, constitutes a covered work. This License acknowledges your
162
+ rights of fair use or other equivalent, as provided by copyright law.
163
+
164
+ You may make, run and propagate covered works that you do not
165
+ convey, without conditions so long as your license otherwise remains
166
+ in force. You may convey covered works to others for the sole purpose
167
+ of having them make modifications exclusively for you, or provide you
168
+ with facilities for running those works, provided that you comply with
169
+ the terms of this License in conveying all material for which you do
170
+ not control copyright. Those thus making or running the covered works
171
+ for you must do so exclusively on your behalf, under your direction
172
+ and control, on terms that prohibit them from making any copies of
173
+ your copyrighted material outside their relationship with you.
174
+
175
+ Conveying under any other circumstances is permitted solely under
176
+ the conditions stated below. Sublicensing is not allowed; section 10
177
+ makes it unnecessary.
178
+
179
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180
+
181
+ No covered work shall be deemed part of an effective technological
182
+ measure under any applicable law fulfilling obligations under article
183
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184
+ similar laws prohibiting or restricting circumvention of such
185
+ measures.
186
+
187
+ When you convey a covered work, you waive any legal power to forbid
188
+ circumvention of technological measures to the extent such circumvention
189
+ is effected by exercising rights under this License with respect to
190
+ the covered work, and you disclaim any intention to limit operation or
191
+ modification of the work as a means of enforcing, against the work's
192
+ users, your or third parties' legal rights to forbid circumvention of
193
+ technological measures.
194
+
195
+ 4. Conveying Verbatim Copies.
196
+
197
+ You may convey verbatim copies of the Program's source code as you
198
+ receive it, in any medium, provided that you conspicuously and
199
+ appropriately publish on each copy an appropriate copyright notice;
200
+ keep intact all notices stating that this License and any
201
+ non-permissive terms added in accord with section 7 apply to the code;
202
+ keep intact all notices of the absence of any warranty; and give all
203
+ recipients a copy of this License along with the Program.
204
+
205
+ You may charge any price or no price for each copy that you convey,
206
+ and you may offer support or warranty protection for a fee.
207
+
208
+ 5. Conveying Modified Source Versions.
209
+
210
+ You may convey a work based on the Program, or the modifications to
211
+ produce it from the Program, in the form of source code under the
212
+ terms of section 4, provided that you also meet all of these conditions:
213
+
214
+ a) The work must carry prominent notices stating that you modified
215
+ it, and giving a relevant date.
216
+
217
+ b) The work must carry prominent notices stating that it is
218
+ released under this License and any conditions added under section
219
+ 7. This requirement modifies the requirement in section 4 to
220
+ "keep intact all notices".
221
+
222
+ c) You must license the entire work, as a whole, under this
223
+ License to anyone who comes into possession of a copy. This
224
+ License will therefore apply, along with any applicable section 7
225
+ additional terms, to the whole of the work, and all its parts,
226
+ regardless of how they are packaged. This License gives no
227
+ permission to license the work in any other way, but it does not
228
+ invalidate such permission if you have separately received it.
229
+
230
+ d) If the work has interactive user interfaces, each must display
231
+ Appropriate Legal Notices; however, if the Program has interactive
232
+ interfaces that do not display Appropriate Legal Notices, your
233
+ work need not make them do so.
234
+
235
+ A compilation of a covered work with other separate and independent
236
+ works, which are not by their nature extensions of the covered work,
237
+ and which are not combined with it such as to form a larger program,
238
+ in or on a volume of a storage or distribution medium, is called an
239
+ "aggregate" if the compilation and its resulting copyright are not
240
+ used to limit the access or legal rights of the compilation's users
241
+ beyond what the individual works permit. Inclusion of a covered work
242
+ in an aggregate does not cause this License to apply to the other
243
+ parts of the aggregate.
244
+
245
+ 6. Conveying Non-Source Forms.
246
+
247
+ You may convey a covered work in object code form under the terms
248
+ of sections 4 and 5, provided that you also convey the
249
+ machine-readable Corresponding Source under the terms of this License,
250
+ in one of these ways:
251
+
252
+ a) Convey the object code in, or embodied in, a physical product
253
+ (including a physical distribution medium), accompanied by the
254
+ Corresponding Source fixed on a durable physical medium
255
+ customarily used for software interchange.
256
+
257
+ b) Convey the object code in, or embodied in, a physical product
258
+ (including a physical distribution medium), accompanied by a
259
+ written offer, valid for at least three years and valid for as
260
+ long as you offer spare parts or customer support for that product
261
+ model, to give anyone who possesses the object code either (1) a
262
+ copy of the Corresponding Source for all the software in the
263
+ product that is covered by this License, on a durable physical
264
+ medium customarily used for software interchange, for a price no
265
+ more than your reasonable cost of physically performing this
266
+ conveying of source, or (2) access to copy the
267
+ Corresponding Source from a network server at no charge.
268
+
269
+ c) Convey individual copies of the object code with a copy of the
270
+ written offer to provide the Corresponding Source. This
271
+ alternative is allowed only occasionally and noncommercially, and
272
+ only if you received the object code with such an offer, in accord
273
+ with subsection 6b.
274
+
275
+ d) Convey the object code by offering access from a designated
276
+ place (gratis or for a charge), and offer equivalent access to the
277
+ Corresponding Source in the same way through the same place at no
278
+ further charge. You need not require recipients to copy the
279
+ Corresponding Source along with the object code. If the place to
280
+ copy the object code is a network server, the Corresponding Source
281
+ may be on a different server (operated by you or a third party)
282
+ that supports equivalent copying facilities, provided you maintain
283
+ clear directions next to the object code saying where to find the
284
+ Corresponding Source. Regardless of what server hosts the
285
+ Corresponding Source, you remain obligated to ensure that it is
286
+ available for as long as needed to satisfy these requirements.
287
+
288
+ e) Convey the object code using peer-to-peer transmission, provided
289
+ you inform other peers where the object code and Corresponding
290
+ Source of the work are being offered to the general public at no
291
+ charge under subsection 6d.
292
+
293
+ A separable portion of the object code, whose source code is excluded
294
+ from the Corresponding Source as a System Library, need not be
295
+ included in conveying the object code work.
296
+
297
+ A "User Product" is either (1) a "consumer product", which means any
298
+ tangible personal property which is normally used for personal, family,
299
+ or household purposes, or (2) anything designed or sold for incorporation
300
+ into a dwelling. In determining whether a product is a consumer product,
301
+ doubtful cases shall be resolved in favor of coverage. For a particular
302
+ product received by a particular user, "normally used" refers to a
303
+ typical or common use of that class of product, regardless of the status
304
+ of the particular user or of the way in which the particular user
305
+ actually uses, or expects or is expected to use, the product. A product
306
+ is a consumer product regardless of whether the product has substantial
307
+ commercial, industrial or non-consumer uses, unless such uses represent
308
+ the only significant mode of use of the product.
309
+
310
+ "Installation Information" for a User Product means any methods,
311
+ procedures, authorization keys, or other information required to install
312
+ and execute modified versions of a covered work in that User Product from
313
+ a modified version of its Corresponding Source. The information must
314
+ suffice to ensure that the continued functioning of the modified object
315
+ code is in no case prevented or interfered with solely because
316
+ modification has been made.
317
+
318
+ If you convey an object code work under this section in, or with, or
319
+ specifically for use in, a User Product, and the conveying occurs as
320
+ part of a transaction in which the right of possession and use of the
321
+ User Product is transferred to the recipient in perpetuity or for a
322
+ fixed term (regardless of how the transaction is characterized), the
323
+ Corresponding Source conveyed under this section must be accompanied
324
+ by the Installation Information. But this requirement does not apply
325
+ if neither you nor any third party retains the ability to install
326
+ modified object code on the User Product (for example, the work has
327
+ been installed in ROM).
328
+
329
+ The requirement to provide Installation Information does not include a
330
+ requirement to continue to provide support service, warranty, or updates
331
+ for a work that has been modified or installed by the recipient, or for
332
+ the User Product in which it has been modified or installed. Access to a
333
+ network may be denied when the modification itself materially and
334
+ adversely affects the operation of the network or violates the rules and
335
+ protocols for communication across the network.
336
+
337
+ Corresponding Source conveyed, and Installation Information provided,
338
+ in accord with this section must be in a format that is publicly
339
+ documented (and with an implementation available to the public in
340
+ source code form), and must require no special password or key for
341
+ unpacking, reading or copying.
342
+
343
+ 7. Additional Terms.
344
+
345
+ "Additional permissions" are terms that supplement the terms of this
346
+ License by making exceptions from one or more of its conditions.
347
+ Additional permissions that are applicable to the entire Program shall
348
+ be treated as though they were included in this License, to the extent
349
+ that they are valid under applicable law. If additional permissions
350
+ apply only to part of the Program, that part may be used separately
351
+ under those permissions, but the entire Program remains governed by
352
+ this License without regard to the additional permissions.
353
+
354
+ When you convey a copy of a covered work, you may at your option
355
+ remove any additional permissions from that copy, or from any part of
356
+ it. (Additional permissions may be written to require their own
357
+ removal in certain cases when you modify the work.) You may place
358
+ additional permissions on material, added by you to a covered work,
359
+ for which you have or can give appropriate copyright permission.
360
+
361
+ Notwithstanding any other provision of this License, for material you
362
+ add to a covered work, you may (if authorized by the copyright holders of
363
+ that material) supplement the terms of this License with terms:
364
+
365
+ a) Disclaiming warranty or limiting liability differently from the
366
+ terms of sections 15 and 16 of this License; or
367
+
368
+ b) Requiring preservation of specified reasonable legal notices or
369
+ author attributions in that material or in the Appropriate Legal
370
+ Notices displayed by works containing it; or
371
+
372
+ c) Prohibiting misrepresentation of the origin of that material, or
373
+ requiring that modified versions of such material be marked in
374
+ reasonable ways as different from the original version; or
375
+
376
+ d) Limiting the use for publicity purposes of names of licensors or
377
+ authors of the material; or
378
+
379
+ e) Declining to grant rights under trademark law for use of some
380
+ trade names, trademarks, or service marks; or
381
+
382
+ f) Requiring indemnification of licensors and authors of that
383
+ material by anyone who conveys the material (or modified versions of
384
+ it) with contractual assumptions of liability to the recipient, for
385
+ any liability that these contractual assumptions directly impose on
386
+ those licensors and authors.
387
+
388
+ All other non-permissive additional terms are considered "further
389
+ restrictions" within the meaning of section 10. If the Program as you
390
+ received it, or any part of it, contains a notice stating that it is
391
+ governed by this License along with a term that is a further
392
+ restriction, you may remove that term. If a license document contains
393
+ a further restriction but permits relicensing or conveying under this
394
+ License, you may add to a covered work material governed by the terms
395
+ of that license document, provided that the further restriction does
396
+ not survive such relicensing or conveying.
397
+
398
+ If you add terms to a covered work in accord with this section, you
399
+ must place, in the relevant source files, a statement of the
400
+ additional terms that apply to those files, or a notice indicating
401
+ where to find the applicable terms.
402
+
403
+ Additional terms, permissive or non-permissive, may be stated in the
404
+ form of a separately written license, or stated as exceptions;
405
+ the above requirements apply either way.
406
+
407
+ 8. Termination.
408
+
409
+ You may not propagate or modify a covered work except as expressly
410
+ provided under this License. Any attempt otherwise to propagate or
411
+ modify it is void, and will automatically terminate your rights under
412
+ this License (including any patent licenses granted under the third
413
+ paragraph of section 11).
414
+
415
+ However, if you cease all violation of this License, then your
416
+ license from a particular copyright holder is reinstated (a)
417
+ provisionally, unless and until the copyright holder explicitly and
418
+ finally terminates your license, and (b) permanently, if the copyright
419
+ holder fails to notify you of the violation by some reasonable means
420
+ prior to 60 days after the cessation.
421
+
422
+ Moreover, your license from a particular copyright holder is
423
+ reinstated permanently if the copyright holder notifies you of the
424
+ violation by some reasonable means, this is the first time you have
425
+ received notice of violation of this License (for any work) from that
426
+ copyright holder, and you cure the violation prior to 30 days after
427
+ your receipt of the notice.
428
+
429
+ Termination of your rights under this section does not terminate the
430
+ licenses of parties who have received copies or rights from you under
431
+ this License. If your rights have been terminated and not permanently
432
+ reinstated, you do not qualify to receive new licenses for the same
433
+ material under section 10.
434
+
435
+ 9. Acceptance Not Required for Having Copies.
436
+
437
+ You are not required to accept this License in order to receive or
438
+ run a copy of the Program. Ancillary propagation of a covered work
439
+ occurring solely as a consequence of using peer-to-peer transmission
440
+ to receive a copy likewise does not require acceptance. However,
441
+ nothing other than this License grants you permission to propagate or
442
+ modify any covered work. These actions infringe copyright if you do
443
+ not accept this License. Therefore, by modifying or propagating a
444
+ covered work, you indicate your acceptance of this License to do so.
445
+
446
+ 10. Automatic Licensing of Downstream Recipients.
447
+
448
+ Each time you convey a covered work, the recipient automatically
449
+ receives a license from the original licensors, to run, modify and
450
+ propagate that work, subject to this License. You are not responsible
451
+ for enforcing compliance by third parties with this License.
452
+
453
+ An "entity transaction" is a transaction transferring control of an
454
+ organization, or substantially all assets of one, or subdividing an
455
+ organization, or merging organizations. If propagation of a covered
456
+ work results from an entity transaction, each party to that
457
+ transaction who receives a copy of the work also receives whatever
458
+ licenses to the work the party's predecessor in interest had or could
459
+ give under the previous paragraph, plus a right to possession of the
460
+ Corresponding Source of the work from the predecessor in interest, if
461
+ the predecessor has it or can get it with reasonable efforts.
462
+
463
+ You may not impose any further restrictions on the exercise of the
464
+ rights granted or affirmed under this License. For example, you may
465
+ not impose a license fee, royalty, or other charge for exercise of
466
+ rights granted under this License, and you may not initiate litigation
467
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
468
+ any patent claim is infringed by making, using, selling, offering for
469
+ sale, or importing the Program or any portion of it.
470
+
471
+ 11. Patents.
472
+
473
+ A "contributor" is a copyright holder who authorizes use under this
474
+ License of the Program or a work on which the Program is based. The
475
+ work thus licensed is called the contributor's "contributor version".
476
+
477
+ A contributor's "essential patent claims" are all patent claims
478
+ owned or controlled by the contributor, whether already acquired or
479
+ hereafter acquired, that would be infringed by some manner, permitted
480
+ by this License, of making, using, or selling its contributor version,
481
+ but do not include claims that would be infringed only as a
482
+ consequence of further modification of the contributor version. For
483
+ purposes of this definition, "control" includes the right to grant
484
+ patent sublicenses in a manner consistent with the requirements of
485
+ this License.
486
+
487
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
488
+ patent license under the contributor's essential patent claims, to
489
+ make, use, sell, offer for sale, import and otherwise run, modify and
490
+ propagate the contents of its contributor version.
491
+
492
+ In the following three paragraphs, a "patent license" is any express
493
+ agreement or commitment, however denominated, not to enforce a patent
494
+ (such as an express permission to practice a patent or covenant not to
495
+ sue for patent infringement). To "grant" such a patent license to a
496
+ party means to make such an agreement or commitment not to enforce a
497
+ patent against the party.
498
+
499
+ If you convey a covered work, knowingly relying on a patent license,
500
+ and the Corresponding Source of the work is not available for anyone
501
+ to copy, free of charge and under the terms of this License, through a
502
+ publicly available network server or other readily accessible means,
503
+ then you must either (1) cause the Corresponding Source to be so
504
+ available, or (2) arrange to deprive yourself of the benefit of the
505
+ patent license for this particular work, or (3) arrange, in a manner
506
+ consistent with the requirements of this License, to extend the patent
507
+ license to downstream recipients. "Knowingly relying" means you have
508
+ actual knowledge that, but for the patent license, your conveying the
509
+ covered work in a country, or your recipient's use of the covered work
510
+ in a country, would infringe one or more identifiable patents in that
511
+ country that you have reason to believe are valid.
512
+
513
+ If, pursuant to or in connection with a single transaction or
514
+ arrangement, you convey, or propagate by procuring conveyance of, a
515
+ covered work, and grant a patent license to some of the parties
516
+ receiving the covered work authorizing them to use, propagate, modify
517
+ or convey a specific copy of the covered work, then the patent license
518
+ you grant is automatically extended to all recipients of the covered
519
+ work and works based on it.
520
+
521
+ A patent license is "discriminatory" if it does not include within
522
+ the scope of its coverage, prohibits the exercise of, or is
523
+ conditioned on the non-exercise of one or more of the rights that are
524
+ specifically granted under this License. You may not convey a covered
525
+ work if you are a party to an arrangement with a third party that is
526
+ in the business of distributing software, under which you make payment
527
+ to the third party based on the extent of your activity of conveying
528
+ the work, and under which the third party grants, to any of the
529
+ parties who would receive the covered work from you, a discriminatory
530
+ patent license (a) in connection with copies of the covered work
531
+ conveyed by you (or copies made from those copies), or (b) primarily
532
+ for and in connection with specific products or compilations that
533
+ contain the covered work, unless you entered into that arrangement,
534
+ or that patent license was granted, prior to 28 March 2007.
535
+
536
+ Nothing in this License shall be construed as excluding or limiting
537
+ any implied license or other defenses to infringement that may
538
+ otherwise be available to you under applicable patent law.
539
+
540
+ 12. No Surrender of Others' Freedom.
541
+
542
+ If conditions are imposed on you (whether by court order, agreement or
543
+ otherwise) that contradict the conditions of this License, they do not
544
+ excuse you from the conditions of this License. If you cannot convey a
545
+ covered work so as to satisfy simultaneously your obligations under this
546
+ License and any other pertinent obligations, then as a consequence you may
547
+ not convey it at all. For example, if you agree to terms that obligate you
548
+ to collect a royalty for further conveying from those to whom you convey
549
+ the Program, the only way you could satisfy both those terms and this
550
+ License would be to refrain entirely from conveying the Program.
551
+
552
+ 13. Use with the GNU Affero General Public License.
553
+
554
+ Notwithstanding any other provision of this License, you have
555
+ permission to link or combine any covered work with a work licensed
556
+ under version 3 of the GNU Affero General Public License into a single
557
+ combined work, and to convey the resulting work. The terms of this
558
+ License will continue to apply to the part which is the covered work,
559
+ but the special requirements of the GNU Affero General Public License,
560
+ section 13, concerning interaction through a network will apply to the
561
+ combination as such.
562
+
563
+ 14. Revised Versions of this License.
564
+
565
+ The Free Software Foundation may publish revised and/or new versions of
566
+ the GNU General Public License from time to time. Such new versions will
567
+ be similar in spirit to the present version, but may differ in detail to
568
+ address new problems or concerns.
569
+
570
+ Each version is given a distinguishing version number. If the
571
+ Program specifies that a certain numbered version of the GNU General
572
+ Public License "or any later version" applies to it, you have the
573
+ option of following the terms and conditions either of that numbered
574
+ version or of any later version published by the Free Software
575
+ Foundation. If the Program does not specify a version number of the
576
+ GNU General Public License, you may choose any version ever published
577
+ by the Free Software Foundation.
578
+
579
+ If the Program specifies that a proxy can decide which future
580
+ versions of the GNU General Public License can be used, that proxy's
581
+ public statement of acceptance of a version permanently authorizes you
582
+ to choose that version for the Program.
583
+
584
+ Later license versions may give you additional or different
585
+ permissions. However, no additional obligations are imposed on any
586
+ author or copyright holder as a result of your choosing to follow a
587
+ later version.
588
+
589
+ 15. Disclaimer of Warranty.
590
+
591
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
+ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
+ ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
+
600
+ 16. Limitation of Liability.
601
+
602
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
+ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
+ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
+ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
+ SUCH DAMAGES.
611
+
612
+ 17. Interpretation of Sections 15 and 16.
613
+
614
+ If the disclaimer of warranty and limitation of liability provided
615
+ above cannot be given local legal effect according to their terms,
616
+ reviewing courts shall apply local law that most closely approximates
617
+ an absolute waiver of all civil liability in connection with the
618
+ Program, unless a warranty or assumption of liability accompanies a
619
+ copy of the Program in return for a fee.
620
+
621
+ END OF TERMS AND CONDITIONS
622
+
623
+ How to Apply These Terms to Your New Programs
624
+
625
+ If you develop a new program, and you want it to be of the greatest
626
+ possible use to the public, the best way to achieve this is to make it
627
+ free software which everyone can redistribute and change under these terms.
628
+
629
+ To do so, attach the following notices to the program. It is safest
630
+ to attach them to the start of each source file to most effectively
631
+ state the exclusion of warranty; and each file should have at least
632
+ the "copyright" line and a pointer to where the full notice is found.
633
+
634
+ <one line to give the program's name and a brief idea of what it does.>
635
+ Copyright (C) <year> <name of author>
636
+
637
+ This program is free software: you can redistribute it and/or modify
638
+ it under the terms of the GNU General Public License as published by
639
+ the Free Software Foundation, either version 3 of the License, or
640
+ (at your option) any later version.
641
+
642
+ This program is distributed in the hope that it will be useful,
643
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
644
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645
+ GNU General Public License for more details.
646
+
647
+ You should have received a copy of the GNU General Public License
648
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
649
+
650
+ Also add information on how to contact you by electronic and paper mail.
651
+
652
+ If the program does terminal interaction, make it output a short
653
+ notice like this when it starts in an interactive mode:
654
+
655
+ <program> Copyright (C) <year> <name of author>
656
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657
+ This is free software, and you are welcome to redistribute it
658
+ under certain conditions; type `show c' for details.
659
+
660
+ The hypothetical commands `show w' and `show c' should show the appropriate
661
+ parts of the General Public License. Of course, your program's commands
662
+ might be different; for a GUI interface, you would use an "about box".
663
+
664
+ You should also get your employer (if you work as a programmer) or school,
665
+ if any, to sign a "copyright disclaimer" for the program, if necessary.
666
+ For more information on this, and how to apply and follow the GNU GPL, see
667
+ <http://www.gnu.org/licenses/>.
668
+
669
+ The GNU General Public License does not permit incorporating your program
670
+ into proprietary programs. If your program is a subroutine library, you
671
+ may consider it more useful to permit linking proprietary applications with
672
+ the library. If this is what you want to do, use the GNU Lesser General
673
+ Public License instead of this License. But first, please read
674
+ <http://www.gnu.org/philosophy/why-not-lgpl.html>.
ffmpeg-master-latest-win64-gpl/bin/ffmpeg.exe ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1eefcc4e3a007c1ecf7c9ba4c0e180d83ca264365b56b912d0880dfcfc2ba4bf
3
+ size 133623296
ffmpeg-master-latest-win64-gpl/bin/ffplay.exe ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:645293bb981fd83a291cdab7c753397f3a65e6bb6ab913d585225463d34c4f88
3
+ size 135647744
ffmpeg-master-latest-win64-gpl/bin/ffprobe.exe ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4e4a262b1e8793d9047fe336ed3ae792365b8322ba0a794252d961f62740f3da
3
+ size 133434880
ffmpeg-master-latest-win64-gpl/doc/bootstrap.min.css ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/community.html ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Community
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Community
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Organisation-1" href="#Organisation-1">1 Organisation</a></li>
29
+ <li><a id="toc-General-Assembly-1" href="#General-Assembly-1">2 General Assembly</a></li>
30
+ <li><a id="toc-Voting-1" href="#Voting-1">3 Voting</a></li>
31
+ <li><a id="toc-Technical-Committee-1" href="#Technical-Committee-1">4 Technical Committee</a>
32
+ <ul class="toc-numbered-mark">
33
+ <li><a id="toc-Resolution-Process-1" href="#Resolution-Process-1">4.1 Resolution Process</a>
34
+ <ul class="toc-numbered-mark">
35
+ <li><a id="toc-Seizing" href="#Seizing">4.1.1 Seizing</a></li>
36
+ <li><a id="toc-Announcement" href="#Announcement">4.1.2 Announcement</a></li>
37
+ <li><a id="toc-RFC-call" href="#RFC-call">4.1.3 RFC call</a></li>
38
+ <li><a id="toc-Within-TC" href="#Within-TC">4.1.4 Within TC</a></li>
39
+ <li><a id="toc-Decisions" href="#Decisions">4.1.5 Decisions</a></li>
40
+ </ul></li>
41
+ </ul></li>
42
+ <li><a id="toc-Community-Committee-1" href="#Community-Committee-1">5 Community Committee</a></li>
43
+ <li><a id="toc-Code-of-Conduct-1" href="#Code-of-Conduct-1">6 Code of Conduct</a></li>
44
+ </ul>
45
+ </div>
46
+ </div>
47
+
48
+ <a class="anchor" id="Organisation"></a><a name="Organisation-1"></a>
49
+ <h2 class="chapter">1 Organisation<span class="pull-right"><a class="anchor hidden-xs" href="#Organisation-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Organisation-1" aria-hidden="true">TOC</a></span></h2>
50
+
51
+ <p>The FFmpeg project is organized through a community working on global consensus.
52
+ </p>
53
+ <p>Decisions are taken by the ensemble of active members, through voting and are aided by two committees.
54
+ </p>
55
+ <a class="anchor" id="General-Assembly"></a><a name="General-Assembly-1"></a>
56
+ <h2 class="chapter">2 General Assembly<span class="pull-right"><a class="anchor hidden-xs" href="#General-Assembly-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-General-Assembly-1" aria-hidden="true">TOC</a></span></h2>
57
+
58
+ <p>The ensemble of active members is called the General Assembly (GA).
59
+ </p>
60
+ <p>The General Assembly is sovereign and legitimate for all its decisions regarding the FFmpeg project.
61
+ </p>
62
+ <p>The General Assembly is made up of active contributors.
63
+ </p>
64
+ <p>Contributors are considered &quot;active contributors&quot; if they have authored more than 20 patches in the last 36 months in the main FFmpeg repository, or if they have been voted in by the GA.
65
+ </p>
66
+ <p>The list of active contributors is updated twice each year, on 1st January and 1st July, 0:00 UTC.
67
+ </p>
68
+ <p>Additional members are added to the General Assembly through a vote after proposal by a member of the General Assembly. They are part of the GA for two years, after which they need a confirmation by the GA.
69
+ </p>
70
+ <p>A script to generate the current members of the general assembly (minus members voted in) can be found in &lsquo;tools/general_assembly.pl&lsquo;.
71
+ </p>
72
+ <a class="anchor" id="Voting"></a><a name="Voting-1"></a>
73
+ <h2 class="chapter">3 Voting<span class="pull-right"><a class="anchor hidden-xs" href="#Voting-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Voting-1" aria-hidden="true">TOC</a></span></h2>
74
+
75
+ <p>Voting is done using a ranked voting system, currently running on https://vote.ffmpeg.org/ .
76
+ </p>
77
+ <p>Majority vote means more than 50% of the expressed ballots.
78
+ </p>
79
+ <a class="anchor" id="Technical-Committee"></a><a name="Technical-Committee-1"></a>
80
+ <h2 class="chapter">4 Technical Committee<span class="pull-right"><a class="anchor hidden-xs" href="#Technical-Committee-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Technical-Committee-1" aria-hidden="true">TOC</a></span></h2>
81
+
82
+ <p>The Technical Committee (TC) is here to arbitrate and make decisions when technical conflicts occur in the project. They will consider the merits of all the positions, judge them and make a decision.
83
+ </p>
84
+ <p>The TC resolves technical conflicts but is not a technical steering committee.
85
+ </p>
86
+ <p>Decisions by the TC are binding for all the contributors.
87
+ </p>
88
+ <p>Decisions made by the TC can be re-opened after 1 year or by a majority vote of the General Assembly, requested by one of the member of the GA.
89
+ </p>
90
+ <p>The TC is elected by the General Assembly for a duration of 1 year, and is composed of 5 members. Members can be re-elected if they wish. A majority vote in the General Assembly can trigger a new election of the TC.
91
+ </p>
92
+ <p>The members of the TC can be elected from outside of the GA. Candidates for election can either be suggested or self-nominated.
93
+ </p>
94
+ <p>The conflict resolution process is detailed in the resolution process document.
95
+ </p>
96
+ <p>The TC can be contacted at &lt;tc@ffmpeg&gt;.
97
+ </p>
98
+ <a class="anchor" id="Resolution-Process"></a><a name="Resolution-Process-1"></a>
99
+ <h3 class="section">4.1 Resolution Process<span class="pull-right"><a class="anchor hidden-xs" href="#Resolution-Process-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Resolution-Process-1" aria-hidden="true">TOC</a></span></h3>
100
+
101
+ <p>The Technical Committee (TC) is here to arbitrate and make decisions when technical conflicts occur in the project.
102
+ </p>
103
+ <p>The TC main role is to resolve technical conflicts. It is therefore not a technical steering committee, but it is understood that some decisions might impact the future of the project.
104
+ </p>
105
+ <a name="Seizing"></a>
106
+ <h4 class="subsection">4.1.1 Seizing<span class="pull-right"><a class="anchor hidden-xs" href="#Seizing" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Seizing" aria-hidden="true">TOC</a></span></h4>
107
+
108
+ <p>The TC can take possession of any technical matter that it sees fit.
109
+ </p>
110
+ <p>To involve the TC in a matter, email tc&nbsp;or CC them on an ongoing discussion.
111
+ </p>
112
+ <p>As members of TC are developers, they also can email tc&nbsp;to raise an issue.
113
+ </p><a name="Announcement"></a>
114
+ <h4 class="subsection">4.1.2 Announcement<span class="pull-right"><a class="anchor hidden-xs" href="#Announcement" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Announcement" aria-hidden="true">TOC</a></span></h4>
115
+
116
+ <p>The TC, once seized, must announce itself on the main mailing list, with a [TC] tag.
117
+ </p>
118
+ <p>The TC has 2 modes of operation: a RFC one and an internal one.
119
+ </p>
120
+ <p>If the TC thinks it needs the input from the larger community, the TC can call for a RFC. Else, it can decide by itself.
121
+ </p>
122
+ <p>The decision to use a RFC process or an internal discussion is a discretionary decision of the TC.
123
+ </p>
124
+ <p>The TC can also reject a seizure for a few reasons such as: the matter was not discussed enough previously; it lacks expertise to reach a beneficial decision on the matter; or the matter is too trivial.
125
+ </p><a name="RFC-call"></a>
126
+ <h4 class="subsection">4.1.3 RFC call<span class="pull-right"><a class="anchor hidden-xs" href="#RFC-call" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-RFC-call" aria-hidden="true">TOC</a></span></h4>
127
+
128
+ <p>In the RFC mode, one person from the TC posts on the mailing list the technical question and will request input from the community.
129
+ </p>
130
+ <p>The mail will have the following specification:
131
+ </p>
132
+ <p>a precise title
133
+ a specific tag [TC RFC]
134
+ a top-level email
135
+ contain a precise question that does not exceed 100 words and that is answerable by developers
136
+ may have an extra description, or a link to a previous discussion, if deemed necessary,
137
+ contain a precise end date for the answers.
138
+ </p>
139
+ <p>The answers from the community must be on the main mailing list and must have the following specification:
140
+ </p>
141
+ <p>keep the tag and the title unchanged
142
+ limited to 400 words
143
+ a first-level, answering directly to the main email
144
+ answering to the question.
145
+ </p>
146
+ <p>Further replies to answers are permitted, as long as they conform to the community standards of politeness, they are limited to 100 words, and are not nested more than once. (max-depth=2)
147
+ </p>
148
+ <p>After the end-date, mails on the thread will be ignored.
149
+ </p>
150
+ <p>Violations of those rules will be escalated through the Community Committee.
151
+ </p>
152
+ <p>After all the emails are in, the TC has 96 hours to give its final decision. Exceptionally, the TC can request an extra delay, that will be notified on the mailing list.
153
+ </p><a name="Within-TC"></a>
154
+ <h4 class="subsection">4.1.4 Within TC<span class="pull-right"><a class="anchor hidden-xs" href="#Within-TC" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Within-TC" aria-hidden="true">TOC</a></span></h4>
155
+
156
+ <p>In the internal case, the TC has 96 hours to give its final decision. Exceptionally, the TC can request an extra delay.
157
+ </p><a name="Decisions"></a>
158
+ <h4 class="subsection">4.1.5 Decisions<span class="pull-right"><a class="anchor hidden-xs" href="#Decisions" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Decisions" aria-hidden="true">TOC</a></span></h4>
159
+
160
+ <p>The decisions from the TC will be sent on the mailing list, with the [TC] tag.
161
+ </p>
162
+ <p>Internally, the TC should take decisions with a majority, or using ranked-choice voting.
163
+ </p>
164
+ <p>Each TC member must vote on such decision according to what is, in their view, best for the project.
165
+ </p>
166
+ <p>If a TC member feels they are affected by a conflict of interest with regards to the case, they should announce it and recuse themselves from the TC
167
+ discussion and vote.
168
+ </p>
169
+ <p>A conflict of interest is presumed to occur when a TC member has a personal interest (e.g. financial) in a specific outcome of the case.
170
+ </p>
171
+ <p>The decision from the TC should be published with a summary of the reasons that lead to this decision.
172
+ </p>
173
+ <p>The decisions from the TC are final, until the matters are reopened after no less than one year.
174
+ </p>
175
+ <a class="anchor" id="Community-Committee"></a><a name="Community-Committee-1"></a>
176
+ <h2 class="chapter">5 Community Committee<span class="pull-right"><a class="anchor hidden-xs" href="#Community-Committee-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Community-Committee-1" aria-hidden="true">TOC</a></span></h2>
177
+
178
+ <p>The Community Committee (CC) is here to arbitrage and make decisions when inter-personal conflicts occur in the project. It will decide quickly and take actions, for the sake of the project.
179
+ </p>
180
+ <p>The CC can remove privileges of offending members, including removal of commit access and temporary ban from the community.
181
+ </p>
182
+ <p>Decisions made by the CC can be re-opened after 1 year or by a majority vote of the General Assembly. Indefinite bans from the community must be confirmed by the General Assembly, in a majority vote.
183
+ </p>
184
+ <p>The CC is elected by the General Assembly for a duration of 1 year, and is composed of 5 members. Members can be re-elected if they wish. A majority vote in the General Assembly can trigger a new election of the CC.
185
+ </p>
186
+ <p>The members of the CC can be elected from outside of the GA. Candidates for election can either be suggested or self-nominated.
187
+ </p>
188
+ <p>The CC is governed by and responsible for enforcing the Code of Conduct.
189
+ </p>
190
+ <p>The CC can be contacted at &lt;cc@ffmpeg&gt;.
191
+ </p>
192
+ <a class="anchor" id="Code-of-Conduct"></a><a name="Code-of-Conduct-1"></a>
193
+ <h2 class="chapter">6 Code of Conduct<span class="pull-right"><a class="anchor hidden-xs" href="#Code-of-Conduct-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Code-of-Conduct-1" aria-hidden="true">TOC</a></span></h2>
194
+
195
+ <p>Be friendly and respectful towards others and third parties.
196
+ Treat others the way you yourself want to be treated.
197
+ </p>
198
+ <p>Be considerate. Not everyone shares the same viewpoint and priorities as you do.
199
+ Different opinions and interpretations help the project.
200
+ Looking at issues from a different perspective assists development.
201
+ </p>
202
+ <p>Do not assume malice for things that can be attributed to incompetence. Even if
203
+ it is malice, it&rsquo;s rarely good to start with that as initial assumption.
204
+ </p>
205
+ <p>Stay friendly even if someone acts contrarily. Everyone has a bad day
206
+ once in a while.
207
+ If you yourself have a bad day or are angry then try to take a break and reply
208
+ once you are calm and without anger if you have to.
209
+ </p>
210
+ <p>Try to help other team members and cooperate if you can.
211
+ </p>
212
+ <p>The goal of software development is to create technical excellence, not for any
213
+ individual to be better and &quot;win&quot; against the others. Large software projects
214
+ are only possible and successful through teamwork.
215
+ </p>
216
+ <p>If someone struggles do not put them down. Give them a helping hand
217
+ instead and point them in the right direction.
218
+ </p>
219
+ <p>Finally, keep in mind the immortal words of Bill and Ted,
220
+ &quot;Be excellent to each other.&quot;
221
+ </p>
222
+ <p style="font-size: small;">
223
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
224
+ </p>
225
+ </div>
226
+ </body>
227
+ </html>
ffmpeg-master-latest-win64-gpl/doc/default.css ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ a.summary-letter {
2
+ text-decoration: none;
3
+ }
4
+
5
+ a {
6
+ color: #2D6198;
7
+ }
8
+
9
+ a:visited {
10
+ color: #884488;
11
+ }
12
+
13
+ #banner {
14
+ background-color: white;
15
+ position: relative;
16
+ text-align: center;
17
+ }
18
+
19
+ #banner img {
20
+ margin-bottom: 1px;
21
+ margin-top: 5px;
22
+ }
23
+
24
+ #body {
25
+ margin-left: 1em;
26
+ margin-right: 1em;
27
+ }
28
+
29
+ body {
30
+ background-color: #313131;
31
+ margin: 0;
32
+ text-align: justify;
33
+ }
34
+
35
+ .center {
36
+ margin-left: auto;
37
+ margin-right: auto;
38
+ text-align: center;
39
+ }
40
+
41
+ #container {
42
+ background-color: white;
43
+ color: #202020;
44
+ margin-left: 1em;
45
+ margin-right: 1em;
46
+ }
47
+
48
+ #footer {
49
+ text-align: center;
50
+ }
51
+
52
+ h1 a, h2 a, h3 a, h4 a {
53
+ text-decoration: inherit;
54
+ color: inherit;
55
+ }
56
+
57
+ h1, h2, h3, h4 {
58
+ padding-left: 0.4em;
59
+ border-radius: 4px;
60
+ padding-bottom: 0.25em;
61
+ padding-top: 0.25em;
62
+ border: 1px solid #6A996A;
63
+ }
64
+
65
+ h1 {
66
+ background-color: #7BB37B;
67
+ color: #151515;
68
+ font-size: 1.2em;
69
+ padding-bottom: 0.3em;
70
+ padding-top: 0.3em;
71
+ }
72
+
73
+ h2 {
74
+ color: #313131;
75
+ font-size: 1.0em;
76
+ background-color: #ABE3AB;
77
+ }
78
+
79
+ h3 {
80
+ color: #313131;
81
+ font-size: 0.9em;
82
+ margin-bottom: -6px;
83
+ background-color: #BBF3BB;
84
+ }
85
+
86
+ h4 {
87
+ color: #313131;
88
+ font-size: 0.8em;
89
+ margin-bottom: -8px;
90
+ background-color: #D1FDD1;
91
+ }
92
+
93
+ img {
94
+ border: 0;
95
+ }
96
+
97
+ #navbar {
98
+ background-color: #738073;
99
+ border-bottom: 1px solid #5C665C;
100
+ border-top: 1px solid #5C665C;
101
+ margin-top: 12px;
102
+ padding: 0.3em;
103
+ position: relative;
104
+ text-align: center;
105
+ }
106
+
107
+ #navbar a, #navbar_secondary a {
108
+ color: white;
109
+ padding: 0.3em;
110
+ text-decoration: none;
111
+ }
112
+
113
+ #navbar a:hover, #navbar_secondary a:hover {
114
+ background-color: #313131;
115
+ color: white;
116
+ text-decoration: none;
117
+ }
118
+
119
+ #navbar_secondary {
120
+ background-color: #738073;
121
+ border-bottom: 1px solid #5C665C;
122
+ border-left: 1px solid #5C665C;
123
+ border-right: 1px solid #5C665C;
124
+ padding: 0.3em;
125
+ position: relative;
126
+ text-align: center;
127
+ }
128
+
129
+ p {
130
+ margin-left: 1em;
131
+ margin-right: 1em;
132
+ }
133
+
134
+ pre {
135
+ margin-left: 3em;
136
+ margin-right: 3em;
137
+ padding: 0.3em;
138
+ border: 1px solid #bbb;
139
+ background-color: #f7f7f7;
140
+ }
141
+
142
+ dl dt {
143
+ font-weight: bold;
144
+ }
145
+
146
+ #proj_desc {
147
+ font-size: 1.2em;
148
+ }
149
+
150
+ #repos {
151
+ margin-left: 1em;
152
+ margin-right: 1em;
153
+ border-collapse: collapse;
154
+ border: solid 1px #6A996A;
155
+ }
156
+
157
+ #repos th {
158
+ background-color: #7BB37B;
159
+ border: solid 1px #6A996A;
160
+ }
161
+
162
+ #repos td {
163
+ padding: 0.2em;
164
+ border: solid 1px #6A996A;
165
+ }
ffmpeg-master-latest-win64-gpl/doc/developer.html ADDED
@@ -0,0 +1,1149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Developer Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Developer Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Introduction" href="#Introduction">1 Introduction</a></li>
29
+ <li><a id="toc-Coding-Rules-1" href="#Coding-Rules-1">2 Coding Rules</a>
30
+ <ul class="toc-numbered-mark">
31
+ <li><a id="toc-Language" href="#Language">2.1 Language</a>
32
+ <ul class="toc-numbered-mark">
33
+ <li><a id="toc-SIMD_002fDSP-1" href="#SIMD_002fDSP-1">2.1.1 SIMD/DSP</a></li>
34
+ <li><a id="toc-Other-languages" href="#Other-languages">2.1.2 Other languages</a></li>
35
+ </ul></li>
36
+ <li><a id="toc-Code-formatting-conventions" href="#Code-formatting-conventions">2.2 Code formatting conventions</a>
37
+ <ul class="toc-numbered-mark">
38
+ <li><a id="toc-Examples" href="#Examples">2.2.1 Examples</a></li>
39
+ <li><a id="toc-Vim-configuration" href="#Vim-configuration">2.2.2 Vim configuration</a></li>
40
+ <li><a id="toc-Emacs-configuration" href="#Emacs-configuration">2.2.3 Emacs configuration</a></li>
41
+ </ul></li>
42
+ <li><a id="toc-Comments" href="#Comments">2.3 Comments</a></li>
43
+ <li><a id="toc-Naming-conventions-1" href="#Naming-conventions-1">2.4 Naming conventions</a></li>
44
+ <li><a id="toc-Miscellaneous-conventions" href="#Miscellaneous-conventions">2.5 Miscellaneous conventions</a></li>
45
+ </ul></li>
46
+ <li><a id="toc-Development-Policy-1" href="#Development-Policy-1">3 Development Policy</a>
47
+ <ul class="toc-numbered-mark">
48
+ <li><a id="toc-Code-behaviour" href="#Code-behaviour">3.1 Code behaviour</a></li>
49
+ <li><a id="toc-Patches_002fCommitting" href="#Patches_002fCommitting">3.2 Patches/Committing</a></li>
50
+ <li><a id="toc-Code" href="#Code">3.3 Code</a></li>
51
+ <li><a id="toc-Library-public-interfaces" href="#Library-public-interfaces">3.4 Library public interfaces</a>
52
+ <ul class="toc-numbered-mark">
53
+ <li><a id="toc-Adding-new-interfaces" href="#Adding-new-interfaces">3.4.1 Adding new interfaces</a></li>
54
+ <li><a id="toc-Removing-interfaces-1" href="#Removing-interfaces-1">3.4.2 Removing interfaces</a></li>
55
+ <li><a id="toc-Major-version-bumps-1" href="#Major-version-bumps-1">3.4.3 Major version bumps</a></li>
56
+ </ul></li>
57
+ <li><a id="toc-Documentation_002fOther" href="#Documentation_002fOther">3.5 Documentation/Other</a></li>
58
+ </ul></li>
59
+ <li><a id="toc-Submitting-patches-1" href="#Submitting-patches-1">4 Submitting patches</a></li>
60
+ <li><a id="toc-New-codecs-or-formats-checklist" href="#New-codecs-or-formats-checklist">5 New codecs or formats checklist</a></li>
61
+ <li><a id="toc-Patch-submission-checklist" href="#Patch-submission-checklist">6 Patch submission checklist</a></li>
62
+ <li><a id="toc-Patch-review-process" href="#Patch-review-process">7 Patch review process</a></li>
63
+ <li><a id="toc-Regression-tests-1" href="#Regression-tests-1">8 Regression tests</a>
64
+ <ul class="toc-numbered-mark">
65
+ <li><a id="toc-Adding-files-to-the-fate_002dsuite-dataset" href="#Adding-files-to-the-fate_002dsuite-dataset">8.1 Adding files to the fate-suite dataset</a></li>
66
+ <li><a id="toc-Visualizing-Test-Coverage" href="#Visualizing-Test-Coverage">8.2 Visualizing Test Coverage</a></li>
67
+ <li><a id="toc-Using-Valgrind" href="#Using-Valgrind">8.3 Using Valgrind</a></li>
68
+ </ul></li>
69
+ <li><a id="toc-Maintenance-process" href="#Maintenance-process">9 Maintenance process</a>
70
+ <ul class="toc-numbered-mark">
71
+ <li><a id="toc-MAINTAINERS-1" href="#MAINTAINERS-1">9.1 MAINTAINERS</a></li>
72
+ <li><a id="toc-Becoming-a-maintainer-1" href="#Becoming-a-maintainer-1">9.2 Becoming a maintainer</a></li>
73
+ </ul></li>
74
+ <li><a id="toc-Release-process-1" href="#Release-process-1">10 Release process</a>
75
+ <ul class="toc-numbered-mark">
76
+ <li><a id="toc-Criteria-for-Point-Releases-1" href="#Criteria-for-Point-Releases-1">10.1 Criteria for Point Releases</a></li>
77
+ <li><a id="toc-Release-Checklist" href="#Release-Checklist">10.2 Release Checklist</a></li>
78
+ </ul></li>
79
+ </ul>
80
+ </div>
81
+ </div>
82
+
83
+ <a name="Introduction"></a>
84
+ <h2 class="chapter">1 Introduction<span class="pull-right"><a class="anchor hidden-xs" href="#Introduction" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Introduction" aria-hidden="true">TOC</a></span></h2>
85
+
86
+ <p>This text is concerned with the development <em class="emph">of</em> FFmpeg itself. Information
87
+ on using the FFmpeg libraries in other programs can be found elsewhere, e.g. in:
88
+ </p><ul class="itemize mark-bullet">
89
+ <li>the installed header files
90
+ </li><li><a class="url" href="http://ffmpeg.org/doxygen/trunk/index.html">the Doxygen documentation</a>
91
+ generated from the headers
92
+ </li><li>the examples under <samp class="file">doc/examples</samp>
93
+ </li></ul>
94
+
95
+ <p>For more detailed legal information about the use of FFmpeg in
96
+ external programs read the <samp class="file">LICENSE</samp> file in the source tree and
97
+ consult <a class="url" href="https://ffmpeg.org/legal.html">https://ffmpeg.org/legal.html</a>.
98
+ </p>
99
+ <p>If you modify FFmpeg code for your own use case, you are highly encouraged to
100
+ <em class="emph">submit your changes back to us</em>, using this document as a guide. There are
101
+ both pragmatic and ideological reasons to do so:
102
+ </p><ul class="itemize mark-bullet">
103
+ <li>Maintaining external changes to keep up with upstream development is
104
+ time-consuming and error-prone. With your code in the main tree, it will be
105
+ maintained by FFmpeg developers.
106
+ </li><li>FFmpeg developers include leading experts in the field who can find bugs or
107
+ design flaws in your code.
108
+ </li><li>By supporting the project you find useful you ensure it continues to be
109
+ maintained and developed.
110
+ </li></ul>
111
+
112
+ <p>All proposed code changes should be submitted for review to
113
+ <a class="url" href="mailto:ffmpeg-devel@ffmpeg.org">the development mailing list</a>, as
114
+ described in more detail in the <a class="ref" href="#Submitting-patches">Submitting patches</a> chapter. The code
115
+ should comply with the <a class="ref" href="#Development-Policy">Development Policy</a> and follow the <a class="ref" href="#Coding-Rules">Coding Rules</a>.
116
+ The developer making the commit and the author are responsible for their changes
117
+ and should try to fix issues their commit causes.
118
+ </p>
119
+ <a class="anchor" id="Coding-Rules"></a><a name="Coding-Rules-1"></a>
120
+ <h2 class="chapter">2 Coding Rules<span class="pull-right"><a class="anchor hidden-xs" href="#Coding-Rules-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Coding-Rules-1" aria-hidden="true">TOC</a></span></h2>
121
+
122
+ <a name="Language"></a>
123
+ <h3 class="section">2.1 Language<span class="pull-right"><a class="anchor hidden-xs" href="#Language" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Language" aria-hidden="true">TOC</a></span></h3>
124
+
125
+ <p>FFmpeg is mainly programmed in the ISO C11 language, except for the public
126
+ headers which must stay C99 compatible.
127
+ </p>
128
+ <p>Compiler-specific extensions may be used with good reason, but must not be
129
+ depended on, i.e. the code must still compile and work with compilers lacking
130
+ the extension.
131
+ </p>
132
+ <p>The following C99 features must not be used anywhere in the codebase:
133
+ </p><ul class="itemize mark-bullet">
134
+ <li>variable-length arrays;
135
+
136
+ </li><li>complex numbers;
137
+ </li></ul>
138
+
139
+ <a name="SIMD_002fDSP-1"></a>
140
+ <h4 class="subsection">2.1.1 SIMD/DSP<span class="pull-right"><a class="anchor hidden-xs" href="#SIMD_002fDSP-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-SIMD_002fDSP-1" aria-hidden="true">TOC</a></span></h4>
141
+ <a class="anchor" id="SIMD_002fDSP"></a>
142
+ <p>As modern compilers are unable to generate efficient SIMD or other
143
+ performance-critical DSP code from plain C, handwritten assembly is used.
144
+ Usually such code is isolated in a separate function. Then the standard approach
145
+ is writing multiple versions of this function – a plain C one that works
146
+ everywhere and may also be useful for debugging, and potentially multiple
147
+ architecture-specific optimized implementations. Initialization code then
148
+ chooses the best available version at runtime and loads it into a function
149
+ pointer; the function in question is then always called through this pointer.
150
+ </p>
151
+ <p>The specific syntax used for writing assembly is:
152
+ </p><ul class="itemize mark-bullet">
153
+ <li>NASM on x86;
154
+
155
+ </li><li>GAS on ARM and RISC-V.
156
+ </li></ul>
157
+
158
+ <p>A unit testing framework for assembly called <code class="code">checkasm</code> lives under
159
+ <samp class="file">tests/checkasm</samp>. All new assembly should come with <code class="code">checkasm</code> tests;
160
+ adding tests for existing assembly that lacks them is also strongly encouraged.
161
+ </p>
162
+ <a name="Other-languages"></a>
163
+ <h4 class="subsection">2.1.2 Other languages<span class="pull-right"><a class="anchor hidden-xs" href="#Other-languages" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Other-languages" aria-hidden="true">TOC</a></span></h4>
164
+
165
+ <p>Other languages than C may be used in special cases:
166
+ </p><ul class="itemize mark-bullet">
167
+ <li>Compiler intrinsics or inline assembly when the code in question cannot be
168
+ written in the standard way described in the <a class="ref" href="#SIMD_002fDSP">SIMD/DSP</a> section. This
169
+ typically applies to code that needs to be inlined.
170
+
171
+ </li><li>Objective-C where required for interacting with macOS-specific interfaces.
172
+ </li></ul>
173
+
174
+ <a name="Code-formatting-conventions"></a>
175
+ <h3 class="section">2.2 Code formatting conventions<span class="pull-right"><a class="anchor hidden-xs" href="#Code-formatting-conventions" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Code-formatting-conventions" aria-hidden="true">TOC</a></span></h3>
176
+
177
+ <p>There are the following guidelines regarding the code style in files:
178
+ </p>
179
+ <ul class="itemize mark-bullet">
180
+ <li>Indent size is 4.
181
+
182
+ </li><li>The TAB character is forbidden outside of Makefiles as is any
183
+ form of trailing whitespace. Commits containing either will be
184
+ rejected by the git repository.
185
+
186
+ </li><li>You should try to limit your code lines to 80 characters; however, do so if
187
+ and only if this improves readability.
188
+
189
+ </li><li>K&amp;R coding style is used.
190
+ </li></ul>
191
+ <p>The presentation is one inspired by &rsquo;indent -i4 -kr -nut&rsquo;.
192
+ </p>
193
+ <a name="Examples"></a>
194
+ <h4 class="subsection">2.2.1 Examples<span class="pull-right"><a class="anchor hidden-xs" href="#Examples" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Examples" aria-hidden="true">TOC</a></span></h4>
195
+ <p>Some notable examples to illustrate common code style in FFmpeg:
196
+ </p>
197
+ <ul class="itemize mark-bullet">
198
+ <li>Space around assignments and after
199
+ <code class="code">if</code>/<code class="code">do</code>/<code class="code">while</code>/<code class="code">for</code> keywords:
200
+
201
+ <div class="example user-c user-good">
202
+ <pre class="example-preformatted">// Good
203
+ if (condition)
204
+ av_foo();
205
+ </pre></div>
206
+
207
+ <div class="example user-c user-good">
208
+ <pre class="example-preformatted">// Good
209
+ for (size_t i = 0; i &lt; len; i++)
210
+ av_bar(i);
211
+ </pre></div>
212
+
213
+ <div class="example user-c user-good">
214
+ <pre class="example-preformatted">// Good
215
+ size_t size = 0;
216
+ </pre></div>
217
+
218
+ <p>However no spaces between the parentheses and condition, unless it helps
219
+ readability of complex conditions, so the following should not be done:
220
+ </p>
221
+ <div class="example user-c user-bad">
222
+ <pre class="example-preformatted">// Bad style
223
+ if ( condition )
224
+ av_foo();
225
+ </pre></div>
226
+
227
+ </li><li>No unnecessary parentheses, unless it helps readability:
228
+
229
+ <div class="example user-c user-good">
230
+ <pre class="example-preformatted">// Good
231
+ int fields = ilace ? 2 : 1;
232
+ </pre></div>
233
+
234
+ </li><li>Don&rsquo;t wrap single-line blocks in braces. Use braces only if there is an accompanying else statement. This keeps future code changes easier to keep track of.
235
+
236
+ <div class="example user-c user-good">
237
+ <pre class="example-preformatted">// Good
238
+ if (bits_pixel == 24) {
239
+ avctx-&gt;pix_fmt = AV_PIX_FMT_BGR24;
240
+ } else if (bits_pixel == 8) {
241
+ avctx-&gt;pix_fmt = AV_PIX_FMT_GRAY8;
242
+ } else
243
+ return AVERROR_INVALIDDATA;
244
+
245
+ </pre></div>
246
+
247
+ </li><li>Avoid assignments in conditions where it makes sense:
248
+
249
+ <div class="example user-c user-good">
250
+ <pre class="example-preformatted">// Good
251
+ video_enc-&gt;chroma_intra_matrix = av_mallocz(sizeof(*video_enc-&gt;chroma_intra_matrix) * 64)
252
+ if (!video_enc-&gt;chroma_intra_matrix)
253
+ return AVERROR(ENOMEM);
254
+ </pre></div>
255
+
256
+ <div class="example user-c user-bad">
257
+ <pre class="example-preformatted">// Bad style
258
+ if (!(video_enc-&gt;chroma_intra_matrix = av_mallocz(sizeof(*video_enc-&gt;chroma_intra_matrix) * 64)))
259
+ return AVERROR(ENOMEM);
260
+ </pre></div>
261
+
262
+ <div class="example user-c user-good">
263
+ <pre class="example-preformatted">// Ok
264
+ while ((entry = av_dict_iterate(options, entry)))
265
+ av_log(ctx, AV_LOG_INFO, &quot;Item '%s': '%s'\n&quot;, entry-&gt;key, entry-&gt;value);
266
+ </pre></div>
267
+
268
+ </li><li>When declaring a pointer variable, the <code class="code">*</code> goes with the variable not the type:
269
+
270
+ <div class="example user-c user-good">
271
+ <pre class="example-preformatted">// Good
272
+ AVStream *stream;
273
+ </pre></div>
274
+
275
+ <div class="example user-c user-bad">
276
+ <pre class="example-preformatted">// Bad style
277
+ AVStream* stream;
278
+ </pre></div>
279
+
280
+ </li></ul>
281
+
282
+ <p>If you work on a file that does not follow these guidelines consistently,
283
+ change the parts that you are editing to follow these guidelines but do
284
+ not make unrelated changes in the file to make it conform to these.
285
+ </p>
286
+ <a name="Vim-configuration"></a>
287
+ <h4 class="subsection">2.2.2 Vim configuration<span class="pull-right"><a class="anchor hidden-xs" href="#Vim-configuration" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Vim-configuration" aria-hidden="true">TOC</a></span></h4>
288
+ <p>In order to configure Vim to follow FFmpeg formatting conventions, paste
289
+ the following snippet into your <samp class="file">.vimrc</samp>:
290
+ </p><div class="example">
291
+ <pre class="example-preformatted">&quot; indentation rules for FFmpeg: 4 spaces, no tabs
292
+ set expandtab
293
+ set shiftwidth=4
294
+ set softtabstop=4
295
+ set cindent
296
+ set cinoptions=(0
297
+ &quot; Allow tabs in Makefiles.
298
+ autocmd FileType make,automake set noexpandtab shiftwidth=8 softtabstop=8
299
+ &quot; Trailing whitespace and tabs are forbidden, so highlight them.
300
+ highlight ForbiddenWhitespace ctermbg=red guibg=red
301
+ match ForbiddenWhitespace /\s\+$\|\t/
302
+ &quot; Do not highlight spaces at the end of line while typing on that line.
303
+ autocmd InsertEnter * match ForbiddenWhitespace /\t\|\s\+\%#\@&lt;!$/
304
+ </pre></div>
305
+
306
+ <a name="Emacs-configuration"></a>
307
+ <h4 class="subsection">2.2.3 Emacs configuration<span class="pull-right"><a class="anchor hidden-xs" href="#Emacs-configuration" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Emacs-configuration" aria-hidden="true">TOC</a></span></h4>
308
+ <p>For Emacs, add these roughly equivalent lines to your <samp class="file">.emacs.d/init.el</samp>:
309
+ </p><div class="example lisp">
310
+ <pre class="lisp-preformatted">(c-add-style &quot;ffmpeg&quot;
311
+ '(&quot;k&amp;r&quot;
312
+ (c-basic-offset . 4)
313
+ (indent-tabs-mode . nil)
314
+ (show-trailing-whitespace . t)
315
+ (c-offsets-alist
316
+ (statement-cont . (c-lineup-assignments +)))
317
+ )
318
+ )
319
+ (setq c-default-style &quot;ffmpeg&quot;)
320
+ </pre></div>
321
+
322
+ <a name="Comments"></a>
323
+ <h3 class="section">2.3 Comments<span class="pull-right"><a class="anchor hidden-xs" href="#Comments" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Comments" aria-hidden="true">TOC</a></span></h3>
324
+ <p>Use the JavaDoc/Doxygen format (see examples below) so that code documentation
325
+ can be generated automatically. All nontrivial functions should have a comment
326
+ above them explaining what the function does, even if it is just one sentence.
327
+ All structures and their member variables should be documented, too.
328
+ </p>
329
+ <p>Avoid Qt-style and similar Doxygen syntax with <code class="code">!</code> in it, i.e. replace
330
+ <code class="code">//!</code> with <code class="code">///</code> and similar. Also @ syntax should be employed
331
+ for markup commands, i.e. use <code class="code">@param</code> and not <code class="code">\param</code>.
332
+ </p>
333
+ <div class="example">
334
+ <pre class="example-preformatted">/**
335
+ * @file
336
+ * MPEG codec.
337
+ * @author ...
338
+ */
339
+
340
+ /**
341
+ * Summary sentence.
342
+ * more text ...
343
+ * ...
344
+ */
345
+ typedef struct Foobar {
346
+ int var1; /**&lt; var1 description */
347
+ int var2; ///&lt; var2 description
348
+ /** var3 description */
349
+ int var3;
350
+ } Foobar;
351
+
352
+ /**
353
+ * Summary sentence.
354
+ * more text ...
355
+ * ...
356
+ * @param my_parameter description of my_parameter
357
+ * @return return value description
358
+ */
359
+ int myfunc(int my_parameter)
360
+ ...
361
+ </pre></div>
362
+
363
+ <a class="anchor" id="Naming-conventions"></a><a name="Naming-conventions-1"></a>
364
+ <h3 class="section">2.4 Naming conventions<span class="pull-right"><a class="anchor hidden-xs" href="#Naming-conventions-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Naming-conventions-1" aria-hidden="true">TOC</a></span></h3>
365
+
366
+ <p>Names of functions, variables, and struct members must be lowercase, using
367
+ underscores (_) to separate words. For example, &lsquo;<samp class="samp">avfilter_get_video_buffer</samp>&rsquo;
368
+ is an acceptable function name and &lsquo;<samp class="samp">AVFilterGetVideo</samp>&rsquo; is not.
369
+ </p>
370
+ <p>Struct, union, enum, and typedeffed type names must use CamelCase. All structs
371
+ and unions should be typedeffed to the same name as the struct/union tag, e.g.
372
+ <code class="code">typedef struct AVFoo { ... } AVFoo;</code>. Enums are typically not
373
+ typedeffed.
374
+ </p>
375
+ <p>Enumeration constants and macros must be UPPERCASE, except for macros
376
+ masquerading as functions, which should use the function naming convention.
377
+ </p>
378
+ <p>All identifiers in the libraries should be namespaced as follows:
379
+ </p><ul class="itemize mark-bullet">
380
+ <li>No namespacing for identifiers with file and lower scope (e.g. local variables,
381
+ static functions), and struct and union members,
382
+
383
+ </li><li>The <code class="code">ff_</code> prefix must be used for variables and functions visible outside
384
+ of file scope, but only used internally within a single library, e.g.
385
+ &lsquo;<samp class="samp">ff_w64_demuxer</samp>&rsquo;. This prevents name collisions when FFmpeg is statically
386
+ linked.
387
+
388
+ </li><li>For variables and functions visible outside of file scope, used internally
389
+ across multiple libraries, use <code class="code">avpriv_</code> as prefix, for example,
390
+ &lsquo;<samp class="samp">avpriv_report_missing_feature</samp>&rsquo;.
391
+
392
+ </li><li>All other internal identifiers, like private type or macro names, should be
393
+ namespaced only to avoid possible internal conflicts. E.g. <code class="code">H264_NAL_SPS</code>
394
+ vs. <code class="code">HEVC_NAL_SPS</code>.
395
+
396
+ </li><li>Each library has its own prefix for public symbols, in addition to the
397
+ commonly used <code class="code">av_</code> (<code class="code">avformat_</code> for libavformat,
398
+ <code class="code">avcodec_</code> for libavcodec, <code class="code">swr_</code> for libswresample, etc).
399
+ Check the existing code and choose names accordingly.
400
+
401
+ </li><li>Other public identifiers (struct, union, enum, macro, type names) must use their
402
+ library&rsquo;s public prefix (<code class="code">AV</code>, <code class="code">Sws</code>, or <code class="code">Swr</code>).
403
+ </li></ul>
404
+
405
+ <p>Furthermore, name space reserved for the system should not be invaded.
406
+ Identifiers ending in <code class="code">_t</code> are reserved by
407
+ <a class="url" href="http://pubs.opengroup.org/onlinepubs/007904975/functions/xsh_chap02_02.html#tag_02_02_02">POSIX</a>.
408
+ Also avoid names starting with <code class="code">__</code> or <code class="code">_</code> followed by an uppercase
409
+ letter as they are reserved by the C standard. Names starting with <code class="code">_</code>
410
+ are reserved at the file level and may not be used for externally visible
411
+ symbols. If in doubt, just avoid names starting with <code class="code">_</code> altogether.
412
+ </p>
413
+ <a name="Miscellaneous-conventions"></a>
414
+ <h3 class="section">2.5 Miscellaneous conventions<span class="pull-right"><a class="anchor hidden-xs" href="#Miscellaneous-conventions" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Miscellaneous-conventions" aria-hidden="true">TOC</a></span></h3>
415
+
416
+ <ul class="itemize mark-bullet">
417
+ <li>Casts should be used only when necessary. Unneeded parentheses
418
+ should also be avoided if they don&rsquo;t make the code easier to understand.
419
+ </li></ul>
420
+
421
+ <a class="anchor" id="Development-Policy"></a><a name="Development-Policy-1"></a>
422
+ <h2 class="chapter">3 Development Policy<span class="pull-right"><a class="anchor hidden-xs" href="#Development-Policy-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Development-Policy-1" aria-hidden="true">TOC</a></span></h2>
423
+
424
+ <a name="Code-behaviour"></a>
425
+ <h3 class="section">3.1 Code behaviour<span class="pull-right"><a class="anchor hidden-xs" href="#Code-behaviour" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Code-behaviour" aria-hidden="true">TOC</a></span></h3>
426
+
427
+ <a name="Correctness"></a>
428
+ <p>The code must be valid. It must not crash, abort, access invalid pointers, leak
429
+ memory, cause data races or signed integer overflow, or otherwise cause
430
+ undefined behaviour. Error codes should be checked and, when applicable,
431
+ forwarded to the caller.
432
+ </p>
433
+ <a name="Thread_002d-and-library_002dsafety"></a>
434
+ <p>Our libraries may be called by multiple independent callers in the same process.
435
+ These calls may happen from any number of threads and the different call sites
436
+ may not be aware of each other - e.g. a user program may be calling our
437
+ libraries directly, and use one or more libraries that also call our libraries.
438
+ The code must behave correctly under such conditions.
439
+ </p>
440
+ <a name="Robustness"></a>
441
+ <p>The code must treat as untrusted any bytestream received from a caller or read
442
+ from a file, network, etc. It must not misbehave when arbitrary data is sent to
443
+ it - typically it should print an error message and return
444
+ <code class="code">AVERROR_INVALIDDATA</code> on encountering invalid input data.
445
+ </p>
446
+ <a name="Memory-allocation"></a>
447
+ <p>The code must use the <code class="code">av_malloc()</code> family of functions from
448
+ <samp class="file">libavutil/mem.h</samp> to perform all memory allocation, except in special cases
449
+ (e.g. when interacting with an external library that requires a specific
450
+ allocator to be used).
451
+ </p>
452
+ <p>All allocations should be checked and <code class="code">AVERROR(ENOMEM)</code> returned on
453
+ failure. A common mistake is that error paths leak memory - make sure that does
454
+ not happen.
455
+ </p>
456
+ <a name="stdio"></a>
457
+ <p>Our libraries must not access the stdio streams stdin/stdout/stderr directly
458
+ (e.g. via <code class="code">printf()</code> family of functions), as that is not library-safe. For
459
+ logging, use <code class="code">av_log()</code>.
460
+ </p>
461
+ <a name="Patches_002fCommitting"></a>
462
+ <h3 class="section">3.2 Patches/Committing<span class="pull-right"><a class="anchor hidden-xs" href="#Patches_002fCommitting" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Patches_002fCommitting" aria-hidden="true">TOC</a></span></h3>
463
+ <a name="Licenses-for-patches-must-be-compatible-with-FFmpeg_002e"></a>
464
+ <p>Contributions should be licensed under the
465
+ <a class="uref" href="http://www.gnu.org/licenses/lgpl-2.1.html">LGPL 2.1</a>,
466
+ including an &quot;or any later version&quot; clause, or, if you prefer
467
+ a gift-style license, the
468
+ <a class="uref" href="http://opensource.org/licenses/isc-license.txt">ISC</a> or
469
+ <a class="uref" href="http://mit-license.org/">MIT</a> license.
470
+ <a class="uref" href="http://www.gnu.org/licenses/gpl-2.0.html">GPL 2</a> including
471
+ an &quot;or any later version&quot; clause is also acceptable, but LGPL is
472
+ preferred.
473
+ If you add a new file, give it a proper license header. Do not copy and
474
+ paste it from a random place, use an existing file as template.
475
+ </p>
476
+ <a name="You-must-not-commit-code-which-breaks-FFmpeg_0021"></a>
477
+ <p>This means unfinished code which is enabled and breaks compilation,
478
+ or compiles but does not work/breaks the regression tests. Code which
479
+ is unfinished but disabled may be permitted under-circumstances, like
480
+ missing samples or an implementation with a small subset of features.
481
+ Always check the mailing list for any reviewers with issues and test
482
+ FATE before you push.
483
+ </p>
484
+ <a name="Commit-messages"></a>
485
+ <p>Commit messages are highly important tools for informing other developers on
486
+ what a given change does and why. Every commit must always have a properly
487
+ filled out commit message with the following format:
488
+ </p><div class="example">
489
+ <pre class="example-preformatted">area changed: short 1 line description
490
+
491
+ details describing what and why and giving references.
492
+ </pre></div>
493
+
494
+ <p>If the commit addresses a known bug on our bug tracker or other external issue
495
+ (e.g. CVE), the commit message should include the relevant bug ID(s) or other
496
+ external identifiers. Note that this should be done in addition to a proper
497
+ explanation and not instead of it. Comments such as &quot;fixed!&quot; or &quot;Changed it.&quot;
498
+ are not acceptable.
499
+ </p>
500
+ <p>When applying patches that have been discussed at length on the mailing list,
501
+ reference the thread in the commit message.
502
+ </p>
503
+ <a name="Testing-must-be-adequate-but-not-excessive_002e"></a>
504
+ <p>If it works for you, others, and passes FATE then it should be OK to commit
505
+ it, provided it fits the other committing criteria. You should not worry about
506
+ over-testing things. If your code has problems (portability, triggers
507
+ compiler bugs, unusual environment etc) they will be reported and eventually
508
+ fixed.
509
+ </p>
510
+ <a name="Do-not-commit-unrelated-changes-together_002e"></a>
511
+ <p>They should be split them into self-contained pieces. Also do not forget
512
+ that if part B depends on part A, but A does not depend on B, then A can
513
+ and should be committed first and separate from B. Keeping changes well
514
+ split into self-contained parts makes reviewing and understanding them on
515
+ the commit log mailing list easier. This also helps in case of debugging
516
+ later on.
517
+ Also if you have doubts about splitting or not splitting, do not hesitate to
518
+ ask/discuss it on the developer mailing list.
519
+ </p>
520
+ <a name="Cosmetic-changes-should-be-kept-in-separate-patches_002e"></a>
521
+ <p>We refuse source indentation and other cosmetic changes if they are mixed
522
+ with functional changes, such commits will be rejected and removed. Every
523
+ developer has his own indentation style, you should not change it. Of course
524
+ if you (re)write something, you can use your own style, even though we would
525
+ prefer if the indentation throughout FFmpeg was consistent (Many projects
526
+ force a given indentation style - we do not.). If you really need to make
527
+ indentation changes (try to avoid this), separate them strictly from real
528
+ changes.
529
+ </p>
530
+ <p>NOTE: If you had to put if(){ .. } over a large (&gt; 5 lines) chunk of code,
531
+ then either do NOT change the indentation of the inner part within (do not
532
+ move it to the right)! or do so in a separate commit
533
+ </p>
534
+ <a name="Credit-the-author-of-the-patch_002e"></a>
535
+ <p>Make sure the author of the commit is set correctly. (see git commit &ndash;author)
536
+ If you apply a patch, send an
537
+ answer to ffmpeg-devel (or wherever you got the patch from) saying that
538
+ you applied the patch.
539
+ </p>
540
+ <a name="Credit-any-researchers"></a>
541
+ <p>If a commit/patch fixes an issues found by some researcher, always credit the
542
+ researcher in the commit message for finding/reporting the issue.
543
+ </p>
544
+ <a name="Always-wait-long-enough-before-pushing-changes"></a>
545
+ <p>Do NOT commit to code actively maintained by others without permission.
546
+ Send a patch to ffmpeg-devel. If no one answers within a reasonable
547
+ time-frame (12h for build failures and security fixes, 3 days small changes,
548
+ 1 week for big patches) then commit your patch if you think it is OK.
549
+ Also note, the maintainer can simply ask for more time to review!
550
+ </p>
551
+ <a name="Code"></a>
552
+ <h3 class="section">3.3 Code<span class="pull-right"><a class="anchor hidden-xs" href="#Code" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Code" aria-hidden="true">TOC</a></span></h3>
553
+ <a name="Warnings-for-correct-code-may-be-disabled-if-there-is-no-other-option_002e"></a>
554
+ <p>Compiler warnings indicate potential bugs or code with bad style. If a type of
555
+ warning always points to correct and clean code, that warning should
556
+ be disabled, not the code changed.
557
+ Thus the remaining warnings can either be bugs or correct code.
558
+ If it is a bug, the bug has to be fixed. If it is not, the code should
559
+ be changed to not generate a warning unless that causes a slowdown
560
+ or obfuscates the code.
561
+ </p>
562
+ <a name="Library-public-interfaces"></a>
563
+ <h3 class="section">3.4 Library public interfaces<span class="pull-right"><a class="anchor hidden-xs" href="#Library-public-interfaces" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Library-public-interfaces" aria-hidden="true">TOC</a></span></h3>
564
+ <p>Every library in FFmpeg provides a set of public APIs in its installed headers,
565
+ which are those listed in the variable <code class="code">HEADERS</code> in that library&rsquo;s
566
+ <samp class="file">Makefile</samp>. All identifiers defined in those headers (except for those
567
+ explicitly documented otherwise), and corresponding symbols exported from
568
+ compiled shared or static libraries are considered public interfaces and must
569
+ comply with the API and ABI compatibility rules described in this section.
570
+ </p>
571
+ <p>Public APIs must be backward compatible within a given major version. I.e. any
572
+ valid user code that compiles and works with a given library version must still
573
+ compile and work with any later version, as long as the major version number is
574
+ unchanged. &quot;Valid user code&quot; here means code that is calling our APIs in a
575
+ documented and/or intended manner and is not relying on any undefined behavior.
576
+ Incrementing the major version may break backward compatibility, but only to the
577
+ extent described in <a class="ref" href="#Major-version-bumps">Major version bumps</a>.
578
+ </p>
579
+ <p>We also guarantee backward ABI compatibility for shared and static libraries.
580
+ I.e. it should be possible to replace a shared or static build of our library
581
+ with a build of any later version (re-linking the user binary in the static
582
+ case) without breaking any valid user binaries, as long as the major version
583
+ number remains unchanged.
584
+ </p>
585
+ <a name="Adding-new-interfaces"></a>
586
+ <h4 class="subsection">3.4.1 Adding new interfaces<span class="pull-right"><a class="anchor hidden-xs" href="#Adding-new-interfaces" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Adding-new-interfaces" aria-hidden="true">TOC</a></span></h4>
587
+ <p>Any new public identifiers in installed headers are considered new API - this
588
+ includes new functions, structs, macros, enum values, typedefs, new fields in
589
+ existing structs, new installed headers, etc. Consider the following
590
+ guidelines when adding new APIs.
591
+ </p>
592
+ <a name="Motivation"></a>
593
+ <p>While new APIs can be added relatively easily, changing or removing them is much
594
+ harder due to abovementioned compatibility requirements. You should then
595
+ consider carefully whether the functionality you are adding really needs to be
596
+ exposed to our callers as new public API.
597
+ </p>
598
+ <p>Your new API should have at least one well-established use case outside of the
599
+ library that cannot be easily achieved with existing APIs. Every library in
600
+ FFmpeg also has a defined scope - your new API must fit within it.
601
+ </p>
602
+ <a name="Replacing-existing-APIs"></a>
603
+ <p>If your new API is replacing an existing one, it should be strictly superior to
604
+ it, so that the advantages of using the new API outweight the cost to the
605
+ callers of changing their code. After adding the new API you should then
606
+ deprecate the old one and schedule it for removal, as described in
607
+ <a class="ref" href="#Removing-interfaces">Removing interfaces</a>.
608
+ </p>
609
+ <p>If you deem an existing API deficient and want to fix it, the preferred approach
610
+ in most cases is to add a differently-named replacement and deprecate the
611
+ existing API rather than modify it. It is important to make the changes visible
612
+ to our callers (e.g. through compile- or run-time deprecation warnings) and make
613
+ it clear how to transition to the new API (e.g. in the Doxygen documentation or
614
+ on the wiki).
615
+ </p>
616
+ <a name="API-design"></a>
617
+ <p>The FFmpeg libraries are used by a variety of callers to perform a wide range of
618
+ multimedia-related processing tasks. You should therefore - within reason - try
619
+ to design your new API for the broadest feasible set of use cases and avoid
620
+ unnecessarily limiting it to a specific type of callers (e.g. just media
621
+ playback or just transcoding).
622
+ </p>
623
+ <a name="Consistency"></a>
624
+ <p>Check whether similar APIs already exist in FFmpeg. If they do, try to model
625
+ your new addition on them to achieve better overall consistency.
626
+ </p>
627
+ <p>The naming of your new identifiers should follow the <a class="ref" href="#Naming-conventions">Naming conventions</a>
628
+ and be aligned with other similar APIs, if applicable.
629
+ </p>
630
+ <a name="Extensibility"></a>
631
+ <p>You should also consider how your API might be extended in the future in a
632
+ backward-compatible way. If you are adding a new struct <code class="code">AVFoo</code>, the
633
+ standard approach is requiring the caller to always allocate it through a
634
+ constructor function, typically named <code class="code">av_foo_alloc()</code>. This way new fields
635
+ may be added to the end of the struct without breaking ABI compatibility.
636
+ Typically you will also want a destructor - <code class="code">av_foo_free(AVFoo**)</code> that
637
+ frees the indirectly supplied object (and its contents, if applicable) and
638
+ writes <code class="code">NULL</code> to the supplied pointer, thus eliminating the potential
639
+ dangling pointer in the caller&rsquo;s memory.
640
+ </p>
641
+ <p>If you are adding new functions, consider whether it might be desirable to tweak
642
+ their behavior in the future - you may want to add a flags argument, even though
643
+ it would be unused initially.
644
+ </p>
645
+ <a name="Documentation"></a>
646
+ <p>All new APIs must be documented as Doxygen-formatted comments above the
647
+ identifiers you add to the public headers. You should also briefly mention the
648
+ change in <samp class="file">doc/APIchanges</samp>.
649
+ </p>
650
+ <a name="Bump-the-version"></a>
651
+ <p>Backward-incompatible API or ABI changes require incrementing (bumping) the
652
+ major version number, as described in <a class="ref" href="#Major-version-bumps">Major version bumps</a>. Major
653
+ bumps are significant events that happen on a schedule - so if your change
654
+ strictly requires one you should add it under <code class="code">#if</code> preprocesor guards that
655
+ disable it until the next major bump happens.
656
+ </p>
657
+ <p>New APIs that can be added without breaking API or ABI compatibility require
658
+ bumping the minor version number.
659
+ </p>
660
+ <p>Incrementing the third (micro) version component means a noteworthy binary
661
+ compatible change (e.g. encoder bug fix that matters for the decoder). The third
662
+ component always starts at 100 to distinguish FFmpeg from Libav.
663
+ </p>
664
+ <a class="anchor" id="Removing-interfaces"></a><a name="Removing-interfaces-1"></a>
665
+ <h4 class="subsection">3.4.2 Removing interfaces<span class="pull-right"><a class="anchor hidden-xs" href="#Removing-interfaces-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Removing-interfaces-1" aria-hidden="true">TOC</a></span></h4>
666
+ <p>Due to abovementioned compatibility guarantees, removing APIs is an involved
667
+ process that should only be undertaken with good reason. Typically a deficient,
668
+ restrictive, or otherwise inadequate API is replaced by a superior one, though
669
+ it does at times happen that we remove an API without any replacement (e.g. when
670
+ the feature it provides is deemed not worth the maintenance effort, out of scope
671
+ of the project, fundamentally flawed, etc.).
672
+ </p>
673
+ <p>The removal has two steps - first the API is deprecated and scheduled for
674
+ removal, but remains present and functional. The second step is actually
675
+ removing the API - this is described in <a class="ref" href="#Major-version-bumps">Major version bumps</a>.
676
+ </p>
677
+ <p>To deprecate an API you should signal to our users that they should stop using
678
+ it. E.g. if you intend to remove struct members or functions, you should mark
679
+ them with <code class="code">attribute_deprecated</code>. When this cannot be done, it may be
680
+ possible to detect the use of the deprecated API at runtime and print a warning
681
+ (though take care not to print it too often). You should also document the
682
+ deprecation (and the replacement, if applicable) in the relevant Doxygen
683
+ documentation block.
684
+ </p>
685
+ <p>Finally, you should define a deprecation guard along the lines of
686
+ <code class="code">#define FF_API_&lt;FOO&gt; (LIBAVBAR_VERSION_MAJOR &lt; XX)</code> (where XX is the major
687
+ version in which the API will be removed) in <samp class="file">libavbar/version_major.h</samp>
688
+ (<samp class="file">version.h</samp> in case of <code class="code">libavutil</code>). Then wrap all uses of the
689
+ deprecated API in <code class="code">#if FF_API_&lt;FOO&gt; .... #endif</code>, so that the code will
690
+ automatically get disabled once the major version reaches XX. You can also use
691
+ <code class="code">FF_DISABLE_DEPRECATION_WARNINGS</code> and <code class="code">FF_ENABLE_DEPRECATION_WARNINGS</code>
692
+ to suppress compiler deprecation warnings inside these guards. You should test
693
+ that the code compiles and works with the guard macro evaluating to both true
694
+ and false.
695
+ </p>
696
+ <a class="anchor" id="Major-version-bumps"></a><a name="Major-version-bumps-1"></a>
697
+ <h4 class="subsection">3.4.3 Major version bumps<span class="pull-right"><a class="anchor hidden-xs" href="#Major-version-bumps-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Major-version-bumps-1" aria-hidden="true">TOC</a></span></h4>
698
+ <p>A major version bump signifies an API and/or ABI compatibility break. To reduce
699
+ the negative effects on our callers, who are required to adapt their code,
700
+ backward-incompatible changes during a major bump should be limited to:
701
+ </p><ul class="itemize mark-bullet">
702
+ <li>Removing previously deprecated APIs.
703
+
704
+ </li><li>Performing ABI- but not API-breaking changes, like reordering struct contents.
705
+ </li></ul>
706
+
707
+ <a name="Documentation_002fOther"></a>
708
+ <h3 class="section">3.5 Documentation/Other<span class="pull-right"><a class="anchor hidden-xs" href="#Documentation_002fOther" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Documentation_002fOther" aria-hidden="true">TOC</a></span></h3>
709
+ <a name="Subscribe-to-the-ffmpeg_002ddevel-mailing-list_002e"></a>
710
+ <p>It is important to be subscribed to the
711
+ <a class="uref" href="https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel">ffmpeg-devel</a>
712
+ mailing list. Almost any non-trivial patch is to be sent there for review.
713
+ Other developers may have comments about your contribution. We expect you see
714
+ those comments, and to improve it if requested. (N.B. Experienced committers
715
+ have other channels, and may sometimes skip review for trivial fixes.) Also,
716
+ discussion here about bug fixes and FFmpeg improvements by other developers may
717
+ be helpful information for you. Finally, by being a list subscriber, your
718
+ contribution will be posted immediately to the list, without the moderation
719
+ hold which messages from non-subscribers experience.
720
+ </p>
721
+ <p>However, it is more important to the project that we receive your patch than
722
+ that you be subscribed to the ffmpeg-devel list. If you have a patch, and don&rsquo;t
723
+ want to subscribe and discuss the patch, then please do send it to the list
724
+ anyway.
725
+ </p>
726
+ <a name="Subscribe-to-the-ffmpeg_002dcvslog-mailing-list_002e"></a>
727
+ <p>Diffs of all commits are sent to the
728
+ <a class="uref" href="https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-cvslog">ffmpeg-cvslog</a>
729
+ mailing list. Some developers read this list to review all code base changes
730
+ from all sources. Subscribing to this list is not mandatory.
731
+ </p>
732
+ <a name="Keep-the-documentation-up-to-date_002e"></a>
733
+ <p>Update the documentation if you change behavior or add features. If you are
734
+ unsure how best to do this, send a patch to ffmpeg-devel, the documentation
735
+ maintainer(s) will review and commit your stuff.
736
+ </p>
737
+ <a name="Important-discussions-should-be-accessible-to-all_002e"></a>
738
+ <p>Try to keep important discussions and requests (also) on the public
739
+ developer mailing list, so that all developers can benefit from them.
740
+ </p>
741
+ <a name="Check-your-entries-in-MAINTAINERS_002e"></a>
742
+ <p>Make sure that no parts of the codebase that you maintain are missing from the
743
+ <samp class="file">MAINTAINERS</samp> file. If something that you want to maintain is missing add it with
744
+ your name after it.
745
+ If at some point you no longer want to maintain some code, then please help in
746
+ finding a new maintainer and also don&rsquo;t forget to update the <samp class="file">MAINTAINERS</samp> file.
747
+ </p>
748
+ <p>We think our rules are not too hard. If you have comments, contact us.
749
+ </p>
750
+ <a class="anchor" id="Submitting-patches"></a><a name="Submitting-patches-1"></a>
751
+ <h2 class="chapter">4 Submitting patches<span class="pull-right"><a class="anchor hidden-xs" href="#Submitting-patches-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Submitting-patches-1" aria-hidden="true">TOC</a></span></h2>
752
+
753
+ <p>First, read the <a class="ref" href="#Coding-Rules">Coding Rules</a> above if you did not yet, in particular
754
+ the rules regarding patch submission.
755
+ </p>
756
+ <p>When you submit your patch, please use <code class="code">git format-patch</code> or
757
+ <code class="code">git send-email</code>. We cannot read other diffs :-).
758
+ </p>
759
+ <p>Also please do not submit a patch which contains several unrelated changes.
760
+ Split it into separate, self-contained pieces. This does not mean splitting
761
+ file by file. Instead, make the patch as small as possible while still
762
+ keeping it as a logical unit that contains an individual change, even
763
+ if it spans multiple files. This makes reviewing your patches much easier
764
+ for us and greatly increases your chances of getting your patch applied.
765
+ </p>
766
+ <p>Use the patcheck tool of FFmpeg to check your patch.
767
+ The tool is located in the tools directory.
768
+ </p>
769
+ <p>Run the <a class="ref" href="#Regression-tests">Regression tests</a> before submitting a patch in order to verify
770
+ it does not cause unexpected problems.
771
+ </p>
772
+ <p>It also helps quite a bit if you tell us what the patch does (for example
773
+ &rsquo;replaces lrint by lrintf&rsquo;), and why (for example &rsquo;*BSD isn&rsquo;t C99 compliant
774
+ and has no lrint()&rsquo;)
775
+ </p>
776
+ <p>Also please if you send several patches, send each patch as a separate mail,
777
+ do not attach several unrelated patches to the same mail.
778
+ </p>
779
+ <p>Patches should be posted to the
780
+ <a class="uref" href="https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel">ffmpeg-devel</a>
781
+ mailing list. Use <code class="code">git send-email</code> when possible since it will properly
782
+ send patches without requiring extra care. If you cannot, then send patches
783
+ as base64-encoded attachments, so your patch is not trashed during
784
+ transmission. Also ensure the correct mime type is used
785
+ (text/x-diff or text/x-patch or at least text/plain) and that only one
786
+ patch is inline or attached per mail.
787
+ You can check <a class="url" href="https://patchwork.ffmpeg.org">https://patchwork.ffmpeg.org</a>, if your patch does not show up, its mime type
788
+ likely was wrong.
789
+ </p>
790
+ <a name="How-to-setup-git-send_002demail_003f"></a>
791
+
792
+ <p>Please see <a class="url" href="https://git-send-email.io/">https://git-send-email.io/</a>.
793
+ For gmail additionally see <a class="url" href="https://shallowsky.com/blog/tech/email/gmail-app-passwds.html">https://shallowsky.com/blog/tech/email/gmail-app-passwds.html</a>.
794
+ </p>
795
+ <a name="Sending-patches-from-email-clients"></a>
796
+ <p>Using <code class="code">git send-email</code> might not be desirable for everyone. The
797
+ following trick allows to send patches via email clients in a safe
798
+ way. It has been tested with Outlook and Thunderbird (with X-Unsent
799
+ extension) and might work with other applications.
800
+ </p>
801
+ <p>Create your patch like this:
802
+ </p>
803
+ <pre class="verbatim">git format-patch -s -o &quot;outputfolder&quot; --add-header &quot;X-Unsent: 1&quot; --suffix .eml --to ffmpeg-devel@ffmpeg.org -1 1a2b3c4d
804
+ </pre>
805
+ <p>Now you&rsquo;ll just need to open the eml file with the email application
806
+ and execute &rsquo;Send&rsquo;.
807
+ </p>
808
+ <a name="Reviews"></a>
809
+ <p>Your patch will be reviewed on the mailing list. You will likely be asked
810
+ to make some changes and are expected to send in an improved version that
811
+ incorporates the requests from the review. This process may go through
812
+ several iterations. Once your patch is deemed good enough, some developer
813
+ will pick it up and commit it to the official FFmpeg tree.
814
+ </p>
815
+ <p>Give us a few days to react. But if some time passes without reaction,
816
+ send a reminder by email. Your patch should eventually be dealt with.
817
+ </p>
818
+
819
+ <a name="New-codecs-or-formats-checklist"></a>
820
+ <h2 class="chapter">5 New codecs or formats checklist<span class="pull-right"><a class="anchor hidden-xs" href="#New-codecs-or-formats-checklist" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-New-codecs-or-formats-checklist" aria-hidden="true">TOC</a></span></h2>
821
+
822
+ <ol class="enumerate">
823
+ <li> Did you use av_cold for codec initialization and close functions?
824
+
825
+ </li><li> Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or
826
+ AVInputFormat/AVOutputFormat struct?
827
+
828
+ </li><li> Did you bump the minor version number (and reset the micro version
829
+ number) in <samp class="file">libavcodec/version.h</samp> or <samp class="file">libavformat/version.h</samp>?
830
+
831
+ </li><li> Did you register it in <samp class="file">allcodecs.c</samp> or <samp class="file">allformats.c</samp>?
832
+
833
+ </li><li> Did you add the AVCodecID to <samp class="file">codec_id.h</samp>?
834
+ When adding new codec IDs, also add an entry to the codec descriptor
835
+ list in <samp class="file">libavcodec/codec_desc.c</samp>.
836
+
837
+ </li><li> If it has a FourCC, did you add it to <samp class="file">libavformat/riff.c</samp>,
838
+ even if it is only a decoder?
839
+
840
+ </li><li> Did you add a rule to compile the appropriate files in the Makefile?
841
+ Remember to do this even if you&rsquo;re just adding a format to a file that is
842
+ already being compiled by some other rule, like a raw demuxer.
843
+
844
+ </li><li> Did you add an entry to the table of supported formats or codecs in
845
+ <samp class="file">doc/general_contents.texi</samp>?
846
+
847
+ </li><li> Did you add an entry in the Changelog?
848
+
849
+ </li><li> If it depends on a parser or a library, did you add that dependency in
850
+ configure?
851
+
852
+ </li><li> Did you <code class="code">git add</code> the appropriate files before committing?
853
+
854
+ </li><li> Did you make sure it compiles standalone, i.e. with
855
+ <code class="code">configure --disable-everything --enable-decoder=foo</code>
856
+ (or <code class="code">--enable-demuxer</code> or whatever your component is)?
857
+ </li></ol>
858
+
859
+
860
+ <a name="Patch-submission-checklist"></a>
861
+ <h2 class="chapter">6 Patch submission checklist<span class="pull-right"><a class="anchor hidden-xs" href="#Patch-submission-checklist" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Patch-submission-checklist" aria-hidden="true">TOC</a></span></h2>
862
+
863
+ <ol class="enumerate">
864
+ <li> Does <code class="code">make fate</code> pass with the patch applied?
865
+
866
+ </li><li> Was the patch generated with git format-patch or send-email?
867
+
868
+ </li><li> Did you sign-off your patch? (<code class="code">git commit -s</code>)
869
+ See <a class="uref" href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/process/submitting-patches.rst">Sign your work</a> for the meaning
870
+ of <em class="dfn">sign-off</em>.
871
+
872
+ </li><li> Did you provide a clear git commit log message?
873
+
874
+ </li><li> Is the patch against latest FFmpeg git master branch?
875
+
876
+ </li><li> Are you subscribed to ffmpeg-devel?
877
+ (the list is subscribers only due to spam)
878
+
879
+ </li><li> Have you checked that the changes are minimal, so that the same cannot be
880
+ achieved with a smaller patch and/or simpler final code?
881
+
882
+ </li><li> If the change is to speed critical code, did you benchmark it?
883
+
884
+ </li><li> If you did any benchmarks, did you provide them in the mail?
885
+
886
+ </li><li> Have you checked that the patch does not introduce buffer overflows or
887
+ other security issues?
888
+
889
+ </li><li> Did you test your decoder or demuxer against damaged data? If no, see
890
+ tools/trasher, the noise bitstream filter, and
891
+ <a class="uref" href="http://caca.zoy.org/wiki/zzuf">zzuf</a>. Your decoder or demuxer
892
+ should not crash, end in a (near) infinite loop, or allocate ridiculous
893
+ amounts of memory when fed damaged data.
894
+
895
+ </li><li> Did you test your decoder or demuxer against sample files?
896
+ Samples may be obtained at <a class="url" href="https://samples.ffmpeg.org">https://samples.ffmpeg.org</a>.
897
+
898
+ </li><li> Does the patch not mix functional and cosmetic changes?
899
+
900
+ </li><li> Did you add tabs or trailing whitespace to the code? Both are forbidden.
901
+
902
+ </li><li> Is the patch attached to the email you send?
903
+
904
+ </li><li> Is the mime type of the patch correct? It should be text/x-diff or
905
+ text/x-patch or at least text/plain and not application/octet-stream.
906
+
907
+ </li><li> If the patch fixes a bug, did you provide a verbose analysis of the bug?
908
+
909
+ </li><li> If the patch fixes a bug, did you provide enough information, including
910
+ a sample, so the bug can be reproduced and the fix can be verified?
911
+ Note please do not attach samples &gt;100k to mails but rather provide a
912
+ URL, you can upload to <a class="url" href="https://streams.videolan.org/upload/">https://streams.videolan.org/upload/</a>.
913
+
914
+ </li><li> Did you provide a verbose summary about what the patch does change?
915
+
916
+ </li><li> Did you provide a verbose explanation why it changes things like it does?
917
+
918
+ </li><li> Did you provide a verbose summary of the user visible advantages and
919
+ disadvantages if the patch is applied?
920
+
921
+ </li><li> Did you provide an example so we can verify the new feature added by the
922
+ patch easily?
923
+
924
+ </li><li> If you added a new file, did you insert a license header? It should be
925
+ taken from FFmpeg, not randomly copied and pasted from somewhere else.
926
+
927
+ </li><li> You should maintain alphabetical order in alphabetically ordered lists as
928
+ long as doing so does not break API/ABI compatibility.
929
+
930
+ </li><li> Lines with similar content should be aligned vertically when doing so
931
+ improves readability.
932
+
933
+ </li><li> Consider adding a regression test for your code. All new modules
934
+ should be covered by tests. That includes demuxers, muxers, decoders, encoders
935
+ filters, bitstream filters, parsers. If its not possible to do that, add
936
+ an explanation why to your patchset, its ok to not test if theres a reason.
937
+
938
+ </li><li> If you added NASM code please check that things still work with &ndash;disable-x86asm.
939
+
940
+ </li><li> Test your code with valgrind and or Address Sanitizer to ensure it&rsquo;s free
941
+ of leaks, out of array accesses, etc.
942
+ </li></ol>
943
+
944
+ <a name="Patch-review-process"></a>
945
+ <h2 class="chapter">7 Patch review process<span class="pull-right"><a class="anchor hidden-xs" href="#Patch-review-process" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Patch-review-process" aria-hidden="true">TOC</a></span></h2>
946
+
947
+ <p>All patches posted to ffmpeg-devel will be reviewed, unless they contain a
948
+ clear note that the patch is not for the git master branch.
949
+ Reviews and comments will be posted as replies to the patch on the
950
+ mailing list. The patch submitter then has to take care of every comment,
951
+ that can be by resubmitting a changed patch or by discussion. Resubmitted
952
+ patches will themselves be reviewed like any other patch. If at some point
953
+ a patch passes review with no comments then it is approved, that can for
954
+ simple and small patches happen immediately while large patches will generally
955
+ have to be changed and reviewed many times before they are approved.
956
+ After a patch is approved it will be committed to the repository.
957
+ </p>
958
+ <p>We will review all submitted patches, but sometimes we are quite busy so
959
+ especially for large patches this can take several weeks.
960
+ </p>
961
+ <p>If you feel that the review process is too slow and you are willing to try to
962
+ take over maintainership of the area of code you change then just clone
963
+ git master and maintain the area of code there. We will merge each area from
964
+ where its best maintained.
965
+ </p>
966
+ <p>When resubmitting patches, please do not make any significant changes
967
+ not related to the comments received during review. Such patches will
968
+ be rejected. Instead, submit significant changes or new features as
969
+ separate patches.
970
+ </p>
971
+ <p>Everyone is welcome to review patches. Also if you are waiting for your patch
972
+ to be reviewed, please consider helping to review other patches, that is a great
973
+ way to get everyone&rsquo;s patches reviewed sooner.
974
+ </p>
975
+ <a class="anchor" id="Regression-tests"></a><a name="Regression-tests-1"></a>
976
+ <h2 class="chapter">8 Regression tests<span class="pull-right"><a class="anchor hidden-xs" href="#Regression-tests-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Regression-tests-1" aria-hidden="true">TOC</a></span></h2>
977
+
978
+ <p>Before submitting a patch (or committing to the repository), you should at least
979
+ test that you did not break anything.
980
+ </p>
981
+ <p>Running &rsquo;make fate&rsquo; accomplishes this, please see <a class="url" href="fate.html">fate.html</a> for details.
982
+ </p>
983
+ <p>[Of course, some patches may change the results of the regression tests. In
984
+ this case, the reference results of the regression tests shall be modified
985
+ accordingly].
986
+ </p>
987
+ <a name="Adding-files-to-the-fate_002dsuite-dataset"></a>
988
+ <h3 class="section">8.1 Adding files to the fate-suite dataset<span class="pull-right"><a class="anchor hidden-xs" href="#Adding-files-to-the-fate_002dsuite-dataset" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Adding-files-to-the-fate_002dsuite-dataset" aria-hidden="true">TOC</a></span></h3>
989
+
990
+ <p>If you need a sample uploaded send a mail to samples-request.
991
+ </p>
992
+ <p>When there is no muxer or encoder available to generate test media for a
993
+ specific test then the media has to be included in the fate-suite.
994
+ First please make sure that the sample file is as small as possible to test the
995
+ respective decoder or demuxer sufficiently. Large files increase network
996
+ bandwidth and disk space requirements.
997
+ Once you have a working fate test and fate sample, provide in the commit
998
+ message or introductory message for the patch series that you post to
999
+ the ffmpeg-devel mailing list, a direct link to download the sample media.
1000
+ </p>
1001
+ <a name="Visualizing-Test-Coverage"></a>
1002
+ <h3 class="section">8.2 Visualizing Test Coverage<span class="pull-right"><a class="anchor hidden-xs" href="#Visualizing-Test-Coverage" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Visualizing-Test-Coverage" aria-hidden="true">TOC</a></span></h3>
1003
+
1004
+ <p>The FFmpeg build system allows visualizing the test coverage in an easy
1005
+ manner with the coverage tools <code class="code">gcov</code>/<code class="code">lcov</code>. This involves
1006
+ the following steps:
1007
+ </p>
1008
+ <ol class="enumerate">
1009
+ <li> Configure to compile with instrumentation enabled:
1010
+ <code class="code">configure --toolchain=gcov</code>.
1011
+
1012
+ </li><li> Run your test case, either manually or via FATE. This can be either
1013
+ the full FATE regression suite, or any arbitrary invocation of any
1014
+ front-end tool provided by FFmpeg, in any combination.
1015
+
1016
+ </li><li> Run <code class="code">make lcov</code> to generate coverage data in HTML format.
1017
+
1018
+ </li><li> View <code class="code">lcov/index.html</code> in your preferred HTML viewer.
1019
+ </li></ol>
1020
+
1021
+ <p>You can use the command <code class="code">make lcov-reset</code> to reset the coverage
1022
+ measurements. You will need to rerun <code class="code">make lcov</code> after running a
1023
+ new test.
1024
+ </p>
1025
+ <a name="Using-Valgrind"></a>
1026
+ <h3 class="section">8.3 Using Valgrind<span class="pull-right"><a class="anchor hidden-xs" href="#Using-Valgrind" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Using-Valgrind" aria-hidden="true">TOC</a></span></h3>
1027
+
1028
+ <p>The configure script provides a shortcut for using valgrind to spot bugs
1029
+ related to memory handling. Just add the option
1030
+ <code class="code">--toolchain=valgrind-memcheck</code> or <code class="code">--toolchain=valgrind-massif</code>
1031
+ to your configure line, and reasonable defaults will be set for running
1032
+ FATE under the supervision of either the <strong class="strong">memcheck</strong> or the
1033
+ <strong class="strong">massif</strong> tool of the valgrind suite.
1034
+ </p>
1035
+ <p>In case you need finer control over how valgrind is invoked, use the
1036
+ <code class="code">--target-exec='valgrind &lt;your_custom_valgrind_options&gt;</code> option in
1037
+ your configure line instead.
1038
+ </p>
1039
+ <a class="anchor" id="Maintenance"></a><a name="Maintenance-process"></a>
1040
+ <h2 class="chapter">9 Maintenance process<span class="pull-right"><a class="anchor hidden-xs" href="#Maintenance-process" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Maintenance-process" aria-hidden="true">TOC</a></span></h2>
1041
+
1042
+ <a class="anchor" id="MAINTAINERS"></a><a name="MAINTAINERS-1"></a>
1043
+ <h3 class="section">9.1 MAINTAINERS<span class="pull-right"><a class="anchor hidden-xs" href="#MAINTAINERS-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-MAINTAINERS-1" aria-hidden="true">TOC</a></span></h3>
1044
+
1045
+ <p>The developers maintaining each part of the codebase are listed in <samp class="file">MAINTAINERS</samp>.
1046
+ Being listed in <samp class="file">MAINTAINERS</samp>, gives one the right to have git write access to
1047
+ the specific repository.
1048
+ </p>
1049
+ <a class="anchor" id="Becoming-a-maintainer"></a><a name="Becoming-a-maintainer-1"></a>
1050
+ <h3 class="section">9.2 Becoming a maintainer<span class="pull-right"><a class="anchor hidden-xs" href="#Becoming-a-maintainer-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Becoming-a-maintainer-1" aria-hidden="true">TOC</a></span></h3>
1051
+
1052
+ <p>People add themselves to <samp class="file">MAINTAINERS</samp> by sending a patch like any other code
1053
+ change. These get reviewed by the community like any other patch. It is expected
1054
+ that, if someone has an objection to a new maintainer, she is willing to object
1055
+ in public with her full name and is willing to take over maintainership for the area.
1056
+ </p>
1057
+
1058
+ <a class="anchor" id="Release-process"></a><a name="Release-process-1"></a>
1059
+ <h2 class="chapter">10 Release process<span class="pull-right"><a class="anchor hidden-xs" href="#Release-process-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Release-process-1" aria-hidden="true">TOC</a></span></h2>
1060
+
1061
+ <p>FFmpeg maintains a set of <strong class="strong">release branches</strong>, which are the
1062
+ recommended deliverable for system integrators and distributors (such as
1063
+ Linux distributions, etc.). At regular times, a <strong class="strong">release
1064
+ manager</strong> prepares, tests and publishes tarballs on the
1065
+ <a class="url" href="https://ffmpeg.org">https://ffmpeg.org</a> website.
1066
+ </p>
1067
+ <p>There are two kinds of releases:
1068
+ </p>
1069
+ <ol class="enumerate">
1070
+ <li> <strong class="strong">Major releases</strong> always include the latest and greatest
1071
+ features and functionality.
1072
+
1073
+ </li><li> <strong class="strong">Point releases</strong> are cut from <strong class="strong">release</strong> branches,
1074
+ which are named <code class="code">release/X</code>, with <code class="code">X</code> being the release
1075
+ version number.
1076
+ </li></ol>
1077
+
1078
+ <p>Note that we promise to our users that shared libraries from any FFmpeg
1079
+ release never break programs that have been <strong class="strong">compiled</strong> against
1080
+ previous versions of <strong class="strong">the same release series</strong> in any case!
1081
+ </p>
1082
+ <p>However, from time to time, we do make API changes that require adaptations
1083
+ in applications. Such changes are only allowed in (new) major releases and
1084
+ require further steps such as bumping library version numbers and/or
1085
+ adjustments to the symbol versioning file. Please discuss such changes
1086
+ on the <strong class="strong">ffmpeg-devel</strong> mailing list in time to allow forward planning.
1087
+ </p>
1088
+ <a class="anchor" id="Criteria-for-Point-Releases"></a><a name="Criteria-for-Point-Releases-1"></a>
1089
+ <h3 class="section">10.1 Criteria for Point Releases<span class="pull-right"><a class="anchor hidden-xs" href="#Criteria-for-Point-Releases-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Criteria-for-Point-Releases-1" aria-hidden="true">TOC</a></span></h3>
1090
+
1091
+ <p>Changes that match the following criteria are valid candidates for
1092
+ inclusion into a point release:
1093
+ </p>
1094
+ <ol class="enumerate">
1095
+ <li> Fixes a security issue, preferably identified by a <strong class="strong">CVE
1096
+ number</strong> issued by <a class="url" href="http://cve.mitre.org/">http://cve.mitre.org/</a>.
1097
+
1098
+ </li><li> Fixes a documented bug in <a class="url" href="https://trac.ffmpeg.org">https://trac.ffmpeg.org</a>.
1099
+
1100
+ </li><li> Improves the included documentation.
1101
+
1102
+ </li><li> Retains both source code and binary compatibility with previous
1103
+ point releases of the same release branch.
1104
+ </li></ol>
1105
+
1106
+ <p>The order for checking the rules is (1 OR 2 OR 3) AND 4.
1107
+ </p>
1108
+
1109
+ <a name="Release-Checklist"></a>
1110
+ <h3 class="section">10.2 Release Checklist<span class="pull-right"><a class="anchor hidden-xs" href="#Release-Checklist" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Release-Checklist" aria-hidden="true">TOC</a></span></h3>
1111
+
1112
+ <p>The release process involves the following steps:
1113
+ </p>
1114
+ <ol class="enumerate">
1115
+ <li> Ensure that the <samp class="file">RELEASE</samp> file contains the version number for
1116
+ the upcoming release.
1117
+
1118
+ </li><li> Add the release at <a class="url" href="https://trac.ffmpeg.org/admin/ticket/versions">https://trac.ffmpeg.org/admin/ticket/versions</a>.
1119
+
1120
+ </li><li> Announce the intent to do a release to the mailing list.
1121
+
1122
+ </li><li> Make sure all relevant security fixes have been backported. See
1123
+ <a class="url" href="https://ffmpeg.org/security.html">https://ffmpeg.org/security.html</a>.
1124
+
1125
+ </li><li> Ensure that the FATE regression suite still passes in the release
1126
+ branch on at least <strong class="strong">i386</strong> and <strong class="strong">amd64</strong>
1127
+ (cf. <a class="ref" href="#Regression-tests">Regression tests</a>).
1128
+
1129
+ </li><li> Prepare the release tarballs in <code class="code">bz2</code> and <code class="code">gz</code> formats, and
1130
+ supplementing files that contain <code class="code">gpg</code> signatures
1131
+
1132
+ </li><li> Publish the tarballs at <a class="url" href="https://ffmpeg.org/releases">https://ffmpeg.org/releases</a>. Create and
1133
+ push an annotated tag in the form <code class="code">nX</code>, with <code class="code">X</code>
1134
+ containing the version number.
1135
+
1136
+ </li><li> Propose and send a patch to the <strong class="strong">ffmpeg-devel</strong> mailing list
1137
+ with a news entry for the website.
1138
+
1139
+ </li><li> Publish the news entry.
1140
+
1141
+ </li><li> Send an announcement to the mailing list.
1142
+ </li></ol>
1143
+
1144
+ <p style="font-size: small;">
1145
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
1146
+ </p>
1147
+ </div>
1148
+ </body>
1149
+ </html>
ffmpeg-master-latest-win64-gpl/doc/faq.html ADDED
@@ -0,0 +1,821 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ FFmpeg FAQ
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ FFmpeg FAQ
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-General-Questions" href="#General-Questions">1 General Questions</a>
29
+ <ul class="toc-numbered-mark">
30
+ <li><a id="toc-Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f" href="#Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f">1.1 Why doesn&rsquo;t FFmpeg support feature [xyz]?</a></li>
31
+ <li><a id="toc-FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f" href="#FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f">1.2 FFmpeg does not support codec XXX. Can you include a Windows DLL loader to support it?</a></li>
32
+ <li><a id="toc-I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e" href="#I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e">1.3 I cannot read this file although this format seems to be supported by ffmpeg.</a></li>
33
+ <li><a id="toc-Which-codecs-are-supported-by-Windows_003f" href="#Which-codecs-are-supported-by-Windows_003f">1.4 Which codecs are supported by Windows?</a></li>
34
+ </ul></li>
35
+ <li><a id="toc-Compilation" href="#Compilation">2 Compilation</a>
36
+ <ul class="toc-numbered-mark">
37
+ <li><a id="toc-error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027" href="#error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027">2.1 <code class="code">error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'</code></a></li>
38
+ <li><a id="toc-I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f" href="#I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f">2.2 I have installed this library with my distro&rsquo;s package manager. Why does <code class="command">configure</code> not see it?</a></li>
39
+ <li><a id="toc-How-do-I-make-pkg_002dconfig-find-my-libraries_003f" href="#How-do-I-make-pkg_002dconfig-find-my-libraries_003f">2.3 How do I make <code class="command">pkg-config</code> find my libraries?</a></li>
40
+ <li><a id="toc-How-do-I-use-pkg_002dconfig-when-cross_002dcompiling_003f" href="#How-do-I-use-pkg_002dconfig-when-cross_002dcompiling_003f">2.4 How do I use <code class="command">pkg-config</code> when cross-compiling?</a></li>
41
+ </ul></li>
42
+ <li><a id="toc-Usage" href="#Usage">3 Usage</a>
43
+ <ul class="toc-numbered-mark">
44
+ <li><a id="toc-ffmpeg-does-not-work_003b-what-is-wrong_003f" href="#ffmpeg-does-not-work_003b-what-is-wrong_003f">3.1 ffmpeg does not work; what is wrong?</a></li>
45
+ <li><a id="toc-How-do-I-encode-single-pictures-into-movies_003f" href="#How-do-I-encode-single-pictures-into-movies_003f">3.2 How do I encode single pictures into movies?</a></li>
46
+ <li><a id="toc-How-do-I-encode-movie-to-single-pictures_003f" href="#How-do-I-encode-movie-to-single-pictures_003f">3.3 How do I encode movie to single pictures?</a></li>
47
+ <li><a id="toc-Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f" href="#Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f">3.4 Why do I see a slight quality degradation with multithreaded MPEG* encoding?</a></li>
48
+ <li><a id="toc-How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f" href="#How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f">3.5 How can I read from the standard input or write to the standard output?</a></li>
49
+ <li><a id="toc-_002df-jpeg-doesn_0027t-work_002e" href="#g_t_002df-jpeg-doesn_0027t-work_002e">3.6 -f jpeg doesn&rsquo;t work.</a></li>
50
+ <li><a id="toc-Why-can-I-not-change-the-frame-rate_003f" href="#Why-can-I-not-change-the-frame-rate_003f">3.7 Why can I not change the frame rate?</a></li>
51
+ <li><a id="toc-How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f" href="#How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f">3.8 How do I encode Xvid or DivX video with ffmpeg?</a></li>
52
+ <li><a id="toc-Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f" href="#Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f">3.9 Which are good parameters for encoding high quality MPEG-4?</a></li>
53
+ <li><a id="toc-Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f" href="#Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f">3.10 Which are good parameters for encoding high quality MPEG-1/MPEG-2?</a></li>
54
+ <li><a id="toc-Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f" href="#Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f">3.11 Interlaced video looks very bad when encoded with ffmpeg, what is wrong?</a></li>
55
+ <li><a id="toc-How-can-I-read-DirectShow-files_003f" href="#How-can-I-read-DirectShow-files_003f">3.12 How can I read DirectShow files?</a></li>
56
+ <li><a id="toc-How-can-I-join-video-files_003f" href="#How-can-I-join-video-files_003f">3.13 How can I join video files?</a></li>
57
+ <li><a id="toc-How-can-I-concatenate-video-files_003f" href="#How-can-I-concatenate-video-files_003f">3.14 How can I concatenate video files?</a>
58
+ <ul class="toc-numbered-mark">
59
+ <li><a id="toc-Concatenating-using-the-concat-filter" href="#Concatenating-using-the-concat-filter">3.14.1 Concatenating using the concat <em class="emph">filter</em></a></li>
60
+ <li><a id="toc-Concatenating-using-the-concat-demuxer" href="#Concatenating-using-the-concat-demuxer">3.14.2 Concatenating using the concat <em class="emph">demuxer</em></a></li>
61
+ <li><a id="toc-Concatenating-using-the-concat-protocol-_0028file-level_0029" href="#Concatenating-using-the-concat-protocol-_0028file-level_0029">3.14.3 Concatenating using the concat <em class="emph">protocol</em> (file level)</a></li>
62
+ <li><a id="toc-Concatenating-using-raw-audio-and-video" href="#Concatenating-using-raw-audio-and-video">3.14.4 Concatenating using raw audio and video</a></li>
63
+ </ul></li>
64
+ <li><a id="toc-Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e" href="#Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e">3.15 Using <samp class="option">-f lavfi</samp>, audio becomes mono for no apparent reason.</a></li>
65
+ <li><a id="toc-Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f" href="#Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f">3.16 Why does FFmpeg not see the subtitles in my VOB file?</a></li>
66
+ <li><a id="toc-Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f" href="#Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f">3.17 Why was the <code class="command">ffmpeg</code> <samp class="option">-sameq</samp> option removed? What to use instead?</a></li>
67
+ <li><a id="toc-I-have-a-stretched-video_002c-why-does-scaling-not-fix-it_003f" href="#I-have-a-stretched-video_002c-why-does-scaling-not-fix-it_003f">3.18 I have a stretched video, why does scaling not fix it?</a></li>
68
+ <li><a id="toc-How-do-I-run-ffmpeg-as-a-background-task_003f" href="#How-do-I-run-ffmpeg-as-a-background-task_003f">3.19 How do I run ffmpeg as a background task?</a></li>
69
+ <li><a id="toc-How-do-I-prevent-ffmpeg-from-suspending-with-a-message-like-suspended-_0028tty-output_0029_003f" href="#How-do-I-prevent-ffmpeg-from-suspending-with-a-message-like-suspended-_0028tty-output_0029_003f">3.20 How do I prevent ffmpeg from suspending with a message like <em class="emph">suspended (tty output)</em>?</a></li>
70
+ </ul></li>
71
+ <li><a id="toc-Development" href="#Development">4 Development</a>
72
+ <ul class="toc-numbered-mark">
73
+ <li><a id="toc-Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f" href="#Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f">4.1 Are there examples illustrating how to use the FFmpeg libraries, particularly libavcodec and libavformat?</a></li>
74
+ <li><a id="toc-Can-you-support-my-C-compiler-XXX_003f" href="#Can-you-support-my-C-compiler-XXX_003f">4.2 Can you support my C compiler XXX?</a></li>
75
+ <li><a id="toc-Is-Microsoft-Visual-C_002b_002b-supported_003f" href="#Is-Microsoft-Visual-C_002b_002b-supported_003f">4.3 Is Microsoft Visual C++ supported?</a></li>
76
+ <li><a id="toc-Can-you-add-automake_002c-libtool-or-autoconf-support_003f" href="#Can-you-add-automake_002c-libtool-or-autoconf-support_003f">4.4 Can you add automake, libtool or autoconf support?</a></li>
77
+ <li><a id="toc-Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f" href="#Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f">4.5 Why not rewrite FFmpeg in object-oriented C++?</a></li>
78
+ <li><a id="toc-Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f" href="#Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f">4.6 Why are the ffmpeg programs devoid of debugging symbols?</a></li>
79
+ <li><a id="toc-I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f" href="#I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f">4.7 I do not like the LGPL, can I contribute code under the GPL instead?</a></li>
80
+ <li><a id="toc-I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e" href="#I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e">4.8 I&rsquo;m using FFmpeg from within my C application but the linker complains about missing symbols from the libraries themselves.</a></li>
81
+ <li><a id="toc-I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e" href="#I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e">4.9 I&rsquo;m using FFmpeg from within my C++ application but the linker complains about missing symbols which seem to be available.</a></li>
82
+ <li><a id="toc-I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope" href="#I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope">4.10 I&rsquo;m using libavutil from within my C++ application but the compiler complains about &rsquo;UINT64_C&rsquo; was not declared in this scope</a></li>
83
+ <li><a id="toc-I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f" href="#I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f">4.11 I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?</a></li>
84
+ <li><a id="toc-Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f" href="#Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f">4.12 Where is the documentation about ffv1, msmpeg4, asv1, 4xm?</a></li>
85
+ <li><a id="toc-How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f" href="#How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f">4.13 How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?</a></li>
86
+ <li><a id="toc-AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e" href="#AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e">4.14 AVStream.r_frame_rate is wrong, it is much larger than the frame rate.</a></li>
87
+ <li><a id="toc-Why-is-make-fate-not-running-all-tests_003f" href="#Why-is-make-fate-not-running-all-tests_003f">4.15 Why is <code class="code">make fate</code> not running all tests?</a></li>
88
+ <li><a id="toc-Why-is-make-fate-not-finding-the-samples_003f" href="#Why-is-make-fate-not-finding-the-samples_003f">4.16 Why is <code class="code">make fate</code> not finding the samples?</a></li>
89
+ </ul></li>
90
+ </ul>
91
+ </div>
92
+ </div>
93
+
94
+ <a name="General-Questions"></a>
95
+ <h2 class="chapter">1 General Questions<span class="pull-right"><a class="anchor hidden-xs" href="#General-Questions" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-General-Questions" aria-hidden="true">TOC</a></span></h2>
96
+
97
+ <a name="Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f"></a>
98
+ <h3 class="section">1.1 Why doesn&rsquo;t FFmpeg support feature [xyz]?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f" aria-hidden="true">TOC</a></span></h3>
99
+
100
+ <p>Because no one has taken on that task yet. FFmpeg development is
101
+ driven by the tasks that are important to the individual developers.
102
+ If there is a feature that is important to you, the best way to get
103
+ it implemented is to undertake the task yourself or sponsor a developer.
104
+ </p>
105
+ <a name="FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f"></a>
106
+ <h3 class="section">1.2 FFmpeg does not support codec XXX. Can you include a Windows DLL loader to support it?<span class="pull-right"><a class="anchor hidden-xs" href="#FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f" aria-hidden="true">TOC</a></span></h3>
107
+
108
+ <p>No. Windows DLLs are not portable, bloated and often slow.
109
+ Moreover FFmpeg strives to support all codecs natively.
110
+ A DLL loader is not conducive to that goal.
111
+ </p>
112
+ <a name="I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e"></a>
113
+ <h3 class="section">1.3 I cannot read this file although this format seems to be supported by ffmpeg.<span class="pull-right"><a class="anchor hidden-xs" href="#I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e" aria-hidden="true">TOC</a></span></h3>
114
+
115
+ <p>Even if ffmpeg can read the container format, it may not support all its
116
+ codecs. Please consult the supported codec list in the ffmpeg
117
+ documentation.
118
+ </p>
119
+ <a name="Which-codecs-are-supported-by-Windows_003f"></a>
120
+ <h3 class="section">1.4 Which codecs are supported by Windows?<span class="pull-right"><a class="anchor hidden-xs" href="#Which-codecs-are-supported-by-Windows_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Which-codecs-are-supported-by-Windows_003f" aria-hidden="true">TOC</a></span></h3>
121
+
122
+ <p>Windows does not support standard formats like MPEG very well, unless you
123
+ install some additional codecs.
124
+ </p>
125
+ <p>The following list of video codecs should work on most Windows systems:
126
+ </p><dl class="table">
127
+ <dt><samp class="option">msmpeg4v2</samp></dt>
128
+ <dd><p>.avi/.asf
129
+ </p></dd>
130
+ <dt><samp class="option">msmpeg4</samp></dt>
131
+ <dd><p>.asf only
132
+ </p></dd>
133
+ <dt><samp class="option">wmv1</samp></dt>
134
+ <dd><p>.asf only
135
+ </p></dd>
136
+ <dt><samp class="option">wmv2</samp></dt>
137
+ <dd><p>.asf only
138
+ </p></dd>
139
+ <dt><samp class="option">mpeg4</samp></dt>
140
+ <dd><p>Only if you have some MPEG-4 codec like ffdshow or Xvid installed.
141
+ </p></dd>
142
+ <dt><samp class="option">mpeg1video</samp></dt>
143
+ <dd><p>.mpg only
144
+ </p></dd>
145
+ </dl>
146
+ <p>Note, ASF files often have .wmv or .wma extensions in Windows. It should also
147
+ be mentioned that Microsoft claims a patent on the ASF format, and may sue
148
+ or threaten users who create ASF files with non-Microsoft software. It is
149
+ strongly advised to avoid ASF where possible.
150
+ </p>
151
+ <p>The following list of audio codecs should work on most Windows systems:
152
+ </p><dl class="table">
153
+ <dt><samp class="option">adpcm_ima_wav</samp></dt>
154
+ <dt><samp class="option">adpcm_ms</samp></dt>
155
+ <dt><samp class="option">pcm_s16le</samp></dt>
156
+ <dd><p>always
157
+ </p></dd>
158
+ <dt><samp class="option">libmp3lame</samp></dt>
159
+ <dd><p>If some MP3 codec like LAME is installed.
160
+ </p></dd>
161
+ </dl>
162
+
163
+
164
+ <a name="Compilation"></a>
165
+ <h2 class="chapter">2 Compilation<span class="pull-right"><a class="anchor hidden-xs" href="#Compilation" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Compilation" aria-hidden="true">TOC</a></span></h2>
166
+
167
+ <a name="error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027"></a>
168
+ <h3 class="section">2.1 <code class="code">error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'</code><span class="pull-right"><a class="anchor hidden-xs" href="#error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027" aria-hidden="true">TOC</a></span></h3>
169
+
170
+ <p>This is a bug in gcc. Do not report it to us. Instead, please report it to
171
+ the gcc developers. Note that we will not add workarounds for gcc bugs.
172
+ </p>
173
+ <p>Also note that (some of) the gcc developers believe this is not a bug or
174
+ not a bug they should fix:
175
+ <a class="url" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11203">https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11203</a>.
176
+ Then again, some of them do not know the difference between an undecidable
177
+ problem and an NP-hard problem...
178
+ </p>
179
+ <a name="I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f"></a>
180
+ <h3 class="section">2.2 I have installed this library with my distro&rsquo;s package manager. Why does <code class="command">configure</code> not see it?<span class="pull-right"><a class="anchor hidden-xs" href="#I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f" aria-hidden="true">TOC</a></span></h3>
181
+
182
+ <p>Distributions usually split libraries in several packages. The main package
183
+ contains the files necessary to run programs using the library. The
184
+ development package contains the files necessary to build programs using the
185
+ library. Sometimes, docs and/or data are in a separate package too.
186
+ </p>
187
+ <p>To build FFmpeg, you need to install the development package. It is usually
188
+ called <samp class="file">libfoo-dev</samp> or <samp class="file">libfoo-devel</samp>. You can remove it after the
189
+ build is finished, but be sure to keep the main package.
190
+ </p>
191
+ <a name="How-do-I-make-pkg_002dconfig-find-my-libraries_003f"></a>
192
+ <h3 class="section">2.3 How do I make <code class="command">pkg-config</code> find my libraries?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-make-pkg_002dconfig-find-my-libraries_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-make-pkg_002dconfig-find-my-libraries_003f" aria-hidden="true">TOC</a></span></h3>
193
+
194
+ <p>Somewhere along with your libraries, there is a <samp class="file">.pc</samp> file (or several)
195
+ in a <samp class="file">pkgconfig</samp> directory. You need to set environment variables to
196
+ point <code class="command">pkg-config</code> to these files.
197
+ </p>
198
+ <p>If you need to <em class="emph">add</em> directories to <code class="command">pkg-config</code>&rsquo;s search list
199
+ (typical use case: library installed separately), add it to
200
+ <code class="code">$PKG_CONFIG_PATH</code>:
201
+ </p>
202
+ <div class="example">
203
+ <pre class="example-preformatted">export PKG_CONFIG_PATH=/opt/x264/lib/pkgconfig:/opt/opus/lib/pkgconfig
204
+ </pre></div>
205
+
206
+ <p>If you need to <em class="emph">replace</em> <code class="command">pkg-config</code>&rsquo;s search list
207
+ (typical use case: cross-compiling), set it in
208
+ <code class="code">$PKG_CONFIG_LIBDIR</code>:
209
+ </p>
210
+ <div class="example">
211
+ <pre class="example-preformatted">export PKG_CONFIG_LIBDIR=/home/me/cross/usr/lib/pkgconfig:/home/me/cross/usr/local/lib/pkgconfig
212
+ </pre></div>
213
+
214
+ <p>If you need to know the library&rsquo;s internal dependencies (typical use: static
215
+ linking), add the <code class="code">--static</code> option to <code class="command">pkg-config</code>:
216
+ </p>
217
+ <div class="example">
218
+ <pre class="example-preformatted">./configure --pkg-config-flags=--static
219
+ </pre></div>
220
+
221
+ <a name="How-do-I-use-pkg_002dconfig-when-cross_002dcompiling_003f"></a>
222
+ <h3 class="section">2.4 How do I use <code class="command">pkg-config</code> when cross-compiling?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-use-pkg_002dconfig-when-cross_002dcompiling_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-use-pkg_002dconfig-when-cross_002dcompiling_003f" aria-hidden="true">TOC</a></span></h3>
223
+
224
+ <p>The best way is to install <code class="command">pkg-config</code> in your cross-compilation
225
+ environment. It will automatically use the cross-compilation libraries.
226
+ </p>
227
+ <p>You can also use <code class="command">pkg-config</code> from the host environment by
228
+ specifying explicitly <code class="code">--pkg-config=pkg-config</code> to <code class="command">configure</code>.
229
+ In that case, you must point <code class="command">pkg-config</code> to the correct directories
230
+ using the <code class="code">PKG_CONFIG_LIBDIR</code>, as explained in the previous entry.
231
+ </p>
232
+ <p>As an intermediate solution, you can place in your cross-compilation
233
+ environment a script that calls the host <code class="command">pkg-config</code> with
234
+ <code class="code">PKG_CONFIG_LIBDIR</code> set. That script can look like that:
235
+ </p>
236
+ <div class="example">
237
+ <pre class="example-preformatted">#!/bin/sh
238
+ PKG_CONFIG_LIBDIR=/path/to/cross/lib/pkgconfig
239
+ export PKG_CONFIG_LIBDIR
240
+ exec /usr/bin/pkg-config &quot;$@&quot;
241
+ </pre></div>
242
+
243
+ <a name="Usage"></a>
244
+ <h2 class="chapter">3 Usage<span class="pull-right"><a class="anchor hidden-xs" href="#Usage" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Usage" aria-hidden="true">TOC</a></span></h2>
245
+
246
+ <a name="ffmpeg-does-not-work_003b-what-is-wrong_003f"></a>
247
+ <h3 class="section">3.1 ffmpeg does not work; what is wrong?<span class="pull-right"><a class="anchor hidden-xs" href="#ffmpeg-does-not-work_003b-what-is-wrong_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-ffmpeg-does-not-work_003b-what-is-wrong_003f" aria-hidden="true">TOC</a></span></h3>
248
+
249
+ <p>Try a <code class="code">make distclean</code> in the ffmpeg source directory before the build.
250
+ If this does not help see
251
+ (<a class="url" href="https://ffmpeg.org/bugreports.html">https://ffmpeg.org/bugreports.html</a>).
252
+ </p>
253
+ <a name="How-do-I-encode-single-pictures-into-movies_003f"></a>
254
+ <h3 class="section">3.2 How do I encode single pictures into movies?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-encode-single-pictures-into-movies_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-encode-single-pictures-into-movies_003f" aria-hidden="true">TOC</a></span></h3>
255
+
256
+ <p>First, rename your pictures to follow a numerical sequence.
257
+ For example, img1.jpg, img2.jpg, img3.jpg,...
258
+ Then you may run:
259
+ </p>
260
+ <div class="example">
261
+ <pre class="example-preformatted">ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
262
+ </pre></div>
263
+
264
+ <p>Notice that &lsquo;<samp class="samp">%d</samp>&rsquo; is replaced by the image number.
265
+ </p>
266
+ <p><samp class="file">img%03d.jpg</samp> means the sequence <samp class="file">img001.jpg</samp>, <samp class="file">img002.jpg</samp>, etc.
267
+ </p>
268
+ <p>Use the <samp class="option">-start_number</samp> option to declare a starting number for
269
+ the sequence. This is useful if your sequence does not start with
270
+ <samp class="file">img001.jpg</samp> but is still in a numerical order. The following
271
+ example will start with <samp class="file">img100.jpg</samp>:
272
+ </p>
273
+ <div class="example">
274
+ <pre class="example-preformatted">ffmpeg -f image2 -start_number 100 -i img%d.jpg /tmp/a.mpg
275
+ </pre></div>
276
+
277
+ <p>If you have large number of pictures to rename, you can use the
278
+ following command to ease the burden. The command, using the bourne
279
+ shell syntax, symbolically links all files in the current directory
280
+ that match <code class="code">*jpg</code> to the <samp class="file">/tmp</samp> directory in the sequence of
281
+ <samp class="file">img001.jpg</samp>, <samp class="file">img002.jpg</samp> and so on.
282
+ </p>
283
+ <div class="example">
284
+ <pre class="example-preformatted">x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s &quot;$i&quot; /tmp/img&quot;$counter&quot;.jpg; x=$(($x+1)); done
285
+ </pre></div>
286
+
287
+ <p>If you want to sequence them by oldest modified first, substitute
288
+ <code class="code">$(ls -r -t *jpg)</code> in place of <code class="code">*jpg</code>.
289
+ </p>
290
+ <p>Then run:
291
+ </p>
292
+ <div class="example">
293
+ <pre class="example-preformatted">ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg
294
+ </pre></div>
295
+
296
+ <p>The same logic is used for any image format that ffmpeg reads.
297
+ </p>
298
+ <p>You can also use <code class="command">cat</code> to pipe images to ffmpeg:
299
+ </p>
300
+ <div class="example">
301
+ <pre class="example-preformatted">cat *.jpg | ffmpeg -f image2pipe -c:v mjpeg -i - output.mpg
302
+ </pre></div>
303
+
304
+ <a name="How-do-I-encode-movie-to-single-pictures_003f"></a>
305
+ <h3 class="section">3.3 How do I encode movie to single pictures?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-encode-movie-to-single-pictures_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-encode-movie-to-single-pictures_003f" aria-hidden="true">TOC</a></span></h3>
306
+
307
+ <p>Use:
308
+ </p>
309
+ <div class="example">
310
+ <pre class="example-preformatted">ffmpeg -i movie.mpg movie%d.jpg
311
+ </pre></div>
312
+
313
+ <p>The <samp class="file">movie.mpg</samp> used as input will be converted to
314
+ <samp class="file">movie1.jpg</samp>, <samp class="file">movie2.jpg</samp>, etc...
315
+ </p>
316
+ <p>Instead of relying on file format self-recognition, you may also use
317
+ </p><dl class="table">
318
+ <dt><samp class="option">-c:v ppm</samp></dt>
319
+ <dt><samp class="option">-c:v png</samp></dt>
320
+ <dt><samp class="option">-c:v mjpeg</samp></dt>
321
+ </dl>
322
+ <p>to force the encoding.
323
+ </p>
324
+ <p>Applying that to the previous example:
325
+ </p><div class="example">
326
+ <pre class="example-preformatted">ffmpeg -i movie.mpg -f image2 -c:v mjpeg menu%d.jpg
327
+ </pre></div>
328
+
329
+ <p>Beware that there is no &quot;jpeg&quot; codec. Use &quot;mjpeg&quot; instead.
330
+ </p>
331
+ <a name="Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f"></a>
332
+ <h3 class="section">3.4 Why do I see a slight quality degradation with multithreaded MPEG* encoding?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f" aria-hidden="true">TOC</a></span></h3>
333
+
334
+ <p>For multithreaded MPEG* encoding, the encoded slices must be independent,
335
+ otherwise thread n would practically have to wait for n-1 to finish, so it&rsquo;s
336
+ quite logical that there is a small reduction of quality. This is not a bug.
337
+ </p>
338
+ <a name="How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f"></a>
339
+ <h3 class="section">3.5 How can I read from the standard input or write to the standard output?<span class="pull-right"><a class="anchor hidden-xs" href="#How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f" aria-hidden="true">TOC</a></span></h3>
340
+
341
+ <p>Use <samp class="file">-</samp> as file name.
342
+ </p>
343
+ <a name="g_t_002df-jpeg-doesn_0027t-work_002e"></a>
344
+ <h3 class="section">3.6 -f jpeg doesn&rsquo;t work.<span class="pull-right"><a class="anchor hidden-xs" href="#_002df-jpeg-doesn_0027t-work_002e" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-_002df-jpeg-doesn_0027t-work_002e" aria-hidden="true">TOC</a></span></h3>
345
+
346
+ <p>Try &rsquo;-f image2 test%d.jpg&rsquo;.
347
+ </p>
348
+ <a name="Why-can-I-not-change-the-frame-rate_003f"></a>
349
+ <h3 class="section">3.7 Why can I not change the frame rate?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-can-I-not-change-the-frame-rate_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-can-I-not-change-the-frame-rate_003f" aria-hidden="true">TOC</a></span></h3>
350
+
351
+ <p>Some codecs, like MPEG-1/2, only allow a small number of fixed frame rates.
352
+ Choose a different codec with the -c:v command line option.
353
+ </p>
354
+ <a name="How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f"></a>
355
+ <h3 class="section">3.8 How do I encode Xvid or DivX video with ffmpeg?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f" aria-hidden="true">TOC</a></span></h3>
356
+
357
+ <p>Both Xvid and DivX (version 4+) are implementations of the ISO MPEG-4
358
+ standard (note that there are many other coding formats that use this
359
+ same standard). Thus, use &rsquo;-c:v mpeg4&rsquo; to encode in these formats. The
360
+ default fourcc stored in an MPEG-4-coded file will be &rsquo;FMP4&rsquo;. If you want
361
+ a different fourcc, use the &rsquo;-vtag&rsquo; option. E.g., &rsquo;-vtag xvid&rsquo; will
362
+ force the fourcc &rsquo;xvid&rsquo; to be stored as the video fourcc rather than the
363
+ default.
364
+ </p>
365
+ <a name="Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f"></a>
366
+ <h3 class="section">3.9 Which are good parameters for encoding high quality MPEG-4?<span class="pull-right"><a class="anchor hidden-xs" href="#Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f" aria-hidden="true">TOC</a></span></h3>
367
+
368
+ <p>&rsquo;-mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 1/2&rsquo;,
369
+ things to try: &rsquo;-bf 2&rsquo;, &rsquo;-mpv_flags qp_rd&rsquo;, &rsquo;-mpv_flags mv0&rsquo;, &rsquo;-mpv_flags skip_rd&rsquo;.
370
+ </p>
371
+ <a name="Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f"></a>
372
+ <h3 class="section">3.10 Which are good parameters for encoding high quality MPEG-1/MPEG-2?<span class="pull-right"><a class="anchor hidden-xs" href="#Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f" aria-hidden="true">TOC</a></span></h3>
373
+
374
+ <p>&rsquo;-mbd rd -trellis 2 -cmp 2 -subcmp 2 -g 100 -pass 1/2&rsquo;
375
+ but beware the &rsquo;-g 100&rsquo; might cause problems with some decoders.
376
+ Things to try: &rsquo;-bf 2&rsquo;, &rsquo;-mpv_flags qp_rd&rsquo;, &rsquo;-mpv_flags mv0&rsquo;, &rsquo;-mpv_flags skip_rd&rsquo;.
377
+ </p>
378
+ <a name="Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f"></a>
379
+ <h3 class="section">3.11 Interlaced video looks very bad when encoded with ffmpeg, what is wrong?<span class="pull-right"><a class="anchor hidden-xs" href="#Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f" aria-hidden="true">TOC</a></span></h3>
380
+
381
+ <p>You should use &rsquo;-flags +ilme+ildct&rsquo; and maybe &rsquo;-flags +alt&rsquo; for interlaced
382
+ material, and try &rsquo;-top 0/1&rsquo; if the result looks really messed-up.
383
+ </p>
384
+ <a name="How-can-I-read-DirectShow-files_003f"></a>
385
+ <h3 class="section">3.12 How can I read DirectShow files?<span class="pull-right"><a class="anchor hidden-xs" href="#How-can-I-read-DirectShow-files_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-can-I-read-DirectShow-files_003f" aria-hidden="true">TOC</a></span></h3>
386
+
387
+ <p>If you have built FFmpeg with <code class="code">./configure --enable-avisynth</code>
388
+ (only possible on MinGW/Cygwin platforms),
389
+ then you may use any file that DirectShow can read as input.
390
+ </p>
391
+ <p>Just create an &quot;input.avs&quot; text file with this single line ...
392
+ </p><div class="example">
393
+ <pre class="example-preformatted">DirectShowSource(&quot;C:\path to your file\yourfile.asf&quot;)
394
+ </pre></div>
395
+ <p>... and then feed that text file to ffmpeg:
396
+ </p><div class="example">
397
+ <pre class="example-preformatted">ffmpeg -i input.avs
398
+ </pre></div>
399
+
400
+ <p>For ANY other help on AviSynth, please visit the
401
+ <a class="uref" href="http://www.avisynth.org/">AviSynth homepage</a>.
402
+ </p>
403
+ <a name="How-can-I-join-video-files_003f"></a>
404
+ <h3 class="section">3.13 How can I join video files?<span class="pull-right"><a class="anchor hidden-xs" href="#How-can-I-join-video-files_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-can-I-join-video-files_003f" aria-hidden="true">TOC</a></span></h3>
405
+
406
+ <p>To &quot;join&quot; video files is quite ambiguous. The following list explains the
407
+ different kinds of &quot;joining&quot; and points out how those are addressed in
408
+ FFmpeg. To join video files may mean:
409
+ </p>
410
+ <ul class="itemize mark-bullet">
411
+ <li>To put them one after the other: this is called to <em class="emph">concatenate</em> them
412
+ (in short: concat) and is addressed
413
+ <a class="ref" href="#How-can-I-concatenate-video-files">in this very faq</a>.
414
+
415
+ </li><li>To put them together in the same file, to let the user choose between the
416
+ different versions (example: different audio languages): this is called to
417
+ <em class="emph">multiplex</em> them together (in short: mux), and is done by simply
418
+ invoking ffmpeg with several <samp class="option">-i</samp> options.
419
+
420
+ </li><li>For audio, to put all channels together in a single stream (example: two
421
+ mono streams into one stereo stream): this is sometimes called to
422
+ <em class="emph">merge</em> them, and can be done using the
423
+ <a class="url" href="ffmpeg-filters.html#amerge"><code class="code">amerge</code></a> filter.
424
+
425
+ </li><li>For audio, to play one on top of the other: this is called to <em class="emph">mix</em>
426
+ them, and can be done by first merging them into a single stream and then
427
+ using the <a class="url" href="ffmpeg-filters.html#pan"><code class="code">pan</code></a> filter to mix
428
+ the channels at will.
429
+
430
+ </li><li>For video, to display both together, side by side or one on top of a part of
431
+ the other; it can be done using the
432
+ <a class="url" href="ffmpeg-filters.html#overlay"><code class="code">overlay</code></a> video filter.
433
+
434
+ </li></ul>
435
+
436
+ <a class="anchor" id="How-can-I-concatenate-video-files"></a><a name="How-can-I-concatenate-video-files_003f"></a>
437
+ <h3 class="section">3.14 How can I concatenate video files?<span class="pull-right"><a class="anchor hidden-xs" href="#How-can-I-concatenate-video-files_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-can-I-concatenate-video-files_003f" aria-hidden="true">TOC</a></span></h3>
438
+
439
+ <p>There are several solutions, depending on the exact circumstances.
440
+ </p>
441
+ <a name="Concatenating-using-the-concat-filter"></a>
442
+ <h4 class="subsection">3.14.1 Concatenating using the concat <em class="emph">filter</em><span class="pull-right"><a class="anchor hidden-xs" href="#Concatenating-using-the-concat-filter" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Concatenating-using-the-concat-filter" aria-hidden="true">TOC</a></span></h4>
443
+
444
+ <p>FFmpeg has a <a class="url" href="ffmpeg-filters.html#concat"><code class="code">concat</code></a> filter designed specifically for that, with examples in the
445
+ documentation. This operation is recommended if you need to re-encode.
446
+ </p>
447
+ <a name="Concatenating-using-the-concat-demuxer"></a>
448
+ <h4 class="subsection">3.14.2 Concatenating using the concat <em class="emph">demuxer</em><span class="pull-right"><a class="anchor hidden-xs" href="#Concatenating-using-the-concat-demuxer" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Concatenating-using-the-concat-demuxer" aria-hidden="true">TOC</a></span></h4>
449
+
450
+ <p>FFmpeg has a <a class="url" href="ffmpeg-formats.html#concat"><code class="code">concat</code></a> demuxer which you can use when you want to avoid a re-encode and
451
+ your format doesn&rsquo;t support file level concatenation.
452
+ </p>
453
+ <a name="Concatenating-using-the-concat-protocol-_0028file-level_0029"></a>
454
+ <h4 class="subsection">3.14.3 Concatenating using the concat <em class="emph">protocol</em> (file level)<span class="pull-right"><a class="anchor hidden-xs" href="#Concatenating-using-the-concat-protocol-_0028file-level_0029" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Concatenating-using-the-concat-protocol-_0028file-level_0029" aria-hidden="true">TOC</a></span></h4>
455
+
456
+ <p>FFmpeg has a <a class="url" href="ffmpeg-protocols.html#concat"><code class="code">concat</code></a> protocol designed specifically for that, with examples in the
457
+ documentation.
458
+ </p>
459
+ <p>A few multimedia containers (MPEG-1, MPEG-2 PS, DV) allow one to concatenate
460
+ video by merely concatenating the files containing them.
461
+ </p>
462
+ <p>Hence you may concatenate your multimedia files by first transcoding them to
463
+ these privileged formats, then using the humble <code class="code">cat</code> command (or the
464
+ equally humble <code class="code">copy</code> under Windows), and finally transcoding back to your
465
+ format of choice.
466
+ </p>
467
+ <div class="example">
468
+ <pre class="example-preformatted">ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
469
+ ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
470
+ cat intermediate1.mpg intermediate2.mpg &gt; intermediate_all.mpg
471
+ ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
472
+ </pre></div>
473
+
474
+ <p>Additionally, you can use the <code class="code">concat</code> protocol instead of <code class="code">cat</code> or
475
+ <code class="code">copy</code> which will avoid creation of a potentially huge intermediate file.
476
+ </p>
477
+ <div class="example">
478
+ <pre class="example-preformatted">ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
479
+ ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
480
+ ffmpeg -i concat:&quot;intermediate1.mpg|intermediate2.mpg&quot; -c copy intermediate_all.mpg
481
+ ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
482
+ </pre></div>
483
+
484
+ <p>Note that you may need to escape the character &quot;|&quot; which is special for many
485
+ shells.
486
+ </p>
487
+ <p>Another option is usage of named pipes, should your platform support it:
488
+ </p>
489
+ <div class="example">
490
+ <pre class="example-preformatted">mkfifo intermediate1.mpg
491
+ mkfifo intermediate2.mpg
492
+ ffmpeg -i input1.avi -qscale:v 1 -y intermediate1.mpg &lt; /dev/null &amp;
493
+ ffmpeg -i input2.avi -qscale:v 1 -y intermediate2.mpg &lt; /dev/null &amp;
494
+ cat intermediate1.mpg intermediate2.mpg |\
495
+ ffmpeg -f mpeg -i - -c:v mpeg4 -c:a libmp3lame output.avi
496
+ </pre></div>
497
+
498
+ <a name="Concatenating-using-raw-audio-and-video"></a>
499
+ <h4 class="subsection">3.14.4 Concatenating using raw audio and video<span class="pull-right"><a class="anchor hidden-xs" href="#Concatenating-using-raw-audio-and-video" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Concatenating-using-raw-audio-and-video" aria-hidden="true">TOC</a></span></h4>
500
+
501
+ <p>Similarly, the yuv4mpegpipe format, and the raw video, raw audio codecs also
502
+ allow concatenation, and the transcoding step is almost lossless.
503
+ When using multiple yuv4mpegpipe(s), the first line needs to be discarded
504
+ from all but the first stream. This can be accomplished by piping through
505
+ <code class="code">tail</code> as seen below. Note that when piping through <code class="code">tail</code> you
506
+ must use command grouping, <code class="code">{ ;}</code>, to background properly.
507
+ </p>
508
+ <p>For example, let&rsquo;s say we want to concatenate two FLV files into an
509
+ output.flv file:
510
+ </p>
511
+ <div class="example">
512
+ <pre class="example-preformatted">mkfifo temp1.a
513
+ mkfifo temp1.v
514
+ mkfifo temp2.a
515
+ mkfifo temp2.v
516
+ mkfifo all.a
517
+ mkfifo all.v
518
+ ffmpeg -i input1.flv -vn -f u16le -c:a pcm_s16le -ac 2 -ar 44100 - &gt; temp1.a &lt; /dev/null &amp;
519
+ ffmpeg -i input2.flv -vn -f u16le -c:a pcm_s16le -ac 2 -ar 44100 - &gt; temp2.a &lt; /dev/null &amp;
520
+ ffmpeg -i input1.flv -an -f yuv4mpegpipe - &gt; temp1.v &lt; /dev/null &amp;
521
+ { ffmpeg -i input2.flv -an -f yuv4mpegpipe - &lt; /dev/null | tail -n +2 &gt; temp2.v ; } &amp;
522
+ cat temp1.a temp2.a &gt; all.a &amp;
523
+ cat temp1.v temp2.v &gt; all.v &amp;
524
+ ffmpeg -f u16le -c:a pcm_s16le -ac 2 -ar 44100 -i all.a \
525
+ -f yuv4mpegpipe -i all.v \
526
+ -y output.flv
527
+ rm temp[12].[av] all.[av]
528
+ </pre></div>
529
+
530
+ <a name="Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e"></a>
531
+ <h3 class="section">3.15 Using <samp class="option">-f lavfi</samp>, audio becomes mono for no apparent reason.<span class="pull-right"><a class="anchor hidden-xs" href="#Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e" aria-hidden="true">TOC</a></span></h3>
532
+
533
+ <p>Use <samp class="option">-dumpgraph -</samp> to find out exactly where the channel layout is
534
+ lost.
535
+ </p>
536
+ <p>Most likely, it is through <code class="code">auto-inserted aresample</code>. Try to understand
537
+ why the converting filter was needed at that place.
538
+ </p>
539
+ <p>Just before the output is a likely place, as <samp class="option">-f lavfi</samp> currently
540
+ only support packed S16.
541
+ </p>
542
+ <p>Then insert the correct <code class="code">aformat</code> explicitly in the filtergraph,
543
+ specifying the exact format.
544
+ </p>
545
+ <div class="example">
546
+ <pre class="example-preformatted">aformat=sample_fmts=s16:channel_layouts=stereo
547
+ </pre></div>
548
+
549
+ <a name="Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f"></a>
550
+ <h3 class="section">3.16 Why does FFmpeg not see the subtitles in my VOB file?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f" aria-hidden="true">TOC</a></span></h3>
551
+
552
+ <p>VOB and a few other formats do not have a global header that describes
553
+ everything present in the file. Instead, applications are supposed to scan
554
+ the file to see what it contains. Since VOB files are frequently large, only
555
+ the beginning is scanned. If the subtitles happen only later in the file,
556
+ they will not be initially detected.
557
+ </p>
558
+ <p>Some applications, including the <code class="code">ffmpeg</code> command-line tool, can only
559
+ work with streams that were detected during the initial scan; streams that
560
+ are detected later are ignored.
561
+ </p>
562
+ <p>The size of the initial scan is controlled by two options: <code class="code">probesize</code>
563
+ (default ~5&nbsp;Mo) and <code class="code">analyzeduration</code> (default 5,000,000&nbsp;µs = 5&nbsp;s). For
564
+ the subtitle stream to be detected, both values must be large enough.
565
+ </p>
566
+ <a name="Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f"></a>
567
+ <h3 class="section">3.17 Why was the <code class="command">ffmpeg</code> <samp class="option">-sameq</samp> option removed? What to use instead?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f" aria-hidden="true">TOC</a></span></h3>
568
+
569
+ <p>The <samp class="option">-sameq</samp> option meant &quot;same quantizer&quot;, and made sense only in a
570
+ very limited set of cases. Unfortunately, a lot of people mistook it for
571
+ &quot;same quality&quot; and used it in places where it did not make sense: it had
572
+ roughly the expected visible effect, but achieved it in a very inefficient
573
+ way.
574
+ </p>
575
+ <p>Each encoder has its own set of options to set the quality-vs-size balance,
576
+ use the options for the encoder you are using to set the quality level to a
577
+ point acceptable for your tastes. The most common options to do that are
578
+ <samp class="option">-qscale</samp> and <samp class="option">-qmax</samp>, but you should peruse the documentation
579
+ of the encoder you chose.
580
+ </p>
581
+ <a name="I-have-a-stretched-video_002c-why-does-scaling-not-fix-it_003f"></a>
582
+ <h3 class="section">3.18 I have a stretched video, why does scaling not fix it?<span class="pull-right"><a class="anchor hidden-xs" href="#I-have-a-stretched-video_002c-why-does-scaling-not-fix-it_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-I-have-a-stretched-video_002c-why-does-scaling-not-fix-it_003f" aria-hidden="true">TOC</a></span></h3>
583
+
584
+ <p>A lot of video codecs and formats can store the <em class="emph">aspect ratio</em> of the
585
+ video: this is the ratio between the width and the height of either the full
586
+ image (DAR, display aspect ratio) or individual pixels (SAR, sample aspect
587
+ ratio). For example, EGA screens at resolution 640×350 had 4:3 DAR and 35:48
588
+ SAR.
589
+ </p>
590
+ <p>Most still image processing work with square pixels, i.e. 1:1 SAR, but a lot
591
+ of video standards, especially from the analogic-numeric transition era, use
592
+ non-square pixels.
593
+ </p>
594
+ <p>Most processing filters in FFmpeg handle the aspect ratio to avoid
595
+ stretching the image: cropping adjusts the DAR to keep the SAR constant,
596
+ scaling adjusts the SAR to keep the DAR constant.
597
+ </p>
598
+ <p>If you want to stretch, or “unstretch”, the image, you need to override the
599
+ information with the
600
+ <a class="url" href="ffmpeg-filters.html#setdar_002c-setsar"><code class="code">setdar or setsar filters</code></a>.
601
+ </p>
602
+ <p>Do not forget to examine carefully the original video to check whether the
603
+ stretching comes from the image or from the aspect ratio information.
604
+ </p>
605
+ <p>For example, to fix a badly encoded EGA capture, use the following commands,
606
+ either the first one to upscale to square pixels or the second one to set
607
+ the correct aspect ratio or the third one to avoid transcoding (may not work
608
+ depending on the format / codec / player / phase of the moon):
609
+ </p>
610
+ <div class="example">
611
+ <pre class="example-preformatted">ffmpeg -i ega_screen.nut -vf scale=640:480,setsar=1 ega_screen_scaled.nut
612
+ ffmpeg -i ega_screen.nut -vf setdar=4/3 ega_screen_anamorphic.nut
613
+ ffmpeg -i ega_screen.nut -aspect 4/3 -c copy ega_screen_overridden.nut
614
+ </pre></div>
615
+
616
+ <a class="anchor" id="background-task"></a><a name="How-do-I-run-ffmpeg-as-a-background-task_003f"></a>
617
+ <h3 class="section">3.19 How do I run ffmpeg as a background task?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-run-ffmpeg-as-a-background-task_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-run-ffmpeg-as-a-background-task_003f" aria-hidden="true">TOC</a></span></h3>
618
+
619
+ <p>ffmpeg normally checks the console input, for entries like &quot;q&quot; to stop
620
+ and &quot;?&quot; to give help, while performing operations. ffmpeg does not have a way of
621
+ detecting when it is running as a background task.
622
+ When it checks the console input, that can cause the process running ffmpeg
623
+ in the background to suspend.
624
+ </p>
625
+ <p>To prevent those input checks, allowing ffmpeg to run as a background task,
626
+ use the <a class="url" href="ffmpeg.html#stdin-option"><code class="code">-nostdin</code> option</a>
627
+ in the ffmpeg invocation. This is effective whether you run ffmpeg in a shell
628
+ or invoke ffmpeg in its own process via an operating system API.
629
+ </p>
630
+ <p>As an alternative, when you are running ffmpeg in a shell, you can redirect
631
+ standard input to <code class="code">/dev/null</code> (on Linux and macOS)
632
+ or <code class="code">NUL</code> (on Windows). You can do this redirect either
633
+ on the ffmpeg invocation, or from a shell script which calls ffmpeg.
634
+ </p>
635
+ <p>For example:
636
+ </p>
637
+ <div class="example">
638
+ <pre class="example-preformatted">ffmpeg -nostdin -i INPUT OUTPUT
639
+ </pre></div>
640
+
641
+ <p>or (on Linux, macOS, and other UNIX-like shells):
642
+ </p>
643
+ <div class="example">
644
+ <pre class="example-preformatted">ffmpeg -i INPUT OUTPUT &lt;/dev/null
645
+ </pre></div>
646
+
647
+ <p>or (on Windows):
648
+ </p>
649
+ <div class="example">
650
+ <pre class="example-preformatted">ffmpeg -i INPUT OUTPUT &lt;NUL
651
+ </pre></div>
652
+
653
+ <a name="How-do-I-prevent-ffmpeg-from-suspending-with-a-message-like-suspended-_0028tty-output_0029_003f"></a>
654
+ <h3 class="section">3.20 How do I prevent ffmpeg from suspending with a message like <em class="emph">suspended (tty output)</em>?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-prevent-ffmpeg-from-suspending-with-a-message-like-suspended-_0028tty-output_0029_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-prevent-ffmpeg-from-suspending-with-a-message-like-suspended-_0028tty-output_0029_003f" aria-hidden="true">TOC</a></span></h3>
655
+
656
+ <p>If you run ffmpeg in the background, you may find that its process suspends.
657
+ There may be a message like <em class="emph">suspended (tty output)</em>. The question is how
658
+ to prevent the process from being suspended.
659
+ </p>
660
+ <p>For example:
661
+ </p>
662
+ <div class="example">
663
+ <pre class="example-preformatted">% ffmpeg -i INPUT OUTPUT &amp;&gt; ~/tmp/log.txt &amp;
664
+ [1] 93352
665
+ %
666
+ [1] + suspended (tty output) ffmpeg -i INPUT OUTPUT &amp;&gt;
667
+ </pre></div>
668
+
669
+ <p>The message &quot;tty output&quot; notwithstanding, the problem here is that
670
+ ffmpeg normally checks the console input when it runs. The operating system
671
+ detects this, and suspends the process until you can bring it to the
672
+ foreground and attend to it.
673
+ </p>
674
+ <p>The solution is to use the right techniques to tell ffmpeg not to consult
675
+ console input. You can use the
676
+ <a class="url" href="ffmpeg.html#stdin-option"><code class="code">-nostdin</code> option</a>,
677
+ or redirect standard input with <code class="code">&lt; /dev/null</code>.
678
+ See FAQ
679
+ <a class="ref" href="#background-task"><em class="emph">How do I run ffmpeg as a background task?</em></a>
680
+ for details.
681
+ </p>
682
+ <a name="Development"></a>
683
+ <h2 class="chapter">4 Development<span class="pull-right"><a class="anchor hidden-xs" href="#Development" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Development" aria-hidden="true">TOC</a></span></h2>
684
+
685
+ <a name="Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f"></a>
686
+ <h3 class="section">4.1 Are there examples illustrating how to use the FFmpeg libraries, particularly libavcodec and libavformat?<span class="pull-right"><a class="anchor hidden-xs" href="#Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f" aria-hidden="true">TOC</a></span></h3>
687
+
688
+ <p>Yes. Check the <samp class="file">doc/examples</samp> directory in the source
689
+ repository, also available online at:
690
+ <a class="url" href="https://github.com/FFmpeg/FFmpeg/tree/master/doc/examples">https://github.com/FFmpeg/FFmpeg/tree/master/doc/examples</a>.
691
+ </p>
692
+ <p>Examples are also installed by default, usually in
693
+ <code class="code">$PREFIX/share/ffmpeg/examples</code>.
694
+ </p>
695
+ <p>Also you may read the Developers Guide of the FFmpeg documentation. Alternatively,
696
+ examine the source code for one of the many open source projects that
697
+ already incorporate FFmpeg at (<a class="url" href="projects.html">projects.html</a>).
698
+ </p>
699
+ <a name="Can-you-support-my-C-compiler-XXX_003f"></a>
700
+ <h3 class="section">4.2 Can you support my C compiler XXX?<span class="pull-right"><a class="anchor hidden-xs" href="#Can-you-support-my-C-compiler-XXX_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Can-you-support-my-C-compiler-XXX_003f" aria-hidden="true">TOC</a></span></h3>
701
+
702
+ <p>It depends. If your compiler is C99-compliant, then patches to support
703
+ it are likely to be welcome if they do not pollute the source code
704
+ with <code class="code">#ifdef</code>s related to the compiler.
705
+ </p>
706
+ <a name="Is-Microsoft-Visual-C_002b_002b-supported_003f"></a>
707
+ <h3 class="section">4.3 Is Microsoft Visual C++ supported?<span class="pull-right"><a class="anchor hidden-xs" href="#Is-Microsoft-Visual-C_002b_002b-supported_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Is-Microsoft-Visual-C_002b_002b-supported_003f" aria-hidden="true">TOC</a></span></h3>
708
+
709
+ <p>Yes. Please see the <a class="uref" href="platform.html">Microsoft Visual C++</a>
710
+ section in the FFmpeg documentation.
711
+ </p>
712
+ <a name="Can-you-add-automake_002c-libtool-or-autoconf-support_003f"></a>
713
+ <h3 class="section">4.4 Can you add automake, libtool or autoconf support?<span class="pull-right"><a class="anchor hidden-xs" href="#Can-you-add-automake_002c-libtool-or-autoconf-support_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Can-you-add-automake_002c-libtool-or-autoconf-support_003f" aria-hidden="true">TOC</a></span></h3>
714
+
715
+ <p>No. These tools are too bloated and they complicate the build.
716
+ </p>
717
+ <a name="Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f"></a>
718
+ <h3 class="section">4.5 Why not rewrite FFmpeg in object-oriented C++?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f" aria-hidden="true">TOC</a></span></h3>
719
+
720
+ <p>FFmpeg is already organized in a highly modular manner and does not need to
721
+ be rewritten in a formal object language. Further, many of the developers
722
+ favor straight C; it works for them. For more arguments on this matter,
723
+ read <a class="uref" href="https://web.archive.org/web/20111004021423/http://kernel.org/pub/linux/docs/lkml/#s15">&quot;Programming Religion&quot;</a>.
724
+ </p>
725
+ <a name="Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f"></a>
726
+ <h3 class="section">4.6 Why are the ffmpeg programs devoid of debugging symbols?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f" aria-hidden="true">TOC</a></span></h3>
727
+
728
+ <p>The build process creates <code class="command">ffmpeg_g</code>, <code class="command">ffplay_g</code>, etc. which
729
+ contain full debug information. Those binaries are stripped to create
730
+ <code class="command">ffmpeg</code>, <code class="command">ffplay</code>, etc. If you need the debug information, use
731
+ the *_g versions.
732
+ </p>
733
+ <a name="I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f"></a>
734
+ <h3 class="section">4.7 I do not like the LGPL, can I contribute code under the GPL instead?<span class="pull-right"><a class="anchor hidden-xs" href="#I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f" aria-hidden="true">TOC</a></span></h3>
735
+
736
+ <p>Yes, as long as the code is optional and can easily and cleanly be placed
737
+ under #if CONFIG_GPL without breaking anything. So, for example, a new codec
738
+ or filter would be OK under GPL while a bug fix to LGPL code would not.
739
+ </p>
740
+ <a name="I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e"></a>
741
+ <h3 class="section">4.8 I&rsquo;m using FFmpeg from within my C application but the linker complains about missing symbols from the libraries themselves.<span class="pull-right"><a class="anchor hidden-xs" href="#I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e" aria-hidden="true">TOC</a></span></h3>
742
+
743
+ <p>FFmpeg builds static libraries by default. In static libraries, dependencies
744
+ are not handled. That has two consequences. First, you must specify the
745
+ libraries in dependency order: <code class="code">-lavdevice</code> must come before
746
+ <code class="code">-lavformat</code>, <code class="code">-lavutil</code> must come after everything else, etc.
747
+ Second, external libraries that are used in FFmpeg have to be specified too.
748
+ </p>
749
+ <p>An easy way to get the full list of required libraries in dependency order
750
+ is to use <code class="code">pkg-config</code>.
751
+ </p>
752
+ <div class="example">
753
+ <pre class="example-preformatted">c99 -o program program.c $(pkg-config --cflags --libs libavformat libavcodec)
754
+ </pre></div>
755
+
756
+ <p>See <samp class="file">doc/example/Makefile</samp> and <samp class="file">doc/example/pc-uninstalled</samp> for
757
+ more details.
758
+ </p>
759
+ <a name="I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e"></a>
760
+ <h3 class="section">4.9 I&rsquo;m using FFmpeg from within my C++ application but the linker complains about missing symbols which seem to be available.<span class="pull-right"><a class="anchor hidden-xs" href="#I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e" aria-hidden="true">TOC</a></span></h3>
761
+
762
+ <p>FFmpeg is a pure C project, so to use the libraries within your C++ application
763
+ you need to explicitly state that you are using a C library. You can do this by
764
+ encompassing your FFmpeg includes using <code class="code">extern &quot;C&quot;</code>.
765
+ </p>
766
+ <p>See <a class="url" href="http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3">http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3</a>
767
+ </p>
768
+ <a name="I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope"></a>
769
+ <h3 class="section">4.10 I&rsquo;m using libavutil from within my C++ application but the compiler complains about &rsquo;UINT64_C&rsquo; was not declared in this scope<span class="pull-right"><a class="anchor hidden-xs" href="#I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope" aria-hidden="true">TOC</a></span></h3>
770
+
771
+ <p>FFmpeg is a pure C project using C99 math features, in order to enable C++
772
+ to use them you have to append -D__STDC_CONSTANT_MACROS to your CXXFLAGS
773
+ </p>
774
+ <a name="I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f"></a>
775
+ <h3 class="section">4.11 I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?<span class="pull-right"><a class="anchor hidden-xs" href="#I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f" aria-hidden="true">TOC</a></span></h3>
776
+
777
+ <p>You have to create a custom AVIOContext using <code class="code">avio_alloc_context</code>,
778
+ see <samp class="file">libavformat/aviobuf.c</samp> in FFmpeg and <samp class="file">libmpdemux/demux_lavf.c</samp> in MPlayer or MPlayer2 sources.
779
+ </p>
780
+ <a name="Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f"></a>
781
+ <h3 class="section">4.12 Where is the documentation about ffv1, msmpeg4, asv1, 4xm?<span class="pull-right"><a class="anchor hidden-xs" href="#Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f" aria-hidden="true">TOC</a></span></h3>
782
+
783
+ <p>see <a class="url" href="https://www.ffmpeg.org/~michael/">https://www.ffmpeg.org/~michael/</a>
784
+ </p>
785
+ <a name="How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f"></a>
786
+ <h3 class="section">4.13 How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f" aria-hidden="true">TOC</a></span></h3>
787
+
788
+ <p>Even if peculiar since it is network oriented, RTP is a container like any
789
+ other. You have to <em class="emph">demux</em> RTP before feeding the payload to libavcodec.
790
+ In this specific case please look at RFC 4629 to see how it should be done.
791
+ </p>
792
+ <a name="AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e"></a>
793
+ <h3 class="section">4.14 AVStream.r_frame_rate is wrong, it is much larger than the frame rate.<span class="pull-right"><a class="anchor hidden-xs" href="#AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e" aria-hidden="true">TOC</a></span></h3>
794
+
795
+ <p><code class="code">r_frame_rate</code> is NOT the average frame rate, it is the smallest frame rate
796
+ that can accurately represent all timestamps. So no, it is not
797
+ wrong if it is larger than the average!
798
+ For example, if you have mixed 25 and 30 fps content, then <code class="code">r_frame_rate</code>
799
+ will be 150 (it is the least common multiple).
800
+ If you are looking for the average frame rate, see <code class="code">AVStream.avg_frame_rate</code>.
801
+ </p>
802
+ <a name="Why-is-make-fate-not-running-all-tests_003f"></a>
803
+ <h3 class="section">4.15 Why is <code class="code">make fate</code> not running all tests?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-is-make-fate-not-running-all-tests_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-is-make-fate-not-running-all-tests_003f" aria-hidden="true">TOC</a></span></h3>
804
+
805
+ <p>Make sure you have the fate-suite samples and the <code class="code">SAMPLES</code> Make variable
806
+ or <code class="code">FATE_SAMPLES</code> environment variable or the <code class="code">--samples</code>
807
+ <code class="command">configure</code> option is set to the right path.
808
+ </p>
809
+ <a name="Why-is-make-fate-not-finding-the-samples_003f"></a>
810
+ <h3 class="section">4.16 Why is <code class="code">make fate</code> not finding the samples?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-is-make-fate-not-finding-the-samples_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-is-make-fate-not-finding-the-samples_003f" aria-hidden="true">TOC</a></span></h3>
811
+
812
+ <p>Do you happen to have a <code class="code">~</code> character in the samples path to indicate a
813
+ home directory? The value is used in ways where the shell cannot expand it,
814
+ causing FATE to not find files. Just replace <code class="code">~</code> by the full path.
815
+ </p>
816
+ <p style="font-size: small;">
817
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
818
+ </p>
819
+ </div>
820
+ </body>
821
+ </html>
ffmpeg-master-latest-win64-gpl/doc/fate.html ADDED
@@ -0,0 +1,390 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ FFmpeg Automated Testing Environment
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ FFmpeg Automated Testing Environment
17
+ </h1>
18
+
19
+
20
+ <a name="Top"></a>
21
+ <a name="SEC_Top"></a>
22
+
23
+ <div class="element-contents" id="SEC_Contents">
24
+ <h2 class="contents-heading">Table of Contents</h2>
25
+
26
+ <div class="contents">
27
+
28
+ <ul class="toc-numbered-mark">
29
+ <li><a id="toc-Introduction" href="#Introduction">1 Introduction</a></li>
30
+ <li><a id="toc-Using-FATE-from-your-FFmpeg-source-directory" href="#Using-FATE-from-your-FFmpeg-source-directory">2 Using FATE from your FFmpeg source directory</a></li>
31
+ <li><a id="toc-Submitting-the-results-to-the-FFmpeg-result-aggregation-server" href="#Submitting-the-results-to-the-FFmpeg-result-aggregation-server">3 Submitting the results to the FFmpeg result aggregation server</a></li>
32
+ <li><a id="toc-Uploading-new-samples-to-the-fate-suite" href="#Uploading-new-samples-to-the-fate-suite">4 Uploading new samples to the fate suite</a></li>
33
+ <li><a id="toc-FATE-makefile-targets-and-variables" href="#FATE-makefile-targets-and-variables">5 FATE makefile targets and variables</a>
34
+ <ul class="toc-numbered-mark">
35
+ <li><a id="toc-Makefile-targets" href="#Makefile-targets">5.1 Makefile targets</a></li>
36
+ <li><a id="toc-Makefile-variables" href="#Makefile-variables">5.2 Makefile variables</a></li>
37
+ <li><a id="toc-Examples" href="#Examples">5.3 Examples</a></li>
38
+ </ul></li>
39
+ </ul>
40
+ </div>
41
+ </div>
42
+
43
+ <a name="Introduction"></a>
44
+ <h2 class="chapter">1 Introduction<span class="pull-right"><a class="anchor hidden-xs" href="#Introduction" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Introduction" aria-hidden="true">TOC</a></span></h2>
45
+
46
+ <p>FATE is an extended regression suite on the client-side and a means
47
+ for results aggregation and presentation on the server-side.
48
+ </p>
49
+ <p>The first part of this document explains how you can use FATE from
50
+ your FFmpeg source directory to test your ffmpeg binary. The second
51
+ part describes how you can run FATE to submit the results to FFmpeg&rsquo;s
52
+ FATE server.
53
+ </p>
54
+ <p>In any way you can have a look at the publicly viewable FATE results
55
+ by visiting this website:
56
+ </p>
57
+ <p><a class="url" href="http://fate.ffmpeg.org/">http://fate.ffmpeg.org/</a>
58
+ </p>
59
+ <p>This is especially recommended for all people contributing source
60
+ code to FFmpeg, as it can be seen if some test on some platform broke
61
+ with their recent contribution. This usually happens on the platforms
62
+ the developers could not test on.
63
+ </p>
64
+ <p>The second part of this document describes how you can run FATE to
65
+ submit your results to FFmpeg&rsquo;s FATE server. If you want to submit your
66
+ results be sure to check that your combination of CPU, OS and compiler
67
+ is not already listed on the above mentioned website.
68
+ </p>
69
+ <p>In the third part you can find a comprehensive listing of FATE makefile
70
+ targets and variables.
71
+ </p>
72
+
73
+ <a name="Using-FATE-from-your-FFmpeg-source-directory"></a>
74
+ <h2 class="chapter">2 Using FATE from your FFmpeg source directory<span class="pull-right"><a class="anchor hidden-xs" href="#Using-FATE-from-your-FFmpeg-source-directory" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Using-FATE-from-your-FFmpeg-source-directory" aria-hidden="true">TOC</a></span></h2>
75
+
76
+ <p>If you want to run FATE on your machine you need to have the samples
77
+ in place. You can get the samples via the build target fate-rsync.
78
+ Use this command from the top-level source directory:
79
+ </p>
80
+ <div class="example">
81
+ <pre class="example-preformatted">make fate-rsync SAMPLES=fate-suite/
82
+ make fate SAMPLES=fate-suite/
83
+ </pre></div>
84
+
85
+ <p>The above commands set the samples location by passing a makefile
86
+ variable via command line. It is also possible to set the samples
87
+ location at source configuration time by invoking configure with
88
+ <samp class="option">--samples=&lt;path to the samples directory&gt;</samp>. Afterwards you can
89
+ invoke the makefile targets without setting the <var class="var">SAMPLES</var> makefile
90
+ variable. This is illustrated by the following commands:
91
+ </p>
92
+ <div class="example">
93
+ <pre class="example-preformatted">./configure --samples=fate-suite/
94
+ make fate-rsync
95
+ make fate
96
+ </pre></div>
97
+
98
+ <p>Yet another way to tell FATE about the location of the sample
99
+ directory is by making sure the environment variable FATE_SAMPLES
100
+ contains the path to your samples directory. This can be achieved
101
+ by e.g. putting that variable in your shell profile or by setting
102
+ it in your interactive session.
103
+ </p>
104
+ <div class="example">
105
+ <pre class="example-preformatted">FATE_SAMPLES=fate-suite/ make fate
106
+ </pre></div>
107
+
108
+ <div class="info">
109
+ <p>Do not put a &rsquo;~&rsquo; character in the samples path to indicate a home
110
+ directory. Because of shell nuances, this will cause FATE to fail.
111
+ </p></div>
112
+ <p>Beware that some assertions are disabled by default, so mind setting
113
+ <samp class="option">--assert-level=&lt;level&gt;</samp> at configuration time, e.g. when seeking
114
+ the highest possible test coverage:
115
+ </p><div class="example">
116
+ <pre class="example-preformatted">./configure --assert-level=2
117
+ </pre></div>
118
+ <p>Note that raising the assert level could have a performance impact.
119
+ </p>
120
+ <p>To get the complete list of tests, run the command:
121
+ </p><div class="example">
122
+ <pre class="example-preformatted">make fate-list
123
+ </pre></div>
124
+
125
+ <p>You can specify a subset of tests to run by specifying the
126
+ corresponding elements from the list with the <code class="code">fate-</code> prefix,
127
+ e.g. as in:
128
+ </p><div class="example">
129
+ <pre class="example-preformatted">make fate-ffprobe_compact fate-ffprobe_xml
130
+ </pre></div>
131
+
132
+ <p>This makes it easier to run a few tests in case of failure without
133
+ running the complete test suite.
134
+ </p>
135
+ <p>To use a custom wrapper to run the test, pass <samp class="option">--target-exec</samp> to
136
+ <code class="command">configure</code> or set the <var class="var">TARGET_EXEC</var> Make variable.
137
+ </p>
138
+
139
+ <a name="Submitting-the-results-to-the-FFmpeg-result-aggregation-server"></a>
140
+ <h2 class="chapter">3 Submitting the results to the FFmpeg result aggregation server<span class="pull-right"><a class="anchor hidden-xs" href="#Submitting-the-results-to-the-FFmpeg-result-aggregation-server" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Submitting-the-results-to-the-FFmpeg-result-aggregation-server" aria-hidden="true">TOC</a></span></h2>
141
+
142
+ <p>To submit your results to the server you should run fate through the
143
+ shell script <samp class="file">tests/fate.sh</samp> from the FFmpeg sources. This script needs
144
+ to be invoked with a configuration file as its first argument.
145
+ </p>
146
+ <div class="example">
147
+ <pre class="example-preformatted">tests/fate.sh /path/to/fate_config
148
+ </pre></div>
149
+
150
+ <p>A configuration file template with comments describing the individual
151
+ configuration variables can be found at <samp class="file">doc/fate_config.sh.template</samp>.
152
+ </p>
153
+ <p>The mentioned configuration template is also available here:
154
+ </p><pre class="verbatim">slot= # some unique identifier
155
+ repo=https://git.ffmpeg.org/ffmpeg.git # the source repository
156
+ #branch=release/2.6 # the branch to test
157
+ samples= # path to samples directory
158
+ workdir= # directory in which to do all the work
159
+ #fate_recv=&quot;ssh -T fate@fate.ffmpeg.org&quot; # command to submit report
160
+ comment= # optional description
161
+ build_only= # set to &quot;yes&quot; for a compile-only instance that skips tests
162
+ ignore_tests=
163
+
164
+ # the following are optional and map to configure options
165
+ arch=
166
+ cpu=
167
+ cross_prefix=
168
+ as=
169
+ cc=
170
+ ld=
171
+ target_os=
172
+ sysroot=
173
+ target_exec=
174
+ target_path=
175
+ target_samples=
176
+ extra_cflags=
177
+ extra_ldflags=
178
+ extra_libs=
179
+ extra_conf= # extra configure options not covered above
180
+
181
+ #make= # name of GNU make if not 'make'
182
+ makeopts= # extra options passed to 'make'
183
+ #makeopts_fate= # extra options passed to 'make' when running tests,
184
+ # defaulting to makeopts above if this is not set
185
+ #tar= # command to create a tar archive from its arguments on stdout,
186
+ # defaults to 'tar c'
187
+ #fate_targets= # targets to make when running fate; defaults to &quot;fate&quot;,
188
+ # can be set to run a subset of tests, e.g. &quot;fate-checkasm&quot;.
189
+
190
+ #fate_environments= # a list of names of configurations to run tests for;
191
+ # each round is run with variables from ${${name}_env} set.
192
+
193
+ # One example of using fate_environments:
194
+
195
+ # target_exec=&quot;qemu-aarch64-static&quot;
196
+ # fate_targets=&quot;fate-checkasm fate-cpu&quot;
197
+ # fate_environments=&quot;sve128 sve256&quot;
198
+ # sve128_env=&quot;QEMU_CPU=max,sve128=on&quot;
199
+ # sve256_env=&quot;QEMU_CPU=max,sve256=on&quot;
200
+
201
+ # The variables set by fate_environments can also be used explicitly
202
+ # by target_exec, e.g. like this:
203
+
204
+ # target_exec=&quot;qemu-aarch64-static -cpu \$(MY_CPU)&quot;
205
+ # fate_targets=&quot;fate-checkasm fate-cpu&quot;
206
+ # fate_environments=&quot;sve128 sve256&quot;
207
+ # sve128_env=&quot;MY_CPU=max,sve128=on&quot;
208
+ # sve256_env=&quot;MY_CPU=max,sve256=on&quot;
209
+ </pre>
210
+ <p>Create a configuration that suits your needs, based on the configuration
211
+ template. The <code class="env">slot</code> configuration variable can be any string that is not
212
+ yet used, but it is suggested that you name it adhering to the following
213
+ pattern &lsquo;<samp class="samp"><var class="var">arch</var>-<var class="var">os</var>-<var class="var">compiler</var>-<var class="var">compiler version</var></samp>&rsquo;. The
214
+ configuration file itself will be sourced in a shell script, therefore all
215
+ shell features may be used. This enables you to setup the environment as you
216
+ need it for your build.
217
+ </p>
218
+ <p>For your first test runs the <code class="env">fate_recv</code> variable should be empty or
219
+ commented out. This will run everything as normal except that it will omit
220
+ the submission of the results to the server. The following files should be
221
+ present in $workdir as specified in the configuration file:
222
+ </p>
223
+ <ul class="itemize mark-bullet">
224
+ <li>configure.log
225
+ </li><li>compile.log
226
+ </li><li>test.log
227
+ </li><li>report
228
+ </li><li>version
229
+ </li></ul>
230
+
231
+ <p>When you have everything working properly you can create an SSH key pair
232
+ and send the public key to the FATE server administrator who can be contacted
233
+ at the email address <a class="email" href="mailto:fate-admin@ffmpeg.org">fate-admin@ffmpeg.org</a>.
234
+ </p>
235
+ <p>Configure your SSH client to use public key authentication with that key
236
+ when connecting to the FATE server. Also do not forget to check the identity
237
+ of the server and to accept its host key. This can usually be achieved by
238
+ running your SSH client manually and killing it after you accepted the key.
239
+ The FATE server&rsquo;s fingerprint is:
240
+ </p>
241
+ <dl class="table">
242
+ <dt>&lsquo;<samp class="samp">RSA</samp>&rsquo;</dt>
243
+ <dd><p>d3:f1:83:97:a4:75:2b:a6:fb:d6:e8:aa:81:93:97:51
244
+ </p></dd>
245
+ <dt>&lsquo;<samp class="samp">ECDSA</samp>&rsquo;</dt>
246
+ <dd><p>76:9f:68:32:04:1e:d5:d4:ec:47:3f:dc:fc:18:17:86
247
+ </p></dd>
248
+ </dl>
249
+
250
+ <p>If you have problems connecting to the FATE server, it may help to try out
251
+ the <code class="command">ssh</code> command with one or more <samp class="option">-v</samp> options. You should
252
+ get detailed output concerning your SSH configuration and the authentication
253
+ process.
254
+ </p>
255
+ <p>The only thing left is to automate the execution of the fate.sh script and
256
+ the synchronisation of the samples directory.
257
+ </p>
258
+ <a name="Uploading-new-samples-to-the-fate-suite"></a>
259
+ <h2 class="chapter">4 Uploading new samples to the fate suite<span class="pull-right"><a class="anchor hidden-xs" href="#Uploading-new-samples-to-the-fate-suite" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Uploading-new-samples-to-the-fate-suite" aria-hidden="true">TOC</a></span></h2>
260
+
261
+ <p>If you need a sample uploaded send a mail to samples-request.
262
+ </p>
263
+ <p>This is for developers who have an account on the fate suite server.
264
+ If you upload new samples, please make sure they are as small as possible,
265
+ space on each client, network bandwidth and so on benefit from smaller test cases.
266
+ Also keep in mind older checkouts use existing sample files, that means in
267
+ practice generally do not replace, remove or overwrite files as it likely would
268
+ break older checkouts or releases.
269
+ Also all needed samples for a commit should be uploaded, ideally 24
270
+ hours, before the push.
271
+ If you need an account for frequently uploading samples or you wish to help
272
+ others by doing that send a mail to ffmpeg-devel.
273
+ </p>
274
+ <div class="example">
275
+ <pre class="example-preformatted">#First update your local samples copy:
276
+ rsync -vauL --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X fate-suite.ffmpeg.org:/home/samples/fate-suite/ ~/fate-suite
277
+
278
+ #Then do a dry run checking what would be uploaded:
279
+ rsync -vanL --no-g --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X ~/fate-suite/ fate-suite.ffmpeg.org:/home/samples/fate-suite
280
+
281
+ #Upload the files:
282
+ rsync -vaL --no-g --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X ~/fate-suite/ fate-suite.ffmpeg.org:/home/samples/fate-suite
283
+ </pre></div>
284
+
285
+
286
+ <a name="FATE-makefile-targets-and-variables"></a>
287
+ <h2 class="chapter">5 FATE makefile targets and variables<span class="pull-right"><a class="anchor hidden-xs" href="#FATE-makefile-targets-and-variables" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-FATE-makefile-targets-and-variables" aria-hidden="true">TOC</a></span></h2>
288
+
289
+ <a name="Makefile-targets"></a>
290
+ <h3 class="section">5.1 Makefile targets<span class="pull-right"><a class="anchor hidden-xs" href="#Makefile-targets" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Makefile-targets" aria-hidden="true">TOC</a></span></h3>
291
+
292
+ <dl class="table">
293
+ <dt><samp class="option">fate-rsync</samp></dt>
294
+ <dd><p>Download/synchronize sample files to the configured samples directory.
295
+ </p>
296
+ </dd>
297
+ <dt><samp class="option">fate-list</samp></dt>
298
+ <dd><p>Will list all fate/regression test targets.
299
+ </p>
300
+ </dd>
301
+ <dt><samp class="option">fate-list-failing</samp></dt>
302
+ <dd><p>List the fate tests that failed the last time they were executed.
303
+ </p>
304
+ </dd>
305
+ <dt><samp class="option">fate-clear-reports</samp></dt>
306
+ <dd><p>Remove the test reports from previous test executions (getting rid of
307
+ potentially stale results from fate-list-failing).
308
+ </p>
309
+ </dd>
310
+ <dt><samp class="option">fate</samp></dt>
311
+ <dd><p>Run the FATE test suite (requires the fate-suite dataset).
312
+ </p></dd>
313
+ </dl>
314
+
315
+ <a name="Makefile-variables"></a>
316
+ <h3 class="section">5.2 Makefile variables<span class="pull-right"><a class="anchor hidden-xs" href="#Makefile-variables" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Makefile-variables" aria-hidden="true">TOC</a></span></h3>
317
+
318
+ <dl class="table">
319
+ <dt><code class="env">V</code></dt>
320
+ <dd><p>Verbosity level, can be set to 0, 1 or 2.
321
+ </p><ul class="itemize mark-bullet">
322
+ <li>0: show just the test arguments
323
+ </li><li>1: show just the command used in the test
324
+ </li><li>2: show everything
325
+ </li></ul>
326
+
327
+ </dd>
328
+ <dt><code class="env">SAMPLES</code></dt>
329
+ <dd><p>Specify or override the path to the FATE samples at make time, it has a
330
+ meaning only while running the regression tests.
331
+ </p>
332
+ </dd>
333
+ <dt><code class="env">THREADS</code></dt>
334
+ <dd><p>Specify how many threads to use while running regression tests, it is
335
+ quite useful to detect thread-related regressions.
336
+ </p>
337
+ <p>This variable may be set to the string &quot;random&quot;, optionally followed by a
338
+ number, like &quot;random99&quot;, This will cause each test to use a random number of
339
+ threads. If a number is specified, it is used as a maximum number of threads,
340
+ otherwise 16 is the maximum.
341
+ </p>
342
+ <p>In case a test fails, the thread count used for it will be written into the
343
+ errfile.
344
+ </p>
345
+ </dd>
346
+ <dt><code class="env">THREAD_TYPE</code></dt>
347
+ <dd><p>Specify which threading strategy test, either &lsquo;<samp class="samp">slice</samp>&rsquo; or &lsquo;<samp class="samp">frame</samp>&rsquo;,
348
+ by default &lsquo;<samp class="samp">slice+frame</samp>&rsquo;
349
+ </p>
350
+ </dd>
351
+ <dt><code class="env">CPUFLAGS</code></dt>
352
+ <dd><p>Specify CPU flags.
353
+ </p>
354
+ </dd>
355
+ <dt><code class="env">TARGET_EXEC</code></dt>
356
+ <dd><p>Specify or override the wrapper used to run the tests.
357
+ The <code class="env">TARGET_EXEC</code> option provides a way to run FATE wrapped in
358
+ <code class="command">valgrind</code>, <code class="command">qemu-user</code> or <code class="command">wine</code> or on remote targets
359
+ through <code class="command">ssh</code>.
360
+ </p>
361
+ </dd>
362
+ <dt><code class="env">GEN</code></dt>
363
+ <dd><p>Set to &lsquo;<samp class="samp">1</samp>&rsquo; to generate the missing or mismatched references.
364
+ </p>
365
+ </dd>
366
+ <dt><code class="env">HWACCEL</code></dt>
367
+ <dd><p>Specify which hardware acceleration to use while running regression tests,
368
+ by default &lsquo;<samp class="samp">none</samp>&rsquo; is used.
369
+ </p>
370
+ </dd>
371
+ <dt><code class="env">KEEP</code></dt>
372
+ <dd><p>Set to &lsquo;<samp class="samp">1</samp>&rsquo; to keep temp files generated by fate test(s) when test is successful.
373
+ Default is &lsquo;<samp class="samp">0</samp>&rsquo;, which removes these files. Files are always kept when a test
374
+ fails.
375
+ </p>
376
+ </dd>
377
+ </dl>
378
+
379
+ <a name="Examples"></a>
380
+ <h3 class="section">5.3 Examples<span class="pull-right"><a class="anchor hidden-xs" href="#Examples" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Examples" aria-hidden="true">TOC</a></span></h3>
381
+
382
+ <div class="example">
383
+ <pre class="example-preformatted">make V=1 SAMPLES=/var/fate/samples THREADS=2 CPUFLAGS=mmx fate
384
+ </pre></div>
385
+ <p style="font-size: small;">
386
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
387
+ </p>
388
+ </div>
389
+ </body>
390
+ </html>
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-all.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-bitstream-filters.html ADDED
@@ -0,0 +1,1290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ FFmpeg Bitstream Filters Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ FFmpeg Bitstream Filters Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-Bitstream-Filters" href="#Bitstream-Filters">2 Bitstream Filters</a>
30
+ <ul class="toc-numbered-mark">
31
+ <li><a id="toc-aac_005fadtstoasc" href="#aac_005fadtstoasc">2.1 aac_adtstoasc</a></li>
32
+ <li><a id="toc-av1_005fmetadata" href="#av1_005fmetadata">2.2 av1_metadata</a></li>
33
+ <li><a id="toc-chomp" href="#chomp">2.3 chomp</a></li>
34
+ <li><a id="toc-dca_005fcore" href="#dca_005fcore">2.4 dca_core</a></li>
35
+ <li><a id="toc-dovi_005frpu" href="#dovi_005frpu">2.5 dovi_rpu</a></li>
36
+ <li><a id="toc-dump_005fextra" href="#dump_005fextra">2.6 dump_extra</a></li>
37
+ <li><a id="toc-dv_005ferror_005fmarker" href="#dv_005ferror_005fmarker">2.7 dv_error_marker</a></li>
38
+ <li><a id="toc-eac3_005fcore" href="#eac3_005fcore">2.8 eac3_core</a></li>
39
+ <li><a id="toc-extract_005fextradata" href="#extract_005fextradata">2.9 extract_extradata</a></li>
40
+ <li><a id="toc-filter_005funits" href="#filter_005funits">2.10 filter_units</a></li>
41
+ <li><a id="toc-hapqa_005fextract" href="#hapqa_005fextract">2.11 hapqa_extract</a></li>
42
+ <li><a id="toc-h264_005fmetadata" href="#h264_005fmetadata">2.12 h264_metadata</a></li>
43
+ <li><a id="toc-h264_005fmp4toannexb" href="#h264_005fmp4toannexb">2.13 h264_mp4toannexb</a></li>
44
+ <li><a id="toc-h264_005fredundant_005fpps" href="#h264_005fredundant_005fpps">2.14 h264_redundant_pps</a></li>
45
+ <li><a id="toc-hevc_005fmetadata" href="#hevc_005fmetadata">2.15 hevc_metadata</a></li>
46
+ <li><a id="toc-hevc_005fmp4toannexb" href="#hevc_005fmp4toannexb">2.16 hevc_mp4toannexb</a></li>
47
+ <li><a id="toc-imxdump" href="#imxdump">2.17 imxdump</a></li>
48
+ <li><a id="toc-mjpeg2jpeg" href="#mjpeg2jpeg">2.18 mjpeg2jpeg</a></li>
49
+ <li><a id="toc-mjpegadump" href="#mjpegadump">2.19 mjpegadump</a></li>
50
+ <li><a id="toc-mov2textsub-1" href="#mov2textsub-1">2.20 mov2textsub</a></li>
51
+ <li><a id="toc-mpeg2_005fmetadata" href="#mpeg2_005fmetadata">2.21 mpeg2_metadata</a></li>
52
+ <li><a id="toc-mpeg4_005funpack_005fbframes" href="#mpeg4_005funpack_005fbframes">2.22 mpeg4_unpack_bframes</a></li>
53
+ <li><a id="toc-noise" href="#noise">2.23 noise</a>
54
+ <ul class="toc-numbered-mark">
55
+ <li><a id="toc-Examples" href="#Examples">2.23.1 Examples</a></li>
56
+ </ul></li>
57
+ <li><a id="toc-null" href="#null">2.24 null</a></li>
58
+ <li><a id="toc-pcm_005frechunk" href="#pcm_005frechunk">2.25 pcm_rechunk</a></li>
59
+ <li><a id="toc-pgs_005fframe_005fmerge" href="#pgs_005fframe_005fmerge">2.26 pgs_frame_merge</a></li>
60
+ <li><a id="toc-prores_005fmetadata" href="#prores_005fmetadata">2.27 prores_metadata</a></li>
61
+ <li><a id="toc-remove_005fextra" href="#remove_005fextra">2.28 remove_extra</a></li>
62
+ <li><a id="toc-setts" href="#setts">2.29 setts</a></li>
63
+ <li><a id="toc-showinfo" href="#showinfo">2.30 showinfo</a></li>
64
+ <li><a id="toc-text2movsub-1" href="#text2movsub-1">2.31 text2movsub</a></li>
65
+ <li><a id="toc-trace_005fheaders" href="#trace_005fheaders">2.32 trace_headers</a></li>
66
+ <li><a id="toc-truehd_005fcore" href="#truehd_005fcore">2.33 truehd_core</a></li>
67
+ <li><a id="toc-vp9_005fmetadata" href="#vp9_005fmetadata">2.34 vp9_metadata</a></li>
68
+ <li><a id="toc-vp9_005fsuperframe" href="#vp9_005fsuperframe">2.35 vp9_superframe</a></li>
69
+ <li><a id="toc-vp9_005fsuperframe_005fsplit" href="#vp9_005fsuperframe_005fsplit">2.36 vp9_superframe_split</a></li>
70
+ <li><a id="toc-vp9_005fraw_005freorder" href="#vp9_005fraw_005freorder">2.37 vp9_raw_reorder</a></li>
71
+ </ul></li>
72
+ <li><a id="toc-See-Also" href="#See-Also">3 See Also</a></li>
73
+ <li><a id="toc-Authors" href="#Authors">4 Authors</a></li>
74
+ </ul>
75
+ </div>
76
+ </div>
77
+
78
+ <a name="Description"></a>
79
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
80
+
81
+ <p>This document describes the bitstream filters provided by the
82
+ libavcodec library.
83
+ </p>
84
+ <p>A bitstream filter operates on the encoded stream data, and performs
85
+ bitstream level modifications without performing decoding.
86
+ </p>
87
+
88
+ <a name="Bitstream-Filters"></a>
89
+ <h2 class="chapter">2 Bitstream Filters<span class="pull-right"><a class="anchor hidden-xs" href="#Bitstream-Filters" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Bitstream-Filters" aria-hidden="true">TOC</a></span></h2>
90
+
91
+ <p>When you configure your FFmpeg build, all the supported bitstream
92
+ filters are enabled by default. You can list all available ones using
93
+ the configure option <code class="code">--list-bsfs</code>.
94
+ </p>
95
+ <p>You can disable all the bitstream filters using the configure option
96
+ <code class="code">--disable-bsfs</code>, and selectively enable any bitstream filter using
97
+ the option <code class="code">--enable-bsf=BSF</code>, or you can disable a particular
98
+ bitstream filter using the option <code class="code">--disable-bsf=BSF</code>.
99
+ </p>
100
+ <p>The option <code class="code">-bsfs</code> of the ff* tools will display the list of
101
+ all the supported bitstream filters included in your build.
102
+ </p>
103
+ <p>The ff* tools have a -bsf option applied per stream, taking a
104
+ comma-separated list of filters, whose parameters follow the filter
105
+ name after a &rsquo;=&rsquo;.
106
+ </p>
107
+ <div class="example">
108
+ <pre class="example-preformatted">ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
109
+ </pre></div>
110
+
111
+ <p>Below is a description of the currently available bitstream filters,
112
+ with their parameters, if any.
113
+ </p>
114
+ <a name="aac_005fadtstoasc"></a>
115
+ <h3 class="section">2.1 aac_adtstoasc<span class="pull-right"><a class="anchor hidden-xs" href="#aac_005fadtstoasc" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-aac_005fadtstoasc" aria-hidden="true">TOC</a></span></h3>
116
+
117
+ <p>Convert MPEG-2/4 AAC ADTS to an MPEG-4 Audio Specific Configuration
118
+ bitstream.
119
+ </p>
120
+ <p>This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
121
+ ADTS header and removes the ADTS header.
122
+ </p>
123
+ <p>This filter is required for example when copying an AAC stream from a
124
+ raw ADTS AAC or an MPEG-TS container to MP4A-LATM, to an FLV file, or
125
+ to MOV/MP4 files and related formats such as 3GP or M4A. Please note
126
+ that it is auto-inserted for MP4A-LATM and MOV/MP4 and related formats.
127
+ </p>
128
+ <a name="av1_005fmetadata"></a>
129
+ <h3 class="section">2.2 av1_metadata<span class="pull-right"><a class="anchor hidden-xs" href="#av1_005fmetadata" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-av1_005fmetadata" aria-hidden="true">TOC</a></span></h3>
130
+
131
+ <p>Modify metadata embedded in an AV1 stream.
132
+ </p>
133
+ <dl class="table">
134
+ <dt><samp class="option">td</samp></dt>
135
+ <dd><p>Insert or remove temporal delimiter OBUs in all temporal units of the
136
+ stream.
137
+ </p>
138
+ <dl class="table">
139
+ <dt>&lsquo;<samp class="samp">insert</samp>&rsquo;</dt>
140
+ <dd><p>Insert a TD at the beginning of every TU which does not already have one.
141
+ </p></dd>
142
+ <dt>&lsquo;<samp class="samp">remove</samp>&rsquo;</dt>
143
+ <dd><p>Remove the TD from the beginning of every TU which has one.
144
+ </p></dd>
145
+ </dl>
146
+
147
+ </dd>
148
+ <dt><samp class="option">color_primaries</samp></dt>
149
+ <dt><samp class="option">transfer_characteristics</samp></dt>
150
+ <dt><samp class="option">matrix_coefficients</samp></dt>
151
+ <dd><p>Set the color description fields in the stream (see AV1 section 6.4.2).
152
+ </p>
153
+ </dd>
154
+ <dt><samp class="option">color_range</samp></dt>
155
+ <dd><p>Set the color range in the stream (see AV1 section 6.4.2; note that
156
+ this cannot be set for streams using BT.709 primaries, sRGB transfer
157
+ characteristic and identity (RGB) matrix coefficients).
158
+ </p><dl class="table">
159
+ <dt>&lsquo;<samp class="samp">tv</samp>&rsquo;</dt>
160
+ <dd><p>Limited range.
161
+ </p></dd>
162
+ <dt>&lsquo;<samp class="samp">pc</samp>&rsquo;</dt>
163
+ <dd><p>Full range.
164
+ </p></dd>
165
+ </dl>
166
+
167
+ </dd>
168
+ <dt><samp class="option">chroma_sample_position</samp></dt>
169
+ <dd><p>Set the chroma sample location in the stream (see AV1 section 6.4.2).
170
+ This can only be set for 4:2:0 streams.
171
+ </p>
172
+ <dl class="table">
173
+ <dt>&lsquo;<samp class="samp">vertical</samp>&rsquo;</dt>
174
+ <dd><p>Left position (matching the default in MPEG-2 and H.264).
175
+ </p></dd>
176
+ <dt>&lsquo;<samp class="samp">colocated</samp>&rsquo;</dt>
177
+ <dd><p>Top-left position.
178
+ </p></dd>
179
+ </dl>
180
+
181
+ </dd>
182
+ <dt><samp class="option">tick_rate</samp></dt>
183
+ <dd><p>Set the tick rate (<em class="emph">time_scale / num_units_in_display_tick</em>) in
184
+ the timing info in the sequence header.
185
+ </p></dd>
186
+ <dt><samp class="option">num_ticks_per_picture</samp></dt>
187
+ <dd><p>Set the number of ticks in each picture, to indicate that the stream
188
+ has a fixed framerate. Ignored if <samp class="option">tick_rate</samp> is not also set.
189
+ </p>
190
+ </dd>
191
+ <dt><samp class="option">delete_padding</samp></dt>
192
+ <dd><p>Deletes Padding OBUs.
193
+ </p>
194
+ </dd>
195
+ </dl>
196
+
197
+ <a name="chomp"></a>
198
+ <h3 class="section">2.3 chomp<span class="pull-right"><a class="anchor hidden-xs" href="#chomp" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-chomp" aria-hidden="true">TOC</a></span></h3>
199
+
200
+ <p>Remove zero padding at the end of a packet.
201
+ </p>
202
+ <a name="dca_005fcore"></a>
203
+ <h3 class="section">2.4 dca_core<span class="pull-right"><a class="anchor hidden-xs" href="#dca_005fcore" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-dca_005fcore" aria-hidden="true">TOC</a></span></h3>
204
+
205
+ <p>Extract the core from a DCA/DTS stream, dropping extensions such as
206
+ DTS-HD.
207
+ </p>
208
+ <a name="dovi_005frpu"></a>
209
+ <h3 class="section">2.5 dovi_rpu<span class="pull-right"><a class="anchor hidden-xs" href="#dovi_005frpu" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-dovi_005frpu" aria-hidden="true">TOC</a></span></h3>
210
+
211
+ <p>Manipulate Dolby Vision metadata in a HEVC/AV1 bitstream, optionally enabling
212
+ metadata compression.
213
+ </p>
214
+ <dl class="table">
215
+ <dt><samp class="option">strip</samp></dt>
216
+ <dd><p>If enabled, strip all Dolby Vision metadata (configuration record + RPU data
217
+ blocks) from the stream.
218
+ </p></dd>
219
+ <dt><samp class="option">compression</samp></dt>
220
+ <dd><p>Which compression level to enable.
221
+ </p><dl class="table">
222
+ <dt>&lsquo;<samp class="samp">none</samp>&rsquo;</dt>
223
+ <dd><p>No metadata compression.
224
+ </p></dd>
225
+ <dt>&lsquo;<samp class="samp">limited</samp>&rsquo;</dt>
226
+ <dd><p>Limited metadata compression scheme. Should be compatible with most devices.
227
+ This is the default.
228
+ </p></dd>
229
+ <dt>&lsquo;<samp class="samp">extended</samp>&rsquo;</dt>
230
+ <dd><p>Extended metadata compression. Devices are not required to support this. Note
231
+ that this level currently behaves the same as &lsquo;<samp class="samp">limited</samp>&rsquo; in libavcodec.
232
+ </p></dd>
233
+ </dl>
234
+ </dd>
235
+ </dl>
236
+
237
+ <a name="dump_005fextra"></a>
238
+ <h3 class="section">2.6 dump_extra<span class="pull-right"><a class="anchor hidden-xs" href="#dump_005fextra" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-dump_005fextra" aria-hidden="true">TOC</a></span></h3>
239
+
240
+ <p>Add extradata to the beginning of the filtered packets except when
241
+ said packets already exactly begin with the extradata that is intended
242
+ to be added.
243
+ </p>
244
+ <dl class="table">
245
+ <dt><samp class="option">freq</samp></dt>
246
+ <dd><p>The additional argument specifies which packets should be filtered.
247
+ It accepts the values:
248
+ </p><dl class="table">
249
+ <dt>&lsquo;<samp class="samp">k</samp>&rsquo;</dt>
250
+ <dt>&lsquo;<samp class="samp">keyframe</samp>&rsquo;</dt>
251
+ <dd><p>add extradata to all key packets
252
+ </p>
253
+ </dd>
254
+ <dt>&lsquo;<samp class="samp">e</samp>&rsquo;</dt>
255
+ <dt>&lsquo;<samp class="samp">all</samp>&rsquo;</dt>
256
+ <dd><p>add extradata to all packets
257
+ </p></dd>
258
+ </dl>
259
+ </dd>
260
+ </dl>
261
+
262
+ <p>If not specified it is assumed &lsquo;<samp class="samp">k</samp>&rsquo;.
263
+ </p>
264
+ <p>For example the following <code class="command">ffmpeg</code> command forces a global
265
+ header (thus disabling individual packet headers) in the H.264 packets
266
+ generated by the <code class="code">libx264</code> encoder, but corrects them by adding
267
+ the header stored in extradata to the key packets:
268
+ </p><div class="example">
269
+ <pre class="example-preformatted">ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
270
+ </pre></div>
271
+
272
+ <a name="dv_005ferror_005fmarker"></a>
273
+ <h3 class="section">2.7 dv_error_marker<span class="pull-right"><a class="anchor hidden-xs" href="#dv_005ferror_005fmarker" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-dv_005ferror_005fmarker" aria-hidden="true">TOC</a></span></h3>
274
+
275
+ <p>Blocks in DV which are marked as damaged are replaced by blocks of the specified color.
276
+ </p>
277
+ <dl class="table">
278
+ <dt><samp class="option">color</samp></dt>
279
+ <dd><p>The color to replace damaged blocks by
280
+ </p></dd>
281
+ <dt><samp class="option">sta</samp></dt>
282
+ <dd><p>A 16 bit mask which specifies which of the 16 possible error status values are
283
+ to be replaced by colored blocks. 0xFFFE is the default which replaces all non 0
284
+ error status values.
285
+ </p><dl class="table">
286
+ <dt>&lsquo;<samp class="samp">ok</samp>&rsquo;</dt>
287
+ <dd><p>No error, no concealment
288
+ </p></dd>
289
+ <dt>&lsquo;<samp class="samp">err</samp>&rsquo;</dt>
290
+ <dd><p>Error, No concealment
291
+ </p></dd>
292
+ <dt>&lsquo;<samp class="samp">res</samp>&rsquo;</dt>
293
+ <dd><p>Reserved
294
+ </p></dd>
295
+ <dt>&lsquo;<samp class="samp">notok</samp>&rsquo;</dt>
296
+ <dd><p>Error or concealment
297
+ </p></dd>
298
+ <dt>&lsquo;<samp class="samp">notres</samp>&rsquo;</dt>
299
+ <dd><p>Not reserved
300
+ </p></dd>
301
+ <dt>&lsquo;<samp class="samp">Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru</samp>&rsquo;</dt>
302
+ <dd><p>The specific error status code
303
+ </p></dd>
304
+ </dl>
305
+ <p>see page 44-46 or section 5.5 of
306
+ <a class="url" href="http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf">http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf</a>
307
+ </p>
308
+ </dd>
309
+ </dl>
310
+
311
+ <a name="eac3_005fcore"></a>
312
+ <h3 class="section">2.8 eac3_core<span class="pull-right"><a class="anchor hidden-xs" href="#eac3_005fcore" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-eac3_005fcore" aria-hidden="true">TOC</a></span></h3>
313
+
314
+ <p>Extract the core from a E-AC-3 stream, dropping extra channels.
315
+ </p>
316
+ <a name="extract_005fextradata"></a>
317
+ <h3 class="section">2.9 extract_extradata<span class="pull-right"><a class="anchor hidden-xs" href="#extract_005fextradata" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-extract_005fextradata" aria-hidden="true">TOC</a></span></h3>
318
+
319
+ <p>Extract the in-band extradata.
320
+ </p>
321
+ <p>Certain codecs allow the long-term headers (e.g. MPEG-2 sequence headers,
322
+ or H.264/HEVC (VPS/)SPS/PPS) to be transmitted either &quot;in-band&quot; (i.e. as a part
323
+ of the bitstream containing the coded frames) or &quot;out of band&quot; (e.g. on the
324
+ container level). This latter form is called &quot;extradata&quot; in FFmpeg terminology.
325
+ </p>
326
+ <p>This bitstream filter detects the in-band headers and makes them available as
327
+ extradata.
328
+ </p>
329
+ <dl class="table">
330
+ <dt><samp class="option">remove</samp></dt>
331
+ <dd><p>When this option is enabled, the long-term headers are removed from the
332
+ bitstream after extraction.
333
+ </p></dd>
334
+ </dl>
335
+
336
+ <a name="filter_005funits"></a>
337
+ <h3 class="section">2.10 filter_units<span class="pull-right"><a class="anchor hidden-xs" href="#filter_005funits" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-filter_005funits" aria-hidden="true">TOC</a></span></h3>
338
+
339
+ <p>Remove units with types in or not in a given set from the stream.
340
+ </p>
341
+ <dl class="table">
342
+ <dt><samp class="option">pass_types</samp></dt>
343
+ <dd><p>List of unit types or ranges of unit types to pass through while removing
344
+ all others. This is specified as a &rsquo;|&rsquo;-separated list of unit type values
345
+ or ranges of values with &rsquo;-&rsquo;.
346
+ </p>
347
+ </dd>
348
+ <dt><samp class="option">remove_types</samp></dt>
349
+ <dd><p>Identical to <samp class="option">pass_types</samp>, except the units in the given set
350
+ removed and all others passed through.
351
+ </p></dd>
352
+ </dl>
353
+
354
+ <p>The types used by pass_types and remove_types correspond to NAL unit types
355
+ (nal_unit_type) in H.264, HEVC and H.266 (see Table 7-1 in the H.264
356
+ and HEVC specifications or Table 5 in the H.266 specification), to
357
+ marker values for JPEG (without 0xFF prefix) and to start codes without
358
+ start code prefix (i.e. the byte following the 0x000001) for MPEG-2.
359
+ For VP8 and VP9, every unit has type zero.
360
+ </p>
361
+ <p>Extradata is unchanged by this transformation, but note that if the stream
362
+ contains inline parameter sets then the output may be unusable if they are
363
+ removed.
364
+ </p>
365
+ <p>For example, to remove all non-VCL NAL units from an H.264 stream:
366
+ </p><div class="example">
367
+ <pre class="example-preformatted">ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
368
+ </pre></div>
369
+
370
+ <p>To remove all AUDs, SEI and filler from an H.265 stream:
371
+ </p><div class="example">
372
+ <pre class="example-preformatted">ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
373
+ </pre></div>
374
+
375
+ <p>To remove all user data from a MPEG-2 stream, including Closed Captions:
376
+ </p><div class="example">
377
+ <pre class="example-preformatted">ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT
378
+ </pre></div>
379
+
380
+ <p>To remove all SEI from a H264 stream, including Closed Captions:
381
+ </p><div class="example">
382
+ <pre class="example-preformatted">ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT
383
+ </pre></div>
384
+
385
+ <p>To remove all prefix and suffix SEI from a HEVC stream, including Closed Captions and dynamic HDR:
386
+ </p><div class="example">
387
+ <pre class="example-preformatted">ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|40' OUTPUT
388
+ </pre></div>
389
+
390
+ <a name="hapqa_005fextract"></a>
391
+ <h3 class="section">2.11 hapqa_extract<span class="pull-right"><a class="anchor hidden-xs" href="#hapqa_005fextract" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-hapqa_005fextract" aria-hidden="true">TOC</a></span></h3>
392
+
393
+ <p>Extract Rgb or Alpha part of an HAPQA file, without recompression, in order to create an HAPQ or an HAPAlphaOnly file.
394
+ </p>
395
+ <dl class="table">
396
+ <dt><samp class="option">texture</samp></dt>
397
+ <dd><p>Specifies the texture to keep.
398
+ </p>
399
+ <dl class="table">
400
+ <dt><samp class="option">color</samp></dt>
401
+ <dt><samp class="option">alpha</samp></dt>
402
+ </dl>
403
+
404
+ </dd>
405
+ </dl>
406
+
407
+ <p>Convert HAPQA to HAPQ
408
+ </p><div class="example">
409
+ <pre class="example-preformatted">ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder=&quot;HAPQ&quot; hapq_file.mov
410
+ </pre></div>
411
+
412
+ <p>Convert HAPQA to HAPAlphaOnly
413
+ </p><div class="example">
414
+ <pre class="example-preformatted">ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder=&quot;HAPAlpha Only&quot; hapalphaonly_file.mov
415
+ </pre></div>
416
+
417
+ <a name="h264_005fmetadata"></a>
418
+ <h3 class="section">2.12 h264_metadata<span class="pull-right"><a class="anchor hidden-xs" href="#h264_005fmetadata" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-h264_005fmetadata" aria-hidden="true">TOC</a></span></h3>
419
+
420
+ <p>Modify metadata embedded in an H.264 stream.
421
+ </p>
422
+ <dl class="table">
423
+ <dt><samp class="option">aud</samp></dt>
424
+ <dd><p>Insert or remove AUD NAL units in all access units of the stream.
425
+ </p>
426
+ <dl class="table">
427
+ <dt>&lsquo;<samp class="samp">pass</samp>&rsquo;</dt>
428
+ <dt>&lsquo;<samp class="samp">insert</samp>&rsquo;</dt>
429
+ <dt>&lsquo;<samp class="samp">remove</samp>&rsquo;</dt>
430
+ </dl>
431
+
432
+ <p>Default is pass.
433
+ </p>
434
+ </dd>
435
+ <dt><samp class="option">sample_aspect_ratio</samp></dt>
436
+ <dd><p>Set the sample aspect ratio of the stream in the VUI parameters.
437
+ See H.264 table E-1.
438
+ </p>
439
+ </dd>
440
+ <dt><samp class="option">overscan_appropriate_flag</samp></dt>
441
+ <dd><p>Set whether the stream is suitable for display using overscan
442
+ or not (see H.264 section E.2.1).
443
+ </p>
444
+ </dd>
445
+ <dt><samp class="option">video_format</samp></dt>
446
+ <dt><samp class="option">video_full_range_flag</samp></dt>
447
+ <dd><p>Set the video format in the stream (see H.264 section E.2.1 and
448
+ table E-2).
449
+ </p>
450
+ </dd>
451
+ <dt><samp class="option">colour_primaries</samp></dt>
452
+ <dt><samp class="option">transfer_characteristics</samp></dt>
453
+ <dt><samp class="option">matrix_coefficients</samp></dt>
454
+ <dd><p>Set the colour description in the stream (see H.264 section E.2.1
455
+ and tables E-3, E-4 and E-5).
456
+ </p>
457
+ </dd>
458
+ <dt><samp class="option">chroma_sample_loc_type</samp></dt>
459
+ <dd><p>Set the chroma sample location in the stream (see H.264 section
460
+ E.2.1 and figure E-1).
461
+ </p>
462
+ </dd>
463
+ <dt><samp class="option">tick_rate</samp></dt>
464
+ <dd><p>Set the tick rate (time_scale / num_units_in_tick) in the VUI
465
+ parameters. This is the smallest time unit representable in the
466
+ stream, and in many cases represents the field rate of the stream
467
+ (double the frame rate).
468
+ </p></dd>
469
+ <dt><samp class="option">fixed_frame_rate_flag</samp></dt>
470
+ <dd><p>Set whether the stream has fixed framerate - typically this indicates
471
+ that the framerate is exactly half the tick rate, but the exact
472
+ meaning is dependent on interlacing and the picture structure (see
473
+ H.264 section E.2.1 and table E-6).
474
+ </p></dd>
475
+ <dt><samp class="option">zero_new_constraint_set_flags</samp></dt>
476
+ <dd><p>Zero constraint_set4_flag and constraint_set5_flag in the SPS. These
477
+ bits were reserved in a previous version of the H.264 spec, and thus
478
+ some hardware decoders require these to be zero. The result of zeroing
479
+ this is still a valid bitstream.
480
+ </p>
481
+ </dd>
482
+ <dt><samp class="option">crop_left</samp></dt>
483
+ <dt><samp class="option">crop_right</samp></dt>
484
+ <dt><samp class="option">crop_top</samp></dt>
485
+ <dt><samp class="option">crop_bottom</samp></dt>
486
+ <dd><p>Set the frame cropping offsets in the SPS. These values will replace
487
+ the current ones if the stream is already cropped.
488
+ </p>
489
+ <p>These fields are set in pixels. Note that some sizes may not be
490
+ representable if the chroma is subsampled or the stream is interlaced
491
+ (see H.264 section 7.4.2.1.1).
492
+ </p>
493
+ </dd>
494
+ <dt><samp class="option">sei_user_data</samp></dt>
495
+ <dd><p>Insert a string as SEI unregistered user data. The argument must
496
+ be of the form <em class="emph">UUID+string</em>, where the UUID is as hex digits
497
+ possibly separated by hyphens, and the string can be anything.
498
+ </p>
499
+ <p>For example, &lsquo;<samp class="samp">086f3693-b7b3-4f2c-9653-21492feee5b8+hello</samp>&rsquo; will
500
+ insert the string &ldquo;hello&rdquo; associated with the given UUID.
501
+ </p>
502
+ </dd>
503
+ <dt><samp class="option">delete_filler</samp></dt>
504
+ <dd><p>Deletes both filler NAL units and filler SEI messages.
505
+ </p>
506
+ </dd>
507
+ <dt><samp class="option">display_orientation</samp></dt>
508
+ <dd><p>Insert, extract or remove Display orientation SEI messages.
509
+ See H.264 section D.1.27 and D.2.27 for syntax and semantics.
510
+ </p>
511
+ <dl class="table">
512
+ <dt>&lsquo;<samp class="samp">pass</samp>&rsquo;</dt>
513
+ <dt>&lsquo;<samp class="samp">insert</samp>&rsquo;</dt>
514
+ <dt>&lsquo;<samp class="samp">remove</samp>&rsquo;</dt>
515
+ <dt>&lsquo;<samp class="samp">extract</samp>&rsquo;</dt>
516
+ </dl>
517
+
518
+ <p>Default is pass.
519
+ </p>
520
+ <p>Insert mode works in conjunction with <code class="code">rotate</code> and <code class="code">flip</code> options.
521
+ Any pre-existing Display orientation messages will be removed in insert or remove mode.
522
+ Extract mode attaches the display matrix to the packet as side data.
523
+ </p>
524
+ </dd>
525
+ <dt><samp class="option">rotate</samp></dt>
526
+ <dd><p>Set rotation in display orientation SEI (anticlockwise angle in degrees).
527
+ Range is -360 to +360. Default is NaN.
528
+ </p>
529
+ </dd>
530
+ <dt><samp class="option">flip</samp></dt>
531
+ <dd><p>Set flip in display orientation SEI.
532
+ </p>
533
+ <dl class="table">
534
+ <dt>&lsquo;<samp class="samp">horizontal</samp>&rsquo;</dt>
535
+ <dt>&lsquo;<samp class="samp">vertical</samp>&rsquo;</dt>
536
+ </dl>
537
+
538
+ <p>Default is unset.
539
+ </p>
540
+ </dd>
541
+ <dt><samp class="option">level</samp></dt>
542
+ <dd><p>Set the level in the SPS. Refer to H.264 section A.3 and tables A-1
543
+ to A-5.
544
+ </p>
545
+ <p>The argument must be the name of a level (for example, &lsquo;<samp class="samp">4.2</samp>&rsquo;), a
546
+ level_idc value (for example, &lsquo;<samp class="samp">42</samp>&rsquo;), or the special name &lsquo;<samp class="samp">auto</samp>&rsquo;
547
+ indicating that the filter should attempt to guess the level from the
548
+ input stream properties.
549
+ </p>
550
+ </dd>
551
+ </dl>
552
+
553
+ <a name="h264_005fmp4toannexb"></a>
554
+ <h3 class="section">2.13 h264_mp4toannexb<span class="pull-right"><a class="anchor hidden-xs" href="#h264_005fmp4toannexb" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-h264_005fmp4toannexb" aria-hidden="true">TOC</a></span></h3>
555
+
556
+ <p>Convert an H.264 bitstream from length prefixed mode to start code
557
+ prefixed mode (as defined in the Annex B of the ITU-T H.264
558
+ specification).
559
+ </p>
560
+ <p>This is required by some streaming formats, typically the MPEG-2
561
+ transport stream format (muxer <code class="code">mpegts</code>).
562
+ </p>
563
+ <p>For example to remux an MP4 file containing an H.264 stream to mpegts
564
+ format with <code class="command">ffmpeg</code>, you can use the command:
565
+ </p>
566
+ <div class="example">
567
+ <pre class="example-preformatted">ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
568
+ </pre></div>
569
+
570
+ <p>Please note that this filter is auto-inserted for MPEG-TS (muxer
571
+ <code class="code">mpegts</code>) and raw H.264 (muxer <code class="code">h264</code>) output formats.
572
+ </p>
573
+ <a name="h264_005fredundant_005fpps"></a>
574
+ <h3 class="section">2.14 h264_redundant_pps<span class="pull-right"><a class="anchor hidden-xs" href="#h264_005fredundant_005fpps" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-h264_005fredundant_005fpps" aria-hidden="true">TOC</a></span></h3>
575
+
576
+ <p>This applies a specific fixup to some Blu-ray BDMV H264 streams
577
+ which contain redundant PPSs. The PPSs modify irrelevant parameters
578
+ of the stream, confusing other transformations which require
579
+ the correct extradata.
580
+ </p>
581
+ <p>The encoder used on these impacted streams adds extra PPSs throughout
582
+ the stream, varying the initial QP and whether weighted prediction
583
+ was enabled. This causes issues after copying the stream into
584
+ a global header container, as the starting PPS is not suitable
585
+ for the rest of the stream. One side effect, for example,
586
+ is seeking will return garbled output until a new PPS appears.
587
+ </p>
588
+ <p>This BSF removes the extra PPSs and rewrites the slice headers
589
+ such that the stream uses a single leading PPS in the global header,
590
+ which resolves the issue.
591
+ </p>
592
+ <a name="hevc_005fmetadata"></a>
593
+ <h3 class="section">2.15 hevc_metadata<span class="pull-right"><a class="anchor hidden-xs" href="#hevc_005fmetadata" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-hevc_005fmetadata" aria-hidden="true">TOC</a></span></h3>
594
+
595
+ <p>Modify metadata embedded in an HEVC stream.
596
+ </p>
597
+ <dl class="table">
598
+ <dt><samp class="option">aud</samp></dt>
599
+ <dd><p>Insert or remove AUD NAL units in all access units of the stream.
600
+ </p>
601
+ <dl class="table">
602
+ <dt>&lsquo;<samp class="samp">insert</samp>&rsquo;</dt>
603
+ <dt>&lsquo;<samp class="samp">remove</samp>&rsquo;</dt>
604
+ </dl>
605
+
606
+ </dd>
607
+ <dt><samp class="option">sample_aspect_ratio</samp></dt>
608
+ <dd><p>Set the sample aspect ratio in the stream in the VUI parameters.
609
+ </p>
610
+ </dd>
611
+ <dt><samp class="option">video_format</samp></dt>
612
+ <dt><samp class="option">video_full_range_flag</samp></dt>
613
+ <dd><p>Set the video format in the stream (see H.265 section E.3.1 and
614
+ table E.2).
615
+ </p>
616
+ </dd>
617
+ <dt><samp class="option">colour_primaries</samp></dt>
618
+ <dt><samp class="option">transfer_characteristics</samp></dt>
619
+ <dt><samp class="option">matrix_coefficients</samp></dt>
620
+ <dd><p>Set the colour description in the stream (see H.265 section E.3.1
621
+ and tables E.3, E.4 and E.5).
622
+ </p>
623
+ </dd>
624
+ <dt><samp class="option">chroma_sample_loc_type</samp></dt>
625
+ <dd><p>Set the chroma sample location in the stream (see H.265 section
626
+ E.3.1 and figure E.1).
627
+ </p>
628
+ </dd>
629
+ <dt><samp class="option">tick_rate</samp></dt>
630
+ <dd><p>Set the tick rate in the VPS and VUI parameters (time_scale /
631
+ num_units_in_tick). Combined with <samp class="option">num_ticks_poc_diff_one</samp>, this can
632
+ set a constant framerate in the stream. Note that it is likely to be
633
+ overridden by container parameters when the stream is in a container.
634
+ </p>
635
+ </dd>
636
+ <dt><samp class="option">num_ticks_poc_diff_one</samp></dt>
637
+ <dd><p>Set poc_proportional_to_timing_flag in VPS and VUI and use this value
638
+ to set num_ticks_poc_diff_one_minus1 (see H.265 sections 7.4.3.1 and
639
+ E.3.1). Ignored if <samp class="option">tick_rate</samp> is not also set.
640
+ </p>
641
+ </dd>
642
+ <dt><samp class="option">crop_left</samp></dt>
643
+ <dt><samp class="option">crop_right</samp></dt>
644
+ <dt><samp class="option">crop_top</samp></dt>
645
+ <dt><samp class="option">crop_bottom</samp></dt>
646
+ <dd><p>Set the conformance window cropping offsets in the SPS. These values
647
+ will replace the current ones if the stream is already cropped.
648
+ </p>
649
+ <p>These fields are set in pixels. Note that some sizes may not be
650
+ representable if the chroma is subsampled (H.265 section 7.4.3.2.1).
651
+ </p>
652
+ </dd>
653
+ <dt><samp class="option">width</samp></dt>
654
+ <dt><samp class="option">height</samp></dt>
655
+ <dd><p>Set width and height after crop.
656
+ </p>
657
+ </dd>
658
+ <dt><samp class="option">level</samp></dt>
659
+ <dd><p>Set the level in the VPS and SPS. See H.265 section A.4 and tables
660
+ A.6 and A.7.
661
+ </p>
662
+ <p>The argument must be the name of a level (for example, &lsquo;<samp class="samp">5.1</samp>&rsquo;), a
663
+ <em class="emph">general_level_idc</em> value (for example, &lsquo;<samp class="samp">153</samp>&rsquo; for level 5.1),
664
+ or the special name &lsquo;<samp class="samp">auto</samp>&rsquo; indicating that the filter should
665
+ attempt to guess the level from the input stream properties.
666
+ </p>
667
+ </dd>
668
+ </dl>
669
+
670
+ <a name="hevc_005fmp4toannexb"></a>
671
+ <h3 class="section">2.16 hevc_mp4toannexb<span class="pull-right"><a class="anchor hidden-xs" href="#hevc_005fmp4toannexb" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-hevc_005fmp4toannexb" aria-hidden="true">TOC</a></span></h3>
672
+
673
+ <p>Convert an HEVC/H.265 bitstream from length prefixed mode to start code
674
+ prefixed mode (as defined in the Annex B of the ITU-T H.265
675
+ specification).
676
+ </p>
677
+ <p>This is required by some streaming formats, typically the MPEG-2
678
+ transport stream format (muxer <code class="code">mpegts</code>).
679
+ </p>
680
+ <p>For example to remux an MP4 file containing an HEVC stream to mpegts
681
+ format with <code class="command">ffmpeg</code>, you can use the command:
682
+ </p>
683
+ <div class="example">
684
+ <pre class="example-preformatted">ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
685
+ </pre></div>
686
+
687
+ <p>Please note that this filter is auto-inserted for MPEG-TS (muxer
688
+ <code class="code">mpegts</code>) and raw HEVC/H.265 (muxer <code class="code">h265</code> or
689
+ <code class="code">hevc</code>) output formats.
690
+ </p>
691
+ <a name="imxdump"></a>
692
+ <h3 class="section">2.17 imxdump<span class="pull-right"><a class="anchor hidden-xs" href="#imxdump" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-imxdump" aria-hidden="true">TOC</a></span></h3>
693
+
694
+ <p>Modifies the bitstream to fit in MOV and to be usable by the Final Cut
695
+ Pro decoder. This filter only applies to the mpeg2video codec, and is
696
+ likely not needed for Final Cut Pro 7 and newer with the appropriate
697
+ <samp class="option">-tag:v</samp>.
698
+ </p>
699
+ <p>For example, to remux 30 MB/sec NTSC IMX to MOV:
700
+ </p>
701
+ <div class="example">
702
+ <pre class="example-preformatted">ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
703
+ </pre></div>
704
+
705
+ <a name="mjpeg2jpeg"></a>
706
+ <h3 class="section">2.18 mjpeg2jpeg<span class="pull-right"><a class="anchor hidden-xs" href="#mjpeg2jpeg" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-mjpeg2jpeg" aria-hidden="true">TOC</a></span></h3>
707
+
708
+ <p>Convert MJPEG/AVI1 packets to full JPEG/JFIF packets.
709
+ </p>
710
+ <p>MJPEG is a video codec wherein each video frame is essentially a
711
+ JPEG image. The individual frames can be extracted without loss,
712
+ e.g. by
713
+ </p>
714
+ <div class="example">
715
+ <pre class="example-preformatted">ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
716
+ </pre></div>
717
+
718
+ <p>Unfortunately, these chunks are incomplete JPEG images, because
719
+ they lack the DHT segment required for decoding. Quoting from
720
+ <a class="url" href="http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml">http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml</a>:
721
+ </p>
722
+ <p>Avery Lee, writing in the rec.video.desktop newsgroup in 2001,
723
+ commented that &quot;MJPEG, or at least the MJPEG in AVIs having the
724
+ MJPG fourcc, is restricted JPEG with a fixed &ndash; and *omitted* &ndash;
725
+ Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2,
726
+ and it must use basic Huffman encoding, not arithmetic or
727
+ progressive. . . . You can indeed extract the MJPEG frames and
728
+ decode them with a regular JPEG decoder, but you have to prepend
729
+ the DHT segment to them, or else the decoder won&rsquo;t have any idea
730
+ how to decompress the data. The exact table necessary is given in
731
+ the OpenDML spec.&quot;
732
+ </p>
733
+ <p>This bitstream filter patches the header of frames extracted from an MJPEG
734
+ stream (carrying the AVI1 header ID and lacking a DHT segment) to
735
+ produce fully qualified JPEG images.
736
+ </p>
737
+ <div class="example">
738
+ <pre class="example-preformatted">ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
739
+ exiftran -i -9 frame*.jpg
740
+ ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
741
+ </pre></div>
742
+
743
+ <a name="mjpegadump"></a>
744
+ <h3 class="section">2.19 mjpegadump<span class="pull-right"><a class="anchor hidden-xs" href="#mjpegadump" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-mjpegadump" aria-hidden="true">TOC</a></span></h3>
745
+
746
+ <p>Add an MJPEG A header to the bitstream, to enable decoding by
747
+ Quicktime.
748
+ </p>
749
+ <a class="anchor" id="mov2textsub"></a><a name="mov2textsub-1"></a>
750
+ <h3 class="section">2.20 mov2textsub<span class="pull-right"><a class="anchor hidden-xs" href="#mov2textsub-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-mov2textsub-1" aria-hidden="true">TOC</a></span></h3>
751
+
752
+ <p>Extract a representable text file from MOV subtitles, stripping the
753
+ metadata header from each subtitle packet.
754
+ </p>
755
+ <p>See also the <a class="ref" href="#text2movsub">text2movsub</a> filter.
756
+ </p>
757
+ <a name="mpeg2_005fmetadata"></a>
758
+ <h3 class="section">2.21 mpeg2_metadata<span class="pull-right"><a class="anchor hidden-xs" href="#mpeg2_005fmetadata" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-mpeg2_005fmetadata" aria-hidden="true">TOC</a></span></h3>
759
+
760
+ <p>Modify metadata embedded in an MPEG-2 stream.
761
+ </p>
762
+ <dl class="table">
763
+ <dt><samp class="option">display_aspect_ratio</samp></dt>
764
+ <dd><p>Set the display aspect ratio in the stream.
765
+ </p>
766
+ <p>The following fixed values are supported:
767
+ </p><dl class="table">
768
+ <dt><samp class="option">4/3</samp></dt>
769
+ <dt><samp class="option">16/9</samp></dt>
770
+ <dt><samp class="option">221/100</samp></dt>
771
+ </dl>
772
+ <p>Any other value will result in square pixels being signalled instead
773
+ (see H.262 section 6.3.3 and table 6-3).
774
+ </p>
775
+ </dd>
776
+ <dt><samp class="option">frame_rate</samp></dt>
777
+ <dd><p>Set the frame rate in the stream. This is constructed from a table
778
+ of known values combined with a small multiplier and divisor - if
779
+ the supplied value is not exactly representable, the nearest
780
+ representable value will be used instead (see H.262 section 6.3.3
781
+ and table 6-4).
782
+ </p>
783
+ </dd>
784
+ <dt><samp class="option">video_format</samp></dt>
785
+ <dd><p>Set the video format in the stream (see H.262 section 6.3.6 and
786
+ table 6-6).
787
+ </p>
788
+ </dd>
789
+ <dt><samp class="option">colour_primaries</samp></dt>
790
+ <dt><samp class="option">transfer_characteristics</samp></dt>
791
+ <dt><samp class="option">matrix_coefficients</samp></dt>
792
+ <dd><p>Set the colour description in the stream (see H.262 section 6.3.6
793
+ and tables 6-7, 6-8 and 6-9).
794
+ </p>
795
+ </dd>
796
+ </dl>
797
+
798
+ <a name="mpeg4_005funpack_005fbframes"></a>
799
+ <h3 class="section">2.22 mpeg4_unpack_bframes<span class="pull-right"><a class="anchor hidden-xs" href="#mpeg4_005funpack_005fbframes" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-mpeg4_005funpack_005fbframes" aria-hidden="true">TOC</a></span></h3>
800
+
801
+ <p>Unpack DivX-style packed B-frames.
802
+ </p>
803
+ <p>DivX-style packed B-frames are not valid MPEG-4 and were only a
804
+ workaround for the broken Video for Windows subsystem.
805
+ They use more space, can cause minor AV sync issues, require more
806
+ CPU power to decode (unless the player has some decoded picture queue
807
+ to compensate the 2,0,2,0 frame per packet style) and cause
808
+ trouble if copied into a standard container like mp4 or mpeg-ps/ts,
809
+ because MPEG-4 decoders may not be able to decode them, since they are
810
+ not valid MPEG-4.
811
+ </p>
812
+ <p>For example to fix an AVI file containing an MPEG-4 stream with
813
+ DivX-style packed B-frames using <code class="command">ffmpeg</code>, you can use the command:
814
+ </p>
815
+ <div class="example">
816
+ <pre class="example-preformatted">ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
817
+ </pre></div>
818
+
819
+ <a name="noise"></a>
820
+ <h3 class="section">2.23 noise<span class="pull-right"><a class="anchor hidden-xs" href="#noise" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-noise" aria-hidden="true">TOC</a></span></h3>
821
+
822
+ <p>Damages the contents of packets or simply drops them without damaging the
823
+ container. Can be used for fuzzing or testing error resilience/concealment.
824
+ </p>
825
+ <p>Parameters:
826
+ </p><dl class="table">
827
+ <dt><samp class="option">amount</samp></dt>
828
+ <dd><p>Accepts an expression whose evaluation per-packet determines how often bytes in that
829
+ packet will be modified. A value below 0 will result in a variable frequency.
830
+ Default is 0 which results in no modification. However, if neither amount nor drop is specified,
831
+ amount will be set to <var class="var">-1</var>. See below for accepted variables.
832
+ </p></dd>
833
+ <dt><samp class="option">drop</samp></dt>
834
+ <dd><p>Accepts an expression evaluated per-packet whose value determines whether that packet is dropped.
835
+ Evaluation to a positive value results in the packet being dropped. Evaluation to a negative
836
+ value results in a variable chance of it being dropped, roughly inverse in proportion to the magnitude
837
+ of the value. Default is 0 which results in no drops. See below for accepted variables.
838
+ </p></dd>
839
+ <dt><samp class="option">dropamount</samp></dt>
840
+ <dd><p>Accepts a non-negative integer, which assigns a variable chance of it being dropped, roughly inverse
841
+ in proportion to the value. Default is 0 which results in no drops. This option is kept for backwards
842
+ compatibility and is equivalent to setting drop to a negative value with the same magnitude
843
+ i.e. <code class="code">dropamount=4</code> is the same as <code class="code">drop=-4</code>. Ignored if drop is also specified.
844
+ </p></dd>
845
+ </dl>
846
+
847
+ <p>Both <code class="code">amount</code> and <code class="code">drop</code> accept expressions containing the following variables:
848
+ </p>
849
+ <dl class="table">
850
+ <dt>&lsquo;<samp class="samp">n</samp>&rsquo;</dt>
851
+ <dd><p>The index of the packet, starting from zero.
852
+ </p></dd>
853
+ <dt>&lsquo;<samp class="samp">tb</samp>&rsquo;</dt>
854
+ <dd><p>The timebase for packet timestamps.
855
+ </p></dd>
856
+ <dt>&lsquo;<samp class="samp">pts</samp>&rsquo;</dt>
857
+ <dd><p>Packet presentation timestamp.
858
+ </p></dd>
859
+ <dt>&lsquo;<samp class="samp">dts</samp>&rsquo;</dt>
860
+ <dd><p>Packet decoding timestamp.
861
+ </p></dd>
862
+ <dt>&lsquo;<samp class="samp">nopts</samp>&rsquo;</dt>
863
+ <dd><p>Constant representing AV_NOPTS_VALUE.
864
+ </p></dd>
865
+ <dt>&lsquo;<samp class="samp">startpts</samp>&rsquo;</dt>
866
+ <dd><p>First non-AV_NOPTS_VALUE PTS seen in the stream.
867
+ </p></dd>
868
+ <dt>&lsquo;<samp class="samp">startdts</samp>&rsquo;</dt>
869
+ <dd><p>First non-AV_NOPTS_VALUE DTS seen in the stream.
870
+ </p></dd>
871
+ <dt>&lsquo;<samp class="samp">duration</samp>&rsquo;</dt>
872
+ <dt>&lsquo;<samp class="samp">d</samp>&rsquo;</dt>
873
+ <dd><p>Packet duration, in timebase units.
874
+ </p></dd>
875
+ <dt>&lsquo;<samp class="samp">pos</samp>&rsquo;</dt>
876
+ <dd><p>Packet position in input; may be -1 when unknown or not set.
877
+ </p></dd>
878
+ <dt>&lsquo;<samp class="samp">size</samp>&rsquo;</dt>
879
+ <dd><p>Packet size, in bytes.
880
+ </p></dd>
881
+ <dt>&lsquo;<samp class="samp">key</samp>&rsquo;</dt>
882
+ <dd><p>Whether packet is marked as a keyframe.
883
+ </p></dd>
884
+ <dt>&lsquo;<samp class="samp">state</samp>&rsquo;</dt>
885
+ <dd><p>A pseudo random integer, primarily derived from the content of packet payload.
886
+ </p></dd>
887
+ </dl>
888
+
889
+ <a name="Examples"></a>
890
+ <h4 class="subsection">2.23.1 Examples<span class="pull-right"><a class="anchor hidden-xs" href="#Examples" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Examples" aria-hidden="true">TOC</a></span></h4>
891
+ <p>Apply modification to every byte but don&rsquo;t drop any packets.
892
+ </p><div class="example">
893
+ <pre class="example-preformatted">ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
894
+ </pre></div>
895
+
896
+ <p>Drop every video packet not marked as a keyframe after timestamp 30s but do not
897
+ modify any of the remaining packets.
898
+ </p><div class="example">
899
+ <pre class="example-preformatted">ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' output.mkv
900
+ </pre></div>
901
+
902
+ <p>Drop one second of audio every 10 seconds and add some random noise to the rest.
903
+ </p><div class="example">
904
+ <pre class="example-preformatted">ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' output.mkv
905
+ </pre></div>
906
+
907
+ <a name="null"></a>
908
+ <h3 class="section">2.24 null<span class="pull-right"><a class="anchor hidden-xs" href="#null" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-null" aria-hidden="true">TOC</a></span></h3>
909
+ <p>This bitstream filter passes the packets through unchanged.
910
+ </p>
911
+ <a name="pcm_005frechunk"></a>
912
+ <h3 class="section">2.25 pcm_rechunk<span class="pull-right"><a class="anchor hidden-xs" href="#pcm_005frechunk" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-pcm_005frechunk" aria-hidden="true">TOC</a></span></h3>
913
+
914
+ <p>Repacketize PCM audio to a fixed number of samples per packet or a fixed packet
915
+ rate per second. This is similar to the <a data-manual="ffmpeg-filters" href="ffmpeg-filters.html#asetnsamples">asetnsamples audio
916
+ filter</a> but works on audio packets instead of audio frames.
917
+ </p>
918
+ <dl class="table">
919
+ <dt><samp class="option">nb_out_samples, n</samp></dt>
920
+ <dd><p>Set the number of samples per each output audio packet. The number is intended
921
+ as the number of samples <em class="emph">per each channel</em>. Default value is 1024.
922
+ </p>
923
+ </dd>
924
+ <dt><samp class="option">pad, p</samp></dt>
925
+ <dd><p>If set to 1, the filter will pad the last audio packet with silence, so that it
926
+ will contain the same number of samples (or roughly the same number of samples,
927
+ see <samp class="option">frame_rate</samp>) as the previous ones. Default value is 1.
928
+ </p>
929
+ </dd>
930
+ <dt><samp class="option">frame_rate, r</samp></dt>
931
+ <dd><p>This option makes the filter output a fixed number of packets per second instead
932
+ of a fixed number of samples per packet. If the audio sample rate is not
933
+ divisible by the frame rate then the number of samples will not be constant but
934
+ will vary slightly so that each packet will start as close to the frame
935
+ boundary as possible. Using this option has precedence over <samp class="option">nb_out_samples</samp>.
936
+ </p></dd>
937
+ </dl>
938
+
939
+ <p>You can generate the well known 1602-1601-1602-1601-1602 pattern of 48kHz audio
940
+ for NTSC frame rate using the <samp class="option">frame_rate</samp> option.
941
+ </p><div class="example">
942
+ <pre class="example-preformatted">ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -
943
+ </pre></div>
944
+
945
+ <a name="pgs_005fframe_005fmerge"></a>
946
+ <h3 class="section">2.26 pgs_frame_merge<span class="pull-right"><a class="anchor hidden-xs" href="#pgs_005fframe_005fmerge" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-pgs_005fframe_005fmerge" aria-hidden="true">TOC</a></span></h3>
947
+
948
+ <p>Merge a sequence of PGS Subtitle segments ending with an &quot;end of display set&quot;
949
+ segment into a single packet.
950
+ </p>
951
+ <p>This is required by some containers that support PGS subtitles
952
+ (muxer <code class="code">matroska</code>).
953
+ </p>
954
+ <a name="prores_005fmetadata"></a>
955
+ <h3 class="section">2.27 prores_metadata<span class="pull-right"><a class="anchor hidden-xs" href="#prores_005fmetadata" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-prores_005fmetadata" aria-hidden="true">TOC</a></span></h3>
956
+
957
+ <p>Modify color property metadata embedded in prores stream.
958
+ </p>
959
+ <dl class="table">
960
+ <dt><samp class="option">color_primaries</samp></dt>
961
+ <dd><p>Set the color primaries.
962
+ Available values are:
963
+ </p>
964
+ <dl class="table">
965
+ <dt>&lsquo;<samp class="samp">auto</samp>&rsquo;</dt>
966
+ <dd><p>Keep the same color primaries property (default).
967
+ </p>
968
+ </dd>
969
+ <dt>&lsquo;<samp class="samp">unknown</samp>&rsquo;</dt>
970
+ <dt>&lsquo;<samp class="samp">bt709</samp>&rsquo;</dt>
971
+ <dt>&lsquo;<samp class="samp">bt470bg</samp>&rsquo;</dt>
972
+ <dd><p>BT601 625
973
+ </p>
974
+ </dd>
975
+ <dt>&lsquo;<samp class="samp">smpte170m</samp>&rsquo;</dt>
976
+ <dd><p>BT601 525
977
+ </p>
978
+ </dd>
979
+ <dt>&lsquo;<samp class="samp">bt2020</samp>&rsquo;</dt>
980
+ <dt>&lsquo;<samp class="samp">smpte431</samp>&rsquo;</dt>
981
+ <dd><p>DCI P3
982
+ </p>
983
+ </dd>
984
+ <dt>&lsquo;<samp class="samp">smpte432</samp>&rsquo;</dt>
985
+ <dd><p>P3 D65
986
+ </p>
987
+ </dd>
988
+ </dl>
989
+
990
+ </dd>
991
+ <dt><samp class="option">transfer_characteristics</samp></dt>
992
+ <dd><p>Set the color transfer.
993
+ Available values are:
994
+ </p>
995
+ <dl class="table">
996
+ <dt>&lsquo;<samp class="samp">auto</samp>&rsquo;</dt>
997
+ <dd><p>Keep the same transfer characteristics property (default).
998
+ </p>
999
+ </dd>
1000
+ <dt>&lsquo;<samp class="samp">unknown</samp>&rsquo;</dt>
1001
+ <dt>&lsquo;<samp class="samp">bt709</samp>&rsquo;</dt>
1002
+ <dd><p>BT 601, BT 709, BT 2020
1003
+ </p></dd>
1004
+ <dt>&lsquo;<samp class="samp">smpte2084</samp>&rsquo;</dt>
1005
+ <dd><p>SMPTE ST 2084
1006
+ </p></dd>
1007
+ <dt>&lsquo;<samp class="samp">arib-std-b67</samp>&rsquo;</dt>
1008
+ <dd><p>ARIB STD-B67
1009
+ </p></dd>
1010
+ </dl>
1011
+
1012
+
1013
+ </dd>
1014
+ <dt><samp class="option">matrix_coefficients</samp></dt>
1015
+ <dd><p>Set the matrix coefficient.
1016
+ Available values are:
1017
+ </p>
1018
+ <dl class="table">
1019
+ <dt>&lsquo;<samp class="samp">auto</samp>&rsquo;</dt>
1020
+ <dd><p>Keep the same colorspace property (default).
1021
+ </p>
1022
+ </dd>
1023
+ <dt>&lsquo;<samp class="samp">unknown</samp>&rsquo;</dt>
1024
+ <dt>&lsquo;<samp class="samp">bt709</samp>&rsquo;</dt>
1025
+ <dt>&lsquo;<samp class="samp">smpte170m</samp>&rsquo;</dt>
1026
+ <dd><p>BT 601
1027
+ </p>
1028
+ </dd>
1029
+ <dt>&lsquo;<samp class="samp">bt2020nc</samp>&rsquo;</dt>
1030
+ </dl>
1031
+ </dd>
1032
+ </dl>
1033
+
1034
+ <p>Set Rec709 colorspace for each frame of the file
1035
+ </p><div class="example">
1036
+ <pre class="example-preformatted">ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
1037
+ </pre></div>
1038
+
1039
+ <p>Set Hybrid Log-Gamma parameters for each frame of the file
1040
+ </p><div class="example">
1041
+ <pre class="example-preformatted">ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov
1042
+ </pre></div>
1043
+
1044
+ <a name="remove_005fextra"></a>
1045
+ <h3 class="section">2.28 remove_extra<span class="pull-right"><a class="anchor hidden-xs" href="#remove_005fextra" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-remove_005fextra" aria-hidden="true">TOC</a></span></h3>
1046
+
1047
+ <p>Remove extradata from packets.
1048
+ </p>
1049
+ <p>It accepts the following parameter:
1050
+ </p><dl class="table">
1051
+ <dt><samp class="option">freq</samp></dt>
1052
+ <dd><p>Set which frame types to remove extradata from.
1053
+ </p>
1054
+ <dl class="table">
1055
+ <dt>&lsquo;<samp class="samp">k</samp>&rsquo;</dt>
1056
+ <dd><p>Remove extradata from non-keyframes only.
1057
+ </p>
1058
+ </dd>
1059
+ <dt>&lsquo;<samp class="samp">keyframe</samp>&rsquo;</dt>
1060
+ <dd><p>Remove extradata from keyframes only.
1061
+ </p>
1062
+ </dd>
1063
+ <dt>&lsquo;<samp class="samp">e, all</samp>&rsquo;</dt>
1064
+ <dd><p>Remove extradata from all frames.
1065
+ </p>
1066
+ </dd>
1067
+ </dl>
1068
+ </dd>
1069
+ </dl>
1070
+
1071
+ <a name="setts"></a>
1072
+ <h3 class="section">2.29 setts<span class="pull-right"><a class="anchor hidden-xs" href="#setts" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-setts" aria-hidden="true">TOC</a></span></h3>
1073
+ <p>Set PTS and DTS in packets.
1074
+ </p>
1075
+ <p>It accepts the following parameters:
1076
+ </p><dl class="table">
1077
+ <dt><samp class="option">ts</samp></dt>
1078
+ <dt><samp class="option">pts</samp></dt>
1079
+ <dt><samp class="option">dts</samp></dt>
1080
+ <dd><p>Set expressions for PTS, DTS or both.
1081
+ </p></dd>
1082
+ <dt><samp class="option">duration</samp></dt>
1083
+ <dd><p>Set expression for duration.
1084
+ </p></dd>
1085
+ <dt><samp class="option">time_base</samp></dt>
1086
+ <dd><p>Set output time base.
1087
+ </p></dd>
1088
+ </dl>
1089
+
1090
+ <p>The expressions are evaluated through the eval API and can contain the following
1091
+ constants:
1092
+ </p>
1093
+ <dl class="table">
1094
+ <dt><samp class="option">N</samp></dt>
1095
+ <dd><p>The count of the input packet. Starting from 0.
1096
+ </p>
1097
+ </dd>
1098
+ <dt><samp class="option">TS</samp></dt>
1099
+ <dd><p>The demux timestamp in input in case of <code class="code">ts</code> or <code class="code">dts</code> option or presentation
1100
+ timestamp in case of <code class="code">pts</code> option.
1101
+ </p>
1102
+ </dd>
1103
+ <dt><samp class="option">POS</samp></dt>
1104
+ <dd><p>The original position in the file of the packet, or undefined if undefined
1105
+ for the current packet
1106
+ </p>
1107
+ </dd>
1108
+ <dt><samp class="option">DTS</samp></dt>
1109
+ <dd><p>The demux timestamp in input.
1110
+ </p>
1111
+ </dd>
1112
+ <dt><samp class="option">PTS</samp></dt>
1113
+ <dd><p>The presentation timestamp in input.
1114
+ </p>
1115
+ </dd>
1116
+ <dt><samp class="option">DURATION</samp></dt>
1117
+ <dd><p>The duration in input.
1118
+ </p>
1119
+ </dd>
1120
+ <dt><samp class="option">STARTDTS</samp></dt>
1121
+ <dd><p>The DTS of the first packet.
1122
+ </p>
1123
+ </dd>
1124
+ <dt><samp class="option">STARTPTS</samp></dt>
1125
+ <dd><p>The PTS of the first packet.
1126
+ </p>
1127
+ </dd>
1128
+ <dt><samp class="option">PREV_INDTS</samp></dt>
1129
+ <dd><p>The previous input DTS.
1130
+ </p>
1131
+ </dd>
1132
+ <dt><samp class="option">PREV_INPTS</samp></dt>
1133
+ <dd><p>The previous input PTS.
1134
+ </p>
1135
+ </dd>
1136
+ <dt><samp class="option">PREV_INDURATION</samp></dt>
1137
+ <dd><p>The previous input duration.
1138
+ </p>
1139
+ </dd>
1140
+ <dt><samp class="option">PREV_OUTDTS</samp></dt>
1141
+ <dd><p>The previous output DTS.
1142
+ </p>
1143
+ </dd>
1144
+ <dt><samp class="option">PREV_OUTPTS</samp></dt>
1145
+ <dd><p>The previous output PTS.
1146
+ </p>
1147
+ </dd>
1148
+ <dt><samp class="option">PREV_OUTDURATION</samp></dt>
1149
+ <dd><p>The previous output duration.
1150
+ </p>
1151
+ </dd>
1152
+ <dt><samp class="option">NEXT_DTS</samp></dt>
1153
+ <dd><p>The next input DTS.
1154
+ </p>
1155
+ </dd>
1156
+ <dt><samp class="option">NEXT_PTS</samp></dt>
1157
+ <dd><p>The next input PTS.
1158
+ </p>
1159
+ </dd>
1160
+ <dt><samp class="option">NEXT_DURATION</samp></dt>
1161
+ <dd><p>The next input duration.
1162
+ </p>
1163
+ </dd>
1164
+ <dt><samp class="option">TB</samp></dt>
1165
+ <dd><p>The timebase of stream packet belongs.
1166
+ </p>
1167
+ </dd>
1168
+ <dt><samp class="option">TB_OUT</samp></dt>
1169
+ <dd><p>The output timebase.
1170
+ </p>
1171
+ </dd>
1172
+ <dt><samp class="option">SR</samp></dt>
1173
+ <dd><p>The sample rate of stream packet belongs.
1174
+ </p>
1175
+ </dd>
1176
+ <dt><samp class="option">NOPTS</samp></dt>
1177
+ <dd><p>The AV_NOPTS_VALUE constant.
1178
+ </p></dd>
1179
+ </dl>
1180
+
1181
+ <p>For example, to set PTS equal to DTS (not recommended if B-frames are involved):
1182
+ </p><div class="example">
1183
+ <pre class="example-preformatted">ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv
1184
+ </pre></div>
1185
+
1186
+ <a name="showinfo"></a>
1187
+ <h3 class="section">2.30 showinfo<span class="pull-right"><a class="anchor hidden-xs" href="#showinfo" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-showinfo" aria-hidden="true">TOC</a></span></h3>
1188
+ <p>Log basic packet information. Mainly useful for testing, debugging,
1189
+ and development.
1190
+ </p>
1191
+ <a class="anchor" id="text2movsub"></a><a name="text2movsub-1"></a>
1192
+ <h3 class="section">2.31 text2movsub<span class="pull-right"><a class="anchor hidden-xs" href="#text2movsub-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-text2movsub-1" aria-hidden="true">TOC</a></span></h3>
1193
+
1194
+ <p>Convert text subtitles to MOV subtitles (as used by the <code class="code">mov_text</code>
1195
+ codec) with metadata headers.
1196
+ </p>
1197
+ <p>See also the <a class="ref" href="#mov2textsub">mov2textsub</a> filter.
1198
+ </p>
1199
+ <a name="trace_005fheaders"></a>
1200
+ <h3 class="section">2.32 trace_headers<span class="pull-right"><a class="anchor hidden-xs" href="#trace_005fheaders" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-trace_005fheaders" aria-hidden="true">TOC</a></span></h3>
1201
+
1202
+ <p>Log trace output containing all syntax elements in the coded stream
1203
+ headers (everything above the level of individual coded blocks).
1204
+ This can be useful for debugging low-level stream issues.
1205
+ </p>
1206
+ <p>Supports AV1, H.264, H.265, (M)JPEG, MPEG-2 and VP9, but depending
1207
+ on the build only a subset of these may be available.
1208
+ </p>
1209
+ <a name="truehd_005fcore"></a>
1210
+ <h3 class="section">2.33 truehd_core<span class="pull-right"><a class="anchor hidden-xs" href="#truehd_005fcore" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-truehd_005fcore" aria-hidden="true">TOC</a></span></h3>
1211
+
1212
+ <p>Extract the core from a TrueHD stream, dropping ATMOS data.
1213
+ </p>
1214
+ <a name="vp9_005fmetadata"></a>
1215
+ <h3 class="section">2.34 vp9_metadata<span class="pull-right"><a class="anchor hidden-xs" href="#vp9_005fmetadata" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-vp9_005fmetadata" aria-hidden="true">TOC</a></span></h3>
1216
+
1217
+ <p>Modify metadata embedded in a VP9 stream.
1218
+ </p>
1219
+ <dl class="table">
1220
+ <dt><samp class="option">color_space</samp></dt>
1221
+ <dd><p>Set the color space value in the frame header. Note that any frame
1222
+ set to RGB will be implicitly set to PC range and that RGB is
1223
+ incompatible with profiles 0 and 2.
1224
+ </p><dl class="table">
1225
+ <dt>&lsquo;<samp class="samp">unknown</samp>&rsquo;</dt>
1226
+ <dt>&lsquo;<samp class="samp">bt601</samp>&rsquo;</dt>
1227
+ <dt>&lsquo;<samp class="samp">bt709</samp>&rsquo;</dt>
1228
+ <dt>&lsquo;<samp class="samp">smpte170</samp>&rsquo;</dt>
1229
+ <dt>&lsquo;<samp class="samp">smpte240</samp>&rsquo;</dt>
1230
+ <dt>&lsquo;<samp class="samp">bt2020</samp>&rsquo;</dt>
1231
+ <dt>&lsquo;<samp class="samp">rgb</samp>&rsquo;</dt>
1232
+ </dl>
1233
+
1234
+ </dd>
1235
+ <dt><samp class="option">color_range</samp></dt>
1236
+ <dd><p>Set the color range value in the frame header. Note that any value
1237
+ imposed by the color space will take precedence over this value.
1238
+ </p><dl class="table">
1239
+ <dt>&lsquo;<samp class="samp">tv</samp>&rsquo;</dt>
1240
+ <dt>&lsquo;<samp class="samp">pc</samp>&rsquo;</dt>
1241
+ </dl>
1242
+ </dd>
1243
+ </dl>
1244
+
1245
+ <a name="vp9_005fsuperframe"></a>
1246
+ <h3 class="section">2.35 vp9_superframe<span class="pull-right"><a class="anchor hidden-xs" href="#vp9_005fsuperframe" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-vp9_005fsuperframe" aria-hidden="true">TOC</a></span></h3>
1247
+
1248
+ <p>Merge VP9 invisible (alt-ref) frames back into VP9 superframes. This
1249
+ fixes merging of split/segmented VP9 streams where the alt-ref frame
1250
+ was split from its visible counterpart.
1251
+ </p>
1252
+ <a name="vp9_005fsuperframe_005fsplit"></a>
1253
+ <h3 class="section">2.36 vp9_superframe_split<span class="pull-right"><a class="anchor hidden-xs" href="#vp9_005fsuperframe_005fsplit" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-vp9_005fsuperframe_005fsplit" aria-hidden="true">TOC</a></span></h3>
1254
+
1255
+ <p>Split VP9 superframes into single frames.
1256
+ </p>
1257
+ <a name="vp9_005fraw_005freorder"></a>
1258
+ <h3 class="section">2.37 vp9_raw_reorder<span class="pull-right"><a class="anchor hidden-xs" href="#vp9_005fraw_005freorder" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-vp9_005fraw_005freorder" aria-hidden="true">TOC</a></span></h3>
1259
+
1260
+ <p>Given a VP9 stream with correct timestamps but possibly out of order,
1261
+ insert additional show-existing-frame packets to correct the ordering.
1262
+ </p>
1263
+
1264
+ <a name="See-Also"></a>
1265
+ <h2 class="chapter">3 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
1266
+
1267
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
1268
+ <a class="url" href="libavcodec.html">libavcodec</a>
1269
+ </p>
1270
+
1271
+ <a name="Authors"></a>
1272
+ <h2 class="chapter">4 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
1273
+
1274
+ <p>The FFmpeg developers.
1275
+ </p>
1276
+ <p>For details about the authorship, see the Git history of the project
1277
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
1278
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
1279
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
1280
+ </p>
1281
+ <p>Maintainers for the specific components are listed in the file
1282
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
1283
+ </p>
1284
+
1285
+ <p style="font-size: small;">
1286
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
1287
+ </p>
1288
+ </div>
1289
+ </body>
1290
+ </html>
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-codecs.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-devices.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-filters.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-formats.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-protocols.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-resampler.html ADDED
@@ -0,0 +1,350 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ FFmpeg Resampler Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ FFmpeg Resampler Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-Resampler-Options" href="#Resampler-Options">2 Resampler Options</a></li>
30
+ <li><a id="toc-See-Also" href="#See-Also">3 See Also</a></li>
31
+ <li><a id="toc-Authors" href="#Authors">4 Authors</a></li>
32
+ </ul>
33
+ </div>
34
+ </div>
35
+
36
+ <a name="Description"></a>
37
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
38
+
39
+ <p>The FFmpeg resampler provides a high-level interface to the
40
+ libswresample library audio resampling utilities. In particular it
41
+ allows one to perform audio resampling, audio channel layout rematrixing,
42
+ and convert audio format and packing layout.
43
+ </p>
44
+
45
+ <a name="Resampler-Options"></a>
46
+ <h2 class="chapter">2 Resampler Options<span class="pull-right"><a class="anchor hidden-xs" href="#Resampler-Options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Resampler-Options" aria-hidden="true">TOC</a></span></h2>
47
+
48
+ <p>The audio resampler supports the following named options.
49
+ </p>
50
+ <p>Options may be set by specifying -<var class="var">option</var> <var class="var">value</var> in the
51
+ FFmpeg tools, <var class="var">option</var>=<var class="var">value</var> for the aresample filter,
52
+ by setting the value explicitly in the
53
+ <code class="code">SwrContext</code> options or using the <samp class="file">libavutil/opt.h</samp> API for
54
+ programmatic use.
55
+ </p>
56
+ <dl class="table">
57
+ <dt><samp class="option">uchl, used_chlayout</samp></dt>
58
+ <dd><p>Set used input channel layout. Default is unset. This option is
59
+ only used for special remapping.
60
+ </p>
61
+ </dd>
62
+ <dt><samp class="option">isr, in_sample_rate</samp></dt>
63
+ <dd><p>Set the input sample rate. Default value is 0.
64
+ </p>
65
+ </dd>
66
+ <dt><samp class="option">osr, out_sample_rate</samp></dt>
67
+ <dd><p>Set the output sample rate. Default value is 0.
68
+ </p>
69
+ </dd>
70
+ <dt><samp class="option">isf, in_sample_fmt</samp></dt>
71
+ <dd><p>Specify the input sample format. It is set by default to <code class="code">none</code>.
72
+ </p>
73
+ </dd>
74
+ <dt><samp class="option">osf, out_sample_fmt</samp></dt>
75
+ <dd><p>Specify the output sample format. It is set by default to <code class="code">none</code>.
76
+ </p>
77
+ </dd>
78
+ <dt><samp class="option">tsf, internal_sample_fmt</samp></dt>
79
+ <dd><p>Set the internal sample format. Default value is <code class="code">none</code>.
80
+ This will automatically be chosen when it is not explicitly set.
81
+ </p>
82
+ </dd>
83
+ <dt><samp class="option">ichl, in_chlayout</samp></dt>
84
+ <dt><samp class="option">ochl, out_chlayout</samp></dt>
85
+ <dd><p>Set the input/output channel layout.
86
+ </p>
87
+ <p>See <a data-manual="ffmpeg-utils" href="ffmpeg-utils.html#channel-layout-syntax">the Channel Layout section in the ffmpeg-utils(1) manual</a>
88
+ for the required syntax.
89
+ </p>
90
+ </dd>
91
+ <dt><samp class="option">clev, center_mix_level</samp></dt>
92
+ <dd><p>Set the center mix level. It is a value expressed in deciBel, and must be
93
+ in the interval [-32,32].
94
+ </p>
95
+ </dd>
96
+ <dt><samp class="option">slev, surround_mix_level</samp></dt>
97
+ <dd><p>Set the surround mix level. It is a value expressed in deciBel, and must
98
+ be in the interval [-32,32].
99
+ </p>
100
+ </dd>
101
+ <dt><samp class="option">lfe_mix_level</samp></dt>
102
+ <dd><p>Set LFE mix into non LFE level. It is used when there is a LFE input but no
103
+ LFE output. It is a value expressed in deciBel, and must
104
+ be in the interval [-32,32].
105
+ </p>
106
+ </dd>
107
+ <dt><samp class="option">rmvol, rematrix_volume</samp></dt>
108
+ <dd><p>Set rematrix volume. Default value is 1.0.
109
+ </p>
110
+ </dd>
111
+ <dt><samp class="option">rematrix_maxval</samp></dt>
112
+ <dd><p>Set maximum output value for rematrixing.
113
+ This can be used to prevent clipping vs. preventing volume reduction.
114
+ A value of 1.0 prevents clipping.
115
+ </p>
116
+ </dd>
117
+ <dt><samp class="option">flags, swr_flags</samp></dt>
118
+ <dd><p>Set flags used by the converter. Default value is 0.
119
+ </p>
120
+ <p>It supports the following individual flags:
121
+ </p><dl class="table">
122
+ <dt><samp class="option">res</samp></dt>
123
+ <dd><p>force resampling, this flag forces resampling to be used even when the
124
+ input and output sample rates match.
125
+ </p></dd>
126
+ </dl>
127
+
128
+ </dd>
129
+ <dt><samp class="option">dither_scale</samp></dt>
130
+ <dd><p>Set the dither scale. Default value is 1.
131
+ </p>
132
+ </dd>
133
+ <dt><samp class="option">dither_method</samp></dt>
134
+ <dd><p>Set dither method. Default value is 0.
135
+ </p>
136
+ <p>Supported values:
137
+ </p><dl class="table">
138
+ <dt>&lsquo;<samp class="samp">rectangular</samp>&rsquo;</dt>
139
+ <dd><p>select rectangular dither
140
+ </p></dd>
141
+ <dt>&lsquo;<samp class="samp">triangular</samp>&rsquo;</dt>
142
+ <dd><p>select triangular dither
143
+ </p></dd>
144
+ <dt>&lsquo;<samp class="samp">triangular_hp</samp>&rsquo;</dt>
145
+ <dd><p>select triangular dither with high pass
146
+ </p></dd>
147
+ <dt>&lsquo;<samp class="samp">lipshitz</samp>&rsquo;</dt>
148
+ <dd><p>select Lipshitz noise shaping dither.
149
+ </p></dd>
150
+ <dt>&lsquo;<samp class="samp">shibata</samp>&rsquo;</dt>
151
+ <dd><p>select Shibata noise shaping dither.
152
+ </p></dd>
153
+ <dt>&lsquo;<samp class="samp">low_shibata</samp>&rsquo;</dt>
154
+ <dd><p>select low Shibata noise shaping dither.
155
+ </p></dd>
156
+ <dt>&lsquo;<samp class="samp">high_shibata</samp>&rsquo;</dt>
157
+ <dd><p>select high Shibata noise shaping dither.
158
+ </p></dd>
159
+ <dt>&lsquo;<samp class="samp">f_weighted</samp>&rsquo;</dt>
160
+ <dd><p>select f-weighted noise shaping dither
161
+ </p></dd>
162
+ <dt>&lsquo;<samp class="samp">modified_e_weighted</samp>&rsquo;</dt>
163
+ <dd><p>select modified-e-weighted noise shaping dither
164
+ </p></dd>
165
+ <dt>&lsquo;<samp class="samp">improved_e_weighted</samp>&rsquo;</dt>
166
+ <dd><p>select improved-e-weighted noise shaping dither
167
+ </p>
168
+ </dd>
169
+ </dl>
170
+
171
+ </dd>
172
+ <dt><samp class="option">resampler</samp></dt>
173
+ <dd><p>Set resampling engine. Default value is swr.
174
+ </p>
175
+ <p>Supported values:
176
+ </p><dl class="table">
177
+ <dt>&lsquo;<samp class="samp">swr</samp>&rsquo;</dt>
178
+ <dd><p>select the native SW Resampler; filter options precision and cheby are not
179
+ applicable in this case.
180
+ </p></dd>
181
+ <dt>&lsquo;<samp class="samp">soxr</samp>&rsquo;</dt>
182
+ <dd><p>select the SoX Resampler (where available); compensation, and filter options
183
+ filter_size, phase_shift, exact_rational, filter_type &amp; kaiser_beta, are not
184
+ applicable in this case.
185
+ </p></dd>
186
+ </dl>
187
+
188
+ </dd>
189
+ <dt><samp class="option">filter_size</samp></dt>
190
+ <dd><p>For swr only, set resampling filter size, default value is 32.
191
+ </p>
192
+ </dd>
193
+ <dt><samp class="option">phase_shift</samp></dt>
194
+ <dd><p>For swr only, set resampling phase shift, default value is 10, and must be in
195
+ the interval [0,30].
196
+ </p>
197
+ </dd>
198
+ <dt><samp class="option">linear_interp</samp></dt>
199
+ <dd><p>Use linear interpolation when enabled (the default). Disable it if you want
200
+ to preserve speed instead of quality when exact_rational fails.
201
+ </p>
202
+ </dd>
203
+ <dt><samp class="option">exact_rational</samp></dt>
204
+ <dd><p>For swr only, when enabled, try to use exact phase_count based on input and
205
+ output sample rate. However, if it is larger than <code class="code">1 &lt;&lt; phase_shift</code>,
206
+ the phase_count will be <code class="code">1 &lt;&lt; phase_shift</code> as fallback. Default is enabled.
207
+ </p>
208
+ </dd>
209
+ <dt><samp class="option">cutoff</samp></dt>
210
+ <dd><p>Set cutoff frequency (swr: 6dB point; soxr: 0dB point) ratio; must be a float
211
+ value between 0 and 1. Default value is 0.97 with swr, and 0.91 with soxr
212
+ (which, with a sample-rate of 44100, preserves the entire audio band to 20kHz).
213
+ </p>
214
+ </dd>
215
+ <dt><samp class="option">precision</samp></dt>
216
+ <dd><p>For soxr only, the precision in bits to which the resampled signal will be
217
+ calculated. The default value of 20 (which, with suitable dithering, is
218
+ appropriate for a destination bit-depth of 16) gives SoX&rsquo;s &rsquo;High Quality&rsquo;; a
219
+ value of 28 gives SoX&rsquo;s &rsquo;Very High Quality&rsquo;.
220
+ </p>
221
+ </dd>
222
+ <dt><samp class="option">cheby</samp></dt>
223
+ <dd><p>For soxr only, selects passband rolloff none (Chebyshev) &amp; higher-precision
224
+ approximation for &rsquo;irrational&rsquo; ratios. Default value is 0.
225
+ </p>
226
+ </dd>
227
+ <dt><samp class="option">async</samp></dt>
228
+ <dd><p>For swr only, simple 1 parameter audio sync to timestamps using stretching,
229
+ squeezing, filling and trimming. Setting this to 1 will enable filling and
230
+ trimming, larger values represent the maximum amount in samples that the data
231
+ may be stretched or squeezed for each second.
232
+ Default value is 0, thus no compensation is applied to make the samples match
233
+ the audio timestamps.
234
+ </p>
235
+ </dd>
236
+ <dt><samp class="option">first_pts</samp></dt>
237
+ <dd><p>For swr only, assume the first pts should be this value. The time unit is 1 / sample rate.
238
+ This allows for padding/trimming at the start of stream. By default, no
239
+ assumption is made about the first frame&rsquo;s expected pts, so no padding or
240
+ trimming is done. For example, this could be set to 0 to pad the beginning with
241
+ silence if an audio stream starts after the video stream or to trim any samples
242
+ with a negative pts due to encoder delay.
243
+ </p>
244
+ </dd>
245
+ <dt><samp class="option">min_comp</samp></dt>
246
+ <dd><p>For swr only, set the minimum difference between timestamps and audio data (in
247
+ seconds) to trigger stretching/squeezing/filling or trimming of the
248
+ data to make it match the timestamps. The default is that
249
+ stretching/squeezing/filling and trimming is disabled
250
+ (<samp class="option">min_comp</samp> = <code class="code">FLT_MAX</code>).
251
+ </p>
252
+ </dd>
253
+ <dt><samp class="option">min_hard_comp</samp></dt>
254
+ <dd><p>For swr only, set the minimum difference between timestamps and audio data (in
255
+ seconds) to trigger adding/dropping samples to make it match the
256
+ timestamps. This option effectively is a threshold to select between
257
+ hard (trim/fill) and soft (squeeze/stretch) compensation. Note that
258
+ all compensation is by default disabled through <samp class="option">min_comp</samp>.
259
+ The default is 0.1.
260
+ </p>
261
+ </dd>
262
+ <dt><samp class="option">comp_duration</samp></dt>
263
+ <dd><p>For swr only, set duration (in seconds) over which data is stretched/squeezed
264
+ to make it match the timestamps. Must be a non-negative double float value,
265
+ default value is 1.0.
266
+ </p>
267
+ </dd>
268
+ <dt><samp class="option">max_soft_comp</samp></dt>
269
+ <dd><p>For swr only, set maximum factor by which data is stretched/squeezed to make it
270
+ match the timestamps. Must be a non-negative double float value, default value
271
+ is 0.
272
+ </p>
273
+ </dd>
274
+ <dt><samp class="option">matrix_encoding</samp></dt>
275
+ <dd><p>Select matrixed stereo encoding.
276
+ </p>
277
+ <p>It accepts the following values:
278
+ </p><dl class="table">
279
+ <dt>&lsquo;<samp class="samp">none</samp>&rsquo;</dt>
280
+ <dd><p>select none
281
+ </p></dd>
282
+ <dt>&lsquo;<samp class="samp">dolby</samp>&rsquo;</dt>
283
+ <dd><p>select Dolby
284
+ </p></dd>
285
+ <dt>&lsquo;<samp class="samp">dplii</samp>&rsquo;</dt>
286
+ <dd><p>select Dolby Pro Logic II
287
+ </p></dd>
288
+ </dl>
289
+
290
+ <p>Default value is <code class="code">none</code>.
291
+ </p>
292
+ </dd>
293
+ <dt><samp class="option">filter_type</samp></dt>
294
+ <dd><p>For swr only, select resampling filter type. This only affects resampling
295
+ operations.
296
+ </p>
297
+ <p>It accepts the following values:
298
+ </p><dl class="table">
299
+ <dt>&lsquo;<samp class="samp">cubic</samp>&rsquo;</dt>
300
+ <dd><p>select cubic
301
+ </p></dd>
302
+ <dt>&lsquo;<samp class="samp">blackman_nuttall</samp>&rsquo;</dt>
303
+ <dd><p>select Blackman Nuttall windowed sinc
304
+ </p></dd>
305
+ <dt>&lsquo;<samp class="samp">kaiser</samp>&rsquo;</dt>
306
+ <dd><p>select Kaiser windowed sinc
307
+ </p></dd>
308
+ </dl>
309
+
310
+ </dd>
311
+ <dt><samp class="option">kaiser_beta</samp></dt>
312
+ <dd><p>For swr only, set Kaiser window beta value. Must be a double float value in the
313
+ interval [2,16], default value is 9.
314
+ </p>
315
+ </dd>
316
+ <dt><samp class="option">output_sample_bits</samp></dt>
317
+ <dd><p>For swr only, set number of used output sample bits for dithering. Must be an integer in the
318
+ interval [0,64], default value is 0, which means it&rsquo;s not used.
319
+ </p>
320
+ </dd>
321
+ </dl>
322
+
323
+
324
+ <a name="See-Also"></a>
325
+ <h2 class="chapter">3 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
326
+
327
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
328
+ <a class="url" href="libswresample.html">libswresample</a>
329
+ </p>
330
+
331
+ <a name="Authors"></a>
332
+ <h2 class="chapter">4 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
333
+
334
+ <p>The FFmpeg developers.
335
+ </p>
336
+ <p>For details about the authorship, see the Git history of the project
337
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
338
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
339
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
340
+ </p>
341
+ <p>Maintainers for the specific components are listed in the file
342
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
343
+ </p>
344
+
345
+ <p style="font-size: small;">
346
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
347
+ </p>
348
+ </div>
349
+ </body>
350
+ </html>
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-scaler.html ADDED
@@ -0,0 +1,254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ FFmpeg Scaler Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ FFmpeg Scaler Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-Scaler-Options" href="#Scaler-Options">2 Scaler Options</a></li>
30
+ <li><a id="toc-See-Also" href="#See-Also">3 See Also</a></li>
31
+ <li><a id="toc-Authors" href="#Authors">4 Authors</a></li>
32
+ </ul>
33
+ </div>
34
+ </div>
35
+
36
+ <a name="Description"></a>
37
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
38
+
39
+ <p>The FFmpeg rescaler provides a high-level interface to the libswscale
40
+ library image conversion utilities. In particular it allows one to perform
41
+ image rescaling and pixel format conversion.
42
+ </p>
43
+
44
+ <a class="anchor" id="scaler_005foptions"></a><a name="Scaler-Options"></a>
45
+ <h2 class="chapter">2 Scaler Options<span class="pull-right"><a class="anchor hidden-xs" href="#Scaler-Options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Scaler-Options" aria-hidden="true">TOC</a></span></h2>
46
+
47
+ <p>The video scaler supports the following named options.
48
+ </p>
49
+ <p>Options may be set by specifying -<var class="var">option</var> <var class="var">value</var> in the
50
+ FFmpeg tools, with a few API-only exceptions noted below.
51
+ For programmatic use, they can be set explicitly in the
52
+ <code class="code">SwsContext</code> options or through the <samp class="file">libavutil/opt.h</samp> API.
53
+ </p>
54
+ <dl class="table">
55
+ <dd>
56
+ <a class="anchor" id="sws_005fflags"></a></dd>
57
+ <dt><samp class="option">sws_flags</samp></dt>
58
+ <dd><p>Set the scaler flags. This is also used to set the scaling
59
+ algorithm. Only a single algorithm should be selected. Default
60
+ value is &lsquo;<samp class="samp">bicubic</samp>&rsquo;.
61
+ </p>
62
+ <p>It accepts the following values:
63
+ </p><dl class="table">
64
+ <dt>&lsquo;<samp class="samp">fast_bilinear</samp>&rsquo;</dt>
65
+ <dd><p>Select fast bilinear scaling algorithm.
66
+ </p>
67
+ </dd>
68
+ <dt>&lsquo;<samp class="samp">bilinear</samp>&rsquo;</dt>
69
+ <dd><p>Select bilinear scaling algorithm.
70
+ </p>
71
+ </dd>
72
+ <dt>&lsquo;<samp class="samp">bicubic</samp>&rsquo;</dt>
73
+ <dd><p>Select bicubic scaling algorithm.
74
+ </p>
75
+ </dd>
76
+ <dt>&lsquo;<samp class="samp">experimental</samp>&rsquo;</dt>
77
+ <dd><p>Select experimental scaling algorithm.
78
+ </p>
79
+ </dd>
80
+ <dt>&lsquo;<samp class="samp">neighbor</samp>&rsquo;</dt>
81
+ <dd><p>Select nearest neighbor rescaling algorithm.
82
+ </p>
83
+ </dd>
84
+ <dt>&lsquo;<samp class="samp">area</samp>&rsquo;</dt>
85
+ <dd><p>Select averaging area rescaling algorithm.
86
+ </p>
87
+ </dd>
88
+ <dt>&lsquo;<samp class="samp">bicublin</samp>&rsquo;</dt>
89
+ <dd><p>Select bicubic scaling algorithm for the luma component, bilinear for
90
+ chroma components.
91
+ </p>
92
+ </dd>
93
+ <dt>&lsquo;<samp class="samp">gauss</samp>&rsquo;</dt>
94
+ <dd><p>Select Gaussian rescaling algorithm.
95
+ </p>
96
+ </dd>
97
+ <dt>&lsquo;<samp class="samp">sinc</samp>&rsquo;</dt>
98
+ <dd><p>Select sinc rescaling algorithm.
99
+ </p>
100
+ </dd>
101
+ <dt>&lsquo;<samp class="samp">lanczos</samp>&rsquo;</dt>
102
+ <dd><p>Select Lanczos rescaling algorithm. The default width (alpha) is 3 and can be
103
+ changed by setting <code class="code">param0</code>.
104
+ </p>
105
+ </dd>
106
+ <dt>&lsquo;<samp class="samp">spline</samp>&rsquo;</dt>
107
+ <dd><p>Select natural bicubic spline rescaling algorithm.
108
+ </p>
109
+ </dd>
110
+ <dt>&lsquo;<samp class="samp">print_info</samp>&rsquo;</dt>
111
+ <dd><p>Enable printing/debug logging.
112
+ </p>
113
+ </dd>
114
+ <dt>&lsquo;<samp class="samp">accurate_rnd</samp>&rsquo;</dt>
115
+ <dd><p>Enable accurate rounding.
116
+ </p>
117
+ </dd>
118
+ <dt>&lsquo;<samp class="samp">full_chroma_int</samp>&rsquo;</dt>
119
+ <dd><p>Enable full chroma interpolation.
120
+ </p>
121
+ </dd>
122
+ <dt>&lsquo;<samp class="samp">full_chroma_inp</samp>&rsquo;</dt>
123
+ <dd><p>Select full chroma input.
124
+ </p>
125
+ </dd>
126
+ <dt>&lsquo;<samp class="samp">bitexact</samp>&rsquo;</dt>
127
+ <dd><p>Enable bitexact output.
128
+ </p></dd>
129
+ </dl>
130
+
131
+ </dd>
132
+ <dt><samp class="option">srcw <var class="var">(API only)</var></samp></dt>
133
+ <dd><p>Set source width.
134
+ </p>
135
+ </dd>
136
+ <dt><samp class="option">srch <var class="var">(API only)</var></samp></dt>
137
+ <dd><p>Set source height.
138
+ </p>
139
+ </dd>
140
+ <dt><samp class="option">dstw <var class="var">(API only)</var></samp></dt>
141
+ <dd><p>Set destination width.
142
+ </p>
143
+ </dd>
144
+ <dt><samp class="option">dsth <var class="var">(API only)</var></samp></dt>
145
+ <dd><p>Set destination height.
146
+ </p>
147
+ </dd>
148
+ <dt><samp class="option">src_format <var class="var">(API only)</var></samp></dt>
149
+ <dd><p>Set source pixel format (must be expressed as an integer).
150
+ </p>
151
+ </dd>
152
+ <dt><samp class="option">dst_format <var class="var">(API only)</var></samp></dt>
153
+ <dd><p>Set destination pixel format (must be expressed as an integer).
154
+ </p>
155
+ </dd>
156
+ <dt><samp class="option">src_range <var class="var">(boolean)</var></samp></dt>
157
+ <dd><p>If value is set to <code class="code">1</code>, indicates source is full range. Default value is
158
+ <code class="code">0</code>, which indicates source is limited range.
159
+ </p>
160
+ </dd>
161
+ <dt><samp class="option">dst_range <var class="var">(boolean)</var></samp></dt>
162
+ <dd><p>If value is set to <code class="code">1</code>, enable full range for destination. Default value
163
+ is <code class="code">0</code>, which enables limited range.
164
+ </p>
165
+ <a class="anchor" id="sws_005fparams"></a></dd>
166
+ <dt><samp class="option">param0, param1</samp></dt>
167
+ <dd><p>Set scaling algorithm parameters. The specified values are specific of
168
+ some scaling algorithms and ignored by others. The specified values
169
+ are floating point number values.
170
+ </p>
171
+ </dd>
172
+ <dt><samp class="option">sws_dither</samp></dt>
173
+ <dd><p>Set the dithering algorithm. Accepts one of the following
174
+ values. Default value is &lsquo;<samp class="samp">auto</samp>&rsquo;.
175
+ </p>
176
+ <dl class="table">
177
+ <dt>&lsquo;<samp class="samp">auto</samp>&rsquo;</dt>
178
+ <dd><p>automatic choice
179
+ </p>
180
+ </dd>
181
+ <dt>&lsquo;<samp class="samp">none</samp>&rsquo;</dt>
182
+ <dd><p>no dithering
183
+ </p>
184
+ </dd>
185
+ <dt>&lsquo;<samp class="samp">bayer</samp>&rsquo;</dt>
186
+ <dd><p>bayer dither
187
+ </p>
188
+ </dd>
189
+ <dt>&lsquo;<samp class="samp">ed</samp>&rsquo;</dt>
190
+ <dd><p>error diffusion dither
191
+ </p>
192
+ </dd>
193
+ <dt>&lsquo;<samp class="samp">a_dither</samp>&rsquo;</dt>
194
+ <dd><p>arithmetic dither, based using addition
195
+ </p>
196
+ </dd>
197
+ <dt>&lsquo;<samp class="samp">x_dither</samp>&rsquo;</dt>
198
+ <dd><p>arithmetic dither, based using xor (more random/less apparent patterning that
199
+ a_dither).
200
+ </p>
201
+ </dd>
202
+ </dl>
203
+
204
+ </dd>
205
+ <dt><samp class="option">alphablend</samp></dt>
206
+ <dd><p>Set the alpha blending to use when the input has alpha but the output does not.
207
+ Default value is &lsquo;<samp class="samp">none</samp>&rsquo;.
208
+ </p>
209
+ <dl class="table">
210
+ <dt>&lsquo;<samp class="samp">uniform_color</samp>&rsquo;</dt>
211
+ <dd><p>Blend onto a uniform background color
212
+ </p>
213
+ </dd>
214
+ <dt>&lsquo;<samp class="samp">checkerboard</samp>&rsquo;</dt>
215
+ <dd><p>Blend onto a checkerboard
216
+ </p>
217
+ </dd>
218
+ <dt>&lsquo;<samp class="samp">none</samp>&rsquo;</dt>
219
+ <dd><p>No blending
220
+ </p>
221
+ </dd>
222
+ </dl>
223
+
224
+ </dd>
225
+ </dl>
226
+
227
+
228
+ <a name="See-Also"></a>
229
+ <h2 class="chapter">3 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
230
+
231
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
232
+ <a class="url" href="libswscale.html">libswscale</a>
233
+ </p>
234
+
235
+ <a name="Authors"></a>
236
+ <h2 class="chapter">4 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
237
+
238
+ <p>The FFmpeg developers.
239
+ </p>
240
+ <p>For details about the authorship, see the Git history of the project
241
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
242
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
243
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
244
+ </p>
245
+ <p>Maintainers for the specific components are listed in the file
246
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
247
+ </p>
248
+
249
+ <p style="font-size: small;">
250
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
251
+ </p>
252
+ </div>
253
+ </body>
254
+ </html>
ffmpeg-master-latest-win64-gpl/doc/ffmpeg-utils.html ADDED
@@ -0,0 +1,1547 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ FFmpeg Utilities Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ FFmpeg Utilities Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-Syntax" href="#Syntax">2 Syntax</a>
30
+ <ul class="toc-numbered-mark">
31
+ <li><a id="toc-Quoting-and-escaping" href="#Quoting-and-escaping">2.1 Quoting and escaping</a>
32
+ <ul class="toc-numbered-mark">
33
+ <li><a id="toc-Examples" href="#Examples">2.1.1 Examples</a></li>
34
+ </ul></li>
35
+ <li><a id="toc-Date" href="#Date">2.2 Date</a></li>
36
+ <li><a id="toc-Time-duration" href="#Time-duration">2.3 Time duration</a>
37
+ <ul class="toc-numbered-mark">
38
+ <li><a id="toc-Examples-1" href="#Examples-1">2.3.1 Examples</a></li>
39
+ </ul></li>
40
+ <li><a id="toc-Video-size" href="#Video-size">2.4 Video size</a></li>
41
+ <li><a id="toc-Video-rate" href="#Video-rate">2.5 Video rate</a></li>
42
+ <li><a id="toc-Ratio" href="#Ratio">2.6 Ratio</a></li>
43
+ <li><a id="toc-Color" href="#Color">2.7 Color</a></li>
44
+ <li><a id="toc-Channel-Layout" href="#Channel-Layout">2.8 Channel Layout</a></li>
45
+ </ul></li>
46
+ <li><a id="toc-Expression-Evaluation" href="#Expression-Evaluation">3 Expression Evaluation</a></li>
47
+ <li><a id="toc-See-Also" href="#See-Also">4 See Also</a></li>
48
+ <li><a id="toc-Authors" href="#Authors">5 Authors</a></li>
49
+ </ul>
50
+ </div>
51
+ </div>
52
+
53
+ <a name="Description"></a>
54
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
55
+
56
+ <p>This document describes some generic features and utilities provided
57
+ by the libavutil library.
58
+ </p>
59
+
60
+ <a name="Syntax"></a>
61
+ <h2 class="chapter">2 Syntax<span class="pull-right"><a class="anchor hidden-xs" href="#Syntax" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Syntax" aria-hidden="true">TOC</a></span></h2>
62
+
63
+ <p>This section documents the syntax and formats employed by the FFmpeg
64
+ libraries and tools.
65
+ </p>
66
+ <a class="anchor" id="quoting_005fand_005fescaping"></a><a name="Quoting-and-escaping"></a>
67
+ <h3 class="section">2.1 Quoting and escaping<span class="pull-right"><a class="anchor hidden-xs" href="#Quoting-and-escaping" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Quoting-and-escaping" aria-hidden="true">TOC</a></span></h3>
68
+
69
+ <p>FFmpeg adopts the following quoting and escaping mechanism, unless
70
+ explicitly specified. The following rules are applied:
71
+ </p>
72
+ <ul class="itemize mark-bullet">
73
+ <li>&lsquo;<samp class="samp">'</samp>&rsquo; and &lsquo;<samp class="samp">\</samp>&rsquo; are special characters (respectively used for
74
+ quoting and escaping). In addition to them, there might be other
75
+ special characters depending on the specific syntax where the escaping
76
+ and quoting are employed.
77
+
78
+ </li><li>A special character is escaped by prefixing it with a &lsquo;<samp class="samp">\</samp>&rsquo;.
79
+
80
+ </li><li>All characters enclosed between &lsquo;<samp class="samp">''</samp>&rsquo; are included literally in the
81
+ parsed string. The quote character &lsquo;<samp class="samp">'</samp>&rsquo; itself cannot be quoted,
82
+ so you may need to close the quote and escape it.
83
+
84
+ </li><li>Leading and trailing whitespaces, unless escaped or quoted, are
85
+ removed from the parsed string.
86
+ </li></ul>
87
+
88
+ <p>Note that you may need to add a second level of escaping when using
89
+ the command line or a script, which depends on the syntax of the
90
+ adopted shell language.
91
+ </p>
92
+ <p>The function <code class="code">av_get_token</code> defined in
93
+ <samp class="file">libavutil/avstring.h</samp> can be used to parse a token quoted or
94
+ escaped according to the rules defined above.
95
+ </p>
96
+ <p>The tool <samp class="file">tools/ffescape</samp> in the FFmpeg source tree can be used
97
+ to automatically quote or escape a string in a script.
98
+ </p>
99
+ <a name="Examples"></a>
100
+ <h4 class="subsection">2.1.1 Examples<span class="pull-right"><a class="anchor hidden-xs" href="#Examples" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Examples" aria-hidden="true">TOC</a></span></h4>
101
+
102
+ <ul class="itemize mark-bullet">
103
+ <li>Escape the string <code class="code">Crime d'Amour</code> containing the <code class="code">'</code> special
104
+ character:
105
+ <div class="example">
106
+ <pre class="example-preformatted">Crime d\'Amour
107
+ </pre></div>
108
+
109
+ </li><li>The string above contains a quote, so the <code class="code">'</code> needs to be escaped
110
+ when quoting it:
111
+ <div class="example">
112
+ <pre class="example-preformatted">'Crime d'\''Amour'
113
+ </pre></div>
114
+
115
+ </li><li>Include leading or trailing whitespaces using quoting:
116
+ <div class="example">
117
+ <pre class="example-preformatted">' this string starts and ends with whitespaces '
118
+ </pre></div>
119
+
120
+ </li><li>Escaping and quoting can be mixed together:
121
+ <div class="example">
122
+ <pre class="example-preformatted">' The string '\'string\'' is a string '
123
+ </pre></div>
124
+
125
+ </li><li>To include a literal &lsquo;<samp class="samp">\</samp>&rsquo; you can use either escaping or quoting:
126
+ <div class="example">
127
+ <pre class="example-preformatted">'c:\foo' can be written as c:\\foo
128
+ </pre></div>
129
+ </li></ul>
130
+
131
+ <a class="anchor" id="date-syntax"></a><a name="Date"></a>
132
+ <h3 class="section">2.2 Date<span class="pull-right"><a class="anchor hidden-xs" href="#Date" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Date" aria-hidden="true">TOC</a></span></h3>
133
+
134
+ <p>The accepted syntax is:
135
+ </p><div class="example">
136
+ <pre class="example-preformatted">[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
137
+ now
138
+ </pre></div>
139
+
140
+ <p>If the value is &quot;now&quot; it takes the current time.
141
+ </p>
142
+ <p>Time is local time unless Z is appended, in which case it is
143
+ interpreted as UTC.
144
+ If the year-month-day part is not specified it takes the current
145
+ year-month-day.
146
+ </p>
147
+ <a class="anchor" id="time-duration-syntax"></a><a name="Time-duration"></a>
148
+ <h3 class="section">2.3 Time duration<span class="pull-right"><a class="anchor hidden-xs" href="#Time-duration" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Time-duration" aria-hidden="true">TOC</a></span></h3>
149
+
150
+ <p>There are two accepted syntaxes for expressing time duration.
151
+ </p>
152
+ <div class="example">
153
+ <pre class="example-preformatted">[-][<var class="var">HH</var>:]<var class="var">MM</var>:<var class="var">SS</var>[.<var class="var">m</var>...]
154
+ </pre></div>
155
+
156
+ <p><var class="var">HH</var> expresses the number of hours, <var class="var">MM</var> the number of minutes
157
+ for a maximum of 2 digits, and <var class="var">SS</var> the number of seconds for a
158
+ maximum of 2 digits. The <var class="var">m</var> at the end expresses decimal value for
159
+ <var class="var">SS</var>.
160
+ </p>
161
+ <p><em class="emph">or</em>
162
+ </p>
163
+ <div class="example">
164
+ <pre class="example-preformatted">[-]<var class="var">S</var>+[.<var class="var">m</var>...][s|ms|us]
165
+ </pre></div>
166
+
167
+ <p><var class="var">S</var> expresses the number of seconds, with the optional decimal part
168
+ <var class="var">m</var>. The optional literal suffixes &lsquo;<samp class="samp">s</samp>&rsquo;, &lsquo;<samp class="samp">ms</samp>&rsquo; or &lsquo;<samp class="samp">us</samp>&rsquo;
169
+ indicate to interpret the value as seconds, milliseconds or microseconds,
170
+ respectively.
171
+ </p>
172
+ <p>In both expressions, the optional &lsquo;<samp class="samp">-</samp>&rsquo; indicates negative duration.
173
+ </p>
174
+ <a name="Examples-1"></a>
175
+ <h4 class="subsection">2.3.1 Examples<span class="pull-right"><a class="anchor hidden-xs" href="#Examples-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Examples-1" aria-hidden="true">TOC</a></span></h4>
176
+
177
+ <p>The following examples are all valid time duration:
178
+ </p>
179
+ <dl class="table">
180
+ <dt>&lsquo;<samp class="samp">55</samp>&rsquo;</dt>
181
+ <dd><p>55 seconds
182
+ </p>
183
+ </dd>
184
+ <dt>&lsquo;<samp class="samp">0.2</samp>&rsquo;</dt>
185
+ <dd><p>0.2 seconds
186
+ </p>
187
+ </dd>
188
+ <dt>&lsquo;<samp class="samp">200ms</samp>&rsquo;</dt>
189
+ <dd><p>200 milliseconds, that&rsquo;s 0.2s
190
+ </p>
191
+ </dd>
192
+ <dt>&lsquo;<samp class="samp">200000us</samp>&rsquo;</dt>
193
+ <dd><p>200000 microseconds, that&rsquo;s 0.2s
194
+ </p>
195
+ </dd>
196
+ <dt>&lsquo;<samp class="samp">12:03:45</samp>&rsquo;</dt>
197
+ <dd><p>12 hours, 03 minutes and 45 seconds
198
+ </p>
199
+ </dd>
200
+ <dt>&lsquo;<samp class="samp">23.189</samp>&rsquo;</dt>
201
+ <dd><p>23.189 seconds
202
+ </p></dd>
203
+ </dl>
204
+
205
+ <a class="anchor" id="video-size-syntax"></a><a name="Video-size"></a>
206
+ <h3 class="section">2.4 Video size<span class="pull-right"><a class="anchor hidden-xs" href="#Video-size" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Video-size" aria-hidden="true">TOC</a></span></h3>
207
+ <p>Specify the size of the sourced video, it may be a string of the form
208
+ <var class="var">width</var>x<var class="var">height</var>, or the name of a size abbreviation.
209
+ </p>
210
+ <p>The following abbreviations are recognized:
211
+ </p><dl class="table">
212
+ <dt>&lsquo;<samp class="samp">ntsc</samp>&rsquo;</dt>
213
+ <dd><p>720x480
214
+ </p></dd>
215
+ <dt>&lsquo;<samp class="samp">pal</samp>&rsquo;</dt>
216
+ <dd><p>720x576
217
+ </p></dd>
218
+ <dt>&lsquo;<samp class="samp">qntsc</samp>&rsquo;</dt>
219
+ <dd><p>352x240
220
+ </p></dd>
221
+ <dt>&lsquo;<samp class="samp">qpal</samp>&rsquo;</dt>
222
+ <dd><p>352x288
223
+ </p></dd>
224
+ <dt>&lsquo;<samp class="samp">sntsc</samp>&rsquo;</dt>
225
+ <dd><p>640x480
226
+ </p></dd>
227
+ <dt>&lsquo;<samp class="samp">spal</samp>&rsquo;</dt>
228
+ <dd><p>768x576
229
+ </p></dd>
230
+ <dt>&lsquo;<samp class="samp">film</samp>&rsquo;</dt>
231
+ <dd><p>352x240
232
+ </p></dd>
233
+ <dt>&lsquo;<samp class="samp">ntsc-film</samp>&rsquo;</dt>
234
+ <dd><p>352x240
235
+ </p></dd>
236
+ <dt>&lsquo;<samp class="samp">sqcif</samp>&rsquo;</dt>
237
+ <dd><p>128x96
238
+ </p></dd>
239
+ <dt>&lsquo;<samp class="samp">qcif</samp>&rsquo;</dt>
240
+ <dd><p>176x144
241
+ </p></dd>
242
+ <dt>&lsquo;<samp class="samp">cif</samp>&rsquo;</dt>
243
+ <dd><p>352x288
244
+ </p></dd>
245
+ <dt>&lsquo;<samp class="samp">4cif</samp>&rsquo;</dt>
246
+ <dd><p>704x576
247
+ </p></dd>
248
+ <dt>&lsquo;<samp class="samp">16cif</samp>&rsquo;</dt>
249
+ <dd><p>1408x1152
250
+ </p></dd>
251
+ <dt>&lsquo;<samp class="samp">qqvga</samp>&rsquo;</dt>
252
+ <dd><p>160x120
253
+ </p></dd>
254
+ <dt>&lsquo;<samp class="samp">qvga</samp>&rsquo;</dt>
255
+ <dd><p>320x240
256
+ </p></dd>
257
+ <dt>&lsquo;<samp class="samp">vga</samp>&rsquo;</dt>
258
+ <dd><p>640x480
259
+ </p></dd>
260
+ <dt>&lsquo;<samp class="samp">svga</samp>&rsquo;</dt>
261
+ <dd><p>800x600
262
+ </p></dd>
263
+ <dt>&lsquo;<samp class="samp">xga</samp>&rsquo;</dt>
264
+ <dd><p>1024x768
265
+ </p></dd>
266
+ <dt>&lsquo;<samp class="samp">uxga</samp>&rsquo;</dt>
267
+ <dd><p>1600x1200
268
+ </p></dd>
269
+ <dt>&lsquo;<samp class="samp">qxga</samp>&rsquo;</dt>
270
+ <dd><p>2048x1536
271
+ </p></dd>
272
+ <dt>&lsquo;<samp class="samp">sxga</samp>&rsquo;</dt>
273
+ <dd><p>1280x1024
274
+ </p></dd>
275
+ <dt>&lsquo;<samp class="samp">qsxga</samp>&rsquo;</dt>
276
+ <dd><p>2560x2048
277
+ </p></dd>
278
+ <dt>&lsquo;<samp class="samp">hsxga</samp>&rsquo;</dt>
279
+ <dd><p>5120x4096
280
+ </p></dd>
281
+ <dt>&lsquo;<samp class="samp">wvga</samp>&rsquo;</dt>
282
+ <dd><p>852x480
283
+ </p></dd>
284
+ <dt>&lsquo;<samp class="samp">wxga</samp>&rsquo;</dt>
285
+ <dd><p>1366x768
286
+ </p></dd>
287
+ <dt>&lsquo;<samp class="samp">wsxga</samp>&rsquo;</dt>
288
+ <dd><p>1600x1024
289
+ </p></dd>
290
+ <dt>&lsquo;<samp class="samp">wuxga</samp>&rsquo;</dt>
291
+ <dd><p>1920x1200
292
+ </p></dd>
293
+ <dt>&lsquo;<samp class="samp">woxga</samp>&rsquo;</dt>
294
+ <dd><p>2560x1600
295
+ </p></dd>
296
+ <dt>&lsquo;<samp class="samp">wqsxga</samp>&rsquo;</dt>
297
+ <dd><p>3200x2048
298
+ </p></dd>
299
+ <dt>&lsquo;<samp class="samp">wquxga</samp>&rsquo;</dt>
300
+ <dd><p>3840x2400
301
+ </p></dd>
302
+ <dt>&lsquo;<samp class="samp">whsxga</samp>&rsquo;</dt>
303
+ <dd><p>6400x4096
304
+ </p></dd>
305
+ <dt>&lsquo;<samp class="samp">whuxga</samp>&rsquo;</dt>
306
+ <dd><p>7680x4800
307
+ </p></dd>
308
+ <dt>&lsquo;<samp class="samp">cga</samp>&rsquo;</dt>
309
+ <dd><p>320x200
310
+ </p></dd>
311
+ <dt>&lsquo;<samp class="samp">ega</samp>&rsquo;</dt>
312
+ <dd><p>640x350
313
+ </p></dd>
314
+ <dt>&lsquo;<samp class="samp">hd480</samp>&rsquo;</dt>
315
+ <dd><p>852x480
316
+ </p></dd>
317
+ <dt>&lsquo;<samp class="samp">hd720</samp>&rsquo;</dt>
318
+ <dd><p>1280x720
319
+ </p></dd>
320
+ <dt>&lsquo;<samp class="samp">hd1080</samp>&rsquo;</dt>
321
+ <dd><p>1920x1080
322
+ </p></dd>
323
+ <dt>&lsquo;<samp class="samp">2k</samp>&rsquo;</dt>
324
+ <dd><p>2048x1080
325
+ </p></dd>
326
+ <dt>&lsquo;<samp class="samp">2kflat</samp>&rsquo;</dt>
327
+ <dd><p>1998x1080
328
+ </p></dd>
329
+ <dt>&lsquo;<samp class="samp">2kscope</samp>&rsquo;</dt>
330
+ <dd><p>2048x858
331
+ </p></dd>
332
+ <dt>&lsquo;<samp class="samp">4k</samp>&rsquo;</dt>
333
+ <dd><p>4096x2160
334
+ </p></dd>
335
+ <dt>&lsquo;<samp class="samp">4kflat</samp>&rsquo;</dt>
336
+ <dd><p>3996x2160
337
+ </p></dd>
338
+ <dt>&lsquo;<samp class="samp">4kscope</samp>&rsquo;</dt>
339
+ <dd><p>4096x1716
340
+ </p></dd>
341
+ <dt>&lsquo;<samp class="samp">nhd</samp>&rsquo;</dt>
342
+ <dd><p>640x360
343
+ </p></dd>
344
+ <dt>&lsquo;<samp class="samp">hqvga</samp>&rsquo;</dt>
345
+ <dd><p>240x160
346
+ </p></dd>
347
+ <dt>&lsquo;<samp class="samp">wqvga</samp>&rsquo;</dt>
348
+ <dd><p>400x240
349
+ </p></dd>
350
+ <dt>&lsquo;<samp class="samp">fwqvga</samp>&rsquo;</dt>
351
+ <dd><p>432x240
352
+ </p></dd>
353
+ <dt>&lsquo;<samp class="samp">hvga</samp>&rsquo;</dt>
354
+ <dd><p>480x320
355
+ </p></dd>
356
+ <dt>&lsquo;<samp class="samp">qhd</samp>&rsquo;</dt>
357
+ <dd><p>960x540
358
+ </p></dd>
359
+ <dt>&lsquo;<samp class="samp">2kdci</samp>&rsquo;</dt>
360
+ <dd><p>2048x1080
361
+ </p></dd>
362
+ <dt>&lsquo;<samp class="samp">4kdci</samp>&rsquo;</dt>
363
+ <dd><p>4096x2160
364
+ </p></dd>
365
+ <dt>&lsquo;<samp class="samp">uhd2160</samp>&rsquo;</dt>
366
+ <dd><p>3840x2160
367
+ </p></dd>
368
+ <dt>&lsquo;<samp class="samp">uhd4320</samp>&rsquo;</dt>
369
+ <dd><p>7680x4320
370
+ </p></dd>
371
+ </dl>
372
+
373
+ <a class="anchor" id="video-rate-syntax"></a><a name="Video-rate"></a>
374
+ <h3 class="section">2.5 Video rate<span class="pull-right"><a class="anchor hidden-xs" href="#Video-rate" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Video-rate" aria-hidden="true">TOC</a></span></h3>
375
+
376
+ <p>Specify the frame rate of a video, expressed as the number of frames
377
+ generated per second. It has to be a string in the format
378
+ <var class="var">frame_rate_num</var>/<var class="var">frame_rate_den</var>, an integer number, a float
379
+ number or a valid video frame rate abbreviation.
380
+ </p>
381
+ <p>The following abbreviations are recognized:
382
+ </p><dl class="table">
383
+ <dt>&lsquo;<samp class="samp">ntsc</samp>&rsquo;</dt>
384
+ <dd><p>30000/1001
385
+ </p></dd>
386
+ <dt>&lsquo;<samp class="samp">pal</samp>&rsquo;</dt>
387
+ <dd><p>25/1
388
+ </p></dd>
389
+ <dt>&lsquo;<samp class="samp">qntsc</samp>&rsquo;</dt>
390
+ <dd><p>30000/1001
391
+ </p></dd>
392
+ <dt>&lsquo;<samp class="samp">qpal</samp>&rsquo;</dt>
393
+ <dd><p>25/1
394
+ </p></dd>
395
+ <dt>&lsquo;<samp class="samp">sntsc</samp>&rsquo;</dt>
396
+ <dd><p>30000/1001
397
+ </p></dd>
398
+ <dt>&lsquo;<samp class="samp">spal</samp>&rsquo;</dt>
399
+ <dd><p>25/1
400
+ </p></dd>
401
+ <dt>&lsquo;<samp class="samp">film</samp>&rsquo;</dt>
402
+ <dd><p>24/1
403
+ </p></dd>
404
+ <dt>&lsquo;<samp class="samp">ntsc-film</samp>&rsquo;</dt>
405
+ <dd><p>24000/1001
406
+ </p></dd>
407
+ </dl>
408
+
409
+ <a class="anchor" id="ratio-syntax"></a><a name="Ratio"></a>
410
+ <h3 class="section">2.6 Ratio<span class="pull-right"><a class="anchor hidden-xs" href="#Ratio" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Ratio" aria-hidden="true">TOC</a></span></h3>
411
+
412
+ <p>A ratio can be expressed as an expression, or in the form
413
+ <var class="var">numerator</var>:<var class="var">denominator</var>.
414
+ </p>
415
+ <p>Note that a ratio with infinite (1/0) or negative value is
416
+ considered valid, so you should check on the returned value if you
417
+ want to exclude those values.
418
+ </p>
419
+ <p>The undefined value can be expressed using the &quot;0:0&quot; string.
420
+ </p>
421
+ <a class="anchor" id="color-syntax"></a><a name="Color"></a>
422
+ <h3 class="section">2.7 Color<span class="pull-right"><a class="anchor hidden-xs" href="#Color" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Color" aria-hidden="true">TOC</a></span></h3>
423
+
424
+ <p>It can be the name of a color as defined below (case insensitive match) or a
425
+ <code class="code">[0x|#]RRGGBB[AA]</code> sequence, possibly followed by @ and a string
426
+ representing the alpha component.
427
+ </p>
428
+ <p>The alpha component may be a string composed by &quot;0x&quot; followed by an
429
+ hexadecimal number or a decimal number between 0.0 and 1.0, which
430
+ represents the opacity value (&lsquo;<samp class="samp">0x00</samp>&rsquo; or &lsquo;<samp class="samp">0.0</samp>&rsquo; means completely
431
+ transparent, &lsquo;<samp class="samp">0xff</samp>&rsquo; or &lsquo;<samp class="samp">1.0</samp>&rsquo; completely opaque). If the alpha
432
+ component is not specified then &lsquo;<samp class="samp">0xff</samp>&rsquo; is assumed.
433
+ </p>
434
+ <p>The string &lsquo;<samp class="samp">random</samp>&rsquo; will result in a random color.
435
+ </p>
436
+ <p>The following names of colors are recognized:
437
+ </p><dl class="table">
438
+ <dt>&lsquo;<samp class="samp">AliceBlue</samp>&rsquo;</dt>
439
+ <dd><p>0xF0F8FF
440
+ </p></dd>
441
+ <dt>&lsquo;<samp class="samp">AntiqueWhite</samp>&rsquo;</dt>
442
+ <dd><p>0xFAEBD7
443
+ </p></dd>
444
+ <dt>&lsquo;<samp class="samp">Aqua</samp>&rsquo;</dt>
445
+ <dd><p>0x00FFFF
446
+ </p></dd>
447
+ <dt>&lsquo;<samp class="samp">Aquamarine</samp>&rsquo;</dt>
448
+ <dd><p>0x7FFFD4
449
+ </p></dd>
450
+ <dt>&lsquo;<samp class="samp">Azure</samp>&rsquo;</dt>
451
+ <dd><p>0xF0FFFF
452
+ </p></dd>
453
+ <dt>&lsquo;<samp class="samp">Beige</samp>&rsquo;</dt>
454
+ <dd><p>0xF5F5DC
455
+ </p></dd>
456
+ <dt>&lsquo;<samp class="samp">Bisque</samp>&rsquo;</dt>
457
+ <dd><p>0xFFE4C4
458
+ </p></dd>
459
+ <dt>&lsquo;<samp class="samp">Black</samp>&rsquo;</dt>
460
+ <dd><p>0x000000
461
+ </p></dd>
462
+ <dt>&lsquo;<samp class="samp">BlanchedAlmond</samp>&rsquo;</dt>
463
+ <dd><p>0xFFEBCD
464
+ </p></dd>
465
+ <dt>&lsquo;<samp class="samp">Blue</samp>&rsquo;</dt>
466
+ <dd><p>0x0000FF
467
+ </p></dd>
468
+ <dt>&lsquo;<samp class="samp">BlueViolet</samp>&rsquo;</dt>
469
+ <dd><p>0x8A2BE2
470
+ </p></dd>
471
+ <dt>&lsquo;<samp class="samp">Brown</samp>&rsquo;</dt>
472
+ <dd><p>0xA52A2A
473
+ </p></dd>
474
+ <dt>&lsquo;<samp class="samp">BurlyWood</samp>&rsquo;</dt>
475
+ <dd><p>0xDEB887
476
+ </p></dd>
477
+ <dt>&lsquo;<samp class="samp">CadetBlue</samp>&rsquo;</dt>
478
+ <dd><p>0x5F9EA0
479
+ </p></dd>
480
+ <dt>&lsquo;<samp class="samp">Chartreuse</samp>&rsquo;</dt>
481
+ <dd><p>0x7FFF00
482
+ </p></dd>
483
+ <dt>&lsquo;<samp class="samp">Chocolate</samp>&rsquo;</dt>
484
+ <dd><p>0xD2691E
485
+ </p></dd>
486
+ <dt>&lsquo;<samp class="samp">Coral</samp>&rsquo;</dt>
487
+ <dd><p>0xFF7F50
488
+ </p></dd>
489
+ <dt>&lsquo;<samp class="samp">CornflowerBlue</samp>&rsquo;</dt>
490
+ <dd><p>0x6495ED
491
+ </p></dd>
492
+ <dt>&lsquo;<samp class="samp">Cornsilk</samp>&rsquo;</dt>
493
+ <dd><p>0xFFF8DC
494
+ </p></dd>
495
+ <dt>&lsquo;<samp class="samp">Crimson</samp>&rsquo;</dt>
496
+ <dd><p>0xDC143C
497
+ </p></dd>
498
+ <dt>&lsquo;<samp class="samp">Cyan</samp>&rsquo;</dt>
499
+ <dd><p>0x00FFFF
500
+ </p></dd>
501
+ <dt>&lsquo;<samp class="samp">DarkBlue</samp>&rsquo;</dt>
502
+ <dd><p>0x00008B
503
+ </p></dd>
504
+ <dt>&lsquo;<samp class="samp">DarkCyan</samp>&rsquo;</dt>
505
+ <dd><p>0x008B8B
506
+ </p></dd>
507
+ <dt>&lsquo;<samp class="samp">DarkGoldenRod</samp>&rsquo;</dt>
508
+ <dd><p>0xB8860B
509
+ </p></dd>
510
+ <dt>&lsquo;<samp class="samp">DarkGray</samp>&rsquo;</dt>
511
+ <dd><p>0xA9A9A9
512
+ </p></dd>
513
+ <dt>&lsquo;<samp class="samp">DarkGreen</samp>&rsquo;</dt>
514
+ <dd><p>0x006400
515
+ </p></dd>
516
+ <dt>&lsquo;<samp class="samp">DarkKhaki</samp>&rsquo;</dt>
517
+ <dd><p>0xBDB76B
518
+ </p></dd>
519
+ <dt>&lsquo;<samp class="samp">DarkMagenta</samp>&rsquo;</dt>
520
+ <dd><p>0x8B008B
521
+ </p></dd>
522
+ <dt>&lsquo;<samp class="samp">DarkOliveGreen</samp>&rsquo;</dt>
523
+ <dd><p>0x556B2F
524
+ </p></dd>
525
+ <dt>&lsquo;<samp class="samp">Darkorange</samp>&rsquo;</dt>
526
+ <dd><p>0xFF8C00
527
+ </p></dd>
528
+ <dt>&lsquo;<samp class="samp">DarkOrchid</samp>&rsquo;</dt>
529
+ <dd><p>0x9932CC
530
+ </p></dd>
531
+ <dt>&lsquo;<samp class="samp">DarkRed</samp>&rsquo;</dt>
532
+ <dd><p>0x8B0000
533
+ </p></dd>
534
+ <dt>&lsquo;<samp class="samp">DarkSalmon</samp>&rsquo;</dt>
535
+ <dd><p>0xE9967A
536
+ </p></dd>
537
+ <dt>&lsquo;<samp class="samp">DarkSeaGreen</samp>&rsquo;</dt>
538
+ <dd><p>0x8FBC8F
539
+ </p></dd>
540
+ <dt>&lsquo;<samp class="samp">DarkSlateBlue</samp>&rsquo;</dt>
541
+ <dd><p>0x483D8B
542
+ </p></dd>
543
+ <dt>&lsquo;<samp class="samp">DarkSlateGray</samp>&rsquo;</dt>
544
+ <dd><p>0x2F4F4F
545
+ </p></dd>
546
+ <dt>&lsquo;<samp class="samp">DarkTurquoise</samp>&rsquo;</dt>
547
+ <dd><p>0x00CED1
548
+ </p></dd>
549
+ <dt>&lsquo;<samp class="samp">DarkViolet</samp>&rsquo;</dt>
550
+ <dd><p>0x9400D3
551
+ </p></dd>
552
+ <dt>&lsquo;<samp class="samp">DeepPink</samp>&rsquo;</dt>
553
+ <dd><p>0xFF1493
554
+ </p></dd>
555
+ <dt>&lsquo;<samp class="samp">DeepSkyBlue</samp>&rsquo;</dt>
556
+ <dd><p>0x00BFFF
557
+ </p></dd>
558
+ <dt>&lsquo;<samp class="samp">DimGray</samp>&rsquo;</dt>
559
+ <dd><p>0x696969
560
+ </p></dd>
561
+ <dt>&lsquo;<samp class="samp">DodgerBlue</samp>&rsquo;</dt>
562
+ <dd><p>0x1E90FF
563
+ </p></dd>
564
+ <dt>&lsquo;<samp class="samp">FireBrick</samp>&rsquo;</dt>
565
+ <dd><p>0xB22222
566
+ </p></dd>
567
+ <dt>&lsquo;<samp class="samp">FloralWhite</samp>&rsquo;</dt>
568
+ <dd><p>0xFFFAF0
569
+ </p></dd>
570
+ <dt>&lsquo;<samp class="samp">ForestGreen</samp>&rsquo;</dt>
571
+ <dd><p>0x228B22
572
+ </p></dd>
573
+ <dt>&lsquo;<samp class="samp">Fuchsia</samp>&rsquo;</dt>
574
+ <dd><p>0xFF00FF
575
+ </p></dd>
576
+ <dt>&lsquo;<samp class="samp">Gainsboro</samp>&rsquo;</dt>
577
+ <dd><p>0xDCDCDC
578
+ </p></dd>
579
+ <dt>&lsquo;<samp class="samp">GhostWhite</samp>&rsquo;</dt>
580
+ <dd><p>0xF8F8FF
581
+ </p></dd>
582
+ <dt>&lsquo;<samp class="samp">Gold</samp>&rsquo;</dt>
583
+ <dd><p>0xFFD700
584
+ </p></dd>
585
+ <dt>&lsquo;<samp class="samp">GoldenRod</samp>&rsquo;</dt>
586
+ <dd><p>0xDAA520
587
+ </p></dd>
588
+ <dt>&lsquo;<samp class="samp">Gray</samp>&rsquo;</dt>
589
+ <dd><p>0x808080
590
+ </p></dd>
591
+ <dt>&lsquo;<samp class="samp">Green</samp>&rsquo;</dt>
592
+ <dd><p>0x008000
593
+ </p></dd>
594
+ <dt>&lsquo;<samp class="samp">GreenYellow</samp>&rsquo;</dt>
595
+ <dd><p>0xADFF2F
596
+ </p></dd>
597
+ <dt>&lsquo;<samp class="samp">HoneyDew</samp>&rsquo;</dt>
598
+ <dd><p>0xF0FFF0
599
+ </p></dd>
600
+ <dt>&lsquo;<samp class="samp">HotPink</samp>&rsquo;</dt>
601
+ <dd><p>0xFF69B4
602
+ </p></dd>
603
+ <dt>&lsquo;<samp class="samp">IndianRed</samp>&rsquo;</dt>
604
+ <dd><p>0xCD5C5C
605
+ </p></dd>
606
+ <dt>&lsquo;<samp class="samp">Indigo</samp>&rsquo;</dt>
607
+ <dd><p>0x4B0082
608
+ </p></dd>
609
+ <dt>&lsquo;<samp class="samp">Ivory</samp>&rsquo;</dt>
610
+ <dd><p>0xFFFFF0
611
+ </p></dd>
612
+ <dt>&lsquo;<samp class="samp">Khaki</samp>&rsquo;</dt>
613
+ <dd><p>0xF0E68C
614
+ </p></dd>
615
+ <dt>&lsquo;<samp class="samp">Lavender</samp>&rsquo;</dt>
616
+ <dd><p>0xE6E6FA
617
+ </p></dd>
618
+ <dt>&lsquo;<samp class="samp">LavenderBlush</samp>&rsquo;</dt>
619
+ <dd><p>0xFFF0F5
620
+ </p></dd>
621
+ <dt>&lsquo;<samp class="samp">LawnGreen</samp>&rsquo;</dt>
622
+ <dd><p>0x7CFC00
623
+ </p></dd>
624
+ <dt>&lsquo;<samp class="samp">LemonChiffon</samp>&rsquo;</dt>
625
+ <dd><p>0xFFFACD
626
+ </p></dd>
627
+ <dt>&lsquo;<samp class="samp">LightBlue</samp>&rsquo;</dt>
628
+ <dd><p>0xADD8E6
629
+ </p></dd>
630
+ <dt>&lsquo;<samp class="samp">LightCoral</samp>&rsquo;</dt>
631
+ <dd><p>0xF08080
632
+ </p></dd>
633
+ <dt>&lsquo;<samp class="samp">LightCyan</samp>&rsquo;</dt>
634
+ <dd><p>0xE0FFFF
635
+ </p></dd>
636
+ <dt>&lsquo;<samp class="samp">LightGoldenRodYellow</samp>&rsquo;</dt>
637
+ <dd><p>0xFAFAD2
638
+ </p></dd>
639
+ <dt>&lsquo;<samp class="samp">LightGreen</samp>&rsquo;</dt>
640
+ <dd><p>0x90EE90
641
+ </p></dd>
642
+ <dt>&lsquo;<samp class="samp">LightGrey</samp>&rsquo;</dt>
643
+ <dd><p>0xD3D3D3
644
+ </p></dd>
645
+ <dt>&lsquo;<samp class="samp">LightPink</samp>&rsquo;</dt>
646
+ <dd><p>0xFFB6C1
647
+ </p></dd>
648
+ <dt>&lsquo;<samp class="samp">LightSalmon</samp>&rsquo;</dt>
649
+ <dd><p>0xFFA07A
650
+ </p></dd>
651
+ <dt>&lsquo;<samp class="samp">LightSeaGreen</samp>&rsquo;</dt>
652
+ <dd><p>0x20B2AA
653
+ </p></dd>
654
+ <dt>&lsquo;<samp class="samp">LightSkyBlue</samp>&rsquo;</dt>
655
+ <dd><p>0x87CEFA
656
+ </p></dd>
657
+ <dt>&lsquo;<samp class="samp">LightSlateGray</samp>&rsquo;</dt>
658
+ <dd><p>0x778899
659
+ </p></dd>
660
+ <dt>&lsquo;<samp class="samp">LightSteelBlue</samp>&rsquo;</dt>
661
+ <dd><p>0xB0C4DE
662
+ </p></dd>
663
+ <dt>&lsquo;<samp class="samp">LightYellow</samp>&rsquo;</dt>
664
+ <dd><p>0xFFFFE0
665
+ </p></dd>
666
+ <dt>&lsquo;<samp class="samp">Lime</samp>&rsquo;</dt>
667
+ <dd><p>0x00FF00
668
+ </p></dd>
669
+ <dt>&lsquo;<samp class="samp">LimeGreen</samp>&rsquo;</dt>
670
+ <dd><p>0x32CD32
671
+ </p></dd>
672
+ <dt>&lsquo;<samp class="samp">Linen</samp>&rsquo;</dt>
673
+ <dd><p>0xFAF0E6
674
+ </p></dd>
675
+ <dt>&lsquo;<samp class="samp">Magenta</samp>&rsquo;</dt>
676
+ <dd><p>0xFF00FF
677
+ </p></dd>
678
+ <dt>&lsquo;<samp class="samp">Maroon</samp>&rsquo;</dt>
679
+ <dd><p>0x800000
680
+ </p></dd>
681
+ <dt>&lsquo;<samp class="samp">MediumAquaMarine</samp>&rsquo;</dt>
682
+ <dd><p>0x66CDAA
683
+ </p></dd>
684
+ <dt>&lsquo;<samp class="samp">MediumBlue</samp>&rsquo;</dt>
685
+ <dd><p>0x0000CD
686
+ </p></dd>
687
+ <dt>&lsquo;<samp class="samp">MediumOrchid</samp>&rsquo;</dt>
688
+ <dd><p>0xBA55D3
689
+ </p></dd>
690
+ <dt>&lsquo;<samp class="samp">MediumPurple</samp>&rsquo;</dt>
691
+ <dd><p>0x9370D8
692
+ </p></dd>
693
+ <dt>&lsquo;<samp class="samp">MediumSeaGreen</samp>&rsquo;</dt>
694
+ <dd><p>0x3CB371
695
+ </p></dd>
696
+ <dt>&lsquo;<samp class="samp">MediumSlateBlue</samp>&rsquo;</dt>
697
+ <dd><p>0x7B68EE
698
+ </p></dd>
699
+ <dt>&lsquo;<samp class="samp">MediumSpringGreen</samp>&rsquo;</dt>
700
+ <dd><p>0x00FA9A
701
+ </p></dd>
702
+ <dt>&lsquo;<samp class="samp">MediumTurquoise</samp>&rsquo;</dt>
703
+ <dd><p>0x48D1CC
704
+ </p></dd>
705
+ <dt>&lsquo;<samp class="samp">MediumVioletRed</samp>&rsquo;</dt>
706
+ <dd><p>0xC71585
707
+ </p></dd>
708
+ <dt>&lsquo;<samp class="samp">MidnightBlue</samp>&rsquo;</dt>
709
+ <dd><p>0x191970
710
+ </p></dd>
711
+ <dt>&lsquo;<samp class="samp">MintCream</samp>&rsquo;</dt>
712
+ <dd><p>0xF5FFFA
713
+ </p></dd>
714
+ <dt>&lsquo;<samp class="samp">MistyRose</samp>&rsquo;</dt>
715
+ <dd><p>0xFFE4E1
716
+ </p></dd>
717
+ <dt>&lsquo;<samp class="samp">Moccasin</samp>&rsquo;</dt>
718
+ <dd><p>0xFFE4B5
719
+ </p></dd>
720
+ <dt>&lsquo;<samp class="samp">NavajoWhite</samp>&rsquo;</dt>
721
+ <dd><p>0xFFDEAD
722
+ </p></dd>
723
+ <dt>&lsquo;<samp class="samp">Navy</samp>&rsquo;</dt>
724
+ <dd><p>0x000080
725
+ </p></dd>
726
+ <dt>&lsquo;<samp class="samp">OldLace</samp>&rsquo;</dt>
727
+ <dd><p>0xFDF5E6
728
+ </p></dd>
729
+ <dt>&lsquo;<samp class="samp">Olive</samp>&rsquo;</dt>
730
+ <dd><p>0x808000
731
+ </p></dd>
732
+ <dt>&lsquo;<samp class="samp">OliveDrab</samp>&rsquo;</dt>
733
+ <dd><p>0x6B8E23
734
+ </p></dd>
735
+ <dt>&lsquo;<samp class="samp">Orange</samp>&rsquo;</dt>
736
+ <dd><p>0xFFA500
737
+ </p></dd>
738
+ <dt>&lsquo;<samp class="samp">OrangeRed</samp>&rsquo;</dt>
739
+ <dd><p>0xFF4500
740
+ </p></dd>
741
+ <dt>&lsquo;<samp class="samp">Orchid</samp>&rsquo;</dt>
742
+ <dd><p>0xDA70D6
743
+ </p></dd>
744
+ <dt>&lsquo;<samp class="samp">PaleGoldenRod</samp>&rsquo;</dt>
745
+ <dd><p>0xEEE8AA
746
+ </p></dd>
747
+ <dt>&lsquo;<samp class="samp">PaleGreen</samp>&rsquo;</dt>
748
+ <dd><p>0x98FB98
749
+ </p></dd>
750
+ <dt>&lsquo;<samp class="samp">PaleTurquoise</samp>&rsquo;</dt>
751
+ <dd><p>0xAFEEEE
752
+ </p></dd>
753
+ <dt>&lsquo;<samp class="samp">PaleVioletRed</samp>&rsquo;</dt>
754
+ <dd><p>0xD87093
755
+ </p></dd>
756
+ <dt>&lsquo;<samp class="samp">PapayaWhip</samp>&rsquo;</dt>
757
+ <dd><p>0xFFEFD5
758
+ </p></dd>
759
+ <dt>&lsquo;<samp class="samp">PeachPuff</samp>&rsquo;</dt>
760
+ <dd><p>0xFFDAB9
761
+ </p></dd>
762
+ <dt>&lsquo;<samp class="samp">Peru</samp>&rsquo;</dt>
763
+ <dd><p>0xCD853F
764
+ </p></dd>
765
+ <dt>&lsquo;<samp class="samp">Pink</samp>&rsquo;</dt>
766
+ <dd><p>0xFFC0CB
767
+ </p></dd>
768
+ <dt>&lsquo;<samp class="samp">Plum</samp>&rsquo;</dt>
769
+ <dd><p>0xDDA0DD
770
+ </p></dd>
771
+ <dt>&lsquo;<samp class="samp">PowderBlue</samp>&rsquo;</dt>
772
+ <dd><p>0xB0E0E6
773
+ </p></dd>
774
+ <dt>&lsquo;<samp class="samp">Purple</samp>&rsquo;</dt>
775
+ <dd><p>0x800080
776
+ </p></dd>
777
+ <dt>&lsquo;<samp class="samp">Red</samp>&rsquo;</dt>
778
+ <dd><p>0xFF0000
779
+ </p></dd>
780
+ <dt>&lsquo;<samp class="samp">RosyBrown</samp>&rsquo;</dt>
781
+ <dd><p>0xBC8F8F
782
+ </p></dd>
783
+ <dt>&lsquo;<samp class="samp">RoyalBlue</samp>&rsquo;</dt>
784
+ <dd><p>0x4169E1
785
+ </p></dd>
786
+ <dt>&lsquo;<samp class="samp">SaddleBrown</samp>&rsquo;</dt>
787
+ <dd><p>0x8B4513
788
+ </p></dd>
789
+ <dt>&lsquo;<samp class="samp">Salmon</samp>&rsquo;</dt>
790
+ <dd><p>0xFA8072
791
+ </p></dd>
792
+ <dt>&lsquo;<samp class="samp">SandyBrown</samp>&rsquo;</dt>
793
+ <dd><p>0xF4A460
794
+ </p></dd>
795
+ <dt>&lsquo;<samp class="samp">SeaGreen</samp>&rsquo;</dt>
796
+ <dd><p>0x2E8B57
797
+ </p></dd>
798
+ <dt>&lsquo;<samp class="samp">SeaShell</samp>&rsquo;</dt>
799
+ <dd><p>0xFFF5EE
800
+ </p></dd>
801
+ <dt>&lsquo;<samp class="samp">Sienna</samp>&rsquo;</dt>
802
+ <dd><p>0xA0522D
803
+ </p></dd>
804
+ <dt>&lsquo;<samp class="samp">Silver</samp>&rsquo;</dt>
805
+ <dd><p>0xC0C0C0
806
+ </p></dd>
807
+ <dt>&lsquo;<samp class="samp">SkyBlue</samp>&rsquo;</dt>
808
+ <dd><p>0x87CEEB
809
+ </p></dd>
810
+ <dt>&lsquo;<samp class="samp">SlateBlue</samp>&rsquo;</dt>
811
+ <dd><p>0x6A5ACD
812
+ </p></dd>
813
+ <dt>&lsquo;<samp class="samp">SlateGray</samp>&rsquo;</dt>
814
+ <dd><p>0x708090
815
+ </p></dd>
816
+ <dt>&lsquo;<samp class="samp">Snow</samp>&rsquo;</dt>
817
+ <dd><p>0xFFFAFA
818
+ </p></dd>
819
+ <dt>&lsquo;<samp class="samp">SpringGreen</samp>&rsquo;</dt>
820
+ <dd><p>0x00FF7F
821
+ </p></dd>
822
+ <dt>&lsquo;<samp class="samp">SteelBlue</samp>&rsquo;</dt>
823
+ <dd><p>0x4682B4
824
+ </p></dd>
825
+ <dt>&lsquo;<samp class="samp">Tan</samp>&rsquo;</dt>
826
+ <dd><p>0xD2B48C
827
+ </p></dd>
828
+ <dt>&lsquo;<samp class="samp">Teal</samp>&rsquo;</dt>
829
+ <dd><p>0x008080
830
+ </p></dd>
831
+ <dt>&lsquo;<samp class="samp">Thistle</samp>&rsquo;</dt>
832
+ <dd><p>0xD8BFD8
833
+ </p></dd>
834
+ <dt>&lsquo;<samp class="samp">Tomato</samp>&rsquo;</dt>
835
+ <dd><p>0xFF6347
836
+ </p></dd>
837
+ <dt>&lsquo;<samp class="samp">Turquoise</samp>&rsquo;</dt>
838
+ <dd><p>0x40E0D0
839
+ </p></dd>
840
+ <dt>&lsquo;<samp class="samp">Violet</samp>&rsquo;</dt>
841
+ <dd><p>0xEE82EE
842
+ </p></dd>
843
+ <dt>&lsquo;<samp class="samp">Wheat</samp>&rsquo;</dt>
844
+ <dd><p>0xF5DEB3
845
+ </p></dd>
846
+ <dt>&lsquo;<samp class="samp">White</samp>&rsquo;</dt>
847
+ <dd><p>0xFFFFFF
848
+ </p></dd>
849
+ <dt>&lsquo;<samp class="samp">WhiteSmoke</samp>&rsquo;</dt>
850
+ <dd><p>0xF5F5F5
851
+ </p></dd>
852
+ <dt>&lsquo;<samp class="samp">Yellow</samp>&rsquo;</dt>
853
+ <dd><p>0xFFFF00
854
+ </p></dd>
855
+ <dt>&lsquo;<samp class="samp">YellowGreen</samp>&rsquo;</dt>
856
+ <dd><p>0x9ACD32
857
+ </p></dd>
858
+ </dl>
859
+
860
+ <a class="anchor" id="channel-layout-syntax"></a><a name="Channel-Layout"></a>
861
+ <h3 class="section">2.8 Channel Layout<span class="pull-right"><a class="anchor hidden-xs" href="#Channel-Layout" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Channel-Layout" aria-hidden="true">TOC</a></span></h3>
862
+
863
+ <p>A channel layout specifies the spatial disposition of the channels in
864
+ a multi-channel audio stream. To specify a channel layout, FFmpeg
865
+ makes use of a special syntax.
866
+ </p>
867
+ <p>Individual channels are identified by an id, as given by the table
868
+ below:
869
+ </p><dl class="table">
870
+ <dt>&lsquo;<samp class="samp">FL</samp>&rsquo;</dt>
871
+ <dd><p>front left
872
+ </p></dd>
873
+ <dt>&lsquo;<samp class="samp">FR</samp>&rsquo;</dt>
874
+ <dd><p>front right
875
+ </p></dd>
876
+ <dt>&lsquo;<samp class="samp">FC</samp>&rsquo;</dt>
877
+ <dd><p>front center
878
+ </p></dd>
879
+ <dt>&lsquo;<samp class="samp">LFE</samp>&rsquo;</dt>
880
+ <dd><p>low frequency
881
+ </p></dd>
882
+ <dt>&lsquo;<samp class="samp">BL</samp>&rsquo;</dt>
883
+ <dd><p>back left
884
+ </p></dd>
885
+ <dt>&lsquo;<samp class="samp">BR</samp>&rsquo;</dt>
886
+ <dd><p>back right
887
+ </p></dd>
888
+ <dt>&lsquo;<samp class="samp">FLC</samp>&rsquo;</dt>
889
+ <dd><p>front left-of-center
890
+ </p></dd>
891
+ <dt>&lsquo;<samp class="samp">FRC</samp>&rsquo;</dt>
892
+ <dd><p>front right-of-center
893
+ </p></dd>
894
+ <dt>&lsquo;<samp class="samp">BC</samp>&rsquo;</dt>
895
+ <dd><p>back center
896
+ </p></dd>
897
+ <dt>&lsquo;<samp class="samp">SL</samp>&rsquo;</dt>
898
+ <dd><p>side left
899
+ </p></dd>
900
+ <dt>&lsquo;<samp class="samp">SR</samp>&rsquo;</dt>
901
+ <dd><p>side right
902
+ </p></dd>
903
+ <dt>&lsquo;<samp class="samp">TC</samp>&rsquo;</dt>
904
+ <dd><p>top center
905
+ </p></dd>
906
+ <dt>&lsquo;<samp class="samp">TFL</samp>&rsquo;</dt>
907
+ <dd><p>top front left
908
+ </p></dd>
909
+ <dt>&lsquo;<samp class="samp">TFC</samp>&rsquo;</dt>
910
+ <dd><p>top front center
911
+ </p></dd>
912
+ <dt>&lsquo;<samp class="samp">TFR</samp>&rsquo;</dt>
913
+ <dd><p>top front right
914
+ </p></dd>
915
+ <dt>&lsquo;<samp class="samp">TBL</samp>&rsquo;</dt>
916
+ <dd><p>top back left
917
+ </p></dd>
918
+ <dt>&lsquo;<samp class="samp">TBC</samp>&rsquo;</dt>
919
+ <dd><p>top back center
920
+ </p></dd>
921
+ <dt>&lsquo;<samp class="samp">TBR</samp>&rsquo;</dt>
922
+ <dd><p>top back right
923
+ </p></dd>
924
+ <dt>&lsquo;<samp class="samp">DL</samp>&rsquo;</dt>
925
+ <dd><p>downmix left
926
+ </p></dd>
927
+ <dt>&lsquo;<samp class="samp">DR</samp>&rsquo;</dt>
928
+ <dd><p>downmix right
929
+ </p></dd>
930
+ <dt>&lsquo;<samp class="samp">WL</samp>&rsquo;</dt>
931
+ <dd><p>wide left
932
+ </p></dd>
933
+ <dt>&lsquo;<samp class="samp">WR</samp>&rsquo;</dt>
934
+ <dd><p>wide right
935
+ </p></dd>
936
+ <dt>&lsquo;<samp class="samp">SDL</samp>&rsquo;</dt>
937
+ <dd><p>surround direct left
938
+ </p></dd>
939
+ <dt>&lsquo;<samp class="samp">SDR</samp>&rsquo;</dt>
940
+ <dd><p>surround direct right
941
+ </p></dd>
942
+ <dt>&lsquo;<samp class="samp">LFE2</samp>&rsquo;</dt>
943
+ <dd><p>low frequency 2
944
+ </p></dd>
945
+ </dl>
946
+
947
+ <p>Standard channel layout compositions can be specified by using the
948
+ following identifiers:
949
+ </p><dl class="table">
950
+ <dt>&lsquo;<samp class="samp">mono</samp>&rsquo;</dt>
951
+ <dd><p>FC
952
+ </p></dd>
953
+ <dt>&lsquo;<samp class="samp">stereo</samp>&rsquo;</dt>
954
+ <dd><p>FL+FR
955
+ </p></dd>
956
+ <dt>&lsquo;<samp class="samp">2.1</samp>&rsquo;</dt>
957
+ <dd><p>FL+FR+LFE
958
+ </p></dd>
959
+ <dt>&lsquo;<samp class="samp">3.0</samp>&rsquo;</dt>
960
+ <dd><p>FL+FR+FC
961
+ </p></dd>
962
+ <dt>&lsquo;<samp class="samp">3.0(back)</samp>&rsquo;</dt>
963
+ <dd><p>FL+FR+BC
964
+ </p></dd>
965
+ <dt>&lsquo;<samp class="samp">4.0</samp>&rsquo;</dt>
966
+ <dd><p>FL+FR+FC+BC
967
+ </p></dd>
968
+ <dt>&lsquo;<samp class="samp">quad</samp>&rsquo;</dt>
969
+ <dd><p>FL+FR+BL+BR
970
+ </p></dd>
971
+ <dt>&lsquo;<samp class="samp">quad(side)</samp>&rsquo;</dt>
972
+ <dd><p>FL+FR+SL+SR
973
+ </p></dd>
974
+ <dt>&lsquo;<samp class="samp">3.1</samp>&rsquo;</dt>
975
+ <dd><p>FL+FR+FC+LFE
976
+ </p></dd>
977
+ <dt>&lsquo;<samp class="samp">5.0</samp>&rsquo;</dt>
978
+ <dd><p>FL+FR+FC+BL+BR
979
+ </p></dd>
980
+ <dt>&lsquo;<samp class="samp">5.0(side)</samp>&rsquo;</dt>
981
+ <dd><p>FL+FR+FC+SL+SR
982
+ </p></dd>
983
+ <dt>&lsquo;<samp class="samp">4.1</samp>&rsquo;</dt>
984
+ <dd><p>FL+FR+FC+LFE+BC
985
+ </p></dd>
986
+ <dt>&lsquo;<samp class="samp">5.1</samp>&rsquo;</dt>
987
+ <dd><p>FL+FR+FC+LFE+BL+BR
988
+ </p></dd>
989
+ <dt>&lsquo;<samp class="samp">5.1(side)</samp>&rsquo;</dt>
990
+ <dd><p>FL+FR+FC+LFE+SL+SR
991
+ </p></dd>
992
+ <dt>&lsquo;<samp class="samp">6.0</samp>&rsquo;</dt>
993
+ <dd><p>FL+FR+FC+BC+SL+SR
994
+ </p></dd>
995
+ <dt>&lsquo;<samp class="samp">6.0(front)</samp>&rsquo;</dt>
996
+ <dd><p>FL+FR+FLC+FRC+SL+SR
997
+ </p></dd>
998
+ <dt>&lsquo;<samp class="samp">3.1.2</samp>&rsquo;</dt>
999
+ <dd><p>FL+FR+FC+LFE+TFL+TFR
1000
+ </p></dd>
1001
+ <dt>&lsquo;<samp class="samp">hexagonal</samp>&rsquo;</dt>
1002
+ <dd><p>FL+FR+FC+BL+BR+BC
1003
+ </p></dd>
1004
+ <dt>&lsquo;<samp class="samp">6.1</samp>&rsquo;</dt>
1005
+ <dd><p>FL+FR+FC+LFE+BC+SL+SR
1006
+ </p></dd>
1007
+ <dt>&lsquo;<samp class="samp">6.1</samp>&rsquo;</dt>
1008
+ <dd><p>FL+FR+FC+LFE+BL+BR+BC
1009
+ </p></dd>
1010
+ <dt>&lsquo;<samp class="samp">6.1(front)</samp>&rsquo;</dt>
1011
+ <dd><p>FL+FR+LFE+FLC+FRC+SL+SR
1012
+ </p></dd>
1013
+ <dt>&lsquo;<samp class="samp">7.0</samp>&rsquo;</dt>
1014
+ <dd><p>FL+FR+FC+BL+BR+SL+SR
1015
+ </p></dd>
1016
+ <dt>&lsquo;<samp class="samp">7.0(front)</samp>&rsquo;</dt>
1017
+ <dd><p>FL+FR+FC+FLC+FRC+SL+SR
1018
+ </p></dd>
1019
+ <dt>&lsquo;<samp class="samp">7.1</samp>&rsquo;</dt>
1020
+ <dd><p>FL+FR+FC+LFE+BL+BR+SL+SR
1021
+ </p></dd>
1022
+ <dt>&lsquo;<samp class="samp">7.1(wide)</samp>&rsquo;</dt>
1023
+ <dd><p>FL+FR+FC+LFE+BL+BR+FLC+FRC
1024
+ </p></dd>
1025
+ <dt>&lsquo;<samp class="samp">7.1(wide-side)</samp>&rsquo;</dt>
1026
+ <dd><p>FL+FR+FC+LFE+FLC+FRC+SL+SR
1027
+ </p></dd>
1028
+ <dt>&lsquo;<samp class="samp">5.1.2</samp>&rsquo;</dt>
1029
+ <dd><p>FL+FR+FC+LFE+BL+BR+TFL+TFR
1030
+ </p></dd>
1031
+ <dt>&lsquo;<samp class="samp">octagonal</samp>&rsquo;</dt>
1032
+ <dd><p>FL+FR+FC+BL+BR+BC+SL+SR
1033
+ </p></dd>
1034
+ <dt>&lsquo;<samp class="samp">cube</samp>&rsquo;</dt>
1035
+ <dd><p>FL+FR+BL+BR+TFL+TFR+TBL+TBR
1036
+ </p></dd>
1037
+ <dt>&lsquo;<samp class="samp">5.1.4</samp>&rsquo;</dt>
1038
+ <dd><p>FL+FR+FC+LFE+BL+BR+TFL+TFR+TBL+TBR
1039
+ </p></dd>
1040
+ <dt>&lsquo;<samp class="samp">7.1.2</samp>&rsquo;</dt>
1041
+ <dd><p>FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR
1042
+ </p></dd>
1043
+ <dt>&lsquo;<samp class="samp">7.1.4</samp>&rsquo;</dt>
1044
+ <dd><p>FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBL+TBR
1045
+ </p></dd>
1046
+ <dt>&lsquo;<samp class="samp">7.2.3</samp>&rsquo;</dt>
1047
+ <dd><p>FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBC+LFE2
1048
+ </p></dd>
1049
+ <dt>&lsquo;<samp class="samp">9.1.4</samp>&rsquo;</dt>
1050
+ <dd><p>FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR
1051
+ </p></dd>
1052
+ <dt>&lsquo;<samp class="samp">9.1.6</samp>&rsquo;</dt>
1053
+ <dd><p>FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR+TSL+TSR
1054
+ </p></dd>
1055
+ <dt>&lsquo;<samp class="samp">hexadecagonal</samp>&rsquo;</dt>
1056
+ <dd><p>FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR
1057
+ </p></dd>
1058
+ <dt>&lsquo;<samp class="samp">binaural</samp>&rsquo;</dt>
1059
+ <dd><p>BIL+BIR
1060
+ </p></dd>
1061
+ <dt>&lsquo;<samp class="samp">downmix</samp>&rsquo;</dt>
1062
+ <dd><p>DL+DR
1063
+ </p></dd>
1064
+ <dt>&lsquo;<samp class="samp">22.2</samp>&rsquo;</dt>
1065
+ <dd><p>FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+LFE2+TSL+TSR+BFC+BFL+BFR
1066
+ </p></dd>
1067
+ </dl>
1068
+
1069
+ <p>A custom channel layout can be specified as a sequence of terms, separated by &rsquo;+&rsquo;.
1070
+ Each term can be:
1071
+ </p><ul class="itemize mark-bullet">
1072
+ <li>the name of a single channel (e.g. &lsquo;<samp class="samp">FL</samp>&rsquo;, &lsquo;<samp class="samp">FR</samp>&rsquo;, &lsquo;<samp class="samp">FC</samp>&rsquo;, &lsquo;<samp class="samp">LFE</samp>&rsquo;, etc.),
1073
+ each optionally containing a custom name after a &rsquo;@&rsquo;, (e.g. &lsquo;<samp class="samp">FL@Left</samp>&rsquo;,
1074
+ &lsquo;<samp class="samp">FR@Right</samp>&rsquo;, &lsquo;<samp class="samp">FC@Center</samp>&rsquo;, &lsquo;<samp class="samp">LFE@Low_Frequency</samp>&rsquo;, etc.)
1075
+ </li></ul>
1076
+
1077
+ <p>A standard channel layout can be specified by the following:
1078
+ </p><ul class="itemize mark-bullet">
1079
+ <li>the name of a single channel (e.g. &lsquo;<samp class="samp">FL</samp>&rsquo;, &lsquo;<samp class="samp">FR</samp>&rsquo;, &lsquo;<samp class="samp">FC</samp>&rsquo;, &lsquo;<samp class="samp">LFE</samp>&rsquo;, etc.)
1080
+
1081
+ </li><li>the name of a standard channel layout (e.g. &lsquo;<samp class="samp">mono</samp>&rsquo;,
1082
+ &lsquo;<samp class="samp">stereo</samp>&rsquo;, &lsquo;<samp class="samp">4.0</samp>&rsquo;, &lsquo;<samp class="samp">quad</samp>&rsquo;, &lsquo;<samp class="samp">5.0</samp>&rsquo;, etc.)
1083
+
1084
+ </li><li>a number of channels, in decimal, followed by &rsquo;c&rsquo;, yielding the default channel
1085
+ layout for that number of channels (see the function
1086
+ <code class="code">av_channel_layout_default</code>). Note that not all channel counts have a
1087
+ default layout.
1088
+
1089
+ </li><li>a number of channels, in decimal, followed by &rsquo;C&rsquo;, yielding an unknown channel
1090
+ layout with the specified number of channels. Note that not all channel layout
1091
+ specification strings support unknown channel layouts.
1092
+
1093
+ </li><li>a channel layout mask, in hexadecimal starting with &quot;0x&quot; (see the
1094
+ <code class="code">AV_CH_*</code> macros in <samp class="file">libavutil/channel_layout.h</samp>.
1095
+ </li></ul>
1096
+
1097
+ <p>Before libavutil version 53 the trailing character &quot;c&quot; to specify a number of
1098
+ channels was optional, but now it is required, while a channel layout mask can
1099
+ also be specified as a decimal number (if and only if not followed by &quot;c&quot; or &quot;C&quot;).
1100
+ </p>
1101
+ <p>See also the function <code class="code">av_channel_layout_from_string</code> defined in
1102
+ <samp class="file">libavutil/channel_layout.h</samp>.
1103
+ </p>
1104
+ <a name="Expression-Evaluation"></a>
1105
+ <h2 class="chapter">3 Expression Evaluation<span class="pull-right"><a class="anchor hidden-xs" href="#Expression-Evaluation" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Expression-Evaluation" aria-hidden="true">TOC</a></span></h2>
1106
+
1107
+ <p>When evaluating an arithmetic expression, FFmpeg uses an internal
1108
+ formula evaluator, implemented through the <samp class="file">libavutil/eval.h</samp>
1109
+ interface.
1110
+ </p>
1111
+ <p>An expression may contain unary, binary operators, constants, and
1112
+ functions.
1113
+ </p>
1114
+ <p>Two expressions <var class="var">expr1</var> and <var class="var">expr2</var> can be combined to form
1115
+ another expression &quot;<var class="var">expr1</var>;<var class="var">expr2</var>&quot;.
1116
+ <var class="var">expr1</var> and <var class="var">expr2</var> are evaluated in turn, and the new
1117
+ expression evaluates to the value of <var class="var">expr2</var>.
1118
+ </p>
1119
+ <p>The following binary operators are available: <code class="code">+</code>, <code class="code">-</code>,
1120
+ <code class="code">*</code>, <code class="code">/</code>, <code class="code">^</code>.
1121
+ </p>
1122
+ <p>The following unary operators are available: <code class="code">+</code>, <code class="code">-</code>.
1123
+ </p>
1124
+ <p>Some internal variables can be used to store and load intermediary
1125
+ results. They can be accessed using the <code class="code">ld</code> and <code class="code">st</code>
1126
+ functions with an index argument varying from 0 to 9 to specify which
1127
+ internal variable to access.
1128
+ </p>
1129
+ <p>The following functions are available:
1130
+ </p><dl class="table">
1131
+ <dt><samp class="option">abs(x)</samp></dt>
1132
+ <dd><p>Compute absolute value of <var class="var">x</var>.
1133
+ </p>
1134
+ </dd>
1135
+ <dt><samp class="option">acos(x)</samp></dt>
1136
+ <dd><p>Compute arccosine of <var class="var">x</var>.
1137
+ </p>
1138
+ </dd>
1139
+ <dt><samp class="option">asin(x)</samp></dt>
1140
+ <dd><p>Compute arcsine of <var class="var">x</var>.
1141
+ </p>
1142
+ </dd>
1143
+ <dt><samp class="option">atan(x)</samp></dt>
1144
+ <dd><p>Compute arctangent of <var class="var">x</var>.
1145
+ </p>
1146
+ </dd>
1147
+ <dt><samp class="option">atan2(y, x)</samp></dt>
1148
+ <dd><p>Compute principal value of the arc tangent of <var class="var">y</var>/<var class="var">x</var>.
1149
+ </p>
1150
+ </dd>
1151
+ <dt><samp class="option">between(x, min, max)</samp></dt>
1152
+ <dd><p>Return 1 if <var class="var">x</var> is greater than or equal to <var class="var">min</var> and lesser than or
1153
+ equal to <var class="var">max</var>, 0 otherwise.
1154
+ </p>
1155
+ </dd>
1156
+ <dt><samp class="option">bitand(x, y)</samp></dt>
1157
+ <dt><samp class="option">bitor(x, y)</samp></dt>
1158
+ <dd><p>Compute bitwise and/or operation on <var class="var">x</var> and <var class="var">y</var>.
1159
+ </p>
1160
+ <p>The results of the evaluation of <var class="var">x</var> and <var class="var">y</var> are converted to
1161
+ integers before executing the bitwise operation.
1162
+ </p>
1163
+ <p>Note that both the conversion to integer and the conversion back to
1164
+ floating point can lose precision. Beware of unexpected results for
1165
+ large numbers (usually 2^53 and larger).
1166
+ </p>
1167
+ </dd>
1168
+ <dt><samp class="option">ceil(expr)</samp></dt>
1169
+ <dd><p>Round the value of expression <var class="var">expr</var> upwards to the nearest
1170
+ integer. For example, &quot;ceil(1.5)&quot; is &quot;2.0&quot;.
1171
+ </p>
1172
+ </dd>
1173
+ <dt><samp class="option">clip(x, min, max)</samp></dt>
1174
+ <dd><p>Return the value of <var class="var">x</var> clipped between <var class="var">min</var> and <var class="var">max</var>.
1175
+ </p>
1176
+ </dd>
1177
+ <dt><samp class="option">cos(x)</samp></dt>
1178
+ <dd><p>Compute cosine of <var class="var">x</var>.
1179
+ </p>
1180
+ </dd>
1181
+ <dt><samp class="option">cosh(x)</samp></dt>
1182
+ <dd><p>Compute hyperbolic cosine of <var class="var">x</var>.
1183
+ </p>
1184
+ </dd>
1185
+ <dt><samp class="option">eq(x, y)</samp></dt>
1186
+ <dd><p>Return 1 if <var class="var">x</var> and <var class="var">y</var> are equivalent, 0 otherwise.
1187
+ </p>
1188
+ </dd>
1189
+ <dt><samp class="option">exp(x)</samp></dt>
1190
+ <dd><p>Compute exponential of <var class="var">x</var> (with base <code class="code">e</code>, the Euler&rsquo;s number).
1191
+ </p>
1192
+ </dd>
1193
+ <dt><samp class="option">floor(expr)</samp></dt>
1194
+ <dd><p>Round the value of expression <var class="var">expr</var> downwards to the nearest
1195
+ integer. For example, &quot;floor(-1.5)&quot; is &quot;-2.0&quot;.
1196
+ </p>
1197
+ </dd>
1198
+ <dt><samp class="option">gauss(x)</samp></dt>
1199
+ <dd><p>Compute Gauss function of <var class="var">x</var>, corresponding to
1200
+ <code class="code">exp(-x*x/2) / sqrt(2*PI)</code>.
1201
+ </p>
1202
+ </dd>
1203
+ <dt><samp class="option">gcd(x, y)</samp></dt>
1204
+ <dd><p>Return the greatest common divisor of <var class="var">x</var> and <var class="var">y</var>. If both <var class="var">x</var> and
1205
+ <var class="var">y</var> are 0 or either or both are less than zero then behavior is undefined.
1206
+ </p>
1207
+ </dd>
1208
+ <dt><samp class="option">gt(x, y)</samp></dt>
1209
+ <dd><p>Return 1 if <var class="var">x</var> is greater than <var class="var">y</var>, 0 otherwise.
1210
+ </p>
1211
+ </dd>
1212
+ <dt><samp class="option">gte(x, y)</samp></dt>
1213
+ <dd><p>Return 1 if <var class="var">x</var> is greater than or equal to <var class="var">y</var>, 0 otherwise.
1214
+ </p>
1215
+ </dd>
1216
+ <dt><samp class="option">hypot(x, y)</samp></dt>
1217
+ <dd><p>This function is similar to the C function with the same name; it returns
1218
+ &quot;sqrt(<var class="var">x</var>*<var class="var">x</var> + <var class="var">y</var>*<var class="var">y</var>)&quot;, the length of the hypotenuse of a
1219
+ right triangle with sides of length <var class="var">x</var> and <var class="var">y</var>, or the distance of the
1220
+ point (<var class="var">x</var>, <var class="var">y</var>) from the origin.
1221
+ </p>
1222
+ </dd>
1223
+ <dt><samp class="option">if(x, y)</samp></dt>
1224
+ <dd><p>Evaluate <var class="var">x</var>, and if the result is non-zero return the result of
1225
+ the evaluation of <var class="var">y</var>, return 0 otherwise.
1226
+ </p>
1227
+ </dd>
1228
+ <dt><samp class="option">if(x, y, z)</samp></dt>
1229
+ <dd><p>Evaluate <var class="var">x</var>, and if the result is non-zero return the evaluation
1230
+ result of <var class="var">y</var>, otherwise the evaluation result of <var class="var">z</var>.
1231
+ </p>
1232
+ </dd>
1233
+ <dt><samp class="option">ifnot(x, y)</samp></dt>
1234
+ <dd><p>Evaluate <var class="var">x</var>, and if the result is zero return the result of the
1235
+ evaluation of <var class="var">y</var>, return 0 otherwise.
1236
+ </p>
1237
+ </dd>
1238
+ <dt><samp class="option">ifnot(x, y, z)</samp></dt>
1239
+ <dd><p>Evaluate <var class="var">x</var>, and if the result is zero return the evaluation
1240
+ result of <var class="var">y</var>, otherwise the evaluation result of <var class="var">z</var>.
1241
+ </p>
1242
+ </dd>
1243
+ <dt><samp class="option">isinf(x)</samp></dt>
1244
+ <dd><p>Return 1.0 if <var class="var">x</var> is +/-INFINITY, 0.0 otherwise.
1245
+ </p>
1246
+ </dd>
1247
+ <dt><samp class="option">isnan(x)</samp></dt>
1248
+ <dd><p>Return 1.0 if <var class="var">x</var> is NAN, 0.0 otherwise.
1249
+ </p>
1250
+ </dd>
1251
+ <dt><samp class="option">ld(idx)</samp></dt>
1252
+ <dd><p>Load the value of the internal variable with index <var class="var">idx</var>, which was
1253
+ previously stored with st(<var class="var">idx</var>, <var class="var">expr</var>).
1254
+ The function returns the loaded value.
1255
+ </p>
1256
+ </dd>
1257
+ <dt><samp class="option">lerp(x, y, z)</samp></dt>
1258
+ <dd><p>Return linear interpolation between <var class="var">x</var> and <var class="var">y</var> by amount of <var class="var">z</var>.
1259
+ </p>
1260
+ </dd>
1261
+ <dt><samp class="option">log(x)</samp></dt>
1262
+ <dd><p>Compute natural logarithm of <var class="var">x</var>.
1263
+ </p>
1264
+ </dd>
1265
+ <dt><samp class="option">lt(x, y)</samp></dt>
1266
+ <dd><p>Return 1 if <var class="var">x</var> is lesser than <var class="var">y</var>, 0 otherwise.
1267
+ </p>
1268
+ </dd>
1269
+ <dt><samp class="option">lte(x, y)</samp></dt>
1270
+ <dd><p>Return 1 if <var class="var">x</var> is lesser than or equal to <var class="var">y</var>, 0 otherwise.
1271
+ </p>
1272
+ </dd>
1273
+ <dt><samp class="option">max(x, y)</samp></dt>
1274
+ <dd><p>Return the maximum between <var class="var">x</var> and <var class="var">y</var>.
1275
+ </p>
1276
+ </dd>
1277
+ <dt><samp class="option">min(x, y)</samp></dt>
1278
+ <dd><p>Return the minimum between <var class="var">x</var> and <var class="var">y</var>.
1279
+ </p>
1280
+ </dd>
1281
+ <dt><samp class="option">mod(x, y)</samp></dt>
1282
+ <dd><p>Compute the remainder of division of <var class="var">x</var> by <var class="var">y</var>.
1283
+ </p>
1284
+ </dd>
1285
+ <dt><samp class="option">not(expr)</samp></dt>
1286
+ <dd><p>Return 1.0 if <var class="var">expr</var> is zero, 0.0 otherwise.
1287
+ </p>
1288
+ </dd>
1289
+ <dt><samp class="option">pow(x, y)</samp></dt>
1290
+ <dd><p>Compute the power of <var class="var">x</var> elevated <var class="var">y</var>, it is equivalent to
1291
+ &quot;(<var class="var">x</var>)^(<var class="var">y</var>)&quot;.
1292
+ </p>
1293
+ </dd>
1294
+ <dt><samp class="option">print(t)</samp></dt>
1295
+ <dt><samp class="option">print(t, l)</samp></dt>
1296
+ <dd><p>Print the value of expression <var class="var">t</var> with loglevel <var class="var">l</var>. If <var class="var">l</var> is not
1297
+ specified then a default log level is used.
1298
+ Return the value of the expression printed.
1299
+ </p>
1300
+ </dd>
1301
+ <dt><samp class="option">random(idx)</samp></dt>
1302
+ <dd><p>Return a pseudo random value between 0.0 and 1.0. <var class="var">idx</var> is the
1303
+ index of the internal variable used to save the seed/state, which can be
1304
+ previously stored with <code class="code">st(idx)</code>.
1305
+ </p>
1306
+ <p>To initialize the seed, you need to store the seed value as a 64-bit
1307
+ unsigned integer in the internal variable with index <var class="var">idx</var>.
1308
+ </p>
1309
+ <p>For example, to store the seed with value <code class="code">42</code> in the internal
1310
+ variable with index <code class="code">0</code> and print a few random values:
1311
+ </p><div class="example">
1312
+ <pre class="example-preformatted">st(0,42); print(random(0)); print(random(0)); print(random(0))
1313
+ </pre></div>
1314
+
1315
+ </dd>
1316
+ <dt><samp class="option">randomi(idx, min, max)</samp></dt>
1317
+ <dd><p>Return a pseudo random value in the interval between <var class="var">min</var> and
1318
+ <var class="var">max</var>. <var class="var">idx</var> is the index of the internal variable which will be used to
1319
+ save the seed/state, which can be previously stored with <code class="code">st(idx)</code>.
1320
+ </p>
1321
+ <p>To initialize the seed, you need to store the seed value as a 64-bit
1322
+ unsigned integer in the internal variable with index <var class="var">idx</var>.
1323
+ </p>
1324
+ </dd>
1325
+ <dt><samp class="option">root(expr, max)</samp></dt>
1326
+ <dd><p>Find an input value for which the function represented by <var class="var">expr</var>
1327
+ with argument <var class="var">ld(0)</var> is 0 in the interval 0..<var class="var">max</var>.
1328
+ </p>
1329
+ <p>The expression in <var class="var">expr</var> must denote a continuous function or the
1330
+ result is undefined.
1331
+ </p>
1332
+ <p><var class="var">ld(0)</var> is used to represent the function input value, which means that the
1333
+ given expression will be evaluated multiple times with various input values that
1334
+ the expression can access through <code class="code">ld(0)</code>. When the expression evaluates to
1335
+ 0 then the corresponding input value will be returned.
1336
+ </p>
1337
+ </dd>
1338
+ <dt><samp class="option">round(expr)</samp></dt>
1339
+ <dd><p>Round the value of expression <var class="var">expr</var> to the nearest integer. For example,
1340
+ &quot;round(1.5)&quot; is &quot;2.0&quot;.
1341
+ </p>
1342
+ </dd>
1343
+ <dt><samp class="option">sgn(x)</samp></dt>
1344
+ <dd><p>Compute sign of <var class="var">x</var>.
1345
+ </p>
1346
+ </dd>
1347
+ <dt><samp class="option">sin(x)</samp></dt>
1348
+ <dd><p>Compute sine of <var class="var">x</var>.
1349
+ </p>
1350
+ </dd>
1351
+ <dt><samp class="option">sinh(x)</samp></dt>
1352
+ <dd><p>Compute hyperbolic sine of <var class="var">x</var>.
1353
+ </p>
1354
+ </dd>
1355
+ <dt><samp class="option">sqrt(expr)</samp></dt>
1356
+ <dd><p>Compute the square root of <var class="var">expr</var>. This is equivalent to
1357
+ &quot;(<var class="var">expr</var>)^.5&quot;.
1358
+ </p>
1359
+ </dd>
1360
+ <dt><samp class="option">squish(x)</samp></dt>
1361
+ <dd><p>Compute expression <code class="code">1/(1 + exp(4*x))</code>.
1362
+ </p>
1363
+ </dd>
1364
+ <dt><samp class="option">st(idx, expr)</samp></dt>
1365
+ <dd><p>Store the value of the expression <var class="var">expr</var> in an internal
1366
+ variable. <var class="var">idx</var> specifies the index of the variable where to store
1367
+ the value, and it is a value ranging from 0 to 9. The function returns
1368
+ the value stored in the internal variable.
1369
+ </p>
1370
+ <p>The stored value can be retrieved with <code class="code">ld(var)</code>.
1371
+ </p>
1372
+ <p>Note: variables are currently not shared between expressions.
1373
+ </p>
1374
+ </dd>
1375
+ <dt><samp class="option">tan(x)</samp></dt>
1376
+ <dd><p>Compute tangent of <var class="var">x</var>.
1377
+ </p>
1378
+ </dd>
1379
+ <dt><samp class="option">tanh(x)</samp></dt>
1380
+ <dd><p>Compute hyperbolic tangent of <var class="var">x</var>.
1381
+ </p>
1382
+ </dd>
1383
+ <dt><samp class="option">taylor(expr, x)</samp></dt>
1384
+ <dt><samp class="option">taylor(expr, x, idx)</samp></dt>
1385
+ <dd><p>Evaluate a Taylor series at <var class="var">x</var>, given an expression representing
1386
+ the <code class="code">ld(idx)</code>-th derivative of a function at 0.
1387
+ </p>
1388
+ <p>When the series does not converge the result is undefined.
1389
+ </p>
1390
+ <p><var class="var">ld(idx)</var> is used to represent the derivative order in <var class="var">expr</var>,
1391
+ which means that the given expression will be evaluated multiple times
1392
+ with various input values that the expression can access through
1393
+ <code class="code">ld(idx)</code>. If <var class="var">idx</var> is not specified then 0 is assumed.
1394
+ </p>
1395
+ <p>Note, when you have the derivatives at y instead of 0,
1396
+ <code class="code">taylor(expr, x-y)</code> can be used.
1397
+ </p>
1398
+ </dd>
1399
+ <dt><samp class="option">time(0)</samp></dt>
1400
+ <dd><p>Return the current (wallclock) time in seconds.
1401
+ </p>
1402
+ </dd>
1403
+ <dt><samp class="option">trunc(expr)</samp></dt>
1404
+ <dd><p>Round the value of expression <var class="var">expr</var> towards zero to the nearest
1405
+ integer. For example, &quot;trunc(-1.5)&quot; is &quot;-1.0&quot;.
1406
+ </p>
1407
+ </dd>
1408
+ <dt><samp class="option">while(cond, expr)</samp></dt>
1409
+ <dd><p>Evaluate expression <var class="var">expr</var> while the expression <var class="var">cond</var> is
1410
+ non-zero, and returns the value of the last <var class="var">expr</var> evaluation, or
1411
+ NAN if <var class="var">cond</var> was always false.
1412
+ </p></dd>
1413
+ </dl>
1414
+
1415
+ <p>The following constants are available:
1416
+ </p><dl class="table">
1417
+ <dt><samp class="option">PI</samp></dt>
1418
+ <dd><p>area of the unit disc, approximately 3.14
1419
+ </p></dd>
1420
+ <dt><samp class="option">E</samp></dt>
1421
+ <dd><p>exp(1) (Euler&rsquo;s number), approximately 2.718
1422
+ </p></dd>
1423
+ <dt><samp class="option">PHI</samp></dt>
1424
+ <dd><p>golden ratio (1+sqrt(5))/2, approximately 1.618
1425
+ </p></dd>
1426
+ </dl>
1427
+
1428
+ <p>Assuming that an expression is considered &quot;true&quot; if it has a non-zero
1429
+ value, note that:
1430
+ </p>
1431
+ <p><code class="code">*</code> works like AND
1432
+ </p>
1433
+ <p><code class="code">+</code> works like OR
1434
+ </p>
1435
+ <p>For example the construct:
1436
+ </p><div class="example">
1437
+ <pre class="example-preformatted">if (A AND B) then C
1438
+ </pre></div>
1439
+ <p>is equivalent to:
1440
+ </p><div class="example">
1441
+ <pre class="example-preformatted">if(A*B, C)
1442
+ </pre></div>
1443
+
1444
+ <p>In your C code, you can extend the list of unary and binary functions,
1445
+ and define recognized constants, so that they are available for your
1446
+ expressions.
1447
+ </p>
1448
+ <p>The evaluator also recognizes the International System unit prefixes.
1449
+ If &rsquo;i&rsquo; is appended after the prefix, binary prefixes are used, which
1450
+ are based on powers of 1024 instead of powers of 1000.
1451
+ The &rsquo;B&rsquo; postfix multiplies the value by 8, and can be appended after a
1452
+ unit prefix or used alone. This allows using for example &rsquo;KB&rsquo;, &rsquo;MiB&rsquo;,
1453
+ &rsquo;G&rsquo; and &rsquo;B&rsquo; as number postfix.
1454
+ </p>
1455
+ <p>The list of available International System prefixes follows, with
1456
+ indication of the corresponding powers of 10 and of 2.
1457
+ </p><dl class="table">
1458
+ <dt><samp class="option">y</samp></dt>
1459
+ <dd><p>10^-24 / 2^-80
1460
+ </p></dd>
1461
+ <dt><samp class="option">z</samp></dt>
1462
+ <dd><p>10^-21 / 2^-70
1463
+ </p></dd>
1464
+ <dt><samp class="option">a</samp></dt>
1465
+ <dd><p>10^-18 / 2^-60
1466
+ </p></dd>
1467
+ <dt><samp class="option">f</samp></dt>
1468
+ <dd><p>10^-15 / 2^-50
1469
+ </p></dd>
1470
+ <dt><samp class="option">p</samp></dt>
1471
+ <dd><p>10^-12 / 2^-40
1472
+ </p></dd>
1473
+ <dt><samp class="option">n</samp></dt>
1474
+ <dd><p>10^-9 / 2^-30
1475
+ </p></dd>
1476
+ <dt><samp class="option">u</samp></dt>
1477
+ <dd><p>10^-6 / 2^-20
1478
+ </p></dd>
1479
+ <dt><samp class="option">m</samp></dt>
1480
+ <dd><p>10^-3 / 2^-10
1481
+ </p></dd>
1482
+ <dt><samp class="option">c</samp></dt>
1483
+ <dd><p>10^-2
1484
+ </p></dd>
1485
+ <dt><samp class="option">d</samp></dt>
1486
+ <dd><p>10^-1
1487
+ </p></dd>
1488
+ <dt><samp class="option">h</samp></dt>
1489
+ <dd><p>10^2
1490
+ </p></dd>
1491
+ <dt><samp class="option">k</samp></dt>
1492
+ <dd><p>10^3 / 2^10
1493
+ </p></dd>
1494
+ <dt><samp class="option">K</samp></dt>
1495
+ <dd><p>10^3 / 2^10
1496
+ </p></dd>
1497
+ <dt><samp class="option">M</samp></dt>
1498
+ <dd><p>10^6 / 2^20
1499
+ </p></dd>
1500
+ <dt><samp class="option">G</samp></dt>
1501
+ <dd><p>10^9 / 2^30
1502
+ </p></dd>
1503
+ <dt><samp class="option">T</samp></dt>
1504
+ <dd><p>10^12 / 2^40
1505
+ </p></dd>
1506
+ <dt><samp class="option">P</samp></dt>
1507
+ <dd><p>10^15 / 2^50
1508
+ </p></dd>
1509
+ <dt><samp class="option">E</samp></dt>
1510
+ <dd><p>10^18 / 2^60
1511
+ </p></dd>
1512
+ <dt><samp class="option">Z</samp></dt>
1513
+ <dd><p>10^21 / 2^70
1514
+ </p></dd>
1515
+ <dt><samp class="option">Y</samp></dt>
1516
+ <dd><p>10^24 / 2^80
1517
+ </p></dd>
1518
+ </dl>
1519
+
1520
+
1521
+ <a name="See-Also"></a>
1522
+ <h2 class="chapter">4 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
1523
+
1524
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
1525
+ <a class="url" href="libavutil.html">libavutil</a>
1526
+ </p>
1527
+
1528
+ <a name="Authors"></a>
1529
+ <h2 class="chapter">5 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
1530
+
1531
+ <p>The FFmpeg developers.
1532
+ </p>
1533
+ <p>For details about the authorship, see the Git history of the project
1534
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
1535
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
1536
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
1537
+ </p>
1538
+ <p>Maintainers for the specific components are listed in the file
1539
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
1540
+ </p>
1541
+
1542
+ <p style="font-size: small;">
1543
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
1544
+ </p>
1545
+ </div>
1546
+ </body>
1547
+ </html>
ffmpeg-master-latest-win64-gpl/doc/ffmpeg.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffplay-all.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffplay.html ADDED
@@ -0,0 +1,914 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ ffplay Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ ffplay Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Synopsis" href="#Synopsis">1 Synopsis</a></li>
29
+ <li><a id="toc-Description" href="#Description">2 Description</a></li>
30
+ <li><a id="toc-Options" href="#Options">3 Options</a>
31
+ <ul class="toc-numbered-mark">
32
+ <li><a id="toc-Stream-specifiers-1" href="#Stream-specifiers-1">3.1 Stream specifiers</a></li>
33
+ <li><a id="toc-Generic-options" href="#Generic-options">3.2 Generic options</a></li>
34
+ <li><a id="toc-AVOptions" href="#AVOptions">3.3 AVOptions</a></li>
35
+ <li><a id="toc-Main-options" href="#Main-options">3.4 Main options</a></li>
36
+ <li><a id="toc-Advanced-options" href="#Advanced-options">3.5 Advanced options</a></li>
37
+ <li><a id="toc-While-playing" href="#While-playing">3.6 While playing</a></li>
38
+ </ul></li>
39
+ <li><a id="toc-See-Also" href="#See-Also">4 See Also</a></li>
40
+ <li><a id="toc-Authors" href="#Authors">5 Authors</a></li>
41
+ </ul>
42
+ </div>
43
+ </div>
44
+
45
+ <a name="Synopsis"></a>
46
+ <h2 class="chapter">1 Synopsis<span class="pull-right"><a class="anchor hidden-xs" href="#Synopsis" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Synopsis" aria-hidden="true">TOC</a></span></h2>
47
+
48
+ <p>ffplay [<var class="var">options</var>] [<samp class="file">input_url</samp>]
49
+ </p>
50
+ <a name="Description"></a>
51
+ <h2 class="chapter">2 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
52
+
53
+ <p>FFplay is a very simple and portable media player using the FFmpeg
54
+ libraries and the SDL library. It is mostly used as a testbed for the
55
+ various FFmpeg APIs.
56
+ </p>
57
+ <a name="Options"></a>
58
+ <h2 class="chapter">3 Options<span class="pull-right"><a class="anchor hidden-xs" href="#Options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Options" aria-hidden="true">TOC</a></span></h2>
59
+
60
+ <p>All the numerical options, if not specified otherwise, accept a string
61
+ representing a number as input, which may be followed by one of the SI
62
+ unit prefixes, for example: &rsquo;K&rsquo;, &rsquo;M&rsquo;, or &rsquo;G&rsquo;.
63
+ </p>
64
+ <p>If &rsquo;i&rsquo; is appended to the SI unit prefix, the complete prefix will be
65
+ interpreted as a unit prefix for binary multiples, which are based on
66
+ powers of 1024 instead of powers of 1000. Appending &rsquo;B&rsquo; to the SI unit
67
+ prefix multiplies the value by 8. This allows using, for example:
68
+ &rsquo;KB&rsquo;, &rsquo;MiB&rsquo;, &rsquo;G&rsquo; and &rsquo;B&rsquo; as number suffixes.
69
+ </p>
70
+ <p>Options which do not take arguments are boolean options, and set the
71
+ corresponding value to true. They can be set to false by prefixing
72
+ the option name with &quot;no&quot;. For example using &quot;-nofoo&quot;
73
+ will set the boolean option with name &quot;foo&quot; to false.
74
+ </p>
75
+ <p>Options that take arguments support a special syntax where the argument given on
76
+ the command line is interpreted as a path to the file from which the actual
77
+ argument value is loaded. To use this feature, add a forward slash &rsquo;/&rsquo;
78
+ immediately before the option name (after the leading dash). E.g.
79
+ </p><div class="example">
80
+ <pre class="example-preformatted">ffmpeg -i INPUT -/filter:v filter.script OUTPUT
81
+ </pre></div>
82
+ <p>will load a filtergraph description from the file named <samp class="file">filter.script</samp>.
83
+ </p>
84
+ <a class="anchor" id="Stream-specifiers"></a><a name="Stream-specifiers-1"></a>
85
+ <h3 class="section">3.1 Stream specifiers<span class="pull-right"><a class="anchor hidden-xs" href="#Stream-specifiers-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Stream-specifiers-1" aria-hidden="true">TOC</a></span></h3>
86
+ <p>Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
87
+ are used to precisely specify which stream(s) a given option belongs to.
88
+ </p>
89
+ <p>A stream specifier is a string generally appended to the option name and
90
+ separated from it by a colon. E.g. <code class="code">-codec:a:1 ac3</code> contains the
91
+ <code class="code">a:1</code> stream specifier, which matches the second audio stream. Therefore, it
92
+ would select the ac3 codec for the second audio stream.
93
+ </p>
94
+ <p>A stream specifier can match several streams, so that the option is applied to all
95
+ of them. E.g. the stream specifier in <code class="code">-b:a 128k</code> matches all audio
96
+ streams.
97
+ </p>
98
+ <p>An empty stream specifier matches all streams. For example, <code class="code">-codec copy</code>
99
+ or <code class="code">-codec: copy</code> would copy all the streams without reencoding.
100
+ </p>
101
+ <p>Possible forms of stream specifiers are:
102
+ </p><dl class="table">
103
+ <dt><samp class="option"><var class="var">stream_index</var></samp></dt>
104
+ <dd><p>Matches the stream with this index. E.g. <code class="code">-threads:1 4</code> would set the
105
+ thread count for the second stream to 4. If <var class="var">stream_index</var> is used as an
106
+ additional stream specifier (see below), then it selects stream number
107
+ <var class="var">stream_index</var> from the matching streams. Stream numbering is based on the
108
+ order of the streams as detected by libavformat except when a stream group
109
+ specifier or program ID is also specified. In this case it is based on the
110
+ ordering of the streams in the group or program.
111
+ </p></dd>
112
+ <dt><samp class="option"><var class="var">stream_type</var>[:<var class="var">additional_stream_specifier</var>]</samp></dt>
113
+ <dd><p><var class="var">stream_type</var> is one of following: &rsquo;v&rsquo; or &rsquo;V&rsquo; for video, &rsquo;a&rsquo; for audio, &rsquo;s&rsquo;
114
+ for subtitle, &rsquo;d&rsquo; for data, and &rsquo;t&rsquo; for attachments. &rsquo;v&rsquo; matches all video
115
+ streams, &rsquo;V&rsquo; only matches video streams which are not attached pictures, video
116
+ thumbnails or cover arts. If <var class="var">additional_stream_specifier</var> is used, then
117
+ it matches streams which both have this type and match the
118
+ <var class="var">additional_stream_specifier</var>. Otherwise, it matches all streams of the
119
+ specified type.
120
+ </p></dd>
121
+ <dt><samp class="option">g:<var class="var">group_specifier</var>[:<var class="var">additional_stream_specifier</var>]</samp></dt>
122
+ <dd><p>Matches streams which are in the group with the specifier <var class="var">group_specifier</var>.
123
+ if <var class="var">additional_stream_specifier</var> is used, then it matches streams which both
124
+ are part of the group and match the <var class="var">additional_stream_specifier</var>.
125
+ <var class="var">group_specifier</var> may be one of the following:
126
+ </p><dl class="table">
127
+ <dt><samp class="option"><var class="var">group_index</var></samp></dt>
128
+ <dd><p>Match the stream with this group index.
129
+ </p></dd>
130
+ <dt><samp class="option">#<var class="var">group_id</var> or i:<var class="var">group_id</var></samp></dt>
131
+ <dd><p>Match the stream with this group id.
132
+ </p></dd>
133
+ </dl>
134
+ </dd>
135
+ <dt><samp class="option">p:<var class="var">program_id</var>[:<var class="var">additional_stream_specifier</var>]</samp></dt>
136
+ <dd><p>Matches streams which are in the program with the id <var class="var">program_id</var>. If
137
+ <var class="var">additional_stream_specifier</var> is used, then it matches streams which both
138
+ are part of the program and match the <var class="var">additional_stream_specifier</var>.
139
+ </p>
140
+ </dd>
141
+ <dt><samp class="option">#<var class="var">stream_id</var> or i:<var class="var">stream_id</var></samp></dt>
142
+ <dd><p>Match the stream by stream id (e.g. PID in MPEG-TS container).
143
+ </p></dd>
144
+ <dt><samp class="option">m:<var class="var">key</var>[:<var class="var">value</var>]</samp></dt>
145
+ <dd><p>Matches streams with the metadata tag <var class="var">key</var> having the specified value. If
146
+ <var class="var">value</var> is not given, matches streams that contain the given tag with any
147
+ value. The colon character &rsquo;:&rsquo; in <var class="var">key</var> or <var class="var">value</var> needs to be
148
+ backslash-escaped.
149
+ </p></dd>
150
+ <dt><samp class="option">disp:<var class="var">dispositions</var>[:<var class="var">additional_stream_specifier</var>]</samp></dt>
151
+ <dd><p>Matches streams with the given disposition(s). <var class="var">dispositions</var> is a list of
152
+ one or more dispositions (as printed by the <samp class="option">-dispositions</samp> option)
153
+ joined with &rsquo;+&rsquo;.
154
+ </p></dd>
155
+ <dt><samp class="option">u</samp></dt>
156
+ <dd><p>Matches streams with usable configuration, the codec must be defined and the
157
+ essential information such as video dimension or audio sample rate must be present.
158
+ </p>
159
+ <p>Note that in <code class="command">ffmpeg</code>, matching by metadata will only work properly for
160
+ input files.
161
+ </p></dd>
162
+ </dl>
163
+
164
+ <a name="Generic-options"></a>
165
+ <h3 class="section">3.2 Generic options<span class="pull-right"><a class="anchor hidden-xs" href="#Generic-options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Generic-options" aria-hidden="true">TOC</a></span></h3>
166
+
167
+ <p>These options are shared amongst the ff* tools.
168
+ </p>
169
+ <dl class="table">
170
+ <dt><samp class="option">-L</samp></dt>
171
+ <dd><p>Show license.
172
+ </p>
173
+ </dd>
174
+ <dt><samp class="option">-h, -?, -help, --help [<var class="var">arg</var>]</samp></dt>
175
+ <dd><p>Show help. An optional parameter may be specified to print help about a specific
176
+ item. If no argument is specified, only basic (non advanced) tool
177
+ options are shown.
178
+ </p>
179
+ <p>Possible values of <var class="var">arg</var> are:
180
+ </p><dl class="table">
181
+ <dt><samp class="option">long</samp></dt>
182
+ <dd><p>Print advanced tool options in addition to the basic tool options.
183
+ </p>
184
+ </dd>
185
+ <dt><samp class="option">full</samp></dt>
186
+ <dd><p>Print complete list of options, including shared and private options
187
+ for encoders, decoders, demuxers, muxers, filters, etc.
188
+ </p>
189
+ </dd>
190
+ <dt><samp class="option">decoder=<var class="var">decoder_name</var></samp></dt>
191
+ <dd><p>Print detailed information about the decoder named <var class="var">decoder_name</var>. Use the
192
+ <samp class="option">-decoders</samp> option to get a list of all decoders.
193
+ </p>
194
+ </dd>
195
+ <dt><samp class="option">encoder=<var class="var">encoder_name</var></samp></dt>
196
+ <dd><p>Print detailed information about the encoder named <var class="var">encoder_name</var>. Use the
197
+ <samp class="option">-encoders</samp> option to get a list of all encoders.
198
+ </p>
199
+ </dd>
200
+ <dt><samp class="option">demuxer=<var class="var">demuxer_name</var></samp></dt>
201
+ <dd><p>Print detailed information about the demuxer named <var class="var">demuxer_name</var>. Use the
202
+ <samp class="option">-formats</samp> option to get a list of all demuxers and muxers.
203
+ </p>
204
+ </dd>
205
+ <dt><samp class="option">muxer=<var class="var">muxer_name</var></samp></dt>
206
+ <dd><p>Print detailed information about the muxer named <var class="var">muxer_name</var>. Use the
207
+ <samp class="option">-formats</samp> option to get a list of all muxers and demuxers.
208
+ </p>
209
+ </dd>
210
+ <dt><samp class="option">filter=<var class="var">filter_name</var></samp></dt>
211
+ <dd><p>Print detailed information about the filter named <var class="var">filter_name</var>. Use the
212
+ <samp class="option">-filters</samp> option to get a list of all filters.
213
+ </p>
214
+ </dd>
215
+ <dt><samp class="option">bsf=<var class="var">bitstream_filter_name</var></samp></dt>
216
+ <dd><p>Print detailed information about the bitstream filter named <var class="var">bitstream_filter_name</var>.
217
+ Use the <samp class="option">-bsfs</samp> option to get a list of all bitstream filters.
218
+ </p>
219
+ </dd>
220
+ <dt><samp class="option">protocol=<var class="var">protocol_name</var></samp></dt>
221
+ <dd><p>Print detailed information about the protocol named <var class="var">protocol_name</var>.
222
+ Use the <samp class="option">-protocols</samp> option to get a list of all protocols.
223
+ </p></dd>
224
+ </dl>
225
+
226
+ </dd>
227
+ <dt><samp class="option">-version</samp></dt>
228
+ <dd><p>Show version.
229
+ </p>
230
+ </dd>
231
+ <dt><samp class="option">-buildconf</samp></dt>
232
+ <dd><p>Show the build configuration, one option per line.
233
+ </p>
234
+ </dd>
235
+ <dt><samp class="option">-formats</samp></dt>
236
+ <dd><p>Show available formats (including devices).
237
+ </p>
238
+ </dd>
239
+ <dt><samp class="option">-demuxers</samp></dt>
240
+ <dd><p>Show available demuxers.
241
+ </p>
242
+ </dd>
243
+ <dt><samp class="option">-muxers</samp></dt>
244
+ <dd><p>Show available muxers.
245
+ </p>
246
+ </dd>
247
+ <dt><samp class="option">-devices</samp></dt>
248
+ <dd><p>Show available devices.
249
+ </p>
250
+ </dd>
251
+ <dt><samp class="option">-codecs</samp></dt>
252
+ <dd><p>Show all codecs known to libavcodec.
253
+ </p>
254
+ <p>Note that the term &rsquo;codec&rsquo; is used throughout this documentation as a shortcut
255
+ for what is more correctly called a media bitstream format.
256
+ </p>
257
+ </dd>
258
+ <dt><samp class="option">-decoders</samp></dt>
259
+ <dd><p>Show available decoders.
260
+ </p>
261
+ </dd>
262
+ <dt><samp class="option">-encoders</samp></dt>
263
+ <dd><p>Show all available encoders.
264
+ </p>
265
+ </dd>
266
+ <dt><samp class="option">-bsfs</samp></dt>
267
+ <dd><p>Show available bitstream filters.
268
+ </p>
269
+ </dd>
270
+ <dt><samp class="option">-protocols</samp></dt>
271
+ <dd><p>Show available protocols.
272
+ </p>
273
+ </dd>
274
+ <dt><samp class="option">-filters</samp></dt>
275
+ <dd><p>Show available libavfilter filters.
276
+ </p>
277
+ </dd>
278
+ <dt><samp class="option">-pix_fmts</samp></dt>
279
+ <dd><p>Show available pixel formats.
280
+ </p>
281
+ </dd>
282
+ <dt><samp class="option">-sample_fmts</samp></dt>
283
+ <dd><p>Show available sample formats.
284
+ </p>
285
+ </dd>
286
+ <dt><samp class="option">-layouts</samp></dt>
287
+ <dd><p>Show channel names and standard channel layouts.
288
+ </p>
289
+ </dd>
290
+ <dt><samp class="option">-dispositions</samp></dt>
291
+ <dd><p>Show stream dispositions.
292
+ </p>
293
+ </dd>
294
+ <dt><samp class="option">-colors</samp></dt>
295
+ <dd><p>Show recognized color names.
296
+ </p>
297
+ </dd>
298
+ <dt><samp class="option">-sources <var class="var">device</var>[,<var class="var">opt1</var>=<var class="var">val1</var>[,<var class="var">opt2</var>=<var class="var">val2</var>]...]</samp></dt>
299
+ <dd><p>Show autodetected sources of the input device.
300
+ Some devices may provide system-dependent source names that cannot be autodetected.
301
+ The returned list cannot be assumed to be always complete.
302
+ </p><div class="example">
303
+ <pre class="example-preformatted">ffmpeg -sources pulse,server=192.168.0.4
304
+ </pre></div>
305
+
306
+ </dd>
307
+ <dt><samp class="option">-sinks <var class="var">device</var>[,<var class="var">opt1</var>=<var class="var">val1</var>[,<var class="var">opt2</var>=<var class="var">val2</var>]...]</samp></dt>
308
+ <dd><p>Show autodetected sinks of the output device.
309
+ Some devices may provide system-dependent sink names that cannot be autodetected.
310
+ The returned list cannot be assumed to be always complete.
311
+ </p><div class="example">
312
+ <pre class="example-preformatted">ffmpeg -sinks pulse,server=192.168.0.4
313
+ </pre></div>
314
+
315
+ </dd>
316
+ <dt><samp class="option">-loglevel [<var class="var">flags</var>+]<var class="var">loglevel</var> | -v [<var class="var">flags</var>+]<var class="var">loglevel</var></samp></dt>
317
+ <dd><p>Set logging level and flags used by the library.
318
+ </p>
319
+ <p>The optional <var class="var">flags</var> prefix can consist of the following values:
320
+ </p><dl class="table">
321
+ <dt>&lsquo;<samp class="samp">repeat</samp>&rsquo;</dt>
322
+ <dd><p>Indicates that repeated log output should not be compressed to the first line
323
+ and the &quot;Last message repeated n times&quot; line will be omitted.
324
+ </p></dd>
325
+ <dt>&lsquo;<samp class="samp">level</samp>&rsquo;</dt>
326
+ <dd><p>Indicates that log output should add a <code class="code">[level]</code> prefix to each message
327
+ line. This can be used as an alternative to log coloring, e.g. when dumping the
328
+ log to file.
329
+ </p></dd>
330
+ <dt>&lsquo;<samp class="samp">time</samp>&rsquo;</dt>
331
+ <dd><p>Indicates that log lines should be prefixed with time information.
332
+ </p></dd>
333
+ <dt>&lsquo;<samp class="samp">datetime</samp>&rsquo;</dt>
334
+ <dd><p>Indicates that log lines should be prefixed with date and time information.
335
+ </p></dd>
336
+ </dl>
337
+ <p>Flags can also be used alone by adding a &rsquo;+&rsquo;/&rsquo;-&rsquo; prefix to set/reset a single
338
+ flag without affecting other <var class="var">flags</var> or changing <var class="var">loglevel</var>. When
339
+ setting both <var class="var">flags</var> and <var class="var">loglevel</var>, a &rsquo;+&rsquo; separator is expected
340
+ between the last <var class="var">flags</var> value and before <var class="var">loglevel</var>.
341
+ </p>
342
+ <p><var class="var">loglevel</var> is a string or a number containing one of the following values:
343
+ </p><dl class="table">
344
+ <dt>&lsquo;<samp class="samp">quiet, -8</samp>&rsquo;</dt>
345
+ <dd><p>Show nothing at all; be silent.
346
+ </p></dd>
347
+ <dt>&lsquo;<samp class="samp">panic, 0</samp>&rsquo;</dt>
348
+ <dd><p>Only show fatal errors which could lead the process to crash, such as
349
+ an assertion failure. This is not currently used for anything.
350
+ </p></dd>
351
+ <dt>&lsquo;<samp class="samp">fatal, 8</samp>&rsquo;</dt>
352
+ <dd><p>Only show fatal errors. These are errors after which the process absolutely
353
+ cannot continue.
354
+ </p></dd>
355
+ <dt>&lsquo;<samp class="samp">error, 16</samp>&rsquo;</dt>
356
+ <dd><p>Show all errors, including ones which can be recovered from.
357
+ </p></dd>
358
+ <dt>&lsquo;<samp class="samp">warning, 24</samp>&rsquo;</dt>
359
+ <dd><p>Show all warnings and errors. Any message related to possibly
360
+ incorrect or unexpected events will be shown.
361
+ </p></dd>
362
+ <dt>&lsquo;<samp class="samp">info, 32</samp>&rsquo;</dt>
363
+ <dd><p>Show informative messages during processing. This is in addition to
364
+ warnings and errors. This is the default value.
365
+ </p></dd>
366
+ <dt>&lsquo;<samp class="samp">verbose, 40</samp>&rsquo;</dt>
367
+ <dd><p>Same as <code class="code">info</code>, except more verbose.
368
+ </p></dd>
369
+ <dt>&lsquo;<samp class="samp">debug, 48</samp>&rsquo;</dt>
370
+ <dd><p>Show everything, including debugging information.
371
+ </p></dd>
372
+ <dt>&lsquo;<samp class="samp">trace, 56</samp>&rsquo;</dt>
373
+ </dl>
374
+
375
+ <p>For example to enable repeated log output, add the <code class="code">level</code> prefix, and set
376
+ <var class="var">loglevel</var> to <code class="code">verbose</code>:
377
+ </p><div class="example">
378
+ <pre class="example-preformatted">ffmpeg -loglevel repeat+level+verbose -i input output
379
+ </pre></div>
380
+ <p>Another example that enables repeated log output without affecting current
381
+ state of <code class="code">level</code> prefix flag or <var class="var">loglevel</var>:
382
+ </p><div class="example">
383
+ <pre class="example-preformatted">ffmpeg [...] -loglevel +repeat
384
+ </pre></div>
385
+
386
+ <p>By default the program logs to stderr. If coloring is supported by the
387
+ terminal, colors are used to mark errors and warnings. Log coloring
388
+ can be disabled setting the environment variable
389
+ <code class="env">AV_LOG_FORCE_NOCOLOR</code>, or can be forced setting
390
+ the environment variable <code class="env">AV_LOG_FORCE_COLOR</code>.
391
+ </p>
392
+ </dd>
393
+ <dt><samp class="option">-report</samp></dt>
394
+ <dd><p>Dump full command line and log output to a file named
395
+ <code class="code"><var class="var">program</var>-<var class="var">YYYYMMDD</var>-<var class="var">HHMMSS</var>.log</code> in the current
396
+ directory.
397
+ This file can be useful for bug reports.
398
+ It also implies <code class="code">-loglevel debug</code>.
399
+ </p>
400
+ <p>Setting the environment variable <code class="env">FFREPORT</code> to any value has the
401
+ same effect. If the value is a &rsquo;:&rsquo;-separated key=value sequence, these
402
+ options will affect the report; option values must be escaped if they
403
+ contain special characters or the options delimiter &rsquo;:&rsquo; (see the
404
+ &ldquo;Quoting and escaping&rdquo; section in the ffmpeg-utils manual).
405
+ </p>
406
+ <p>The following options are recognized:
407
+ </p><dl class="table">
408
+ <dt><samp class="option">file</samp></dt>
409
+ <dd><p>set the file name to use for the report; <code class="code">%p</code> is expanded to the name
410
+ of the program, <code class="code">%t</code> is expanded to a timestamp, <code class="code">%%</code> is expanded
411
+ to a plain <code class="code">%</code>
412
+ </p></dd>
413
+ <dt><samp class="option">level</samp></dt>
414
+ <dd><p>set the log verbosity level using a numerical value (see <code class="code">-loglevel</code>).
415
+ </p></dd>
416
+ </dl>
417
+
418
+ <p>For example, to output a report to a file named <samp class="file">ffreport.log</samp>
419
+ using a log level of <code class="code">32</code> (alias for log level <code class="code">info</code>):
420
+ </p>
421
+ <div class="example">
422
+ <pre class="example-preformatted">FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output
423
+ </pre></div>
424
+
425
+ <p>Errors in parsing the environment variable are not fatal, and will not
426
+ appear in the report.
427
+ </p>
428
+ </dd>
429
+ <dt><samp class="option">-hide_banner</samp></dt>
430
+ <dd><p>Suppress printing banner.
431
+ </p>
432
+ <p>All FFmpeg tools will normally show a copyright notice, build options
433
+ and library versions. This option can be used to suppress printing
434
+ this information.
435
+ </p>
436
+ </dd>
437
+ <dt><samp class="option">-cpuflags flags (<em class="emph">global</em>)</samp></dt>
438
+ <dd><p>Allows setting and clearing cpu flags. This option is intended
439
+ for testing. Do not use it unless you know what you&rsquo;re doing.
440
+ </p><div class="example">
441
+ <pre class="example-preformatted">ffmpeg -cpuflags -sse+mmx ...
442
+ ffmpeg -cpuflags mmx ...
443
+ ffmpeg -cpuflags 0 ...
444
+ </pre></div>
445
+ <p>Possible flags for this option are:
446
+ </p><dl class="table">
447
+ <dt>&lsquo;<samp class="samp">x86</samp>&rsquo;</dt>
448
+ <dd><dl class="table">
449
+ <dt>&lsquo;<samp class="samp">mmx</samp>&rsquo;</dt>
450
+ <dt>&lsquo;<samp class="samp">mmxext</samp>&rsquo;</dt>
451
+ <dt>&lsquo;<samp class="samp">sse</samp>&rsquo;</dt>
452
+ <dt>&lsquo;<samp class="samp">sse2</samp>&rsquo;</dt>
453
+ <dt>&lsquo;<samp class="samp">sse2slow</samp>&rsquo;</dt>
454
+ <dt>&lsquo;<samp class="samp">sse3</samp>&rsquo;</dt>
455
+ <dt>&lsquo;<samp class="samp">sse3slow</samp>&rsquo;</dt>
456
+ <dt>&lsquo;<samp class="samp">ssse3</samp>&rsquo;</dt>
457
+ <dt>&lsquo;<samp class="samp">atom</samp>&rsquo;</dt>
458
+ <dt>&lsquo;<samp class="samp">sse4.1</samp>&rsquo;</dt>
459
+ <dt>&lsquo;<samp class="samp">sse4.2</samp>&rsquo;</dt>
460
+ <dt>&lsquo;<samp class="samp">avx</samp>&rsquo;</dt>
461
+ <dt>&lsquo;<samp class="samp">avx2</samp>&rsquo;</dt>
462
+ <dt>&lsquo;<samp class="samp">xop</samp>&rsquo;</dt>
463
+ <dt>&lsquo;<samp class="samp">fma3</samp>&rsquo;</dt>
464
+ <dt>&lsquo;<samp class="samp">fma4</samp>&rsquo;</dt>
465
+ <dt>&lsquo;<samp class="samp">3dnow</samp>&rsquo;</dt>
466
+ <dt>&lsquo;<samp class="samp">3dnowext</samp>&rsquo;</dt>
467
+ <dt>&lsquo;<samp class="samp">bmi1</samp>&rsquo;</dt>
468
+ <dt>&lsquo;<samp class="samp">bmi2</samp>&rsquo;</dt>
469
+ <dt>&lsquo;<samp class="samp">cmov</samp>&rsquo;</dt>
470
+ </dl>
471
+ </dd>
472
+ <dt>&lsquo;<samp class="samp">ARM</samp>&rsquo;</dt>
473
+ <dd><dl class="table">
474
+ <dt>&lsquo;<samp class="samp">armv5te</samp>&rsquo;</dt>
475
+ <dt>&lsquo;<samp class="samp">armv6</samp>&rsquo;</dt>
476
+ <dt>&lsquo;<samp class="samp">armv6t2</samp>&rsquo;</dt>
477
+ <dt>&lsquo;<samp class="samp">vfp</samp>&rsquo;</dt>
478
+ <dt>&lsquo;<samp class="samp">vfpv3</samp>&rsquo;</dt>
479
+ <dt>&lsquo;<samp class="samp">neon</samp>&rsquo;</dt>
480
+ <dt>&lsquo;<samp class="samp">setend</samp>&rsquo;</dt>
481
+ </dl>
482
+ </dd>
483
+ <dt>&lsquo;<samp class="samp">AArch64</samp>&rsquo;</dt>
484
+ <dd><dl class="table">
485
+ <dt>&lsquo;<samp class="samp">armv8</samp>&rsquo;</dt>
486
+ <dt>&lsquo;<samp class="samp">vfp</samp>&rsquo;</dt>
487
+ <dt>&lsquo;<samp class="samp">neon</samp>&rsquo;</dt>
488
+ </dl>
489
+ </dd>
490
+ <dt>&lsquo;<samp class="samp">PowerPC</samp>&rsquo;</dt>
491
+ <dd><dl class="table">
492
+ <dt>&lsquo;<samp class="samp">altivec</samp>&rsquo;</dt>
493
+ </dl>
494
+ </dd>
495
+ <dt>&lsquo;<samp class="samp">Specific Processors</samp>&rsquo;</dt>
496
+ <dd><dl class="table">
497
+ <dt>&lsquo;<samp class="samp">pentium2</samp>&rsquo;</dt>
498
+ <dt>&lsquo;<samp class="samp">pentium3</samp>&rsquo;</dt>
499
+ <dt>&lsquo;<samp class="samp">pentium4</samp>&rsquo;</dt>
500
+ <dt>&lsquo;<samp class="samp">k6</samp>&rsquo;</dt>
501
+ <dt>&lsquo;<samp class="samp">k62</samp>&rsquo;</dt>
502
+ <dt>&lsquo;<samp class="samp">athlon</samp>&rsquo;</dt>
503
+ <dt>&lsquo;<samp class="samp">athlonxp</samp>&rsquo;</dt>
504
+ <dt>&lsquo;<samp class="samp">k8</samp>&rsquo;</dt>
505
+ </dl>
506
+ </dd>
507
+ </dl>
508
+
509
+ </dd>
510
+ <dt><samp class="option">-cpucount <var class="var">count</var> (<em class="emph">global</em>)</samp></dt>
511
+ <dd><p>Override detection of CPU count. This option is intended
512
+ for testing. Do not use it unless you know what you&rsquo;re doing.
513
+ </p><div class="example">
514
+ <pre class="example-preformatted">ffmpeg -cpucount 2
515
+ </pre></div>
516
+
517
+ </dd>
518
+ <dt><samp class="option">-max_alloc <var class="var">bytes</var></samp></dt>
519
+ <dd><p>Set the maximum size limit for allocating a block on the heap by ffmpeg&rsquo;s
520
+ family of malloc functions. Exercise <strong class="strong">extreme caution</strong> when using
521
+ this option. Don&rsquo;t use if you do not understand the full consequence of doing so.
522
+ Default is INT_MAX.
523
+ </p></dd>
524
+ </dl>
525
+
526
+ <a name="AVOptions"></a>
527
+ <h3 class="section">3.3 AVOptions<span class="pull-right"><a class="anchor hidden-xs" href="#AVOptions" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-AVOptions" aria-hidden="true">TOC</a></span></h3>
528
+
529
+ <p>These options are provided directly by the libavformat, libavdevice and
530
+ libavcodec libraries. To see the list of available AVOptions, use the
531
+ <samp class="option">-help</samp> option. They are separated into two categories:
532
+ </p><dl class="table">
533
+ <dt><samp class="option">generic</samp></dt>
534
+ <dd><p>These options can be set for any container, codec or device. Generic options
535
+ are listed under AVFormatContext options for containers/devices and under
536
+ AVCodecContext options for codecs.
537
+ </p></dd>
538
+ <dt><samp class="option">private</samp></dt>
539
+ <dd><p>These options are specific to the given container, device or codec. Private
540
+ options are listed under their corresponding containers/devices/codecs.
541
+ </p></dd>
542
+ </dl>
543
+
544
+ <p>For example to write an ID3v2.3 header instead of a default ID3v2.4 to
545
+ an MP3 file, use the <samp class="option">id3v2_version</samp> private option of the MP3
546
+ muxer:
547
+ </p><div class="example">
548
+ <pre class="example-preformatted">ffmpeg -i input.flac -id3v2_version 3 out.mp3
549
+ </pre></div>
550
+
551
+ <p>All codec AVOptions are per-stream, and thus a stream specifier
552
+ should be attached to them:
553
+ </p><div class="example">
554
+ <pre class="example-preformatted">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
555
+ </pre></div>
556
+
557
+ <p>In the above example, a multichannel audio stream is mapped twice for output.
558
+ The first instance is encoded with codec ac3 and bitrate 640k.
559
+ The second instance is downmixed to 2 channels and encoded with codec aac. A bitrate of 128k is specified for it using
560
+ absolute index of the output stream.
561
+ </p>
562
+ <p>Note: the <samp class="option">-nooption</samp> syntax cannot be used for boolean
563
+ AVOptions, use <samp class="option">-option 0</samp>/<samp class="option">-option 1</samp>.
564
+ </p>
565
+ <p>Note: the old undocumented way of specifying per-stream AVOptions by
566
+ prepending v/a/s to the options name is now obsolete and will be
567
+ removed soon.
568
+ </p>
569
+ <a name="Main-options"></a>
570
+ <h3 class="section">3.4 Main options<span class="pull-right"><a class="anchor hidden-xs" href="#Main-options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Main-options" aria-hidden="true">TOC</a></span></h3>
571
+
572
+ <dl class="table">
573
+ <dt><samp class="option">-x <var class="var">width</var></samp></dt>
574
+ <dd><p>Force displayed width.
575
+ </p></dd>
576
+ <dt><samp class="option">-y <var class="var">height</var></samp></dt>
577
+ <dd><p>Force displayed height.
578
+ </p></dd>
579
+ <dt><samp class="option">-fs</samp></dt>
580
+ <dd><p>Start in fullscreen mode.
581
+ </p></dd>
582
+ <dt><samp class="option">-an</samp></dt>
583
+ <dd><p>Disable audio.
584
+ </p></dd>
585
+ <dt><samp class="option">-vn</samp></dt>
586
+ <dd><p>Disable video.
587
+ </p></dd>
588
+ <dt><samp class="option">-sn</samp></dt>
589
+ <dd><p>Disable subtitles.
590
+ </p></dd>
591
+ <dt><samp class="option">-ss <var class="var">pos</var></samp></dt>
592
+ <dd><p>Seek to <var class="var">pos</var>. Note that in most formats it is not possible to seek
593
+ exactly, so <code class="command">ffplay</code> will seek to the nearest seek point to
594
+ <var class="var">pos</var>.
595
+ </p>
596
+ <p><var class="var">pos</var> must be a time duration specification,
597
+ see <a data-manual="ffmpeg-utils" href="ffmpeg-utils.html#time-duration-syntax">the Time duration section in the ffmpeg-utils(1) manual</a>.
598
+ </p></dd>
599
+ <dt><samp class="option">-t <var class="var">duration</var></samp></dt>
600
+ <dd><p>Play <var class="var">duration</var> seconds of audio/video.
601
+ </p>
602
+ <p><var class="var">duration</var> must be a time duration specification,
603
+ see <a data-manual="ffmpeg-utils" href="ffmpeg-utils.html#time-duration-syntax">the Time duration section in the ffmpeg-utils(1) manual</a>.
604
+ </p></dd>
605
+ <dt><samp class="option">-bytes</samp></dt>
606
+ <dd><p>Seek by bytes.
607
+ </p></dd>
608
+ <dt><samp class="option">-seek_interval</samp></dt>
609
+ <dd><p>Set custom interval, in seconds, for seeking using left/right keys. Default is 10 seconds.
610
+ </p></dd>
611
+ <dt><samp class="option">-nodisp</samp></dt>
612
+ <dd><p>Disable graphical display.
613
+ </p></dd>
614
+ <dt><samp class="option">-noborder</samp></dt>
615
+ <dd><p>Borderless window.
616
+ </p></dd>
617
+ <dt><samp class="option">-alwaysontop</samp></dt>
618
+ <dd><p>Window always on top. Available on: X11 with SDL &gt;= 2.0.5, Windows SDL &gt;= 2.0.6.
619
+ </p></dd>
620
+ <dt><samp class="option">-volume</samp></dt>
621
+ <dd><p>Set the startup volume. 0 means silence, 100 means no volume reduction or
622
+ amplification. Negative values are treated as 0, values above 100 are treated
623
+ as 100.
624
+ </p></dd>
625
+ <dt><samp class="option">-f <var class="var">fmt</var></samp></dt>
626
+ <dd><p>Force format.
627
+ </p></dd>
628
+ <dt><samp class="option">-window_title <var class="var">title</var></samp></dt>
629
+ <dd><p>Set window title (default is the input filename).
630
+ </p></dd>
631
+ <dt><samp class="option">-left <var class="var">title</var></samp></dt>
632
+ <dd><p>Set the x position for the left of the window (default is a centered window).
633
+ </p></dd>
634
+ <dt><samp class="option">-top <var class="var">title</var></samp></dt>
635
+ <dd><p>Set the y position for the top of the window (default is a centered window).
636
+ </p></dd>
637
+ <dt><samp class="option">-loop <var class="var">number</var></samp></dt>
638
+ <dd><p>Loops movie playback &lt;number&gt; times. 0 means forever.
639
+ </p></dd>
640
+ <dt><samp class="option">-showmode <var class="var">mode</var></samp></dt>
641
+ <dd><p>Set the show mode to use.
642
+ Available values for <var class="var">mode</var> are:
643
+ </p><dl class="table">
644
+ <dt>&lsquo;<samp class="samp">0, video</samp>&rsquo;</dt>
645
+ <dd><p>show video
646
+ </p></dd>
647
+ <dt>&lsquo;<samp class="samp">1, waves</samp>&rsquo;</dt>
648
+ <dd><p>show audio waves
649
+ </p></dd>
650
+ <dt>&lsquo;<samp class="samp">2, rdft</samp>&rsquo;</dt>
651
+ <dd><p>show audio frequency band using RDFT ((Inverse) Real Discrete Fourier Transform)
652
+ </p></dd>
653
+ </dl>
654
+
655
+ <p>Default value is &quot;video&quot;, if video is not present or cannot be played
656
+ &quot;rdft&quot; is automatically selected.
657
+ </p>
658
+ <p>You can interactively cycle through the available show modes by
659
+ pressing the key <kbd class="key">w</kbd>.
660
+ </p>
661
+ </dd>
662
+ <dt><samp class="option">-vf <var class="var">filtergraph</var></samp></dt>
663
+ <dd><p>Create the filtergraph specified by <var class="var">filtergraph</var> and use it to
664
+ filter the video stream.
665
+ </p>
666
+ <p><var class="var">filtergraph</var> is a description of the filtergraph to apply to
667
+ the stream, and must have a single video input and a single video
668
+ output. In the filtergraph, the input is associated to the label
669
+ <code class="code">in</code>, and the output to the label <code class="code">out</code>. See the
670
+ ffmpeg-filters manual for more information about the filtergraph
671
+ syntax.
672
+ </p>
673
+ <p>You can specify this parameter multiple times and cycle through the specified
674
+ filtergraphs along with the show modes by pressing the key <kbd class="key">w</kbd>.
675
+ </p>
676
+ </dd>
677
+ <dt><samp class="option">-af <var class="var">filtergraph</var></samp></dt>
678
+ <dd><p><var class="var">filtergraph</var> is a description of the filtergraph to apply to
679
+ the input audio.
680
+ Use the option &quot;-filters&quot; to show all the available filters (including
681
+ sources and sinks).
682
+ </p>
683
+ </dd>
684
+ <dt><samp class="option">-i <var class="var">input_url</var></samp></dt>
685
+ <dd><p>Read <var class="var">input_url</var>.
686
+ </p></dd>
687
+ </dl>
688
+
689
+ <a name="Advanced-options"></a>
690
+ <h3 class="section">3.5 Advanced options<span class="pull-right"><a class="anchor hidden-xs" href="#Advanced-options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Advanced-options" aria-hidden="true">TOC</a></span></h3>
691
+ <dl class="table">
692
+ <dt><samp class="option">-stats</samp></dt>
693
+ <dd><p>Print several playback statistics, in particular show the stream
694
+ duration, the codec parameters, the current position in the stream and
695
+ the audio/video synchronisation drift. It is shown by default, unless the
696
+ log level is lower than <code class="code">info</code>. Its display can be forced by manually
697
+ specifying this option. To disable it, you need to specify <code class="code">-nostats</code>.
698
+ </p>
699
+ </dd>
700
+ <dt><samp class="option">-fast</samp></dt>
701
+ <dd><p>Non-spec-compliant optimizations.
702
+ </p></dd>
703
+ <dt><samp class="option">-genpts</samp></dt>
704
+ <dd><p>Generate pts.
705
+ </p></dd>
706
+ <dt><samp class="option">-sync <var class="var">type</var></samp></dt>
707
+ <dd><p>Set the master clock to audio (<code class="code">type=audio</code>), video
708
+ (<code class="code">type=video</code>) or external (<code class="code">type=ext</code>). Default is audio. The
709
+ master clock is used to control audio-video synchronization. Most media
710
+ players use audio as master clock, but in some cases (streaming or high
711
+ quality broadcast) it is necessary to change that. This option is mainly
712
+ used for debugging purposes.
713
+ </p></dd>
714
+ <dt><samp class="option">-ast <var class="var">audio_stream_specifier</var></samp></dt>
715
+ <dd><p>Select the desired audio stream using the given stream specifier. The stream
716
+ specifiers are described in the <a class="ref" href="#Stream-specifiers">Stream specifiers</a> chapter. If this option
717
+ is not specified, the &quot;best&quot; audio stream is selected in the program of the
718
+ already selected video stream.
719
+ </p></dd>
720
+ <dt><samp class="option">-vst <var class="var">video_stream_specifier</var></samp></dt>
721
+ <dd><p>Select the desired video stream using the given stream specifier. The stream
722
+ specifiers are described in the <a class="ref" href="#Stream-specifiers">Stream specifiers</a> chapter. If this option
723
+ is not specified, the &quot;best&quot; video stream is selected.
724
+ </p></dd>
725
+ <dt><samp class="option">-sst <var class="var">subtitle_stream_specifier</var></samp></dt>
726
+ <dd><p>Select the desired subtitle stream using the given stream specifier. The stream
727
+ specifiers are described in the <a class="ref" href="#Stream-specifiers">Stream specifiers</a> chapter. If this option
728
+ is not specified, the &quot;best&quot; subtitle stream is selected in the program of the
729
+ already selected video or audio stream.
730
+ </p></dd>
731
+ <dt><samp class="option">-autoexit</samp></dt>
732
+ <dd><p>Exit when video is done playing.
733
+ </p></dd>
734
+ <dt><samp class="option">-exitonkeydown</samp></dt>
735
+ <dd><p>Exit if any key is pressed.
736
+ </p></dd>
737
+ <dt><samp class="option">-exitonmousedown</samp></dt>
738
+ <dd><p>Exit if any mouse button is pressed.
739
+ </p>
740
+ </dd>
741
+ <dt><samp class="option">-codec:<var class="var">media_specifier</var> <var class="var">codec_name</var></samp></dt>
742
+ <dd><p>Force a specific decoder implementation for the stream identified by
743
+ <var class="var">media_specifier</var>, which can assume the values <code class="code">a</code> (audio),
744
+ <code class="code">v</code> (video), and <code class="code">s</code> subtitle.
745
+ </p>
746
+ </dd>
747
+ <dt><samp class="option">-acodec <var class="var">codec_name</var></samp></dt>
748
+ <dd><p>Force a specific audio decoder.
749
+ </p>
750
+ </dd>
751
+ <dt><samp class="option">-vcodec <var class="var">codec_name</var></samp></dt>
752
+ <dd><p>Force a specific video decoder.
753
+ </p>
754
+ </dd>
755
+ <dt><samp class="option">-scodec <var class="var">codec_name</var></samp></dt>
756
+ <dd><p>Force a specific subtitle decoder.
757
+ </p>
758
+ </dd>
759
+ <dt><samp class="option">-autorotate</samp></dt>
760
+ <dd><p>Automatically rotate the video according to file metadata. Enabled by
761
+ default, use <samp class="option">-noautorotate</samp> to disable it.
762
+ </p>
763
+ </dd>
764
+ <dt><samp class="option">-framedrop</samp></dt>
765
+ <dd><p>Drop video frames if video is out of sync. Enabled by default if the master
766
+ clock is not set to video. Use this option to enable frame dropping for all
767
+ master clock sources, use <samp class="option">-noframedrop</samp> to disable it.
768
+ </p>
769
+ </dd>
770
+ <dt><samp class="option">-infbuf</samp></dt>
771
+ <dd><p>Do not limit the input buffer size, read as much data as possible from the
772
+ input as soon as possible. Enabled by default for realtime streams, where data
773
+ may be dropped if not read in time. Use this option to enable infinite buffers
774
+ for all inputs, use <samp class="option">-noinfbuf</samp> to disable it.
775
+ </p>
776
+ </dd>
777
+ <dt><samp class="option">-filter_threads <var class="var">nb_threads</var></samp></dt>
778
+ <dd><p>Defines how many threads are used to process a filter pipeline. Each pipeline
779
+ will produce a thread pool with this many threads available for parallel
780
+ processing. The default is 0 which means that the thread count will be
781
+ determined by the number of available CPUs.
782
+ </p>
783
+ </dd>
784
+ <dt><samp class="option">-enable_vulkan</samp></dt>
785
+ <dd><p>Use vulkan renderer rather than SDL builtin renderer. Depends on libplacebo.
786
+ </p>
787
+ </dd>
788
+ <dt><samp class="option">-vulkan_params</samp></dt>
789
+ <dd>
790
+ <p>Vulkan configuration using a list of <var class="var">key</var>=<var class="var">value</var> pairs separated by
791
+ &quot;:&quot;.
792
+ </p>
793
+ </dd>
794
+ <dt><samp class="option">-hwaccel</samp></dt>
795
+ <dd><p>Use HW accelerated decoding. Enable this option will enable vulkan renderer
796
+ automatically.
797
+ </p>
798
+ </dd>
799
+ </dl>
800
+
801
+ <a name="While-playing"></a>
802
+ <h3 class="section">3.6 While playing<span class="pull-right"><a class="anchor hidden-xs" href="#While-playing" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-While-playing" aria-hidden="true">TOC</a></span></h3>
803
+
804
+ <dl class="table">
805
+ <dt><kbd class="key">q, ESC</kbd></dt>
806
+ <dd><p>Quit.
807
+ </p>
808
+ </dd>
809
+ <dt><kbd class="key">f</kbd></dt>
810
+ <dd><p>Toggle full screen.
811
+ </p>
812
+ </dd>
813
+ <dt><kbd class="key">p, SPC</kbd></dt>
814
+ <dd><p>Pause.
815
+ </p>
816
+ </dd>
817
+ <dt><kbd class="key">m</kbd></dt>
818
+ <dd><p>Toggle mute.
819
+ </p>
820
+ </dd>
821
+ <dt><kbd class="key">9, 0</kbd></dt>
822
+ <dt><kbd class="key">/, *</kbd></dt>
823
+ <dd><p>Decrease and increase volume respectively.
824
+ </p>
825
+ </dd>
826
+ <dt><kbd class="key">a</kbd></dt>
827
+ <dd><p>Cycle audio channel in the current program.
828
+ </p>
829
+ </dd>
830
+ <dt><kbd class="key">v</kbd></dt>
831
+ <dd><p>Cycle video channel.
832
+ </p>
833
+ </dd>
834
+ <dt><kbd class="key">t</kbd></dt>
835
+ <dd><p>Cycle subtitle channel in the current program.
836
+ </p>
837
+ </dd>
838
+ <dt><kbd class="key">c</kbd></dt>
839
+ <dd><p>Cycle program.
840
+ </p>
841
+ </dd>
842
+ <dt><kbd class="key">w</kbd></dt>
843
+ <dd><p>Cycle video filters or show modes.
844
+ </p>
845
+ </dd>
846
+ <dt><kbd class="key">s</kbd></dt>
847
+ <dd><p>Step to the next frame.
848
+ </p>
849
+ <p>Pause if the stream is not already paused, step to the next video
850
+ frame, and pause.
851
+ </p>
852
+ </dd>
853
+ <dt><kbd class="key">left/right</kbd></dt>
854
+ <dd><p>Seek backward/forward 10 seconds.
855
+ </p>
856
+ </dd>
857
+ <dt><kbd class="key">down/up</kbd></dt>
858
+ <dd><p>Seek backward/forward 1 minute.
859
+ </p>
860
+ </dd>
861
+ <dt><kbd class="key">page down/page up</kbd></dt>
862
+ <dd><p>Seek to the previous/next chapter.
863
+ or if there are no chapters
864
+ Seek backward/forward 10 minutes.
865
+ </p>
866
+ </dd>
867
+ <dt><kbd class="key">right mouse click</kbd></dt>
868
+ <dd><p>Seek to percentage in file corresponding to fraction of width.
869
+ </p>
870
+ </dd>
871
+ <dt><kbd class="key">left mouse double-click</kbd></dt>
872
+ <dd><p>Toggle full screen.
873
+ </p>
874
+ </dd>
875
+ </dl>
876
+
877
+
878
+
879
+ <a name="See-Also"></a>
880
+ <h2 class="chapter">4 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
881
+
882
+ <p><a class="url" href="ffplay-all.html">ffmpeg-all</a>,
883
+ <a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
884
+ <a class="url" href="ffmpeg-utils.html">ffmpeg-utils</a>,
885
+ <a class="url" href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
886
+ <a class="url" href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
887
+ <a class="url" href="ffmpeg-codecs.html">ffmpeg-codecs</a>,
888
+ <a class="url" href="ffmpeg-bitstream-filters.html">ffmpeg-bitstream-filters</a>,
889
+ <a class="url" href="ffmpeg-formats.html">ffmpeg-formats</a>,
890
+ <a class="url" href="ffmpeg-devices.html">ffmpeg-devices</a>,
891
+ <a class="url" href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
892
+ <a class="url" href="ffmpeg-filters.html">ffmpeg-filters</a>
893
+ </p>
894
+
895
+ <a name="Authors"></a>
896
+ <h2 class="chapter">5 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
897
+
898
+ <p>The FFmpeg developers.
899
+ </p>
900
+ <p>For details about the authorship, see the Git history of the project
901
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
902
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
903
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
904
+ </p>
905
+ <p>Maintainers for the specific components are listed in the file
906
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
907
+ </p>
908
+
909
+ <p style="font-size: small;">
910
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
911
+ </p>
912
+ </div>
913
+ </body>
914
+ </html>
ffmpeg-master-latest-win64-gpl/doc/ffprobe-all.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/ffprobe.html ADDED
@@ -0,0 +1,1267 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ ffprobe Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ ffprobe Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Synopsis" href="#Synopsis">1 Synopsis</a></li>
29
+ <li><a id="toc-Description" href="#Description">2 Description</a></li>
30
+ <li><a id="toc-Options" href="#Options">3 Options</a>
31
+ <ul class="toc-numbered-mark">
32
+ <li><a id="toc-Stream-specifiers-1" href="#Stream-specifiers-1">3.1 Stream specifiers</a></li>
33
+ <li><a id="toc-Generic-options" href="#Generic-options">3.2 Generic options</a></li>
34
+ <li><a id="toc-AVOptions" href="#AVOptions">3.3 AVOptions</a></li>
35
+ <li><a id="toc-Main-options" href="#Main-options">3.4 Main options</a></li>
36
+ </ul></li>
37
+ <li><a id="toc-Writers" href="#Writers">4 Writers</a>
38
+ <ul class="toc-numbered-mark">
39
+ <li><a id="toc-default" href="#default">4.1 default</a></li>
40
+ <li><a id="toc-compact_002c-csv" href="#compact_002c-csv">4.2 compact, csv</a></li>
41
+ <li><a id="toc-flat" href="#flat">4.3 flat</a></li>
42
+ <li><a id="toc-ini" href="#ini">4.4 ini</a></li>
43
+ <li><a id="toc-json" href="#json">4.5 json</a></li>
44
+ <li><a id="toc-xml" href="#xml">4.6 xml</a></li>
45
+ </ul></li>
46
+ <li><a id="toc-Timecode" href="#Timecode">5 Timecode</a></li>
47
+ <li><a id="toc-See-Also" href="#See-Also">6 See Also</a></li>
48
+ <li><a id="toc-Authors" href="#Authors">7 Authors</a></li>
49
+ </ul>
50
+ </div>
51
+ </div>
52
+
53
+ <a name="Synopsis"></a>
54
+ <h2 class="chapter">1 Synopsis<span class="pull-right"><a class="anchor hidden-xs" href="#Synopsis" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Synopsis" aria-hidden="true">TOC</a></span></h2>
55
+
56
+ <p>ffprobe [<var class="var">options</var>] <samp class="file">input_url</samp>
57
+ </p>
58
+ <a name="Description"></a>
59
+ <h2 class="chapter">2 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
60
+
61
+ <p>ffprobe gathers information from multimedia streams and prints it in
62
+ human- and machine-readable fashion.
63
+ </p>
64
+ <p>For example it can be used to check the format of the container used
65
+ by a multimedia stream and the format and type of each media stream
66
+ contained in it.
67
+ </p>
68
+ <p>If a url is specified in input, ffprobe will try to open and
69
+ probe the url content. If the url cannot be opened or recognized as
70
+ a multimedia file, a positive exit code is returned.
71
+ </p>
72
+ <p>If no output is specified as output with <samp class="option">o</samp> ffprobe will write
73
+ to stdout.
74
+ </p>
75
+ <p>ffprobe may be employed both as a standalone application or in
76
+ combination with a textual filter, which may perform more
77
+ sophisticated processing, e.g. statistical processing or plotting.
78
+ </p>
79
+ <p>Options are used to list some of the formats supported by ffprobe or
80
+ for specifying which information to display, and for setting how
81
+ ffprobe will show it.
82
+ </p>
83
+ <p>ffprobe output is designed to be easily parsable by a textual filter,
84
+ and consists of one or more sections of a form defined by the selected
85
+ writer, which is specified by the <samp class="option">output_format</samp> option.
86
+ </p>
87
+ <p>Sections may contain other nested sections, and are identified by a
88
+ name (which may be shared by other sections), and an unique
89
+ name. See the output of <samp class="option">sections</samp>.
90
+ </p>
91
+ <p>Metadata tags stored in the container or in the streams are recognized
92
+ and printed in the corresponding &quot;FORMAT&quot;, &quot;STREAM&quot;, &quot;STREAM_GROUP_STREAM&quot;
93
+ or &quot;PROGRAM_STREAM&quot; section.
94
+ </p>
95
+
96
+ <a name="Options"></a>
97
+ <h2 class="chapter">3 Options<span class="pull-right"><a class="anchor hidden-xs" href="#Options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Options" aria-hidden="true">TOC</a></span></h2>
98
+
99
+ <p>All the numerical options, if not specified otherwise, accept a string
100
+ representing a number as input, which may be followed by one of the SI
101
+ unit prefixes, for example: &rsquo;K&rsquo;, &rsquo;M&rsquo;, or &rsquo;G&rsquo;.
102
+ </p>
103
+ <p>If &rsquo;i&rsquo; is appended to the SI unit prefix, the complete prefix will be
104
+ interpreted as a unit prefix for binary multiples, which are based on
105
+ powers of 1024 instead of powers of 1000. Appending &rsquo;B&rsquo; to the SI unit
106
+ prefix multiplies the value by 8. This allows using, for example:
107
+ &rsquo;KB&rsquo;, &rsquo;MiB&rsquo;, &rsquo;G&rsquo; and &rsquo;B&rsquo; as number suffixes.
108
+ </p>
109
+ <p>Options which do not take arguments are boolean options, and set the
110
+ corresponding value to true. They can be set to false by prefixing
111
+ the option name with &quot;no&quot;. For example using &quot;-nofoo&quot;
112
+ will set the boolean option with name &quot;foo&quot; to false.
113
+ </p>
114
+ <p>Options that take arguments support a special syntax where the argument given on
115
+ the command line is interpreted as a path to the file from which the actual
116
+ argument value is loaded. To use this feature, add a forward slash &rsquo;/&rsquo;
117
+ immediately before the option name (after the leading dash). E.g.
118
+ </p><div class="example">
119
+ <pre class="example-preformatted">ffmpeg -i INPUT -/filter:v filter.script OUTPUT
120
+ </pre></div>
121
+ <p>will load a filtergraph description from the file named <samp class="file">filter.script</samp>.
122
+ </p>
123
+ <a class="anchor" id="Stream-specifiers"></a><a name="Stream-specifiers-1"></a>
124
+ <h3 class="section">3.1 Stream specifiers<span class="pull-right"><a class="anchor hidden-xs" href="#Stream-specifiers-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Stream-specifiers-1" aria-hidden="true">TOC</a></span></h3>
125
+ <p>Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
126
+ are used to precisely specify which stream(s) a given option belongs to.
127
+ </p>
128
+ <p>A stream specifier is a string generally appended to the option name and
129
+ separated from it by a colon. E.g. <code class="code">-codec:a:1 ac3</code> contains the
130
+ <code class="code">a:1</code> stream specifier, which matches the second audio stream. Therefore, it
131
+ would select the ac3 codec for the second audio stream.
132
+ </p>
133
+ <p>A stream specifier can match several streams, so that the option is applied to all
134
+ of them. E.g. the stream specifier in <code class="code">-b:a 128k</code> matches all audio
135
+ streams.
136
+ </p>
137
+ <p>An empty stream specifier matches all streams. For example, <code class="code">-codec copy</code>
138
+ or <code class="code">-codec: copy</code> would copy all the streams without reencoding.
139
+ </p>
140
+ <p>Possible forms of stream specifiers are:
141
+ </p><dl class="table">
142
+ <dt><samp class="option"><var class="var">stream_index</var></samp></dt>
143
+ <dd><p>Matches the stream with this index. E.g. <code class="code">-threads:1 4</code> would set the
144
+ thread count for the second stream to 4. If <var class="var">stream_index</var> is used as an
145
+ additional stream specifier (see below), then it selects stream number
146
+ <var class="var">stream_index</var> from the matching streams. Stream numbering is based on the
147
+ order of the streams as detected by libavformat except when a stream group
148
+ specifier or program ID is also specified. In this case it is based on the
149
+ ordering of the streams in the group or program.
150
+ </p></dd>
151
+ <dt><samp class="option"><var class="var">stream_type</var>[:<var class="var">additional_stream_specifier</var>]</samp></dt>
152
+ <dd><p><var class="var">stream_type</var> is one of following: &rsquo;v&rsquo; or &rsquo;V&rsquo; for video, &rsquo;a&rsquo; for audio, &rsquo;s&rsquo;
153
+ for subtitle, &rsquo;d&rsquo; for data, and &rsquo;t&rsquo; for attachments. &rsquo;v&rsquo; matches all video
154
+ streams, &rsquo;V&rsquo; only matches video streams which are not attached pictures, video
155
+ thumbnails or cover arts. If <var class="var">additional_stream_specifier</var> is used, then
156
+ it matches streams which both have this type and match the
157
+ <var class="var">additional_stream_specifier</var>. Otherwise, it matches all streams of the
158
+ specified type.
159
+ </p></dd>
160
+ <dt><samp class="option">g:<var class="var">group_specifier</var>[:<var class="var">additional_stream_specifier</var>]</samp></dt>
161
+ <dd><p>Matches streams which are in the group with the specifier <var class="var">group_specifier</var>.
162
+ if <var class="var">additional_stream_specifier</var> is used, then it matches streams which both
163
+ are part of the group and match the <var class="var">additional_stream_specifier</var>.
164
+ <var class="var">group_specifier</var> may be one of the following:
165
+ </p><dl class="table">
166
+ <dt><samp class="option"><var class="var">group_index</var></samp></dt>
167
+ <dd><p>Match the stream with this group index.
168
+ </p></dd>
169
+ <dt><samp class="option">#<var class="var">group_id</var> or i:<var class="var">group_id</var></samp></dt>
170
+ <dd><p>Match the stream with this group id.
171
+ </p></dd>
172
+ </dl>
173
+ </dd>
174
+ <dt><samp class="option">p:<var class="var">program_id</var>[:<var class="var">additional_stream_specifier</var>]</samp></dt>
175
+ <dd><p>Matches streams which are in the program with the id <var class="var">program_id</var>. If
176
+ <var class="var">additional_stream_specifier</var> is used, then it matches streams which both
177
+ are part of the program and match the <var class="var">additional_stream_specifier</var>.
178
+ </p>
179
+ </dd>
180
+ <dt><samp class="option">#<var class="var">stream_id</var> or i:<var class="var">stream_id</var></samp></dt>
181
+ <dd><p>Match the stream by stream id (e.g. PID in MPEG-TS container).
182
+ </p></dd>
183
+ <dt><samp class="option">m:<var class="var">key</var>[:<var class="var">value</var>]</samp></dt>
184
+ <dd><p>Matches streams with the metadata tag <var class="var">key</var> having the specified value. If
185
+ <var class="var">value</var> is not given, matches streams that contain the given tag with any
186
+ value. The colon character &rsquo;:&rsquo; in <var class="var">key</var> or <var class="var">value</var> needs to be
187
+ backslash-escaped.
188
+ </p></dd>
189
+ <dt><samp class="option">disp:<var class="var">dispositions</var>[:<var class="var">additional_stream_specifier</var>]</samp></dt>
190
+ <dd><p>Matches streams with the given disposition(s). <var class="var">dispositions</var> is a list of
191
+ one or more dispositions (as printed by the <samp class="option">-dispositions</samp> option)
192
+ joined with &rsquo;+&rsquo;.
193
+ </p></dd>
194
+ <dt><samp class="option">u</samp></dt>
195
+ <dd><p>Matches streams with usable configuration, the codec must be defined and the
196
+ essential information such as video dimension or audio sample rate must be present.
197
+ </p>
198
+ <p>Note that in <code class="command">ffmpeg</code>, matching by metadata will only work properly for
199
+ input files.
200
+ </p></dd>
201
+ </dl>
202
+
203
+ <a name="Generic-options"></a>
204
+ <h3 class="section">3.2 Generic options<span class="pull-right"><a class="anchor hidden-xs" href="#Generic-options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Generic-options" aria-hidden="true">TOC</a></span></h3>
205
+
206
+ <p>These options are shared amongst the ff* tools.
207
+ </p>
208
+ <dl class="table">
209
+ <dt><samp class="option">-L</samp></dt>
210
+ <dd><p>Show license.
211
+ </p>
212
+ </dd>
213
+ <dt><samp class="option">-h, -?, -help, --help [<var class="var">arg</var>]</samp></dt>
214
+ <dd><p>Show help. An optional parameter may be specified to print help about a specific
215
+ item. If no argument is specified, only basic (non advanced) tool
216
+ options are shown.
217
+ </p>
218
+ <p>Possible values of <var class="var">arg</var> are:
219
+ </p><dl class="table">
220
+ <dt><samp class="option">long</samp></dt>
221
+ <dd><p>Print advanced tool options in addition to the basic tool options.
222
+ </p>
223
+ </dd>
224
+ <dt><samp class="option">full</samp></dt>
225
+ <dd><p>Print complete list of options, including shared and private options
226
+ for encoders, decoders, demuxers, muxers, filters, etc.
227
+ </p>
228
+ </dd>
229
+ <dt><samp class="option">decoder=<var class="var">decoder_name</var></samp></dt>
230
+ <dd><p>Print detailed information about the decoder named <var class="var">decoder_name</var>. Use the
231
+ <samp class="option">-decoders</samp> option to get a list of all decoders.
232
+ </p>
233
+ </dd>
234
+ <dt><samp class="option">encoder=<var class="var">encoder_name</var></samp></dt>
235
+ <dd><p>Print detailed information about the encoder named <var class="var">encoder_name</var>. Use the
236
+ <samp class="option">-encoders</samp> option to get a list of all encoders.
237
+ </p>
238
+ </dd>
239
+ <dt><samp class="option">demuxer=<var class="var">demuxer_name</var></samp></dt>
240
+ <dd><p>Print detailed information about the demuxer named <var class="var">demuxer_name</var>. Use the
241
+ <samp class="option">-formats</samp> option to get a list of all demuxers and muxers.
242
+ </p>
243
+ </dd>
244
+ <dt><samp class="option">muxer=<var class="var">muxer_name</var></samp></dt>
245
+ <dd><p>Print detailed information about the muxer named <var class="var">muxer_name</var>. Use the
246
+ <samp class="option">-formats</samp> option to get a list of all muxers and demuxers.
247
+ </p>
248
+ </dd>
249
+ <dt><samp class="option">filter=<var class="var">filter_name</var></samp></dt>
250
+ <dd><p>Print detailed information about the filter named <var class="var">filter_name</var>. Use the
251
+ <samp class="option">-filters</samp> option to get a list of all filters.
252
+ </p>
253
+ </dd>
254
+ <dt><samp class="option">bsf=<var class="var">bitstream_filter_name</var></samp></dt>
255
+ <dd><p>Print detailed information about the bitstream filter named <var class="var">bitstream_filter_name</var>.
256
+ Use the <samp class="option">-bsfs</samp> option to get a list of all bitstream filters.
257
+ </p>
258
+ </dd>
259
+ <dt><samp class="option">protocol=<var class="var">protocol_name</var></samp></dt>
260
+ <dd><p>Print detailed information about the protocol named <var class="var">protocol_name</var>.
261
+ Use the <samp class="option">-protocols</samp> option to get a list of all protocols.
262
+ </p></dd>
263
+ </dl>
264
+
265
+ </dd>
266
+ <dt><samp class="option">-version</samp></dt>
267
+ <dd><p>Show version.
268
+ </p>
269
+ </dd>
270
+ <dt><samp class="option">-buildconf</samp></dt>
271
+ <dd><p>Show the build configuration, one option per line.
272
+ </p>
273
+ </dd>
274
+ <dt><samp class="option">-formats</samp></dt>
275
+ <dd><p>Show available formats (including devices).
276
+ </p>
277
+ </dd>
278
+ <dt><samp class="option">-demuxers</samp></dt>
279
+ <dd><p>Show available demuxers.
280
+ </p>
281
+ </dd>
282
+ <dt><samp class="option">-muxers</samp></dt>
283
+ <dd><p>Show available muxers.
284
+ </p>
285
+ </dd>
286
+ <dt><samp class="option">-devices</samp></dt>
287
+ <dd><p>Show available devices.
288
+ </p>
289
+ </dd>
290
+ <dt><samp class="option">-codecs</samp></dt>
291
+ <dd><p>Show all codecs known to libavcodec.
292
+ </p>
293
+ <p>Note that the term &rsquo;codec&rsquo; is used throughout this documentation as a shortcut
294
+ for what is more correctly called a media bitstream format.
295
+ </p>
296
+ </dd>
297
+ <dt><samp class="option">-decoders</samp></dt>
298
+ <dd><p>Show available decoders.
299
+ </p>
300
+ </dd>
301
+ <dt><samp class="option">-encoders</samp></dt>
302
+ <dd><p>Show all available encoders.
303
+ </p>
304
+ </dd>
305
+ <dt><samp class="option">-bsfs</samp></dt>
306
+ <dd><p>Show available bitstream filters.
307
+ </p>
308
+ </dd>
309
+ <dt><samp class="option">-protocols</samp></dt>
310
+ <dd><p>Show available protocols.
311
+ </p>
312
+ </dd>
313
+ <dt><samp class="option">-filters</samp></dt>
314
+ <dd><p>Show available libavfilter filters.
315
+ </p>
316
+ </dd>
317
+ <dt><samp class="option">-pix_fmts</samp></dt>
318
+ <dd><p>Show available pixel formats.
319
+ </p>
320
+ </dd>
321
+ <dt><samp class="option">-sample_fmts</samp></dt>
322
+ <dd><p>Show available sample formats.
323
+ </p>
324
+ </dd>
325
+ <dt><samp class="option">-layouts</samp></dt>
326
+ <dd><p>Show channel names and standard channel layouts.
327
+ </p>
328
+ </dd>
329
+ <dt><samp class="option">-dispositions</samp></dt>
330
+ <dd><p>Show stream dispositions.
331
+ </p>
332
+ </dd>
333
+ <dt><samp class="option">-colors</samp></dt>
334
+ <dd><p>Show recognized color names.
335
+ </p>
336
+ </dd>
337
+ <dt><samp class="option">-sources <var class="var">device</var>[,<var class="var">opt1</var>=<var class="var">val1</var>[,<var class="var">opt2</var>=<var class="var">val2</var>]...]</samp></dt>
338
+ <dd><p>Show autodetected sources of the input device.
339
+ Some devices may provide system-dependent source names that cannot be autodetected.
340
+ The returned list cannot be assumed to be always complete.
341
+ </p><div class="example">
342
+ <pre class="example-preformatted">ffmpeg -sources pulse,server=192.168.0.4
343
+ </pre></div>
344
+
345
+ </dd>
346
+ <dt><samp class="option">-sinks <var class="var">device</var>[,<var class="var">opt1</var>=<var class="var">val1</var>[,<var class="var">opt2</var>=<var class="var">val2</var>]...]</samp></dt>
347
+ <dd><p>Show autodetected sinks of the output device.
348
+ Some devices may provide system-dependent sink names that cannot be autodetected.
349
+ The returned list cannot be assumed to be always complete.
350
+ </p><div class="example">
351
+ <pre class="example-preformatted">ffmpeg -sinks pulse,server=192.168.0.4
352
+ </pre></div>
353
+
354
+ </dd>
355
+ <dt><samp class="option">-loglevel [<var class="var">flags</var>+]<var class="var">loglevel</var> | -v [<var class="var">flags</var>+]<var class="var">loglevel</var></samp></dt>
356
+ <dd><p>Set logging level and flags used by the library.
357
+ </p>
358
+ <p>The optional <var class="var">flags</var> prefix can consist of the following values:
359
+ </p><dl class="table">
360
+ <dt>&lsquo;<samp class="samp">repeat</samp>&rsquo;</dt>
361
+ <dd><p>Indicates that repeated log output should not be compressed to the first line
362
+ and the &quot;Last message repeated n times&quot; line will be omitted.
363
+ </p></dd>
364
+ <dt>&lsquo;<samp class="samp">level</samp>&rsquo;</dt>
365
+ <dd><p>Indicates that log output should add a <code class="code">[level]</code> prefix to each message
366
+ line. This can be used as an alternative to log coloring, e.g. when dumping the
367
+ log to file.
368
+ </p></dd>
369
+ <dt>&lsquo;<samp class="samp">time</samp>&rsquo;</dt>
370
+ <dd><p>Indicates that log lines should be prefixed with time information.
371
+ </p></dd>
372
+ <dt>&lsquo;<samp class="samp">datetime</samp>&rsquo;</dt>
373
+ <dd><p>Indicates that log lines should be prefixed with date and time information.
374
+ </p></dd>
375
+ </dl>
376
+ <p>Flags can also be used alone by adding a &rsquo;+&rsquo;/&rsquo;-&rsquo; prefix to set/reset a single
377
+ flag without affecting other <var class="var">flags</var> or changing <var class="var">loglevel</var>. When
378
+ setting both <var class="var">flags</var> and <var class="var">loglevel</var>, a &rsquo;+&rsquo; separator is expected
379
+ between the last <var class="var">flags</var> value and before <var class="var">loglevel</var>.
380
+ </p>
381
+ <p><var class="var">loglevel</var> is a string or a number containing one of the following values:
382
+ </p><dl class="table">
383
+ <dt>&lsquo;<samp class="samp">quiet, -8</samp>&rsquo;</dt>
384
+ <dd><p>Show nothing at all; be silent.
385
+ </p></dd>
386
+ <dt>&lsquo;<samp class="samp">panic, 0</samp>&rsquo;</dt>
387
+ <dd><p>Only show fatal errors which could lead the process to crash, such as
388
+ an assertion failure. This is not currently used for anything.
389
+ </p></dd>
390
+ <dt>&lsquo;<samp class="samp">fatal, 8</samp>&rsquo;</dt>
391
+ <dd><p>Only show fatal errors. These are errors after which the process absolutely
392
+ cannot continue.
393
+ </p></dd>
394
+ <dt>&lsquo;<samp class="samp">error, 16</samp>&rsquo;</dt>
395
+ <dd><p>Show all errors, including ones which can be recovered from.
396
+ </p></dd>
397
+ <dt>&lsquo;<samp class="samp">warning, 24</samp>&rsquo;</dt>
398
+ <dd><p>Show all warnings and errors. Any message related to possibly
399
+ incorrect or unexpected events will be shown.
400
+ </p></dd>
401
+ <dt>&lsquo;<samp class="samp">info, 32</samp>&rsquo;</dt>
402
+ <dd><p>Show informative messages during processing. This is in addition to
403
+ warnings and errors. This is the default value.
404
+ </p></dd>
405
+ <dt>&lsquo;<samp class="samp">verbose, 40</samp>&rsquo;</dt>
406
+ <dd><p>Same as <code class="code">info</code>, except more verbose.
407
+ </p></dd>
408
+ <dt>&lsquo;<samp class="samp">debug, 48</samp>&rsquo;</dt>
409
+ <dd><p>Show everything, including debugging information.
410
+ </p></dd>
411
+ <dt>&lsquo;<samp class="samp">trace, 56</samp>&rsquo;</dt>
412
+ </dl>
413
+
414
+ <p>For example to enable repeated log output, add the <code class="code">level</code> prefix, and set
415
+ <var class="var">loglevel</var> to <code class="code">verbose</code>:
416
+ </p><div class="example">
417
+ <pre class="example-preformatted">ffmpeg -loglevel repeat+level+verbose -i input output
418
+ </pre></div>
419
+ <p>Another example that enables repeated log output without affecting current
420
+ state of <code class="code">level</code> prefix flag or <var class="var">loglevel</var>:
421
+ </p><div class="example">
422
+ <pre class="example-preformatted">ffmpeg [...] -loglevel +repeat
423
+ </pre></div>
424
+
425
+ <p>By default the program logs to stderr. If coloring is supported by the
426
+ terminal, colors are used to mark errors and warnings. Log coloring
427
+ can be disabled setting the environment variable
428
+ <code class="env">AV_LOG_FORCE_NOCOLOR</code>, or can be forced setting
429
+ the environment variable <code class="env">AV_LOG_FORCE_COLOR</code>.
430
+ </p>
431
+ </dd>
432
+ <dt><samp class="option">-report</samp></dt>
433
+ <dd><p>Dump full command line and log output to a file named
434
+ <code class="code"><var class="var">program</var>-<var class="var">YYYYMMDD</var>-<var class="var">HHMMSS</var>.log</code> in the current
435
+ directory.
436
+ This file can be useful for bug reports.
437
+ It also implies <code class="code">-loglevel debug</code>.
438
+ </p>
439
+ <p>Setting the environment variable <code class="env">FFREPORT</code> to any value has the
440
+ same effect. If the value is a &rsquo;:&rsquo;-separated key=value sequence, these
441
+ options will affect the report; option values must be escaped if they
442
+ contain special characters or the options delimiter &rsquo;:&rsquo; (see the
443
+ &ldquo;Quoting and escaping&rdquo; section in the ffmpeg-utils manual).
444
+ </p>
445
+ <p>The following options are recognized:
446
+ </p><dl class="table">
447
+ <dt><samp class="option">file</samp></dt>
448
+ <dd><p>set the file name to use for the report; <code class="code">%p</code> is expanded to the name
449
+ of the program, <code class="code">%t</code> is expanded to a timestamp, <code class="code">%%</code> is expanded
450
+ to a plain <code class="code">%</code>
451
+ </p></dd>
452
+ <dt><samp class="option">level</samp></dt>
453
+ <dd><p>set the log verbosity level using a numerical value (see <code class="code">-loglevel</code>).
454
+ </p></dd>
455
+ </dl>
456
+
457
+ <p>For example, to output a report to a file named <samp class="file">ffreport.log</samp>
458
+ using a log level of <code class="code">32</code> (alias for log level <code class="code">info</code>):
459
+ </p>
460
+ <div class="example">
461
+ <pre class="example-preformatted">FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output
462
+ </pre></div>
463
+
464
+ <p>Errors in parsing the environment variable are not fatal, and will not
465
+ appear in the report.
466
+ </p>
467
+ </dd>
468
+ <dt><samp class="option">-hide_banner</samp></dt>
469
+ <dd><p>Suppress printing banner.
470
+ </p>
471
+ <p>All FFmpeg tools will normally show a copyright notice, build options
472
+ and library versions. This option can be used to suppress printing
473
+ this information.
474
+ </p>
475
+ </dd>
476
+ <dt><samp class="option">-cpuflags flags (<em class="emph">global</em>)</samp></dt>
477
+ <dd><p>Allows setting and clearing cpu flags. This option is intended
478
+ for testing. Do not use it unless you know what you&rsquo;re doing.
479
+ </p><div class="example">
480
+ <pre class="example-preformatted">ffmpeg -cpuflags -sse+mmx ...
481
+ ffmpeg -cpuflags mmx ...
482
+ ffmpeg -cpuflags 0 ...
483
+ </pre></div>
484
+ <p>Possible flags for this option are:
485
+ </p><dl class="table">
486
+ <dt>&lsquo;<samp class="samp">x86</samp>&rsquo;</dt>
487
+ <dd><dl class="table">
488
+ <dt>&lsquo;<samp class="samp">mmx</samp>&rsquo;</dt>
489
+ <dt>&lsquo;<samp class="samp">mmxext</samp>&rsquo;</dt>
490
+ <dt>&lsquo;<samp class="samp">sse</samp>&rsquo;</dt>
491
+ <dt>&lsquo;<samp class="samp">sse2</samp>&rsquo;</dt>
492
+ <dt>&lsquo;<samp class="samp">sse2slow</samp>&rsquo;</dt>
493
+ <dt>&lsquo;<samp class="samp">sse3</samp>&rsquo;</dt>
494
+ <dt>&lsquo;<samp class="samp">sse3slow</samp>&rsquo;</dt>
495
+ <dt>&lsquo;<samp class="samp">ssse3</samp>&rsquo;</dt>
496
+ <dt>&lsquo;<samp class="samp">atom</samp>&rsquo;</dt>
497
+ <dt>&lsquo;<samp class="samp">sse4.1</samp>&rsquo;</dt>
498
+ <dt>&lsquo;<samp class="samp">sse4.2</samp>&rsquo;</dt>
499
+ <dt>&lsquo;<samp class="samp">avx</samp>&rsquo;</dt>
500
+ <dt>&lsquo;<samp class="samp">avx2</samp>&rsquo;</dt>
501
+ <dt>&lsquo;<samp class="samp">xop</samp>&rsquo;</dt>
502
+ <dt>&lsquo;<samp class="samp">fma3</samp>&rsquo;</dt>
503
+ <dt>&lsquo;<samp class="samp">fma4</samp>&rsquo;</dt>
504
+ <dt>&lsquo;<samp class="samp">3dnow</samp>&rsquo;</dt>
505
+ <dt>&lsquo;<samp class="samp">3dnowext</samp>&rsquo;</dt>
506
+ <dt>&lsquo;<samp class="samp">bmi1</samp>&rsquo;</dt>
507
+ <dt>&lsquo;<samp class="samp">bmi2</samp>&rsquo;</dt>
508
+ <dt>&lsquo;<samp class="samp">cmov</samp>&rsquo;</dt>
509
+ </dl>
510
+ </dd>
511
+ <dt>&lsquo;<samp class="samp">ARM</samp>&rsquo;</dt>
512
+ <dd><dl class="table">
513
+ <dt>&lsquo;<samp class="samp">armv5te</samp>&rsquo;</dt>
514
+ <dt>&lsquo;<samp class="samp">armv6</samp>&rsquo;</dt>
515
+ <dt>&lsquo;<samp class="samp">armv6t2</samp>&rsquo;</dt>
516
+ <dt>&lsquo;<samp class="samp">vfp</samp>&rsquo;</dt>
517
+ <dt>&lsquo;<samp class="samp">vfpv3</samp>&rsquo;</dt>
518
+ <dt>&lsquo;<samp class="samp">neon</samp>&rsquo;</dt>
519
+ <dt>&lsquo;<samp class="samp">setend</samp>&rsquo;</dt>
520
+ </dl>
521
+ </dd>
522
+ <dt>&lsquo;<samp class="samp">AArch64</samp>&rsquo;</dt>
523
+ <dd><dl class="table">
524
+ <dt>&lsquo;<samp class="samp">armv8</samp>&rsquo;</dt>
525
+ <dt>&lsquo;<samp class="samp">vfp</samp>&rsquo;</dt>
526
+ <dt>&lsquo;<samp class="samp">neon</samp>&rsquo;</dt>
527
+ </dl>
528
+ </dd>
529
+ <dt>&lsquo;<samp class="samp">PowerPC</samp>&rsquo;</dt>
530
+ <dd><dl class="table">
531
+ <dt>&lsquo;<samp class="samp">altivec</samp>&rsquo;</dt>
532
+ </dl>
533
+ </dd>
534
+ <dt>&lsquo;<samp class="samp">Specific Processors</samp>&rsquo;</dt>
535
+ <dd><dl class="table">
536
+ <dt>&lsquo;<samp class="samp">pentium2</samp>&rsquo;</dt>
537
+ <dt>&lsquo;<samp class="samp">pentium3</samp>&rsquo;</dt>
538
+ <dt>&lsquo;<samp class="samp">pentium4</samp>&rsquo;</dt>
539
+ <dt>&lsquo;<samp class="samp">k6</samp>&rsquo;</dt>
540
+ <dt>&lsquo;<samp class="samp">k62</samp>&rsquo;</dt>
541
+ <dt>&lsquo;<samp class="samp">athlon</samp>&rsquo;</dt>
542
+ <dt>&lsquo;<samp class="samp">athlonxp</samp>&rsquo;</dt>
543
+ <dt>&lsquo;<samp class="samp">k8</samp>&rsquo;</dt>
544
+ </dl>
545
+ </dd>
546
+ </dl>
547
+
548
+ </dd>
549
+ <dt><samp class="option">-cpucount <var class="var">count</var> (<em class="emph">global</em>)</samp></dt>
550
+ <dd><p>Override detection of CPU count. This option is intended
551
+ for testing. Do not use it unless you know what you&rsquo;re doing.
552
+ </p><div class="example">
553
+ <pre class="example-preformatted">ffmpeg -cpucount 2
554
+ </pre></div>
555
+
556
+ </dd>
557
+ <dt><samp class="option">-max_alloc <var class="var">bytes</var></samp></dt>
558
+ <dd><p>Set the maximum size limit for allocating a block on the heap by ffmpeg&rsquo;s
559
+ family of malloc functions. Exercise <strong class="strong">extreme caution</strong> when using
560
+ this option. Don&rsquo;t use if you do not understand the full consequence of doing so.
561
+ Default is INT_MAX.
562
+ </p></dd>
563
+ </dl>
564
+
565
+ <a name="AVOptions"></a>
566
+ <h3 class="section">3.3 AVOptions<span class="pull-right"><a class="anchor hidden-xs" href="#AVOptions" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-AVOptions" aria-hidden="true">TOC</a></span></h3>
567
+
568
+ <p>These options are provided directly by the libavformat, libavdevice and
569
+ libavcodec libraries. To see the list of available AVOptions, use the
570
+ <samp class="option">-help</samp> option. They are separated into two categories:
571
+ </p><dl class="table">
572
+ <dt><samp class="option">generic</samp></dt>
573
+ <dd><p>These options can be set for any container, codec or device. Generic options
574
+ are listed under AVFormatContext options for containers/devices and under
575
+ AVCodecContext options for codecs.
576
+ </p></dd>
577
+ <dt><samp class="option">private</samp></dt>
578
+ <dd><p>These options are specific to the given container, device or codec. Private
579
+ options are listed under their corresponding containers/devices/codecs.
580
+ </p></dd>
581
+ </dl>
582
+
583
+ <p>For example to write an ID3v2.3 header instead of a default ID3v2.4 to
584
+ an MP3 file, use the <samp class="option">id3v2_version</samp> private option of the MP3
585
+ muxer:
586
+ </p><div class="example">
587
+ <pre class="example-preformatted">ffmpeg -i input.flac -id3v2_version 3 out.mp3
588
+ </pre></div>
589
+
590
+ <p>All codec AVOptions are per-stream, and thus a stream specifier
591
+ should be attached to them:
592
+ </p><div class="example">
593
+ <pre class="example-preformatted">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
594
+ </pre></div>
595
+
596
+ <p>In the above example, a multichannel audio stream is mapped twice for output.
597
+ The first instance is encoded with codec ac3 and bitrate 640k.
598
+ The second instance is downmixed to 2 channels and encoded with codec aac. A bitrate of 128k is specified for it using
599
+ absolute index of the output stream.
600
+ </p>
601
+ <p>Note: the <samp class="option">-nooption</samp> syntax cannot be used for boolean
602
+ AVOptions, use <samp class="option">-option 0</samp>/<samp class="option">-option 1</samp>.
603
+ </p>
604
+ <p>Note: the old undocumented way of specifying per-stream AVOptions by
605
+ prepending v/a/s to the options name is now obsolete and will be
606
+ removed soon.
607
+ </p>
608
+ <a name="Main-options"></a>
609
+ <h3 class="section">3.4 Main options<span class="pull-right"><a class="anchor hidden-xs" href="#Main-options" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Main-options" aria-hidden="true">TOC</a></span></h3>
610
+
611
+ <dl class="table">
612
+ <dt><samp class="option">-f <var class="var">format</var></samp></dt>
613
+ <dd><p>Force format to use.
614
+ </p>
615
+ </dd>
616
+ <dt><samp class="option">-unit</samp></dt>
617
+ <dd><p>Show the unit of the displayed values.
618
+ </p>
619
+ </dd>
620
+ <dt><samp class="option">-prefix</samp></dt>
621
+ <dd><p>Use SI prefixes for the displayed values.
622
+ Unless the &quot;-byte_binary_prefix&quot; option is used all the prefixes
623
+ are decimal.
624
+ </p>
625
+ </dd>
626
+ <dt><samp class="option">-byte_binary_prefix</samp></dt>
627
+ <dd><p>Force the use of binary prefixes for byte values.
628
+ </p>
629
+ </dd>
630
+ <dt><samp class="option">-sexagesimal</samp></dt>
631
+ <dd><p>Use sexagesimal format HH:MM:SS.MICROSECONDS for time values.
632
+ </p>
633
+ </dd>
634
+ <dt><samp class="option">-pretty</samp></dt>
635
+ <dd><p>Prettify the format of the displayed values, it corresponds to the
636
+ options &quot;-unit -prefix -byte_binary_prefix -sexagesimal&quot;.
637
+ </p>
638
+ </dd>
639
+ <dt><samp class="option">-output_format, -of, -print_format <var class="var">writer_name</var>[=<var class="var">writer_options</var>]</samp></dt>
640
+ <dd><p>Set the output printing format.
641
+ </p>
642
+ <p><var class="var">writer_name</var> specifies the name of the writer, and
643
+ <var class="var">writer_options</var> specifies the options to be passed to the writer.
644
+ </p>
645
+ <p>For example for printing the output in JSON format, specify:
646
+ </p><div class="example">
647
+ <pre class="example-preformatted">-output_format json
648
+ </pre></div>
649
+
650
+ <p>For more details on the available output printing formats, see the
651
+ Writers section below.
652
+ </p>
653
+ </dd>
654
+ <dt><samp class="option">-sections</samp></dt>
655
+ <dd><p>Print sections structure and section information, and exit. The output
656
+ is not meant to be parsed by a machine.
657
+ </p>
658
+ </dd>
659
+ <dt><samp class="option">-select_streams <var class="var">stream_specifier</var></samp></dt>
660
+ <dd><p>Select only the streams specified by <var class="var">stream_specifier</var>. This
661
+ option affects only the options related to streams
662
+ (e.g. <code class="code">show_streams</code>, <code class="code">show_packets</code>, etc.).
663
+ </p>
664
+ <p>For example to show only audio streams, you can use the command:
665
+ </p><div class="example">
666
+ <pre class="example-preformatted">ffprobe -show_streams -select_streams a INPUT
667
+ </pre></div>
668
+
669
+ <p>To show only video packets belonging to the video stream with index 1:
670
+ </p><div class="example">
671
+ <pre class="example-preformatted">ffprobe -show_packets -select_streams v:1 INPUT
672
+ </pre></div>
673
+
674
+ </dd>
675
+ <dt><samp class="option">-show_data</samp></dt>
676
+ <dd><p>Show payload data, as a hexadecimal and ASCII dump. Coupled with
677
+ <samp class="option">-show_packets</samp>, it will dump the packets&rsquo; data. Coupled with
678
+ <samp class="option">-show_streams</samp>, it will dump the codec extradata.
679
+ </p>
680
+ <p>The dump is printed as the &quot;data&quot; field. It may contain newlines.
681
+ </p>
682
+ </dd>
683
+ <dt><samp class="option">-show_data_hash <var class="var">algorithm</var></samp></dt>
684
+ <dd><p>Show a hash of payload data, for packets with <samp class="option">-show_packets</samp> and for
685
+ codec extradata with <samp class="option">-show_streams</samp>.
686
+ </p>
687
+ </dd>
688
+ <dt><samp class="option">-show_error</samp></dt>
689
+ <dd><p>Show information about the error found when trying to probe the input.
690
+ </p>
691
+ <p>The error information is printed within a section with name &quot;ERROR&quot;.
692
+ </p>
693
+ </dd>
694
+ <dt><samp class="option">-show_format</samp></dt>
695
+ <dd><p>Show information about the container format of the input multimedia
696
+ stream.
697
+ </p>
698
+ <p>All the container format information is printed within a section with
699
+ name &quot;FORMAT&quot;.
700
+ </p>
701
+ </dd>
702
+ <dt><samp class="option">-show_entries <var class="var">section_entries</var></samp></dt>
703
+ <dd><p>Set list of entries to show.
704
+ </p>
705
+ <p>Entries are specified according to the following
706
+ syntax. <var class="var">section_entries</var> contains a list of section entries
707
+ separated by <code class="code">:</code>. Each section entry is composed by a section
708
+ name (or unique name), optionally followed by a list of entries local
709
+ to that section, separated by <code class="code">,</code>.
710
+ </p>
711
+ <p>If section name is specified but is followed by no <code class="code">=</code>, all
712
+ entries are printed to output, together with all the contained
713
+ sections. Otherwise only the entries specified in the local section
714
+ entries list are printed. In particular, if <code class="code">=</code> is specified but
715
+ the list of local entries is empty, then no entries will be shown for
716
+ that section.
717
+ </p>
718
+ <p>Note that the order of specification of the local section entries is
719
+ not honored in the output, and the usual display order will be
720
+ retained.
721
+ </p>
722
+ <p>The formal syntax is given by:
723
+ </p><div class="example">
724
+ <pre class="example-preformatted"><var class="var">LOCAL_SECTION_ENTRIES</var> ::= <var class="var">SECTION_ENTRY_NAME</var>[,<var class="var">LOCAL_SECTION_ENTRIES</var>]
725
+ <var class="var">SECTION_ENTRY</var> ::= <var class="var">SECTION_NAME</var>[=[<var class="var">LOCAL_SECTION_ENTRIES</var>]]
726
+ <var class="var">SECTION_ENTRIES</var> ::= <var class="var">SECTION_ENTRY</var>[:<var class="var">SECTION_ENTRIES</var>]
727
+ </pre></div>
728
+
729
+ <p>For example, to show only the index and type of each stream, and the PTS
730
+ time, duration time, and stream index of the packets, you can specify
731
+ the argument:
732
+ </p><div class="example">
733
+ <pre class="example-preformatted">packet=pts_time,duration_time,stream_index : stream=index,codec_type
734
+ </pre></div>
735
+
736
+ <p>To show all the entries in the section &quot;format&quot;, but only the codec
737
+ type in the section &quot;stream&quot;, specify the argument:
738
+ </p><div class="example">
739
+ <pre class="example-preformatted">format : stream=codec_type
740
+ </pre></div>
741
+
742
+ <p>To show all the tags in the stream and format sections:
743
+ </p><div class="example">
744
+ <pre class="example-preformatted">stream_tags : format_tags
745
+ </pre></div>
746
+
747
+ <p>To show only the <code class="code">title</code> tag (if available) in the stream
748
+ sections:
749
+ </p><div class="example">
750
+ <pre class="example-preformatted">stream_tags=title
751
+ </pre></div>
752
+
753
+ </dd>
754
+ <dt><samp class="option">-show_packets</samp></dt>
755
+ <dd><p>Show information about each packet contained in the input multimedia
756
+ stream.
757
+ </p>
758
+ <p>The information for each single packet is printed within a dedicated
759
+ section with name &quot;PACKET&quot;.
760
+ </p>
761
+ </dd>
762
+ <dt><samp class="option">-show_frames</samp></dt>
763
+ <dd><p>Show information about each frame and subtitle contained in the input
764
+ multimedia stream.
765
+ </p>
766
+ <p>The information for each single frame is printed within a dedicated
767
+ section with name &quot;FRAME&quot; or &quot;SUBTITLE&quot;.
768
+ </p>
769
+ </dd>
770
+ <dt><samp class="option">-show_log <var class="var">loglevel</var></samp></dt>
771
+ <dd><p>Show logging information from the decoder about each frame according to
772
+ the value set in <var class="var">loglevel</var>, (see <code class="code">-loglevel</code>). This option requires <code class="code">-show_frames</code>.
773
+ </p>
774
+ <p>The information for each log message is printed within a dedicated
775
+ section with name &quot;LOG&quot;.
776
+ </p>
777
+ </dd>
778
+ <dt><samp class="option">-show_streams</samp></dt>
779
+ <dd><p>Show information about each media stream contained in the input
780
+ multimedia stream.
781
+ </p>
782
+ <p>Each media stream information is printed within a dedicated section
783
+ with name &quot;STREAM&quot;.
784
+ </p>
785
+ </dd>
786
+ <dt><samp class="option">-show_programs</samp></dt>
787
+ <dd><p>Show information about programs and their streams contained in the input
788
+ multimedia stream.
789
+ </p>
790
+ <p>Each media stream information is printed within a dedicated section
791
+ with name &quot;PROGRAM_STREAM&quot;.
792
+ </p>
793
+ </dd>
794
+ <dt><samp class="option">-show_stream_groups</samp></dt>
795
+ <dd><p>Show information about stream groups and their streams contained in the
796
+ input multimedia stream.
797
+ </p>
798
+ <p>Each media stream information is printed within a dedicated section
799
+ with name &quot;STREAM_GROUP_STREAM&quot;.
800
+ </p>
801
+ </dd>
802
+ <dt><samp class="option">-show_chapters</samp></dt>
803
+ <dd><p>Show information about chapters stored in the format.
804
+ </p>
805
+ <p>Each chapter is printed within a dedicated section with name &quot;CHAPTER&quot;.
806
+ </p>
807
+ </dd>
808
+ <dt><samp class="option">-count_frames</samp></dt>
809
+ <dd><p>Count the number of frames per stream and report it in the
810
+ corresponding stream section.
811
+ </p>
812
+ </dd>
813
+ <dt><samp class="option">-count_packets</samp></dt>
814
+ <dd><p>Count the number of packets per stream and report it in the
815
+ corresponding stream section.
816
+ </p>
817
+ </dd>
818
+ <dt><samp class="option">-read_intervals <var class="var">read_intervals</var></samp></dt>
819
+ <dd>
820
+ <p>Read only the specified intervals. <var class="var">read_intervals</var> must be a
821
+ sequence of interval specifications separated by &quot;,&quot;.
822
+ <code class="command">ffprobe</code> will seek to the interval starting point, and will
823
+ continue reading from that.
824
+ </p>
825
+ <p>Each interval is specified by two optional parts, separated by &quot;%&quot;.
826
+ </p>
827
+ <p>The first part specifies the interval start position. It is
828
+ interpreted as an absolute position, or as a relative offset from the
829
+ current position if it is preceded by the &quot;+&quot; character. If this first
830
+ part is not specified, no seeking will be performed when reading this
831
+ interval.
832
+ </p>
833
+ <p>The second part specifies the interval end position. It is interpreted
834
+ as an absolute position, or as a relative offset from the current
835
+ position if it is preceded by the &quot;+&quot; character. If the offset
836
+ specification starts with &quot;#&quot;, it is interpreted as the number of
837
+ packets to read (not including the flushing packets) from the interval
838
+ start. If no second part is specified, the program will read until the
839
+ end of the input.
840
+ </p>
841
+ <p>Note that seeking is not accurate, thus the actual interval start
842
+ point may be different from the specified position. Also, when an
843
+ interval duration is specified, the absolute end time will be computed
844
+ by adding the duration to the interval start point found by seeking
845
+ the file, rather than to the specified start value.
846
+ </p>
847
+ <p>The formal syntax is given by:
848
+ </p><div class="example">
849
+ <pre class="example-preformatted"><var class="var">INTERVAL</var> ::= [<var class="var">START</var>|+<var class="var">START_OFFSET</var>][%[<var class="var">END</var>|+<var class="var">END_OFFSET</var>]]
850
+ <var class="var">INTERVALS</var> ::= <var class="var">INTERVAL</var>[,<var class="var">INTERVALS</var>]
851
+ </pre></div>
852
+
853
+ <p>A few examples follow.
854
+ </p><ul class="itemize mark-bullet">
855
+ <li>Seek to time 10, read packets until 20 seconds after the found seek
856
+ point, then seek to position <code class="code">01:30</code> (1 minute and thirty
857
+ seconds) and read packets until position <code class="code">01:45</code>.
858
+ <div class="example">
859
+ <pre class="example-preformatted">10%+20,01:30%01:45
860
+ </pre></div>
861
+
862
+ </li><li>Read only 42 packets after seeking to position <code class="code">01:23</code>:
863
+ <div class="example">
864
+ <pre class="example-preformatted">01:23%+#42
865
+ </pre></div>
866
+
867
+ </li><li>Read only the first 20 seconds from the start:
868
+ <div class="example">
869
+ <pre class="example-preformatted">%+20
870
+ </pre></div>
871
+
872
+ </li><li>Read from the start until position <code class="code">02:30</code>:
873
+ <div class="example">
874
+ <pre class="example-preformatted">%02:30
875
+ </pre></div>
876
+ </li></ul>
877
+
878
+ </dd>
879
+ <dt><samp class="option">-show_private_data, -private</samp></dt>
880
+ <dd><p>Show private data, that is data depending on the format of the
881
+ particular shown element.
882
+ This option is enabled by default, but you may need to disable it
883
+ for specific uses, for example when creating XSD-compliant XML output.
884
+ </p>
885
+ </dd>
886
+ <dt><samp class="option">-show_program_version</samp></dt>
887
+ <dd><p>Show information related to program version.
888
+ </p>
889
+ <p>Version information is printed within a section with name
890
+ &quot;PROGRAM_VERSION&quot;.
891
+ </p>
892
+ </dd>
893
+ <dt><samp class="option">-show_library_versions</samp></dt>
894
+ <dd><p>Show information related to library versions.
895
+ </p>
896
+ <p>Version information for each library is printed within a section with
897
+ name &quot;LIBRARY_VERSION&quot;.
898
+ </p>
899
+ </dd>
900
+ <dt><samp class="option">-show_versions</samp></dt>
901
+ <dd><p>Show information related to program and library versions. This is the
902
+ equivalent of setting both <samp class="option">-show_program_version</samp> and
903
+ <samp class="option">-show_library_versions</samp> options.
904
+ </p>
905
+ </dd>
906
+ <dt><samp class="option">-show_pixel_formats</samp></dt>
907
+ <dd><p>Show information about all pixel formats supported by FFmpeg.
908
+ </p>
909
+ <p>Pixel format information for each format is printed within a section
910
+ with name &quot;PIXEL_FORMAT&quot;.
911
+ </p>
912
+ </dd>
913
+ <dt><samp class="option">-show_optional_fields <var class="var">value</var></samp></dt>
914
+ <dd><p>Some writers viz. JSON and XML, omit the printing of fields with invalid or non-applicable values,
915
+ while other writers always print them. This option enables one to control this behaviour.
916
+ Valid values are <code class="code">always</code>/<code class="code">1</code>, <code class="code">never</code>/<code class="code">0</code> and <code class="code">auto</code>/<code class="code">-1</code>.
917
+ Default is <var class="var">auto</var>.
918
+ </p>
919
+ </dd>
920
+ <dt><samp class="option">-analyze_frames</samp></dt>
921
+ <dd><p>Analyze frames and/or their side data up to the provided read interval,
922
+ providing additional information that may be useful at a stream level.
923
+ Must be paired with the <samp class="option">-show_streams</samp> option or it will have no effect.
924
+ </p>
925
+ <p>Currently, the additional fields provided by this option when enabled are the
926
+ <code class="code">closed_captions</code> and <code class="code">film_grain</code> fields.
927
+ </p>
928
+ <p>For example, to analyze the first 20 seconds and populate these fields:
929
+ </p><div class="example">
930
+ <pre class="example-preformatted">ffprobe -show_streams -analyze_frames -read_intervals &quot;%+20&quot; INPUT
931
+ </pre></div>
932
+
933
+ </dd>
934
+ <dt><samp class="option">-bitexact</samp></dt>
935
+ <dd><p>Force bitexact output, useful to produce output which is not dependent
936
+ on the specific build.
937
+ </p>
938
+ </dd>
939
+ <dt><samp class="option">-i <var class="var">input_url</var></samp></dt>
940
+ <dd><p>Read <var class="var">input_url</var>.
941
+ </p>
942
+ </dd>
943
+ <dt><samp class="option">-o <var class="var">output_url</var></samp></dt>
944
+ <dd><p>Write output to <var class="var">output_url</var>. If not specified, the output is sent
945
+ to stdout.
946
+ </p>
947
+ </dd>
948
+ </dl>
949
+
950
+ <a name="Writers"></a>
951
+ <h2 class="chapter">4 Writers<span class="pull-right"><a class="anchor hidden-xs" href="#Writers" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Writers" aria-hidden="true">TOC</a></span></h2>
952
+
953
+ <p>A writer defines the output format adopted by <code class="command">ffprobe</code>, and will be
954
+ used for printing all the parts of the output.
955
+ </p>
956
+ <p>A writer may accept one or more arguments, which specify the options
957
+ to adopt. The options are specified as a list of <var class="var">key</var>=<var class="var">value</var>
958
+ pairs, separated by &quot;:&quot;.
959
+ </p>
960
+ <p>All writers support the following options:
961
+ </p>
962
+ <dl class="table">
963
+ <dt><samp class="option">string_validation, sv</samp></dt>
964
+ <dd><p>Set string validation mode.
965
+ </p>
966
+ <p>The following values are accepted.
967
+ </p><dl class="table">
968
+ <dt>&lsquo;<samp class="samp">fail</samp>&rsquo;</dt>
969
+ <dd><p>The writer will fail immediately in case an invalid string (UTF-8)
970
+ sequence or code point is found in the input. This is especially
971
+ useful to validate input metadata.
972
+ </p>
973
+ </dd>
974
+ <dt>&lsquo;<samp class="samp">ignore</samp>&rsquo;</dt>
975
+ <dd><p>Any validation error will be ignored. This will result in possibly
976
+ broken output, especially with the json or xml writer.
977
+ </p>
978
+ </dd>
979
+ <dt>&lsquo;<samp class="samp">replace</samp>&rsquo;</dt>
980
+ <dd><p>The writer will substitute invalid UTF-8 sequences or code points with
981
+ the string specified with the <samp class="option">string_validation_replacement</samp>.
982
+ </p></dd>
983
+ </dl>
984
+
985
+ <p>Default value is &lsquo;<samp class="samp">replace</samp>&rsquo;.
986
+ </p>
987
+ </dd>
988
+ <dt><samp class="option">string_validation_replacement, svr</samp></dt>
989
+ <dd><p>Set replacement string to use in case <samp class="option">string_validation</samp> is
990
+ set to &lsquo;<samp class="samp">replace</samp>&rsquo;.
991
+ </p>
992
+ <p>In case the option is not specified, the writer will assume the empty
993
+ string, that is it will remove the invalid sequences from the input
994
+ strings.
995
+ </p></dd>
996
+ </dl>
997
+
998
+ <p>A description of the currently available writers follows.
999
+ </p>
1000
+ <a name="default"></a>
1001
+ <h3 class="section">4.1 default<span class="pull-right"><a class="anchor hidden-xs" href="#default" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-default" aria-hidden="true">TOC</a></span></h3>
1002
+ <p>Default format.
1003
+ </p>
1004
+ <p>Print each section in the form:
1005
+ </p><div class="example">
1006
+ <pre class="example-preformatted">[SECTION]
1007
+ key1=val1
1008
+ ...
1009
+ keyN=valN
1010
+ [/SECTION]
1011
+ </pre></div>
1012
+
1013
+ <p>Metadata tags are printed as a line in the corresponding FORMAT, STREAM,
1014
+ STREAM_GROUP_STREAM or PROGRAM_STREAM section, and are prefixed by the
1015
+ string &quot;TAG:&quot;.
1016
+ </p>
1017
+ <p>A description of the accepted options follows.
1018
+ </p>
1019
+ <dl class="table">
1020
+ <dt><samp class="option">nokey, nk</samp></dt>
1021
+ <dd><p>If set to 1 specify not to print the key of each field. Default value
1022
+ is 0.
1023
+ </p>
1024
+ </dd>
1025
+ <dt><samp class="option">noprint_wrappers, nw</samp></dt>
1026
+ <dd><p>If set to 1 specify not to print the section header and footer.
1027
+ Default value is 0.
1028
+ </p></dd>
1029
+ </dl>
1030
+
1031
+ <a name="compact_002c-csv"></a>
1032
+ <h3 class="section">4.2 compact, csv<span class="pull-right"><a class="anchor hidden-xs" href="#compact_002c-csv" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-compact_002c-csv" aria-hidden="true">TOC</a></span></h3>
1033
+ <p>Compact and CSV format.
1034
+ </p>
1035
+ <p>The <code class="code">csv</code> writer is equivalent to <code class="code">compact</code>, but supports
1036
+ different defaults.
1037
+ </p>
1038
+ <p>Each section is printed on a single line.
1039
+ If no option is specified, the output has the form:
1040
+ </p><div class="example">
1041
+ <pre class="example-preformatted">section|key1=val1| ... |keyN=valN
1042
+ </pre></div>
1043
+
1044
+ <p>Metadata tags are printed in the corresponding &quot;format&quot; or &quot;stream&quot;
1045
+ section. A metadata tag key, if printed, is prefixed by the string
1046
+ &quot;tag:&quot;.
1047
+ </p>
1048
+ <p>The description of the accepted options follows.
1049
+ </p>
1050
+ <dl class="table">
1051
+ <dt><samp class="option">item_sep, s</samp></dt>
1052
+ <dd><p>Specify the character to use for separating fields in the output line.
1053
+ It must be a single printable character, it is &quot;|&quot; by default (&quot;,&quot; for
1054
+ the <code class="code">csv</code> writer).
1055
+ </p>
1056
+ </dd>
1057
+ <dt><samp class="option">nokey, nk</samp></dt>
1058
+ <dd><p>If set to 1 specify not to print the key of each field. Its default
1059
+ value is 0 (1 for the <code class="code">csv</code> writer).
1060
+ </p>
1061
+ </dd>
1062
+ <dt><samp class="option">escape, e</samp></dt>
1063
+ <dd><p>Set the escape mode to use, default to &quot;c&quot; (&quot;csv&quot; for the <code class="code">csv</code>
1064
+ writer).
1065
+ </p>
1066
+ <p>It can assume one of the following values:
1067
+ </p><dl class="table">
1068
+ <dt><samp class="option">c</samp></dt>
1069
+ <dd><p>Perform C-like escaping. Strings containing a newline (&lsquo;<samp class="samp">\n</samp>&rsquo;), carriage
1070
+ return (&lsquo;<samp class="samp">\r</samp>&rsquo;), a tab (&lsquo;<samp class="samp">\t</samp>&rsquo;), a form feed (&lsquo;<samp class="samp">\f</samp>&rsquo;), the escaping
1071
+ character (&lsquo;<samp class="samp">\</samp>&rsquo;) or the item separator character <var class="var">SEP</var> are escaped
1072
+ using C-like fashioned escaping, so that a newline is converted to the
1073
+ sequence &lsquo;<samp class="samp">\n</samp>&rsquo;, a carriage return to &lsquo;<samp class="samp">\r</samp>&rsquo;, &lsquo;<samp class="samp">\</samp>&rsquo; to &lsquo;<samp class="samp">\\</samp>&rsquo; and
1074
+ the separator <var class="var">SEP</var> is converted to &lsquo;<samp class="samp">\<var class="var">SEP</var></samp>&rsquo;.
1075
+ </p>
1076
+ </dd>
1077
+ <dt><samp class="option">csv</samp></dt>
1078
+ <dd><p>Perform CSV-like escaping, as described in RFC4180. Strings
1079
+ containing a newline (&lsquo;<samp class="samp">\n</samp>&rsquo;), a carriage return (&lsquo;<samp class="samp">\r</samp>&rsquo;), a double quote
1080
+ (&lsquo;<samp class="samp">&quot;</samp>&rsquo;), or <var class="var">SEP</var> are enclosed in double-quotes.
1081
+ </p>
1082
+ </dd>
1083
+ <dt><samp class="option">none</samp></dt>
1084
+ <dd><p>Perform no escaping.
1085
+ </p></dd>
1086
+ </dl>
1087
+
1088
+ </dd>
1089
+ <dt><samp class="option">print_section, p</samp></dt>
1090
+ <dd><p>Print the section name at the beginning of each line if the value is
1091
+ <code class="code">1</code>, disable it with value set to <code class="code">0</code>. Default value is
1092
+ <code class="code">1</code>.
1093
+ </p>
1094
+ </dd>
1095
+ </dl>
1096
+
1097
+ <a name="flat"></a>
1098
+ <h3 class="section">4.3 flat<span class="pull-right"><a class="anchor hidden-xs" href="#flat" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-flat" aria-hidden="true">TOC</a></span></h3>
1099
+ <p>Flat format.
1100
+ </p>
1101
+ <p>A free-form output where each line contains an explicit key=value, such as
1102
+ &quot;streams.stream.3.tags.foo=bar&quot;. The output is shell escaped, so it can be
1103
+ directly embedded in sh scripts as long as the separator character is an
1104
+ alphanumeric character or an underscore (see <var class="var">sep_char</var> option).
1105
+ </p>
1106
+ <p>The description of the accepted options follows.
1107
+ </p>
1108
+ <dl class="table">
1109
+ <dt><samp class="option">sep_char, s</samp></dt>
1110
+ <dd><p>Separator character used to separate the chapter, the section name, IDs and
1111
+ potential tags in the printed field key.
1112
+ </p>
1113
+ <p>Default value is &lsquo;<samp class="samp">.</samp>&rsquo;.
1114
+ </p>
1115
+ </dd>
1116
+ <dt><samp class="option">hierarchical, h</samp></dt>
1117
+ <dd><p>Specify if the section name specification should be hierarchical. If
1118
+ set to 1, and if there is more than one section in the current
1119
+ chapter, the section name will be prefixed by the name of the
1120
+ chapter. A value of 0 will disable this behavior.
1121
+ </p>
1122
+ <p>Default value is 1.
1123
+ </p></dd>
1124
+ </dl>
1125
+
1126
+ <a name="ini"></a>
1127
+ <h3 class="section">4.4 ini<span class="pull-right"><a class="anchor hidden-xs" href="#ini" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-ini" aria-hidden="true">TOC</a></span></h3>
1128
+ <p>INI format output.
1129
+ </p>
1130
+ <p>Print output in an INI based format.
1131
+ </p>
1132
+ <p>The following conventions are adopted:
1133
+ </p>
1134
+ <ul class="itemize mark-bullet">
1135
+ <li>all key and values are UTF-8
1136
+ </li><li>&lsquo;<samp class="samp">.</samp>&rsquo; is the subgroup separator
1137
+ </li><li>newline, &lsquo;<samp class="samp">\t</samp>&rsquo;, &lsquo;<samp class="samp">\f</samp>&rsquo;, &lsquo;<samp class="samp">\b</samp>&rsquo; and the following characters are
1138
+ escaped
1139
+ </li><li>&lsquo;<samp class="samp">\</samp>&rsquo; is the escape character
1140
+ </li><li>&lsquo;<samp class="samp">#</samp>&rsquo; is the comment indicator
1141
+ </li><li>&lsquo;<samp class="samp">=</samp>&rsquo; is the key/value separator
1142
+ </li><li>&lsquo;<samp class="samp">:</samp>&rsquo; is not used but usually parsed as key/value separator
1143
+ </li></ul>
1144
+
1145
+ <p>This writer accepts options as a list of <var class="var">key</var>=<var class="var">value</var> pairs,
1146
+ separated by &lsquo;<samp class="samp">:</samp>&rsquo;.
1147
+ </p>
1148
+ <p>The description of the accepted options follows.
1149
+ </p>
1150
+ <dl class="table">
1151
+ <dt><samp class="option">hierarchical, h</samp></dt>
1152
+ <dd><p>Specify if the section name specification should be hierarchical. If
1153
+ set to 1, and if there is more than one section in the current
1154
+ chapter, the section name will be prefixed by the name of the
1155
+ chapter. A value of 0 will disable this behavior.
1156
+ </p>
1157
+ <p>Default value is 1.
1158
+ </p></dd>
1159
+ </dl>
1160
+
1161
+ <a name="json"></a>
1162
+ <h3 class="section">4.5 json<span class="pull-right"><a class="anchor hidden-xs" href="#json" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-json" aria-hidden="true">TOC</a></span></h3>
1163
+ <p>JSON based format.
1164
+ </p>
1165
+ <p>Each section is printed using JSON notation.
1166
+ </p>
1167
+ <p>The description of the accepted options follows.
1168
+ </p>
1169
+ <dl class="table">
1170
+ <dt><samp class="option">compact, c</samp></dt>
1171
+ <dd><p>If set to 1 enable compact output, that is each section will be
1172
+ printed on a single line. Default value is 0.
1173
+ </p></dd>
1174
+ </dl>
1175
+
1176
+ <p>For more information about JSON, see <a class="url" href="http://www.json.org/">http://www.json.org/</a>.
1177
+ </p>
1178
+ <a name="xml"></a>
1179
+ <h3 class="section">4.6 xml<span class="pull-right"><a class="anchor hidden-xs" href="#xml" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-xml" aria-hidden="true">TOC</a></span></h3>
1180
+ <p>XML based format.
1181
+ </p>
1182
+ <p>The XML output is described in the XML schema description file
1183
+ <samp class="file">ffprobe.xsd</samp> installed in the FFmpeg datadir.
1184
+ </p>
1185
+ <p>An updated version of the schema can be retrieved at the url
1186
+ <a class="url" href="http://www.ffmpeg.org/schema/ffprobe.xsd">http://www.ffmpeg.org/schema/ffprobe.xsd</a>, which redirects to the
1187
+ latest schema committed into the FFmpeg development source code tree.
1188
+ </p>
1189
+ <p>Note that the output issued will be compliant to the
1190
+ <samp class="file">ffprobe.xsd</samp> schema only when no special global output options
1191
+ (<samp class="option">unit</samp>, <samp class="option">prefix</samp>, <samp class="option">byte_binary_prefix</samp>,
1192
+ <samp class="option">sexagesimal</samp> etc.) are specified.
1193
+ </p>
1194
+ <p>The description of the accepted options follows.
1195
+ </p>
1196
+ <dl class="table">
1197
+ <dt><samp class="option">fully_qualified, q</samp></dt>
1198
+ <dd><p>If set to 1 specify if the output should be fully qualified. Default
1199
+ value is 0.
1200
+ This is required for generating an XML file which can be validated
1201
+ through an XSD file.
1202
+ </p>
1203
+ </dd>
1204
+ <dt><samp class="option">xsd_strict, x</samp></dt>
1205
+ <dd><p>If set to 1 perform more checks for ensuring that the output is XSD
1206
+ compliant. Default value is 0.
1207
+ This option automatically sets <samp class="option">fully_qualified</samp> to 1.
1208
+ </p></dd>
1209
+ </dl>
1210
+
1211
+ <p>For more information about the XML format, see
1212
+ <a class="url" href="https://www.w3.org/XML/">https://www.w3.org/XML/</a>.
1213
+ </p>
1214
+ <a name="Timecode"></a>
1215
+ <h2 class="chapter">5 Timecode<span class="pull-right"><a class="anchor hidden-xs" href="#Timecode" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Timecode" aria-hidden="true">TOC</a></span></h2>
1216
+
1217
+ <p><code class="command">ffprobe</code> supports Timecode extraction:
1218
+ </p>
1219
+ <ul class="itemize mark-bullet">
1220
+ <li>MPEG1/2 timecode is extracted from the GOP, and is available in the video
1221
+ stream details (<samp class="option">-show_streams</samp>, see <var class="var">timecode</var>).
1222
+
1223
+ </li><li>MOV timecode is extracted from tmcd track, so is available in the tmcd
1224
+ stream metadata (<samp class="option">-show_streams</samp>, see <var class="var">TAG:timecode</var>).
1225
+
1226
+ </li><li>DV, GXF and AVI timecodes are available in format metadata
1227
+ (<samp class="option">-show_format</samp>, see <var class="var">TAG:timecode</var>).
1228
+
1229
+ </li></ul>
1230
+
1231
+
1232
+ <a name="See-Also"></a>
1233
+ <h2 class="chapter">6 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
1234
+
1235
+ <p><a class="url" href="ffprobe-all.html">ffprobe-all</a>,
1236
+ <a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>,
1237
+ <a class="url" href="ffmpeg-utils.html">ffmpeg-utils</a>,
1238
+ <a class="url" href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
1239
+ <a class="url" href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
1240
+ <a class="url" href="ffmpeg-codecs.html">ffmpeg-codecs</a>,
1241
+ <a class="url" href="ffmpeg-bitstream-filters.html">ffmpeg-bitstream-filters</a>,
1242
+ <a class="url" href="ffmpeg-formats.html">ffmpeg-formats</a>,
1243
+ <a class="url" href="ffmpeg-devices.html">ffmpeg-devices</a>,
1244
+ <a class="url" href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
1245
+ <a class="url" href="ffmpeg-filters.html">ffmpeg-filters</a>
1246
+ </p>
1247
+
1248
+ <a name="Authors"></a>
1249
+ <h2 class="chapter">7 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
1250
+
1251
+ <p>The FFmpeg developers.
1252
+ </p>
1253
+ <p>For details about the authorship, see the Git history of the project
1254
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
1255
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
1256
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
1257
+ </p>
1258
+ <p>Maintainers for the specific components are listed in the file
1259
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
1260
+ </p>
1261
+
1262
+ <p style="font-size: small;">
1263
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
1264
+ </p>
1265
+ </div>
1266
+ </body>
1267
+ </html>
ffmpeg-master-latest-win64-gpl/doc/general.html ADDED
The diff for this file is too large to render. See raw diff
 
ffmpeg-master-latest-win64-gpl/doc/git-howto.html ADDED
@@ -0,0 +1,562 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Using Git to develop FFmpeg
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Using Git to develop FFmpeg
17
+ </h1>
18
+
19
+
20
+
21
+ <a name="SEC_Top"></a>
22
+
23
+ <div class="element-contents" id="SEC_Contents">
24
+ <h2 class="contents-heading">Table of Contents</h2>
25
+
26
+ <div class="contents">
27
+
28
+ <ul class="toc-numbered-mark">
29
+ <li><a id="toc-Introduction" href="#Introduction">1 Introduction</a></li>
30
+ <li><a id="toc-Basics-Usage" href="#Basics-Usage">2 Basics Usage</a>
31
+ <ul class="toc-numbered-mark">
32
+ <li><a id="toc-Get-Git" href="#Get-Git">2.1 Get Git</a></li>
33
+ <li><a id="toc-Cloning-the-source-tree" href="#Cloning-the-source-tree">2.2 Cloning the source tree</a></li>
34
+ <li><a id="toc-Updating-the-source-tree-to-the-latest-revision-1" href="#Updating-the-source-tree-to-the-latest-revision-1">2.3 Updating the source tree to the latest revision</a></li>
35
+ <li><a id="toc-Rebasing-your-local-branches" href="#Rebasing-your-local-branches">2.4 Rebasing your local branches</a></li>
36
+ <li><a id="toc-Adding_002fremoving-files_002fdirectories" href="#Adding_002fremoving-files_002fdirectories">2.5 Adding/removing files/directories</a></li>
37
+ <li><a id="toc-Showing-modifications" href="#Showing-modifications">2.6 Showing modifications</a></li>
38
+ <li><a id="toc-Inspecting-the-changelog" href="#Inspecting-the-changelog">2.7 Inspecting the changelog</a></li>
39
+ <li><a id="toc-Checking-source-tree-status" href="#Checking-source-tree-status">2.8 Checking source tree status</a></li>
40
+ <li><a id="toc-Committing" href="#Committing">2.9 Committing</a></li>
41
+ <li><a id="toc-Writing-a-commit-message" href="#Writing-a-commit-message">2.10 Writing a commit message</a></li>
42
+ <li><a id="toc-Preparing-a-patchset" href="#Preparing-a-patchset">2.11 Preparing a patchset</a></li>
43
+ <li><a id="toc-Sending-patches-for-review" href="#Sending-patches-for-review">2.12 Sending patches for review</a></li>
44
+ <li><a id="toc-Renaming_002fmoving_002fcopying-files-or-contents-of-files" href="#Renaming_002fmoving_002fcopying-files-or-contents-of-files">2.13 Renaming/moving/copying files or contents of files</a></li>
45
+ </ul></li>
46
+ <li><a id="toc-Git-configuration" href="#Git-configuration">3 Git configuration</a>
47
+ <ul class="toc-numbered-mark">
48
+ <li><a id="toc-Personal-Git-installation" href="#Personal-Git-installation">3.1 Personal Git installation</a></li>
49
+ <li><a id="toc-Repository-configuration" href="#Repository-configuration">3.2 Repository configuration</a></li>
50
+ </ul></li>
51
+ <li><a id="toc-FFmpeg-specific" href="#FFmpeg-specific">4 FFmpeg specific</a>
52
+ <ul class="toc-numbered-mark">
53
+ <li><a id="toc-Reverting-broken-commits" href="#Reverting-broken-commits">4.1 Reverting broken commits</a></li>
54
+ <li><a id="toc-Pushing-changes-to-remote-trees" href="#Pushing-changes-to-remote-trees">4.2 Pushing changes to remote trees</a></li>
55
+ <li><a id="toc-Finding-a-specific-svn-revision" href="#Finding-a-specific-svn-revision">4.3 Finding a specific svn revision</a></li>
56
+ </ul></li>
57
+ <li><a id="toc-gpg-key-generation" href="#gpg-key-generation">5 gpg key generation</a></li>
58
+ <li><a id="toc-Pre_002dpush-checklist" href="#Pre_002dpush-checklist">6 Pre-push checklist</a></li>
59
+ <li><a id="toc-Server-Issues" href="#Server-Issues">7 Server Issues</a></li>
60
+ </ul>
61
+ </div>
62
+ </div>
63
+
64
+ <a name="Introduction"></a>
65
+ <h2 class="chapter">1 Introduction<span class="pull-right"><a class="anchor hidden-xs" href="#Introduction" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Introduction" aria-hidden="true">TOC</a></span></h2>
66
+
67
+ <p>This document aims in giving some quick references on a set of useful Git
68
+ commands. You should always use the extensive and detailed documentation
69
+ provided directly by Git:
70
+ </p>
71
+ <div class="example">
72
+ <pre class="example-preformatted">git --help
73
+ man git
74
+ </pre></div>
75
+
76
+ <p>shows you the available subcommands,
77
+ </p>
78
+ <div class="example">
79
+ <pre class="example-preformatted">git &lt;command&gt; --help
80
+ man git-&lt;command&gt;
81
+ </pre></div>
82
+
83
+ <p>shows information about the subcommand &lt;command&gt;.
84
+ </p>
85
+ <p>Additional information could be found on the
86
+ <a class="url" href="http://gitref.org">Git Reference</a> website.
87
+ </p>
88
+ <p>For more information about the Git project, visit the
89
+ <a class="url" href="http://git-scm.com/">Git website</a>.
90
+ </p>
91
+ <p>Consult these resources whenever you have problems, they are quite exhaustive.
92
+ </p>
93
+ <p>What follows now is a basic introduction to Git and some FFmpeg-specific
94
+ guidelines to ease the contribution to the project.
95
+ </p>
96
+ <a name="Basics-Usage"></a>
97
+ <h2 class="chapter">2 Basics Usage<span class="pull-right"><a class="anchor hidden-xs" href="#Basics-Usage" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Basics-Usage" aria-hidden="true">TOC</a></span></h2>
98
+
99
+ <a name="Get-Git"></a>
100
+ <h3 class="section">2.1 Get Git<span class="pull-right"><a class="anchor hidden-xs" href="#Get-Git" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Get-Git" aria-hidden="true">TOC</a></span></h3>
101
+
102
+ <p>You can get Git from <a class="url" href="http://git-scm.com/">http://git-scm.com/</a>
103
+ Most distribution and operating system provide a package for it.
104
+ </p>
105
+
106
+ <a name="Cloning-the-source-tree"></a>
107
+ <h3 class="section">2.2 Cloning the source tree<span class="pull-right"><a class="anchor hidden-xs" href="#Cloning-the-source-tree" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Cloning-the-source-tree" aria-hidden="true">TOC</a></span></h3>
108
+
109
+ <div class="example">
110
+ <pre class="example-preformatted">git clone https://git.ffmpeg.org/ffmpeg.git &lt;target&gt;
111
+ </pre></div>
112
+
113
+ <p>This will put the FFmpeg sources into the directory <var class="var">&lt;target&gt;</var>.
114
+ </p>
115
+ <div class="example">
116
+ <pre class="example-preformatted">git clone git@source.ffmpeg.org:ffmpeg &lt;target&gt;
117
+ </pre></div>
118
+
119
+ <p>This will put the FFmpeg sources into the directory <var class="var">&lt;target&gt;</var> and let
120
+ you push back your changes to the remote repository.
121
+ </p>
122
+ <div class="example">
123
+ <pre class="example-preformatted">git clone git@ffmpeg.org:ffmpeg-web &lt;target&gt;
124
+ </pre></div>
125
+
126
+ <p>This will put the source of the FFmpeg website into the directory
127
+ <var class="var">&lt;target&gt;</var> and let you push back your changes to the remote repository.
128
+ </p>
129
+ <p>If you don&rsquo;t have write-access to the ffmpeg-web repository, you can
130
+ create patches after making a read-only ffmpeg-web clone:
131
+ </p>
132
+ <div class="example">
133
+ <pre class="example-preformatted">git clone git://ffmpeg.org/ffmpeg-web &lt;target&gt;
134
+ </pre></div>
135
+
136
+ <p>Make sure that you do not have Windows line endings in your checkouts,
137
+ otherwise you may experience spurious compilation failures. One way to
138
+ achieve this is to run
139
+ </p>
140
+ <div class="example">
141
+ <pre class="example-preformatted">git config --global core.autocrlf false
142
+ </pre></div>
143
+
144
+
145
+ <a class="anchor" id="Updating-the-source-tree-to-the-latest-revision"></a><a name="Updating-the-source-tree-to-the-latest-revision-1"></a>
146
+ <h3 class="section">2.3 Updating the source tree to the latest revision<span class="pull-right"><a class="anchor hidden-xs" href="#Updating-the-source-tree-to-the-latest-revision-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Updating-the-source-tree-to-the-latest-revision-1" aria-hidden="true">TOC</a></span></h3>
147
+
148
+ <div class="example">
149
+ <pre class="example-preformatted">git pull (--rebase)
150
+ </pre></div>
151
+
152
+ <p>pulls in the latest changes from the tracked branch. The tracked branch
153
+ can be remote. By default the master branch tracks the branch master in
154
+ the remote origin.
155
+ </p>
156
+ <div class="warning">
157
+ <p><code class="command">--rebase</code> (see below) is recommended.
158
+ </p></div>
159
+ <a name="Rebasing-your-local-branches"></a>
160
+ <h3 class="section">2.4 Rebasing your local branches<span class="pull-right"><a class="anchor hidden-xs" href="#Rebasing-your-local-branches" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Rebasing-your-local-branches" aria-hidden="true">TOC</a></span></h3>
161
+
162
+ <div class="example">
163
+ <pre class="example-preformatted">git pull --rebase
164
+ </pre></div>
165
+
166
+ <p>fetches the changes from the main repository and replays your local commits
167
+ over it. This is required to keep all your local changes at the top of
168
+ FFmpeg&rsquo;s master tree. The master tree will reject pushes with merge commits.
169
+ </p>
170
+
171
+ <a name="Adding_002fremoving-files_002fdirectories"></a>
172
+ <h3 class="section">2.5 Adding/removing files/directories<span class="pull-right"><a class="anchor hidden-xs" href="#Adding_002fremoving-files_002fdirectories" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Adding_002fremoving-files_002fdirectories" aria-hidden="true">TOC</a></span></h3>
173
+
174
+ <div class="example">
175
+ <pre class="example-preformatted">git add [-A] &lt;filename/dirname&gt;
176
+ git rm [-r] &lt;filename/dirname&gt;
177
+ </pre></div>
178
+
179
+ <p>Git needs to get notified of all changes you make to your working
180
+ directory that makes files appear or disappear.
181
+ Line moves across files are automatically tracked.
182
+ </p>
183
+
184
+ <a name="Showing-modifications"></a>
185
+ <h3 class="section">2.6 Showing modifications<span class="pull-right"><a class="anchor hidden-xs" href="#Showing-modifications" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Showing-modifications" aria-hidden="true">TOC</a></span></h3>
186
+
187
+ <div class="example">
188
+ <pre class="example-preformatted">git diff &lt;filename(s)&gt;
189
+ </pre></div>
190
+
191
+ <p>will show all local modifications in your working directory as unified diff.
192
+ </p>
193
+
194
+ <a name="Inspecting-the-changelog"></a>
195
+ <h3 class="section">2.7 Inspecting the changelog<span class="pull-right"><a class="anchor hidden-xs" href="#Inspecting-the-changelog" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Inspecting-the-changelog" aria-hidden="true">TOC</a></span></h3>
196
+
197
+ <div class="example">
198
+ <pre class="example-preformatted">git log &lt;filename(s)&gt;
199
+ </pre></div>
200
+
201
+ <p>You may also use the graphical tools like <code class="command">gitview</code> or <code class="command">gitk</code>
202
+ or the web interface available at <a class="url" href="https://git.ffmpeg.org/ffmpeg.git">https://git.ffmpeg.org/ffmpeg.git</a>.
203
+ </p>
204
+ <a name="Checking-source-tree-status"></a>
205
+ <h3 class="section">2.8 Checking source tree status<span class="pull-right"><a class="anchor hidden-xs" href="#Checking-source-tree-status" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Checking-source-tree-status" aria-hidden="true">TOC</a></span></h3>
206
+
207
+ <div class="example">
208
+ <pre class="example-preformatted">git status
209
+ </pre></div>
210
+
211
+ <p>detects all the changes you made and lists what actions will be taken in case
212
+ of a commit (additions, modifications, deletions, etc.).
213
+ </p>
214
+
215
+ <a name="Committing"></a>
216
+ <h3 class="section">2.9 Committing<span class="pull-right"><a class="anchor hidden-xs" href="#Committing" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Committing" aria-hidden="true">TOC</a></span></h3>
217
+
218
+ <div class="example">
219
+ <pre class="example-preformatted">git diff --check
220
+ </pre></div>
221
+
222
+ <p>to double check your changes before committing them to avoid trouble later
223
+ on. All experienced developers do this on each and every commit, no matter
224
+ how small.
225
+ </p>
226
+ <p>Every one of them has been saved from looking like a fool by this many times.
227
+ It&rsquo;s very easy for stray debug output or cosmetic modifications to slip in,
228
+ please avoid problems through this extra level of scrutiny.
229
+ </p>
230
+ <p>For cosmetics-only commits you should get (almost) empty output from
231
+ </p>
232
+ <div class="example">
233
+ <pre class="example-preformatted">git diff -w -b &lt;filename(s)&gt;
234
+ </pre></div>
235
+
236
+ <p>Also check the output of
237
+ </p>
238
+ <div class="example">
239
+ <pre class="example-preformatted">git status
240
+ </pre></div>
241
+
242
+ <p>to make sure you don&rsquo;t have untracked files or deletions.
243
+ </p>
244
+ <div class="example">
245
+ <pre class="example-preformatted">git add [-i|-p|-A] &lt;filenames/dirnames&gt;
246
+ </pre></div>
247
+
248
+ <p>Make sure you have told Git your name, email address and GPG key
249
+ </p>
250
+ <div class="example">
251
+ <pre class="example-preformatted">git config --global user.name &quot;My Name&quot;
252
+ git config --global user.email my@email.invalid
253
+ git config --global user.signingkey ABCDEF0123245
254
+ </pre></div>
255
+
256
+ <p>Enable signing all commits or use -S
257
+ </p>
258
+ <div class="example">
259
+ <pre class="example-preformatted">git config --global commit.gpgsign true
260
+ </pre></div>
261
+
262
+ <p>Use <samp class="option">--global</samp> to set the global configuration for all your Git checkouts.
263
+ </p>
264
+ <p>Git will select the changes to the files for commit. Optionally you can use
265
+ the interactive or the patch mode to select hunk by hunk what should be
266
+ added to the commit.
267
+ </p>
268
+
269
+ <div class="example">
270
+ <pre class="example-preformatted">git commit
271
+ </pre></div>
272
+
273
+ <p>Git will commit the selected changes to your current local branch.
274
+ </p>
275
+ <p>You will be prompted for a log message in an editor, which is either
276
+ set in your personal configuration file through
277
+ </p>
278
+ <div class="example">
279
+ <pre class="example-preformatted">git config --global core.editor
280
+ </pre></div>
281
+
282
+ <p>or set by one of the following environment variables:
283
+ <var class="var">GIT_EDITOR</var>, <var class="var">VISUAL</var> or <var class="var">EDITOR</var>.
284
+ </p>
285
+ <a name="Writing-a-commit-message"></a>
286
+ <h3 class="section">2.10 Writing a commit message<span class="pull-right"><a class="anchor hidden-xs" href="#Writing-a-commit-message" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Writing-a-commit-message" aria-hidden="true">TOC</a></span></h3>
287
+
288
+ <p>Log messages should be concise but descriptive.
289
+ </p>
290
+ <p>The first line must contain the context, a colon and a very short
291
+ summary of what the commit does. Details can be added, if necessary,
292
+ separated by an empty line. These details should not exceed 60-72 characters
293
+ per line, except when containing code.
294
+ </p>
295
+ <p>Example of a good commit message:
296
+ </p>
297
+ <div class="example">
298
+ <pre class="example-preformatted">avcodec/cbs: add a helper to read extradata within packet side data
299
+
300
+ Using ff_cbs_read() on the raw buffer will not parse it as extradata,
301
+ resulting in parsing errors for example when handling ISOBMFF avcC.
302
+ This helper works around that.
303
+ </pre></div>
304
+
305
+ <div class="example">
306
+ <pre class="example-preformatted">ptr might be NULL
307
+ </pre></div>
308
+
309
+ <p>If the summary on the first line is not enough, in the body of the message,
310
+ explain why you made a change, what you did will be obvious from the changes
311
+ themselves most of the time. Saying just &quot;bug fix&quot; or &quot;10l&quot; is bad. Remember
312
+ that people of varying skill levels look at and educate themselves while
313
+ reading through your code. Don&rsquo;t include filenames in log messages except in
314
+ the context, Git provides that information.
315
+ </p>
316
+ <p>If the commit fixes a registered issue, state it in a separate line of the
317
+ body: <code class="code">Fix Trac ticket #42.</code>
318
+ </p>
319
+ <p>The first line will be used to name
320
+ the patch by <code class="command">git format-patch</code>.
321
+ </p>
322
+ <p>Common mistakes for the first line, as seen in <code class="command">git log --oneline</code>
323
+ include: missing context at the beginning; description of what the code did
324
+ before the patch; line too long or wrapped to the second line.
325
+ </p>
326
+ <a name="Preparing-a-patchset"></a>
327
+ <h3 class="section">2.11 Preparing a patchset<span class="pull-right"><a class="anchor hidden-xs" href="#Preparing-a-patchset" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Preparing-a-patchset" aria-hidden="true">TOC</a></span></h3>
328
+
329
+ <div class="example">
330
+ <pre class="example-preformatted">git format-patch &lt;commit&gt; [-o directory]
331
+ </pre></div>
332
+
333
+ <p>will generate a set of patches for each commit between <var class="var">&lt;commit&gt;</var> and
334
+ current <var class="var">HEAD</var>. E.g.
335
+ </p>
336
+ <div class="example">
337
+ <pre class="example-preformatted">git format-patch origin/master
338
+ </pre></div>
339
+
340
+ <p>will generate patches for all commits on current branch which are not
341
+ present in upstream.
342
+ A useful shortcut is also
343
+ </p>
344
+ <div class="example">
345
+ <pre class="example-preformatted">git format-patch -n
346
+ </pre></div>
347
+
348
+ <p>which will generate patches from last <var class="var">n</var> commits.
349
+ By default the patches are created in the current directory.
350
+ </p>
351
+ <a name="Sending-patches-for-review"></a>
352
+ <h3 class="section">2.12 Sending patches for review<span class="pull-right"><a class="anchor hidden-xs" href="#Sending-patches-for-review" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Sending-patches-for-review" aria-hidden="true">TOC</a></span></h3>
353
+
354
+ <div class="example">
355
+ <pre class="example-preformatted">git send-email &lt;commit list|directory&gt;
356
+ </pre></div>
357
+
358
+ <p>will send the patches created by <code class="command">git format-patch</code> or directly
359
+ generates them. All the email fields can be configured in the global/local
360
+ configuration or overridden by command line.
361
+ Note that this tool must often be installed separately (e.g. <var class="var">git-email</var>
362
+ package on Debian-based distros).
363
+ </p>
364
+
365
+ <a name="Renaming_002fmoving_002fcopying-files-or-contents-of-files"></a>
366
+ <h3 class="section">2.13 Renaming/moving/copying files or contents of files<span class="pull-right"><a class="anchor hidden-xs" href="#Renaming_002fmoving_002fcopying-files-or-contents-of-files" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Renaming_002fmoving_002fcopying-files-or-contents-of-files" aria-hidden="true">TOC</a></span></h3>
367
+
368
+ <p>Git automatically tracks such changes, making those normal commits.
369
+ </p>
370
+ <div class="example">
371
+ <pre class="example-preformatted">mv/cp path/file otherpath/otherfile
372
+ git add [-A] .
373
+ git commit
374
+ </pre></div>
375
+
376
+
377
+ <a name="Git-configuration"></a>
378
+ <h2 class="chapter">3 Git configuration<span class="pull-right"><a class="anchor hidden-xs" href="#Git-configuration" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Git-configuration" aria-hidden="true">TOC</a></span></h2>
379
+
380
+ <p>In order to simplify a few workflows, it is advisable to configure both
381
+ your personal Git installation and your local FFmpeg repository.
382
+ </p>
383
+ <a name="Personal-Git-installation"></a>
384
+ <h3 class="section">3.1 Personal Git installation<span class="pull-right"><a class="anchor hidden-xs" href="#Personal-Git-installation" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Personal-Git-installation" aria-hidden="true">TOC</a></span></h3>
385
+
386
+ <p>Add the following to your <samp class="file">~/.gitconfig</samp> to help <code class="command">git send-email</code>
387
+ and <code class="command">git format-patch</code> detect renames:
388
+ </p>
389
+ <div class="example">
390
+ <pre class="example-preformatted">[diff]
391
+ renames = copy
392
+ </pre></div>
393
+
394
+ <a name="Repository-configuration"></a>
395
+ <h3 class="section">3.2 Repository configuration<span class="pull-right"><a class="anchor hidden-xs" href="#Repository-configuration" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Repository-configuration" aria-hidden="true">TOC</a></span></h3>
396
+
397
+ <p>In order to have <code class="command">git send-email</code> automatically send patches
398
+ to the ffmpeg-devel mailing list, add the following stanza
399
+ to <samp class="file">/path/to/ffmpeg/repository/.git/config</samp>:
400
+ </p>
401
+ <div class="example">
402
+ <pre class="example-preformatted">[sendemail]
403
+ to = ffmpeg-devel@ffmpeg.org
404
+ </pre></div>
405
+
406
+ <a name="FFmpeg-specific"></a>
407
+ <h2 class="chapter">4 FFmpeg specific<span class="pull-right"><a class="anchor hidden-xs" href="#FFmpeg-specific" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-FFmpeg-specific" aria-hidden="true">TOC</a></span></h2>
408
+
409
+ <a name="Reverting-broken-commits"></a>
410
+ <h3 class="section">4.1 Reverting broken commits<span class="pull-right"><a class="anchor hidden-xs" href="#Reverting-broken-commits" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Reverting-broken-commits" aria-hidden="true">TOC</a></span></h3>
411
+
412
+ <div class="example">
413
+ <pre class="example-preformatted">git reset &lt;commit&gt;
414
+ </pre></div>
415
+
416
+ <p><code class="command">git reset</code> will uncommit the changes till <var class="var">&lt;commit&gt;</var> rewriting
417
+ the current branch history.
418
+ </p>
419
+ <div class="example">
420
+ <pre class="example-preformatted">git commit --amend
421
+ </pre></div>
422
+
423
+ <p>allows one to amend the last commit details quickly.
424
+ </p>
425
+ <div class="example">
426
+ <pre class="example-preformatted">git rebase -i origin/master
427
+ </pre></div>
428
+
429
+ <p>will replay local commits over the main repository allowing to edit, merge
430
+ or remove some of them in the process.
431
+ </p>
432
+ <div class="info">
433
+ <p><code class="command">git reset</code>, <code class="command">git commit --amend</code> and <code class="command">git rebase</code>
434
+ rewrite history, so you should use them ONLY on your local or topic branches.
435
+ The main repository will reject those changes.
436
+ </p></div>
437
+ <div class="example">
438
+ <pre class="example-preformatted">git revert &lt;commit&gt;
439
+ </pre></div>
440
+
441
+ <p><code class="command">git revert</code> will generate a revert commit. This will not make the
442
+ faulty commit disappear from the history.
443
+ </p>
444
+ <a name="Pushing-changes-to-remote-trees"></a>
445
+ <h3 class="section">4.2 Pushing changes to remote trees<span class="pull-right"><a class="anchor hidden-xs" href="#Pushing-changes-to-remote-trees" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Pushing-changes-to-remote-trees" aria-hidden="true">TOC</a></span></h3>
446
+
447
+ <div class="example">
448
+ <pre class="example-preformatted">git push origin master --dry-run
449
+ </pre></div>
450
+
451
+ <p>Will simulate a push of the local master branch to the default remote
452
+ (<var class="var">origin</var>). And list which branches and ranges or commits would have been
453
+ pushed.
454
+ Git will prevent you from pushing changes if the local and remote trees are
455
+ out of sync. Refer to <a class="ref" href="#Updating-the-source-tree-to-the-latest-revision">Updating the source tree to the latest revision</a>.
456
+ </p>
457
+ <div class="example">
458
+ <pre class="example-preformatted">git remote add &lt;name&gt; &lt;url&gt;
459
+ </pre></div>
460
+
461
+ <p>Will add additional remote with a name reference, it is useful if you want
462
+ to push your local branch for review on a remote host.
463
+ </p>
464
+ <div class="example">
465
+ <pre class="example-preformatted">git push &lt;remote&gt; &lt;refspec&gt;
466
+ </pre></div>
467
+
468
+ <p>Will push the changes to the <var class="var">&lt;remote&gt;</var> repository.
469
+ Omitting <var class="var">&lt;refspec&gt;</var> makes <code class="command">git push</code> update all the remote
470
+ branches matching the local ones.
471
+ </p>
472
+ <a name="Finding-a-specific-svn-revision"></a>
473
+ <h3 class="section">4.3 Finding a specific svn revision<span class="pull-right"><a class="anchor hidden-xs" href="#Finding-a-specific-svn-revision" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Finding-a-specific-svn-revision" aria-hidden="true">TOC</a></span></h3>
474
+
475
+ <p>Since version 1.7.1 Git supports &lsquo;<samp class="samp">:/foo</samp>&rsquo; syntax for specifying commits
476
+ based on a regular expression. see man gitrevisions
477
+ </p>
478
+ <div class="example">
479
+ <pre class="example-preformatted">git show :/'as revision 23456'
480
+ </pre></div>
481
+
482
+ <p>will show the svn changeset &lsquo;<samp class="samp">r23456</samp>&rsquo;. With older Git versions searching in
483
+ the <code class="command">git log</code> output is the easiest option (especially if a pager with
484
+ search capabilities is used).
485
+ </p>
486
+ <p>This commit can be checked out with
487
+ </p>
488
+ <div class="example">
489
+ <pre class="example-preformatted">git checkout -b svn_23456 :/'as revision 23456'
490
+ </pre></div>
491
+
492
+ <p>or for Git &lt; 1.7.1 with
493
+ </p>
494
+ <div class="example">
495
+ <pre class="example-preformatted">git checkout -b svn_23456 $SHA1
496
+ </pre></div>
497
+
498
+ <p>where <var class="var">$SHA1</var> is the commit hash from the <code class="command">git log</code> output.
499
+ </p>
500
+
501
+ <a name="gpg-key-generation"></a>
502
+ <h2 class="chapter">5 gpg key generation<span class="pull-right"><a class="anchor hidden-xs" href="#gpg-key-generation" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-gpg-key-generation" aria-hidden="true">TOC</a></span></h2>
503
+
504
+ <p>If you have no gpg key yet, we recommend that you create a ed25519 based key as it
505
+ is small, fast and secure. Especially it results in small signatures in git.
506
+ </p>
507
+ <div class="example">
508
+ <pre class="example-preformatted">gpg --default-new-key-algo &quot;ed25519/cert,sign+cv25519/encr&quot; --quick-generate-key &quot;human@server.com&quot;
509
+ </pre></div>
510
+
511
+ <p>When generating a key, make sure the email specified matches the email used in git as some sites like
512
+ github consider mismatches a reason to declare such commits unverified. After generating a key you
513
+ can add it to the MAINTAINER file and upload it to a keyserver.
514
+ </p>
515
+ <a name="Pre_002dpush-checklist"></a>
516
+ <h2 class="chapter">6 Pre-push checklist<span class="pull-right"><a class="anchor hidden-xs" href="#Pre_002dpush-checklist" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Pre_002dpush-checklist" aria-hidden="true">TOC</a></span></h2>
517
+
518
+ <p>Once you have a set of commits that you feel are ready for pushing,
519
+ work through the following checklist to doublecheck everything is in
520
+ proper order. This list tries to be exhaustive. In case you are just
521
+ pushing a typo in a comment, some of the steps may be unnecessary.
522
+ Apply your common sense, but if in doubt, err on the side of caution.
523
+ </p>
524
+ <p>First, make sure that the commits and branches you are going to push
525
+ match what you want pushed and that nothing is missing, extraneous or
526
+ wrong. You can see what will be pushed by running the git push command
527
+ with <samp class="option">--dry-run</samp> first. And then inspecting the commits listed with
528
+ <code class="command">git log -p 1234567..987654</code>. The <code class="command">git status</code> command
529
+ may help in finding local changes that have been forgotten to be added.
530
+ </p>
531
+ <p>Next let the code pass through a full run of our test suite.
532
+ </p>
533
+ <ul class="itemize mark-bullet">
534
+ <li><code class="command">make distclean</code>
535
+ </li><li><code class="command">/path/to/ffmpeg/configure</code>
536
+ </li><li><code class="command">make fate</code>
537
+ </li><li>if fate fails due to missing samples run <code class="command">make fate-rsync</code> and retry
538
+ </li></ul>
539
+
540
+ <p>Make sure all your changes have been checked before pushing them, the
541
+ test suite only checks against regressions and that only to some extend. It does
542
+ obviously not check newly added features/code to be working unless you have
543
+ added a test for that (which is recommended).
544
+ </p>
545
+ <p>Also note that every single commit should pass the test suite, not just
546
+ the result of a series of patches.
547
+ </p>
548
+ <p>Once everything passed, push the changes to your public ffmpeg clone and post a
549
+ merge request to ffmpeg-devel. You can also push them directly but this is not
550
+ recommended.
551
+ </p>
552
+ <a name="Server-Issues"></a>
553
+ <h2 class="chapter">7 Server Issues<span class="pull-right"><a class="anchor hidden-xs" href="#Server-Issues" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Server-Issues" aria-hidden="true">TOC</a></span></h2>
554
+
555
+ <p>Contact the project admins at <a class="email" href="mailto:root@ffmpeg.org">root@ffmpeg.org</a> if you have technical
556
+ problems with the Git server.
557
+ </p> <p style="font-size: small;">
558
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
559
+ </p>
560
+ </div>
561
+ </body>
562
+ </html>
ffmpeg-master-latest-win64-gpl/doc/libavcodec.html ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Libavcodec Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Libavcodec Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-See-Also" href="#See-Also">2 See Also</a></li>
30
+ <li><a id="toc-Authors" href="#Authors">3 Authors</a></li>
31
+ </ul>
32
+ </div>
33
+ </div>
34
+
35
+ <a name="Description"></a>
36
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
37
+
38
+ <p>The libavcodec library provides a generic encoding/decoding framework
39
+ and contains multiple decoders and encoders for audio, video and
40
+ subtitle streams, and several bitstream filters.
41
+ </p>
42
+ <p>The shared architecture provides various services ranging from bit
43
+ stream I/O to DSP optimizations, and makes it suitable for
44
+ implementing robust and fast codecs as well as for experimentation.
45
+ </p>
46
+
47
+ <a name="See-Also"></a>
48
+ <h2 class="chapter">2 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
49
+
50
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
51
+ <a class="url" href="ffmpeg-codecs.html">ffmpeg-codecs</a>, <a class="url" href="ffmpeg-bitstream-filters.html">bitstream-filters</a>,
52
+ <a class="url" href="libavutil.html">libavutil</a>
53
+ </p>
54
+
55
+ <a name="Authors"></a>
56
+ <h2 class="chapter">3 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
57
+
58
+ <p>The FFmpeg developers.
59
+ </p>
60
+ <p>For details about the authorship, see the Git history of the project
61
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
62
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
63
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
64
+ </p>
65
+ <p>Maintainers for the specific components are listed in the file
66
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
67
+ </p>
68
+
69
+ <p style="font-size: small;">
70
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
71
+ </p>
72
+ </div>
73
+ </body>
74
+ </html>
ffmpeg-master-latest-win64-gpl/doc/libavdevice.html ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Libavdevice Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Libavdevice Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-See-Also" href="#See-Also">2 See Also</a></li>
30
+ <li><a id="toc-Authors" href="#Authors">3 Authors</a></li>
31
+ </ul>
32
+ </div>
33
+ </div>
34
+
35
+ <a name="Description"></a>
36
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
37
+
38
+ <p>The libavdevice library provides a generic framework for grabbing from
39
+ and rendering to many common multimedia input/output devices, and
40
+ supports several input and output devices, including Video4Linux2,
41
+ VfW, DShow, and ALSA.
42
+ </p>
43
+
44
+ <a name="See-Also"></a>
45
+ <h2 class="chapter">2 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
46
+
47
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
48
+ <a class="url" href="ffmpeg-devices.html">ffmpeg-devices</a>,
49
+ <a class="url" href="libavutil.html">libavutil</a>, <a class="url" href="libavcodec.html">libavcodec</a>, <a class="url" href="libavformat.html">libavformat</a>
50
+ </p>
51
+
52
+ <a name="Authors"></a>
53
+ <h2 class="chapter">3 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
54
+
55
+ <p>The FFmpeg developers.
56
+ </p>
57
+ <p>For details about the authorship, see the Git history of the project
58
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
59
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
60
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
61
+ </p>
62
+ <p>Maintainers for the specific components are listed in the file
63
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
64
+ </p>
65
+
66
+ <p style="font-size: small;">
67
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
68
+ </p>
69
+ </div>
70
+ </body>
71
+ </html>
ffmpeg-master-latest-win64-gpl/doc/libavfilter.html ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Libavfilter Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Libavfilter Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-See-Also" href="#See-Also">2 See Also</a></li>
30
+ <li><a id="toc-Authors" href="#Authors">3 Authors</a></li>
31
+ </ul>
32
+ </div>
33
+ </div>
34
+
35
+ <a name="Description"></a>
36
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
37
+
38
+ <p>The libavfilter library provides a generic audio/video filtering
39
+ framework containing several filters, sources and sinks.
40
+ </p>
41
+
42
+ <a name="See-Also"></a>
43
+ <h2 class="chapter">2 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
44
+
45
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
46
+ <a class="url" href="ffmpeg-filters.html">ffmpeg-filters</a>,
47
+ <a class="url" href="libavutil.html">libavutil</a>, <a class="url" href="libswscale.html">libswscale</a>, <a class="url" href="libswresample.html">libswresample</a>,
48
+ <a class="url" href="libavcodec.html">libavcodec</a>, <a class="url" href="libavformat.html">libavformat</a>, <a class="url" href="libavdevice.html">libavdevice</a>
49
+ </p>
50
+
51
+ <a name="Authors"></a>
52
+ <h2 class="chapter">3 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
53
+
54
+ <p>The FFmpeg developers.
55
+ </p>
56
+ <p>For details about the authorship, see the Git history of the project
57
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
58
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
59
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
60
+ </p>
61
+ <p>Maintainers for the specific components are listed in the file
62
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
63
+ </p>
64
+
65
+ <p style="font-size: small;">
66
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
67
+ </p>
68
+ </div>
69
+ </body>
70
+ </html>
ffmpeg-master-latest-win64-gpl/doc/libavformat.html ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Libavformat Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Libavformat Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-See-Also" href="#See-Also">2 See Also</a></li>
30
+ <li><a id="toc-Authors" href="#Authors">3 Authors</a></li>
31
+ </ul>
32
+ </div>
33
+ </div>
34
+
35
+ <a name="Description"></a>
36
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
37
+
38
+ <p>The libavformat library provides a generic framework for multiplexing
39
+ and demultiplexing (muxing and demuxing) audio, video and subtitle
40
+ streams. It encompasses multiple muxers and demuxers for multimedia
41
+ container formats.
42
+ </p>
43
+ <p>It also supports several input and output protocols to access a media
44
+ resource.
45
+ </p>
46
+
47
+ <a name="See-Also"></a>
48
+ <h2 class="chapter">2 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
49
+
50
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
51
+ <a class="url" href="ffmpeg-formats.html">ffmpeg-formats</a>, <a class="url" href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
52
+ <a class="url" href="libavutil.html">libavutil</a>, <a class="url" href="libavcodec.html">libavcodec</a>
53
+ </p>
54
+
55
+ <a name="Authors"></a>
56
+ <h2 class="chapter">3 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
57
+
58
+ <p>The FFmpeg developers.
59
+ </p>
60
+ <p>For details about the authorship, see the Git history of the project
61
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
62
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
63
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
64
+ </p>
65
+ <p>Maintainers for the specific components are listed in the file
66
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
67
+ </p>
68
+
69
+ <p style="font-size: small;">
70
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
71
+ </p>
72
+ </div>
73
+ </body>
74
+ </html>
ffmpeg-master-latest-win64-gpl/doc/libavutil.html ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Libavutil Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Libavutil Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-See-Also" href="#See-Also">2 See Also</a></li>
30
+ <li><a id="toc-Authors" href="#Authors">3 Authors</a></li>
31
+ </ul>
32
+ </div>
33
+ </div>
34
+
35
+ <a name="Description"></a>
36
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
37
+
38
+ <p>The libavutil library is a utility library to aid portable
39
+ multimedia programming. It contains safe portable string functions,
40
+ random number generators, data structures, additional mathematics
41
+ functions, cryptography and multimedia related functionality (like
42
+ enumerations for pixel and sample formats). It is not a library for
43
+ code needed by both libavcodec and libavformat.
44
+ </p>
45
+ <p>The goals for this library is to be:
46
+ </p>
47
+ <dl class="table">
48
+ <dt><strong class="strong">Modular</strong></dt>
49
+ <dd><p>It should have few interdependencies and the possibility of disabling individual
50
+ parts during <code class="command">./configure</code>.
51
+ </p>
52
+ </dd>
53
+ <dt><strong class="strong">Small</strong></dt>
54
+ <dd><p>Both sources and objects should be small.
55
+ </p>
56
+ </dd>
57
+ <dt><strong class="strong">Efficient</strong></dt>
58
+ <dd><p>It should have low CPU and memory usage.
59
+ </p>
60
+ </dd>
61
+ <dt><strong class="strong">Useful</strong></dt>
62
+ <dd><p>It should avoid useless features that almost no one needs.
63
+ </p></dd>
64
+ </dl>
65
+
66
+
67
+ <a name="See-Also"></a>
68
+ <h2 class="chapter">2 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
69
+
70
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
71
+ <a class="url" href="ffmpeg-utils.html">ffmpeg-utils</a>
72
+ </p>
73
+
74
+ <a name="Authors"></a>
75
+ <h2 class="chapter">3 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
76
+
77
+ <p>The FFmpeg developers.
78
+ </p>
79
+ <p>For details about the authorship, see the Git history of the project
80
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
81
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
82
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
83
+ </p>
84
+ <p>Maintainers for the specific components are listed in the file
85
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
86
+ </p>
87
+
88
+ <p style="font-size: small;">
89
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
90
+ </p>
91
+ </div>
92
+ </body>
93
+ </html>
ffmpeg-master-latest-win64-gpl/doc/libswresample.html ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Libswresample Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Libswresample Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-See-Also" href="#See-Also">2 See Also</a></li>
30
+ <li><a id="toc-Authors" href="#Authors">3 Authors</a></li>
31
+ </ul>
32
+ </div>
33
+ </div>
34
+
35
+ <a name="Description"></a>
36
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
37
+
38
+ <p>The libswresample library performs highly optimized audio resampling,
39
+ rematrixing and sample format conversion operations.
40
+ </p>
41
+ <p>Specifically, this library performs the following conversions:
42
+ </p>
43
+ <ul class="itemize mark-bullet">
44
+ <li><em class="emph">Resampling</em>: is the process of changing the audio rate, for
45
+ example from a high sample rate of 44100Hz to 8000Hz. Audio
46
+ conversion from high to low sample rate is a lossy process. Several
47
+ resampling options and algorithms are available.
48
+
49
+ </li><li><em class="emph">Format conversion</em>: is the process of converting the type of
50
+ samples, for example from 16-bit signed samples to unsigned 8-bit or
51
+ float samples. It also handles packing conversion, when passing from
52
+ packed layout (all samples belonging to distinct channels interleaved
53
+ in the same buffer), to planar layout (all samples belonging to the
54
+ same channel stored in a dedicated buffer or &quot;plane&quot;).
55
+
56
+ </li><li><em class="emph">Rematrixing</em>: is the process of changing the channel layout, for
57
+ example from stereo to mono. When the input channels cannot be mapped
58
+ to the output streams, the process is lossy, since it involves
59
+ different gain factors and mixing.
60
+ </li></ul>
61
+
62
+ <p>Various other audio conversions (e.g. stretching and padding) are
63
+ enabled through dedicated options.
64
+ </p>
65
+
66
+ <a name="See-Also"></a>
67
+ <h2 class="chapter">2 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
68
+
69
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
70
+ <a class="url" href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
71
+ <a class="url" href="libavutil.html">libavutil</a>
72
+ </p>
73
+
74
+ <a name="Authors"></a>
75
+ <h2 class="chapter">3 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
76
+
77
+ <p>The FFmpeg developers.
78
+ </p>
79
+ <p>For details about the authorship, see the Git history of the project
80
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
81
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
82
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
83
+ </p>
84
+ <p>Maintainers for the specific components are listed in the file
85
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
86
+ </p>
87
+
88
+ <p style="font-size: small;">
89
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
90
+ </p>
91
+ </div>
92
+ </body>
93
+ </html>
ffmpeg-master-latest-win64-gpl/doc/libswscale.html ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Libswscale Documentation
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Libswscale Documentation
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
29
+ <li><a id="toc-See-Also" href="#See-Also">2 See Also</a></li>
30
+ <li><a id="toc-Authors" href="#Authors">3 Authors</a></li>
31
+ </ul>
32
+ </div>
33
+ </div>
34
+
35
+ <a name="Description"></a>
36
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
37
+
38
+ <p>The libswscale library performs highly optimized image scaling and
39
+ colorspace and pixel format conversion operations.
40
+ </p>
41
+ <p>Specifically, this library performs the following conversions:
42
+ </p>
43
+ <ul class="itemize mark-bullet">
44
+ <li><em class="emph">Rescaling</em>: is the process of changing the video size. Several
45
+ rescaling options and algorithms are available. This is usually a
46
+ lossy process.
47
+
48
+ </li><li><em class="emph">Pixel format conversion</em>: is the process of converting the image
49
+ format and colorspace of the image, for example from planar YUV420P to
50
+ RGB24 packed. It also handles packing conversion, that is converts
51
+ from packed layout (all pixels belonging to distinct planes
52
+ interleaved in the same buffer), to planar layout (all samples
53
+ belonging to the same plane stored in a dedicated buffer or &quot;plane&quot;).
54
+
55
+ <p>This is usually a lossy process in case the source and destination
56
+ colorspaces differ.
57
+ </p></li></ul>
58
+
59
+
60
+ <a name="See-Also"></a>
61
+ <h2 class="chapter">2 See Also<span class="pull-right"><a class="anchor hidden-xs" href="#See-Also" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-See-Also" aria-hidden="true">TOC</a></span></h2>
62
+
63
+ <p><a class="url" href="ffmpeg.html">ffmpeg</a>, <a class="url" href="ffplay.html">ffplay</a>, <a class="url" href="ffprobe.html">ffprobe</a>,
64
+ <a class="url" href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
65
+ <a class="url" href="libavutil.html">libavutil</a>
66
+ </p>
67
+
68
+ <a name="Authors"></a>
69
+ <h2 class="chapter">3 Authors<span class="pull-right"><a class="anchor hidden-xs" href="#Authors" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Authors" aria-hidden="true">TOC</a></span></h2>
70
+
71
+ <p>The FFmpeg developers.
72
+ </p>
73
+ <p>For details about the authorship, see the Git history of the project
74
+ (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command
75
+ <code class="command">git log</code> in the FFmpeg source directory, or browsing the
76
+ online repository at <a class="url" href="https://git.ffmpeg.org/ffmpeg">https://git.ffmpeg.org/ffmpeg</a>.
77
+ </p>
78
+ <p>Maintainers for the specific components are listed in the file
79
+ <samp class="file">MAINTAINERS</samp> in the source code tree.
80
+ </p>
81
+
82
+ <p style="font-size: small;">
83
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
84
+ </p>
85
+ </div>
86
+ </body>
87
+ </html>
ffmpeg-master-latest-win64-gpl/doc/mailing-list-faq.html ADDED
@@ -0,0 +1,443 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ FFmpeg Mailing List FAQ
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ FFmpeg Mailing List FAQ
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-General-Questions" href="#General-Questions">1 General Questions</a>
29
+ <ul class="toc-numbered-mark">
30
+ <li><a id="toc-What-is-a-mailing-list_003f" href="#What-is-a-mailing-list_003f">1.1 What is a mailing list?</a></li>
31
+ <li><a id="toc-What-type-of-questions-can-I-ask_003f" href="#What-type-of-questions-can-I-ask_003f">1.2 What type of questions can I ask?</a></li>
32
+ <li><a id="toc-How-do-I-ask-a-question-or-send-a-message-to-a-mailing-list_003f-1" href="#How-do-I-ask-a-question-or-send-a-message-to-a-mailing-list_003f-1">1.3 How do I ask a question or send a message to a mailing list?</a></li>
33
+ </ul></li>
34
+ <li><a id="toc-Subscribing-_002f-Unsubscribing" href="#Subscribing-_002f-Unsubscribing">2 Subscribing / Unsubscribing</a>
35
+ <ul class="toc-numbered-mark">
36
+ <li><a id="toc-How-do-I-subscribe_003f-1" href="#How-do-I-subscribe_003f-1">2.1 How do I subscribe?</a></li>
37
+ <li><a id="toc-How-do-I-unsubscribe_003f" href="#How-do-I-unsubscribe_003f">2.2 How do I unsubscribe?</a></li>
38
+ </ul></li>
39
+ <li><a id="toc-Moderation-Queue" href="#Moderation-Queue">3 Moderation Queue</a>
40
+ <ul class="toc-numbered-mark">
41
+ <li><a id="toc-Why-is-my-message-awaiting-moderator-approval_003f-1" href="#Why-is-my-message-awaiting-moderator-approval_003f-1">3.1 Why is my message awaiting moderator approval?</a></li>
42
+ <li><a id="toc-How-long-does-it-take-for-my-message-in-the-moderation-queue-to-be-approved_003f" href="#How-long-does-it-take-for-my-message-in-the-moderation-queue-to-be-approved_003f">3.2 How long does it take for my message in the moderation queue to be approved?</a></li>
43
+ <li><a id="toc-How-do-I-delete-my-message-in-the-moderation-queue_003f-1" href="#How-do-I-delete-my-message-in-the-moderation-queue_003f-1">3.3 How do I delete my message in the moderation queue?</a></li>
44
+ </ul></li>
45
+ <li><a id="toc-Archives" href="#Archives">4 Archives</a>
46
+ <ul class="toc-numbered-mark">
47
+ <li><a id="toc-Where-are-the-archives_003f-1" href="#Where-are-the-archives_003f-1">4.1 Where are the archives?</a></li>
48
+ <li><a id="toc-How-do-I-reply-to-a-message-in-the-archives_003f" href="#How-do-I-reply-to-a-message-in-the-archives_003f">4.2 How do I reply to a message in the archives?</a></li>
49
+ <li><a id="toc-How-do-I-search-the-archives_003f" href="#How-do-I-search-the-archives_003f">4.3 How do I search the archives?</a></li>
50
+ </ul></li>
51
+ <li><a id="toc-Other" href="#Other">5 Other</a>
52
+ <ul class="toc-numbered-mark">
53
+ <li><a id="toc-Is-there-an-alternative-to-the-mailing-list_003f" href="#Is-there-an-alternative-to-the-mailing-list_003f">5.1 Is there an alternative to the mailing list?</a></li>
54
+ <li><a id="toc-What-is-top_002dposting_003f-1" href="#What-is-top_002dposting_003f-1">5.2 What is top-posting?</a></li>
55
+ <li><a id="toc-What-is-the-message-size-limit_003f-1" href="#What-is-the-message-size-limit_003f-1">5.3 What is the message size limit?</a></li>
56
+ <li><a id="toc-Where-can-I-upload-sample-files_003f" href="#Where-can-I-upload-sample-files_003f">5.4 Where can I upload sample files?</a></li>
57
+ <li><a id="toc-Will-I-receive-spam-if-I-send-and_002for-subscribe-to-a-mailing-list_003f" href="#Will-I-receive-spam-if-I-send-and_002for-subscribe-to-a-mailing-list_003f">5.5 Will I receive spam if I send and/or subscribe to a mailing list?</a></li>
58
+ <li><a id="toc-How-do-I-filter-mailing-list-messages_003f" href="#How-do-I-filter-mailing-list-messages_003f">5.6 How do I filter mailing list messages?</a></li>
59
+ <li><a id="toc-How-do-I-disable-mail-delivery-without-unsubscribing_003f-1" href="#How-do-I-disable-mail-delivery-without-unsubscribing_003f-1">5.7 How do I disable mail delivery without unsubscribing?</a></li>
60
+ <li><a id="toc-Why-is-the-mailing-list-munging-my-address_003f-1" href="#Why-is-the-mailing-list-munging-my-address_003f-1">5.8 Why is the mailing list munging my address?</a></li>
61
+ </ul></li>
62
+ <li><a id="toc-Rules-and-Etiquette" href="#Rules-and-Etiquette">6 Rules and Etiquette</a>
63
+ <ul class="toc-numbered-mark">
64
+ <li><a id="toc-What-are-the-rules-and-the-proper-etiquette_003f" href="#What-are-the-rules-and-the-proper-etiquette_003f">6.1 What are the rules and the proper etiquette?</a></li>
65
+ </ul></li>
66
+ <li><a id="toc-Help" href="#Help">7 Help</a>
67
+ <ul class="toc-numbered-mark">
68
+ <li><a id="toc-Why-am-I-not-receiving-any-messages_003f" href="#Why-am-I-not-receiving-any-messages_003f">7.1 Why am I not receiving any messages?</a></li>
69
+ <li><a id="toc-Why-are-my-sent-messages-not-showing-up_003f" href="#Why-are-my-sent-messages-not-showing-up_003f">7.2 Why are my sent messages not showing up?</a></li>
70
+ <li><a id="toc-Why-do-I-keep-getting-unsubscribed-from-ffmpeg_002ddevel_003f-1" href="#Why-do-I-keep-getting-unsubscribed-from-ffmpeg_002ddevel_003f-1">7.3 Why do I keep getting unsubscribed from ffmpeg-devel?</a></li>
71
+ <li><a id="toc-Who-do-I-contact-if-I-have-a-problem-with-the-mailing-list_003f-1" href="#Who-do-I-contact-if-I-have-a-problem-with-the-mailing-list_003f-1">7.4 Who do I contact if I have a problem with the mailing list?</a></li>
72
+ </ul></li>
73
+ </ul>
74
+ </div>
75
+ </div>
76
+
77
+ <a name="General-Questions"></a>
78
+ <h2 class="chapter">1 General Questions<span class="pull-right"><a class="anchor hidden-xs" href="#General-Questions" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-General-Questions" aria-hidden="true">TOC</a></span></h2>
79
+
80
+ <a name="What-is-a-mailing-list_003f"></a>
81
+ <h3 class="section">1.1 What is a mailing list?<span class="pull-right"><a class="anchor hidden-xs" href="#What-is-a-mailing-list_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-What-is-a-mailing-list_003f" aria-hidden="true">TOC</a></span></h3>
82
+
83
+ <p>A mailing list is not much different than emailing someone, but the
84
+ main difference is that your message is received by everyone who
85
+ subscribes to the list. It is somewhat like a forum but in email form.
86
+ </p>
87
+ <p>See the <a class="url" href="https://lists.ffmpeg.org/pipermail/ffmpeg-user/">ffmpeg-user archives</a>
88
+ for examples.
89
+ </p>
90
+ <a name="What-type-of-questions-can-I-ask_003f"></a>
91
+ <h3 class="section">1.2 What type of questions can I ask?<span class="pull-right"><a class="anchor hidden-xs" href="#What-type-of-questions-can-I-ask_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-What-type-of-questions-can-I-ask_003f" aria-hidden="true">TOC</a></span></h3>
92
+
93
+ <ul class="itemize mark-bullet">
94
+ <li><a class="url" href="https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-user/">ffmpeg-user</a>:
95
+ For questions involving unscripted usage or compilation of the FFmpeg
96
+ command-line tools (<code class="command">ffmpeg</code>, <code class="command">ffprobe</code>, <code class="command">ffplay</code>).
97
+
98
+ </li><li><a class="url" href="https://lists.ffmpeg.org/mailman/listinfo/libav-user/">libav-user</a>:
99
+ For questions involving the FFmpeg libav* libraries (libavcodec,
100
+ libavformat, libavfilter, etc).
101
+
102
+ </li><li><a class="url" href="https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel/">ffmpeg-devel</a>:
103
+ For discussions involving the development of FFmpeg and for submitting
104
+ patches. User questions should be asked at ffmpeg-user or libav-user.
105
+ </li></ul>
106
+
107
+ <p>To report a bug see <a class="url" href="https://ffmpeg.org/bugreports.html">https://ffmpeg.org/bugreports.html</a>.
108
+ </p>
109
+ <p>We cannot provide help for scripts and/or third-party tools.
110
+ </p>
111
+ <a class="anchor" id="How-do-I-ask-a-question-or-send-a-message-to-a-mailing-list_003f"></a><a name="How-do-I-ask-a-question-or-send-a-message-to-a-mailing-list_003f-1"></a>
112
+ <h3 class="section">1.3 How do I ask a question or send a message to a mailing list?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-ask-a-question-or-send-a-message-to-a-mailing-list_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-ask-a-question-or-send-a-message-to-a-mailing-list_003f-1" aria-hidden="true">TOC</a></span></h3>
113
+
114
+ <p>First you must <a class="ref" href="#How-do-I-subscribe_003f">subscribe</a>. Then all you have to do is
115
+ send an email:
116
+ </p>
117
+ <ul class="itemize mark-bullet">
118
+ <li>Email <a class="email" href="mailto:ffmpeg-user@ffmpeg.org">ffmpeg-user@ffmpeg.org</a> to send a message to the
119
+ ffmpeg-user mailing list.
120
+
121
+ </li><li>Email <a class="email" href="mailto:libav-user@ffmpeg.org">libav-user@ffmpeg.org</a> to send a message to the
122
+ libav-user mailing list.
123
+
124
+ </li><li>Email <a class="email" href="mailto:ffmpeg-devel@ffmpeg.org">ffmpeg-devel@ffmpeg.org</a> to send a message to the
125
+ ffmpeg-devel mailing list.
126
+ </li></ul>
127
+
128
+ <a name="Subscribing-_002f-Unsubscribing"></a>
129
+ <h2 class="chapter">2 Subscribing / Unsubscribing<span class="pull-right"><a class="anchor hidden-xs" href="#Subscribing-_002f-Unsubscribing" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Subscribing-_002f-Unsubscribing" aria-hidden="true">TOC</a></span></h2>
130
+
131
+ <a class="anchor" id="How-do-I-subscribe_003f"></a><a name="How-do-I-subscribe_003f-1"></a>
132
+ <h3 class="section">2.1 How do I subscribe?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-subscribe_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-subscribe_003f-1" aria-hidden="true">TOC</a></span></h3>
133
+
134
+ <p>Email <a class="email" href="mailto:ffmpeg-user-request@ffmpeg.org">ffmpeg-user-request@ffmpeg.org</a> with the subject
135
+ <em class="emph">subscribe</em>.
136
+ </p>
137
+ <p>Or visit the <a class="url" href="https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-user/">ffmpeg-user mailing list info page</a>
138
+ and refer to the <em class="emph">Subscribing to ffmpeg-user</em> section.
139
+ </p>
140
+ <p>The process is the same for the other mailing lists.
141
+ </p>
142
+ <a name="How-do-I-unsubscribe_003f"></a>
143
+ <h3 class="section">2.2 How do I unsubscribe?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-unsubscribe_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-unsubscribe_003f" aria-hidden="true">TOC</a></span></h3>
144
+
145
+ <p>Email <a class="email" href="mailto:ffmpeg-user-request@ffmpeg.org">ffmpeg-user-request@ffmpeg.org</a> with subject <em class="emph">unsubscribe</em>.
146
+ </p>
147
+ <p>Or visit the <a class="url" href="https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-user/">ffmpeg-user mailing list info page</a>,
148
+ scroll to bottom of page, enter your email address in the box, and click
149
+ the <em class="emph">Unsubscribe or edit options</em> button.
150
+ </p>
151
+ <p>The process is the same for the other mailing lists.
152
+ </p>
153
+ <p>Please avoid asking a mailing list admin to unsubscribe you unless you
154
+ are absolutely unable to do so by yourself. See <a class="ref" href="#Who-do-I-contact-if-I-have-a-problem-with-the-mailing-list_003f">Who do I contact if I have a problem with the mailing list?</a>
155
+ </p>
156
+ <p>Note that it is possible to temporarily halt message delivery (vacation mode).
157
+ See <a class="ref" href="#How-do-I-disable-mail-delivery-without-unsubscribing_003f">How do I disable mail delivery without unsubscribing?</a>
158
+ </p>
159
+ <a name="Moderation-Queue"></a>
160
+ <h2 class="chapter">3 Moderation Queue<span class="pull-right"><a class="anchor hidden-xs" href="#Moderation-Queue" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Moderation-Queue" aria-hidden="true">TOC</a></span></h2>
161
+ <a class="anchor" id="Why-is-my-message-awaiting-moderator-approval_003f"></a><a name="Why-is-my-message-awaiting-moderator-approval_003f-1"></a>
162
+ <h3 class="section">3.1 Why is my message awaiting moderator approval?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-is-my-message-awaiting-moderator-approval_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-is-my-message-awaiting-moderator-approval_003f-1" aria-hidden="true">TOC</a></span></h3>
163
+
164
+ <p>Some messages are automatically held in the <em class="emph">moderation queue</em> and
165
+ must be manually approved by a mailing list admin:
166
+ </p>
167
+ <p>These are:
168
+ </p>
169
+ <ul class="itemize mark-bullet">
170
+ <li>Messages that exceed the <a class="ref" href="#What-is-the-message-size-limit_003f">message size limit</a>.
171
+
172
+ </li><li>Messages from users whose accounts have been set with the <em class="emph">moderation flag</em>
173
+ (very rarely occurs, but may if a user repeatedly ignores the rules
174
+ or is abusive towards others).
175
+ </li></ul>
176
+
177
+ <a name="How-long-does-it-take-for-my-message-in-the-moderation-queue-to-be-approved_003f"></a>
178
+ <h3 class="section">3.2 How long does it take for my message in the moderation queue to be approved?<span class="pull-right"><a class="anchor hidden-xs" href="#How-long-does-it-take-for-my-message-in-the-moderation-queue-to-be-approved_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-long-does-it-take-for-my-message-in-the-moderation-queue-to-be-approved_003f" aria-hidden="true">TOC</a></span></h3>
179
+
180
+ <p>The queue is not checked on a regular basis. You can ask on the
181
+ <code class="t">#ffmpeg-devel</code> IRC channel on Libera Chat for someone to approve your message.
182
+ </p>
183
+ <a class="anchor" id="How-do-I-delete-my-message-in-the-moderation-queue_003f"></a><a name="How-do-I-delete-my-message-in-the-moderation-queue_003f-1"></a>
184
+ <h3 class="section">3.3 How do I delete my message in the moderation queue?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-delete-my-message-in-the-moderation-queue_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-delete-my-message-in-the-moderation-queue_003f-1" aria-hidden="true">TOC</a></span></h3>
185
+
186
+ <p>You should have received an email with the subject <em class="emph">Your message to &lt;mailing list name&gt; awaits moderator approval</em>.
187
+ A link is in the message that will allow you to delete your message
188
+ unless a mailing list admin already approved or rejected it.
189
+ </p>
190
+ <a name="Archives"></a>
191
+ <h2 class="chapter">4 Archives<span class="pull-right"><a class="anchor hidden-xs" href="#Archives" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Archives" aria-hidden="true">TOC</a></span></h2>
192
+
193
+ <a class="anchor" id="Where-are-the-archives_003f"></a><a name="Where-are-the-archives_003f-1"></a>
194
+ <h3 class="section">4.1 Where are the archives?<span class="pull-right"><a class="anchor hidden-xs" href="#Where-are-the-archives_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Where-are-the-archives_003f-1" aria-hidden="true">TOC</a></span></h3>
195
+
196
+ <p>See the <em class="emph">Archives</em> section on the <a class="url" href="https://ffmpeg.org/contact.html">FFmpeg Contact</a>
197
+ page for links to all FFmpeg mailing list archives.
198
+ </p>
199
+ <p>Note that the archives are split by month. Discussions that span
200
+ several months will be split into separate months in the archives.
201
+ </p>
202
+ <a name="How-do-I-reply-to-a-message-in-the-archives_003f"></a>
203
+ <h3 class="section">4.2 How do I reply to a message in the archives?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-reply-to-a-message-in-the-archives_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-reply-to-a-message-in-the-archives_003f" aria-hidden="true">TOC</a></span></h3>
204
+
205
+ <p>Click the email link at the top of the message just under the subject
206
+ title. The link will provide the proper headers to keep the message
207
+ within the thread.
208
+ </p>
209
+ <p>Note that you must be subscribed to send a message to the ffmpeg-user or
210
+ libav-user mailing lists.
211
+ </p>
212
+ <a name="How-do-I-search-the-archives_003f"></a>
213
+ <h3 class="section">4.3 How do I search the archives?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-search-the-archives_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-search-the-archives_003f" aria-hidden="true">TOC</a></span></h3>
214
+
215
+ <p>Perform a site search using your favorite search engine. Example:
216
+ </p>
217
+ <p><code class="t">site:lists.ffmpeg.org/pipermail/ffmpeg-user/ &quot;search term&quot;</code>
218
+ </p>
219
+ <a name="Other"></a>
220
+ <h2 class="chapter">5 Other<span class="pull-right"><a class="anchor hidden-xs" href="#Other" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Other" aria-hidden="true">TOC</a></span></h2>
221
+
222
+ <a name="Is-there-an-alternative-to-the-mailing-list_003f"></a>
223
+ <h3 class="section">5.1 Is there an alternative to the mailing list?<span class="pull-right"><a class="anchor hidden-xs" href="#Is-there-an-alternative-to-the-mailing-list_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Is-there-an-alternative-to-the-mailing-list_003f" aria-hidden="true">TOC</a></span></h3>
224
+
225
+ <p>You can ask for help in the official <code class="t">#ffmpeg</code> IRC channel on Libera Chat.
226
+ </p>
227
+ <p>There are also numerous third-party help sites such as
228
+ <a class="url" href="https://superuser.com/tags/ffmpeg">Super User</a> and
229
+ <a class="url" href="https://www.reddit.com/r/ffmpeg/">r/ffmpeg on reddit</a>.
230
+ </p>
231
+ <a class="anchor" id="What-is-top_002dposting_003f"></a><a name="What-is-top_002dposting_003f-1"></a>
232
+ <h3 class="section">5.2 What is top-posting?<span class="pull-right"><a class="anchor hidden-xs" href="#What-is-top_002dposting_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-What-is-top_002dposting_003f-1" aria-hidden="true">TOC</a></span></h3>
233
+
234
+ <p>See <a class="url" href="https://en.wikipedia.org/wiki/Posting_style#Top-posting">https://en.wikipedia.org/wiki/Posting_style#Top-posting</a>.
235
+ </p>
236
+ <p>Instead, use trimmed interleaved/inline replies (<a class="url" href="https://lists.ffmpeg.org/pipermail/ffmpeg-user/2017-April/035849.html">example</a>).
237
+ </p>
238
+ <a class="anchor" id="What-is-the-message-size-limit_003f"></a><a name="What-is-the-message-size-limit_003f-1"></a>
239
+ <h3 class="section">5.3 What is the message size limit?<span class="pull-right"><a class="anchor hidden-xs" href="#What-is-the-message-size-limit_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-What-is-the-message-size-limit_003f-1" aria-hidden="true">TOC</a></span></h3>
240
+
241
+ <p>The message size limit is 1000 kilobytes. Please provide links to larger files
242
+ instead of attaching them.
243
+ </p>
244
+ <a name="Where-can-I-upload-sample-files_003f"></a>
245
+ <h3 class="section">5.4 Where can I upload sample files?<span class="pull-right"><a class="anchor hidden-xs" href="#Where-can-I-upload-sample-files_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Where-can-I-upload-sample-files_003f" aria-hidden="true">TOC</a></span></h3>
246
+
247
+ <p>Anywhere that is not too annoying for us to use.
248
+ </p>
249
+ <p>Google Drive and Dropbox are acceptable if you need a file host, and
250
+ <a class="url" href="https://0x0.st/">0x0.st</a> is good for files under 256 MiB.
251
+ </p>
252
+ <p>Small, short samples are preferred if possible.
253
+ </p>
254
+ <a name="Will-I-receive-spam-if-I-send-and_002for-subscribe-to-a-mailing-list_003f"></a>
255
+ <h3 class="section">5.5 Will I receive spam if I send and/or subscribe to a mailing list?<span class="pull-right"><a class="anchor hidden-xs" href="#Will-I-receive-spam-if-I-send-and_002for-subscribe-to-a-mailing-list_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Will-I-receive-spam-if-I-send-and_002for-subscribe-to-a-mailing-list_003f" aria-hidden="true">TOC</a></span></h3>
256
+
257
+ <p>Highly unlikely.
258
+ </p>
259
+ <ul class="itemize mark-bullet">
260
+ <li>The list of subscribed users is not public.
261
+
262
+ </li><li>Email addresses in the archives are obfuscated.
263
+
264
+ </li><li>Several unique test email accounts were utilized and none have yet
265
+ received any spam.
266
+ </li></ul>
267
+
268
+ <p>However, you may see a spam in the mailing lists on rare occasions:
269
+ </p>
270
+ <ul class="itemize mark-bullet">
271
+ <li>Spam in the moderation queue may be accidentally approved due to human
272
+ error.
273
+
274
+ </li><li>There have been a few messages from subscribed users who had their own
275
+ email addresses hacked and spam messages from (or appearing to be from)
276
+ the hacked account were sent to their contacts (a mailing list being a
277
+ contact in these cases).
278
+
279
+ </li><li>If you are subscribed to the bug tracker mailing list (ffmpeg-trac) you
280
+ may see the occasional spam as a false bug report, but we take measures
281
+ to try to prevent this.
282
+ </li></ul>
283
+
284
+ <a name="How-do-I-filter-mailing-list-messages_003f"></a>
285
+ <h3 class="section">5.6 How do I filter mailing list messages?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-filter-mailing-list-messages_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-filter-mailing-list-messages_003f" aria-hidden="true">TOC</a></span></h3>
286
+
287
+ <p>Use the <em class="emph">List-Id</em>. For example, the ffmpeg-user mailing list is
288
+ <code class="t">ffmpeg-user.ffmpeg.org</code>. You can view the List-Id in the raw message
289
+ or headers.
290
+ </p>
291
+ <p>You can then filter the mailing list messages to their own folder.
292
+ </p>
293
+ <a class="anchor" id="How-do-I-disable-mail-delivery-without-unsubscribing_003f"></a><a name="How-do-I-disable-mail-delivery-without-unsubscribing_003f-1"></a>
294
+ <h3 class="section">5.7 How do I disable mail delivery without unsubscribing?<span class="pull-right"><a class="anchor hidden-xs" href="#How-do-I-disable-mail-delivery-without-unsubscribing_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-How-do-I-disable-mail-delivery-without-unsubscribing_003f-1" aria-hidden="true">TOC</a></span></h3>
295
+
296
+ <p>Sometimes you may want to temporarily stop receiving all mailing list
297
+ messages. This &quot;vacation mode&quot; is simple to do:
298
+ </p>
299
+ <ol class="enumerate">
300
+ <li> Go to the <a class="url" href="https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-user/">ffmpeg-user mailing list info page</a>
301
+
302
+ </li><li> Enter your email address in the box at very bottom of the page and click the
303
+ <em class="emph">Unsubscribe or edit options</em> box.
304
+
305
+ </li><li> Enter your password and click the <em class="emph">Log in</em> button.
306
+
307
+ </li><li> Look for the <em class="emph">Mail delivery</em> option. Here you can disable/enable mail
308
+ delivery. If you check <em class="emph">Set globally</em> it will apply your choice to all
309
+ other FFmpeg mailing lists you are subscribed to.
310
+ </li></ol>
311
+
312
+ <p>Alternatively, from your subscribed address, send a message to <a class="email" href="mailto:ffmpeg-user-request@ffmpeg.org">ffmpeg-user-request@ffmpeg.org</a>
313
+ with the subject <em class="emph">set delivery off</em>. To re-enable mail delivery send a
314
+ message to <a class="email" href="mailto:ffmpeg-user-request@ffmpeg.org">ffmpeg-user-request@ffmpeg.org</a> with the subject
315
+ <em class="emph">set delivery on</em>.
316
+ </p>
317
+ <a class="anchor" id="Why-is-the-mailing-list-munging-my-address_003f"></a><a name="Why-is-the-mailing-list-munging-my-address_003f-1"></a>
318
+ <h3 class="section">5.8 Why is the mailing list munging my address?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-is-the-mailing-list-munging-my-address_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-is-the-mailing-list-munging-my-address_003f-1" aria-hidden="true">TOC</a></span></h3>
319
+
320
+ <p>This is due to subscribers that use an email service with a DMARC reject policy
321
+ which adds difficulties to mailing list operators.
322
+ </p>
323
+ <p>The mailing list must re-write (munge) the <em class="emph">From:</em> header for such users;
324
+ otherwise their email service will reject and bounce the message resulting in
325
+ automatic unsubscribing from the mailing list.
326
+ </p>
327
+ <p>When sending a message these users will see <em class="emph">via &lt;mailing list name&gt;</em>
328
+ added to their name and the <em class="emph">From:</em> address munged to the address of
329
+ the particular mailing list.
330
+ </p>
331
+ <p>If you want to avoid this then please use a different email service.
332
+ </p>
333
+ <p>Note that ffmpeg-devel does not apply any munging as it causes issues with
334
+ patch authorship. As a result users with an email service with a DMARC reject
335
+ policy may be automatically unsubscribed due to rejected and bounced messages.
336
+ </p>
337
+ <a name="Rules-and-Etiquette"></a>
338
+ <h2 class="chapter">6 Rules and Etiquette<span class="pull-right"><a class="anchor hidden-xs" href="#Rules-and-Etiquette" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Rules-and-Etiquette" aria-hidden="true">TOC</a></span></h2>
339
+
340
+ <a name="What-are-the-rules-and-the-proper-etiquette_003f"></a>
341
+ <h3 class="section">6.1 What are the rules and the proper etiquette?<span class="pull-right"><a class="anchor hidden-xs" href="#What-are-the-rules-and-the-proper-etiquette_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-What-are-the-rules-and-the-proper-etiquette_003f" aria-hidden="true">TOC</a></span></h3>
342
+
343
+ <p>There may seem to be many things to remember, but we want to help and
344
+ following these guidelines will allow you to get answers more quickly
345
+ and help avoid getting ignored.
346
+ </p>
347
+ <ul class="itemize mark-bullet">
348
+ <li>Always show your actual, unscripted <code class="command">ffmpeg</code> command and the
349
+ complete, uncut console output from your command.
350
+
351
+ </li><li>Use the most simple and minimal command that still shows the issue you
352
+ are encountering.
353
+
354
+ </li><li>Provide all necessary information so others can attempt to duplicate
355
+ your issue. This includes the actual command, complete uncut console
356
+ output, and any inputs that are required to duplicate the issue.
357
+
358
+ </li><li>Use the latest <code class="command">ffmpeg</code> build you can get. See the <a class="url" href="https://ffmpeg.org/download.html">FFmpeg Download</a>
359
+ page for links to recent builds for Linux, macOS, and Windows. Or
360
+ compile from the current git master branch.
361
+
362
+ </li><li>Avoid <a class="url" href="https://en.wikipedia.org/wiki/Posting_style#Top-posting">top-posting</a>.
363
+ Also see <a class="ref" href="#What-is-top_002dposting_003f">What is top-posting?</a>
364
+
365
+ </li><li>Avoid hijacking threads. Thread hijacking is replying to a message and
366
+ changing the subject line to something unrelated to the original thread.
367
+ Most email clients will still show the renamed message under the
368
+ original thread. This can be confusing and these types of messages are
369
+ often ignored.
370
+
371
+ </li><li>Do not send screenshots. Copy and paste console text instead of making
372
+ screenshots of the text.
373
+
374
+ </li><li>Avoid sending email disclaimers and legalese if possible as this is a
375
+ public list.
376
+
377
+ </li><li>Avoid using the <code class="code">-loglevel debug</code>, <code class="code">-loglevel quiet</code>, and
378
+ <code class="command">-hide_banner</code> options unless requested to do so.
379
+
380
+ </li><li>If you attach files avoid compressing small files. Uncompressed is
381
+ preferred.
382
+
383
+ </li><li>Please do not send HTML-only messages. The mailing list will ignore the
384
+ HTML component of your message. Most mail clients will automatically
385
+ include a text component: this is what the mailing list will use.
386
+
387
+ </li><li>Configuring your mail client to break lines after 70 or so characters is
388
+ recommended.
389
+
390
+ </li><li>Avoid sending the same message to multiple mailing lists.
391
+
392
+ </li><li>Please follow our <a class="url" href="https://ffmpeg.org/community.html#Code-of-conduct">Code of Conduct</a>.
393
+ </li></ul>
394
+
395
+ <a name="Help"></a>
396
+ <h2 class="chapter">7 Help<span class="pull-right"><a class="anchor hidden-xs" href="#Help" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Help" aria-hidden="true">TOC</a></span></h2>
397
+
398
+ <a name="Why-am-I-not-receiving-any-messages_003f"></a>
399
+ <h3 class="section">7.1 Why am I not receiving any messages?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-am-I-not-receiving-any-messages_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-am-I-not-receiving-any-messages_003f" aria-hidden="true">TOC</a></span></h3>
400
+
401
+ <p>Some email providers have blacklists or spam filters that block or mark
402
+ the mailing list messages as false positives. Unfortunately, the user is
403
+ often not aware of this and is often out of their control.
404
+ </p>
405
+ <p>When possible we attempt to notify the provider to be removed from the
406
+ blacklists or filters.
407
+ </p>
408
+ <a name="Why-are-my-sent-messages-not-showing-up_003f"></a>
409
+ <h3 class="section">7.2 Why are my sent messages not showing up?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-are-my-sent-messages-not-showing-up_003f" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-are-my-sent-messages-not-showing-up_003f" aria-hidden="true">TOC</a></span></h3>
410
+
411
+ <p>Excluding <a class="ref" href="#Why-is-my-message-awaiting-moderator-approval_003f">messages that are held in the moderation queue</a>
412
+ there are a few other reasons why your messages may fail to appear:
413
+ </p>
414
+ <ul class="itemize mark-bullet">
415
+ <li>HTML-only messages are ignored by the mailing lists. Most mail clients
416
+ automatically include a text component alongside HTML email: this is what
417
+ the mailing list will use. If it does not then consider your client to be
418
+ broken, because sending a text component along with the HTML component to
419
+ form a multi-part message is recommended by email standards.
420
+
421
+ </li><li>Check your spam folder.
422
+ </li></ul>
423
+
424
+ <a class="anchor" id="Why-do-I-keep-getting-unsubscribed-from-ffmpeg_002ddevel_003f"></a><a name="Why-do-I-keep-getting-unsubscribed-from-ffmpeg_002ddevel_003f-1"></a>
425
+ <h3 class="section">7.3 Why do I keep getting unsubscribed from ffmpeg-devel?<span class="pull-right"><a class="anchor hidden-xs" href="#Why-do-I-keep-getting-unsubscribed-from-ffmpeg_002ddevel_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Why-do-I-keep-getting-unsubscribed-from-ffmpeg_002ddevel_003f-1" aria-hidden="true">TOC</a></span></h3>
426
+
427
+ <p>Users with an email service that has a DMARC reject or quarantine policy may be
428
+ automatically unsubscribed from the ffmpeg-devel mailing list due to the mailing
429
+ list messages being continuously rejected and bounced back.
430
+ </p>
431
+ <p>Consider using a different email service.
432
+ </p>
433
+ <a class="anchor" id="Who-do-I-contact-if-I-have-a-problem-with-the-mailing-list_003f"></a><a name="Who-do-I-contact-if-I-have-a-problem-with-the-mailing-list_003f-1"></a>
434
+ <h3 class="section">7.4 Who do I contact if I have a problem with the mailing list?<span class="pull-right"><a class="anchor hidden-xs" href="#Who-do-I-contact-if-I-have-a-problem-with-the-mailing-list_003f-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Who-do-I-contact-if-I-have-a-problem-with-the-mailing-list_003f-1" aria-hidden="true">TOC</a></span></h3>
435
+
436
+ <p>Send a message to <a class="email" href="mailto:ffmpeg-user-owner@ffmpeg.org">ffmpeg-user-owner@ffmpeg.org</a>.
437
+ </p>
438
+ <p style="font-size: small;">
439
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
440
+ </p>
441
+ </div>
442
+ </body>
443
+ </html>
ffmpeg-master-latest-win64-gpl/doc/nut.html ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ NUT
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ NUT
17
+ </h1>
18
+
19
+
20
+
21
+ <a name="SEC_Top"></a>
22
+
23
+ <div class="element-contents" id="SEC_Contents">
24
+ <h2 class="contents-heading">Table of Contents</h2>
25
+
26
+ <div class="contents">
27
+
28
+ <ul class="toc-numbered-mark">
29
+ <li><a id="toc-Description" href="#Description">1 Description</a></li>
30
+ <li><a id="toc-Modes" href="#Modes">2 Modes</a>
31
+ <ul class="toc-numbered-mark">
32
+ <li><a id="toc-BROADCAST" href="#BROADCAST">2.1 BROADCAST</a></li>
33
+ <li><a id="toc-PIPE" href="#PIPE">2.2 PIPE</a></li>
34
+ </ul></li>
35
+ <li><a id="toc-Container_002dspecific-codec-tags" href="#Container_002dspecific-codec-tags">3 Container-specific codec tags</a>
36
+ <ul class="toc-numbered-mark">
37
+ <li><a id="toc-Generic-raw-YUVA-formats" href="#Generic-raw-YUVA-formats">3.1 Generic raw YUVA formats</a></li>
38
+ <li><a id="toc-Raw-Audio" href="#Raw-Audio">3.2 Raw Audio</a></li>
39
+ <li><a id="toc-Subtitles" href="#Subtitles">3.3 Subtitles</a></li>
40
+ <li><a id="toc-Raw-Data" href="#Raw-Data">3.4 Raw Data</a></li>
41
+ <li><a id="toc-Codecs" href="#Codecs">3.5 Codecs</a></li>
42
+ </ul></li>
43
+ </ul>
44
+ </div>
45
+ </div>
46
+
47
+ <a name="Description"></a>
48
+ <h2 class="chapter">1 Description<span class="pull-right"><a class="anchor hidden-xs" href="#Description" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Description" aria-hidden="true">TOC</a></span></h2>
49
+ <p>NUT is a low overhead generic container format. It stores audio, video,
50
+ subtitle and user-defined streams in a simple, yet efficient, way.
51
+ </p>
52
+ <p>It was created by a group of FFmpeg and MPlayer developers in 2003
53
+ and was finalized in 2008.
54
+ </p>
55
+ <p>The official nut specification is at svn://svn.mplayerhq.hu/nut
56
+ In case of any differences between this text and the official specification,
57
+ the official specification shall prevail.
58
+ </p>
59
+ <a name="Modes"></a>
60
+ <h2 class="chapter">2 Modes<span class="pull-right"><a class="anchor hidden-xs" href="#Modes" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Modes" aria-hidden="true">TOC</a></span></h2>
61
+ <p>NUT has some variants signaled by using the flags field in its main header.
62
+ </p>
63
+ <table class="multitable">
64
+ <tbody><tr><td width="40%">BROADCAST</td><td width="40%">Extend the syncpoint to report the sender wallclock</td></tr>
65
+ <tr><td width="40%">PIPE</td><td width="40%">Omit completely the syncpoint</td></tr>
66
+ </tbody>
67
+ </table>
68
+
69
+ <a name="BROADCAST"></a>
70
+ <h3 class="section">2.1 BROADCAST<span class="pull-right"><a class="anchor hidden-xs" href="#BROADCAST" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-BROADCAST" aria-hidden="true">TOC</a></span></h3>
71
+
72
+ <p>The BROADCAST variant provides a secondary time reference to facilitate
73
+ detecting endpoint latency and network delays.
74
+ It assumes all the endpoint clocks are synchronized.
75
+ To be used in real-time scenarios.
76
+ </p>
77
+ <a name="PIPE"></a>
78
+ <h3 class="section">2.2 PIPE<span class="pull-right"><a class="anchor hidden-xs" href="#PIPE" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-PIPE" aria-hidden="true">TOC</a></span></h3>
79
+
80
+ <p>The PIPE variant assumes NUT is used as non-seekable intermediate container,
81
+ by not using syncpoint removes unneeded overhead and reduces the overall
82
+ memory usage.
83
+ </p>
84
+ <a name="Container_002dspecific-codec-tags"></a>
85
+ <h2 class="chapter">3 Container-specific codec tags<span class="pull-right"><a class="anchor hidden-xs" href="#Container_002dspecific-codec-tags" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Container_002dspecific-codec-tags" aria-hidden="true">TOC</a></span></h2>
86
+
87
+ <a name="Generic-raw-YUVA-formats"></a>
88
+ <h3 class="section">3.1 Generic raw YUVA formats<span class="pull-right"><a class="anchor hidden-xs" href="#Generic-raw-YUVA-formats" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Generic-raw-YUVA-formats" aria-hidden="true">TOC</a></span></h3>
89
+
90
+ <p>Since many exotic planar YUVA pixel formats are not considered by
91
+ the AVI/QuickTime FourCC lists, the following scheme is adopted for
92
+ representing them.
93
+ </p>
94
+ <p>The first two bytes can contain the values:
95
+ Y1 = only Y
96
+ Y2 = Y+A
97
+ Y3 = YUV
98
+ Y4 = YUVA
99
+ </p>
100
+ <p>The third byte represents the width and height chroma subsampling
101
+ values for the UV planes, that is the amount to shift the luma
102
+ width/height right to find the chroma width/height.
103
+ </p>
104
+ <p>The fourth byte is the number of bits used (8, 16, ...).
105
+ </p>
106
+ <p>If the order of bytes is inverted, that means that each component has
107
+ to be read big-endian.
108
+ </p>
109
+ <a name="Raw-Audio"></a>
110
+ <h3 class="section">3.2 Raw Audio<span class="pull-right"><a class="anchor hidden-xs" href="#Raw-Audio" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Raw-Audio" aria-hidden="true">TOC</a></span></h3>
111
+
112
+ <table class="multitable">
113
+ <tbody><tr><td width="40%">ALAW</td><td width="40%">A-LAW</td></tr>
114
+ <tr><td width="40%">ULAW</td><td width="40%">MU-LAW</td></tr>
115
+ <tr><td width="40%">P&lt;type&gt;&lt;interleaving&gt;&lt;bits&gt;</td><td width="40%">little-endian PCM</td></tr>
116
+ <tr><td width="40%">&lt;bits&gt;&lt;interleaving&gt;&lt;type&gt;P</td><td width="40%">big-endian PCM</td></tr>
117
+ </tbody>
118
+ </table>
119
+
120
+ <p>&lt;type&gt; is S for signed integer, U for unsigned integer, F for IEEE float
121
+ &lt;interleaving&gt; is D for default, P is for planar.
122
+ &lt;bits&gt; is 8/16/24/32
123
+ </p>
124
+ <div class="example">
125
+ <pre class="example-preformatted">PFD[32] would for example be signed 32 bit little-endian IEEE float
126
+ </pre></div>
127
+
128
+ <a name="Subtitles"></a>
129
+ <h3 class="section">3.3 Subtitles<span class="pull-right"><a class="anchor hidden-xs" href="#Subtitles" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Subtitles" aria-hidden="true">TOC</a></span></h3>
130
+
131
+ <table class="multitable">
132
+ <tbody><tr><td width="40%">UTF8</td><td width="40%">Raw UTF-8</td></tr>
133
+ <tr><td width="40%">SSA[0]</td><td width="40%">SubStation Alpha</td></tr>
134
+ <tr><td width="40%">DVDS</td><td width="40%">DVD subtitles</td></tr>
135
+ <tr><td width="40%">DVBS</td><td width="40%">DVB subtitles</td></tr>
136
+ </tbody>
137
+ </table>
138
+
139
+ <a name="Raw-Data"></a>
140
+ <h3 class="section">3.4 Raw Data<span class="pull-right"><a class="anchor hidden-xs" href="#Raw-Data" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Raw-Data" aria-hidden="true">TOC</a></span></h3>
141
+
142
+ <table class="multitable">
143
+ <tbody><tr><td width="40%">UTF8</td><td width="40%">Raw UTF-8</td></tr>
144
+ </tbody>
145
+ </table>
146
+
147
+ <a name="Codecs"></a>
148
+ <h3 class="section">3.5 Codecs<span class="pull-right"><a class="anchor hidden-xs" href="#Codecs" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Codecs" aria-hidden="true">TOC</a></span></h3>
149
+
150
+ <table class="multitable">
151
+ <tbody><tr><td width="40%">3IV1</td><td width="40%">non-compliant MPEG-4 generated by old 3ivx</td></tr>
152
+ <tr><td width="40%">ASV1</td><td width="40%">Asus Video</td></tr>
153
+ <tr><td width="40%">ASV2</td><td width="40%">Asus Video 2</td></tr>
154
+ <tr><td width="40%">CVID</td><td width="40%">Cinepak</td></tr>
155
+ <tr><td width="40%">CYUV</td><td width="40%">Creative YUV</td></tr>
156
+ <tr><td width="40%">DIVX</td><td width="40%">non-compliant MPEG-4 generated by old DivX</td></tr>
157
+ <tr><td width="40%">DUCK</td><td width="40%">Truemotion 1</td></tr>
158
+ <tr><td width="40%">FFV1</td><td width="40%">FFmpeg video 1</td></tr>
159
+ <tr><td width="40%">FFVH</td><td width="40%">FFmpeg Huffyuv</td></tr>
160
+ <tr><td width="40%">H261</td><td width="40%">ITU H.261</td></tr>
161
+ <tr><td width="40%">H262</td><td width="40%">ITU H.262</td></tr>
162
+ <tr><td width="40%">H263</td><td width="40%">ITU H.263</td></tr>
163
+ <tr><td width="40%">H264</td><td width="40%">ITU H.264</td></tr>
164
+ <tr><td width="40%">HFYU</td><td width="40%">Huffyuv</td></tr>
165
+ <tr><td width="40%">I263</td><td width="40%">Intel H.263</td></tr>
166
+ <tr><td width="40%">IV31</td><td width="40%">Indeo 3.1</td></tr>
167
+ <tr><td width="40%">IV32</td><td width="40%">Indeo 3.2</td></tr>
168
+ <tr><td width="40%">IV50</td><td width="40%">Indeo 5.0</td></tr>
169
+ <tr><td width="40%">LJPG</td><td width="40%">ITU JPEG (lossless)</td></tr>
170
+ <tr><td width="40%">MJLS</td><td width="40%">ITU JPEG-LS</td></tr>
171
+ <tr><td width="40%">MJPG</td><td width="40%">ITU JPEG</td></tr>
172
+ <tr><td width="40%">MPG4</td><td width="40%">MS MPEG-4v1 (not ISO MPEG-4)</td></tr>
173
+ <tr><td width="40%">MP42</td><td width="40%">MS MPEG-4v2</td></tr>
174
+ <tr><td width="40%">MP43</td><td width="40%">MS MPEG-4v3</td></tr>
175
+ <tr><td width="40%">MP4V</td><td width="40%">ISO MPEG-4 Part 2 Video (from old encoders)</td></tr>
176
+ <tr><td width="40%">mpg1</td><td width="40%">ISO MPEG-1 Video</td></tr>
177
+ <tr><td width="40%">mpg2</td><td width="40%">ISO MPEG-2 Video</td></tr>
178
+ <tr><td width="40%">MRLE</td><td width="40%">MS RLE</td></tr>
179
+ <tr><td width="40%">MSVC</td><td width="40%">MS Video 1</td></tr>
180
+ <tr><td width="40%">RT21</td><td width="40%">Indeo 2.1</td></tr>
181
+ <tr><td width="40%">RV10</td><td width="40%">RealVideo 1.0</td></tr>
182
+ <tr><td width="40%">RV20</td><td width="40%">RealVideo 2.0</td></tr>
183
+ <tr><td width="40%">RV30</td><td width="40%">RealVideo 3.0</td></tr>
184
+ <tr><td width="40%">RV40</td><td width="40%">RealVideo 4.0</td></tr>
185
+ <tr><td width="40%">SNOW</td><td width="40%">FFmpeg Snow</td></tr>
186
+ <tr><td width="40%">SVQ1</td><td width="40%">Sorenson Video 1</td></tr>
187
+ <tr><td width="40%">SVQ3</td><td width="40%">Sorenson Video 3</td></tr>
188
+ <tr><td width="40%">theo</td><td width="40%">Xiph Theora</td></tr>
189
+ <tr><td width="40%">TM20</td><td width="40%">Truemotion 2.0</td></tr>
190
+ <tr><td width="40%">UMP4</td><td width="40%">non-compliant MPEG-4 generated by UB Video MPEG-4</td></tr>
191
+ <tr><td width="40%">VCR1</td><td width="40%">ATI VCR1</td></tr>
192
+ <tr><td width="40%">VP30</td><td width="40%">VP 3.0</td></tr>
193
+ <tr><td width="40%">VP31</td><td width="40%">VP 3.1</td></tr>
194
+ <tr><td width="40%">VP50</td><td width="40%">VP 5.0</td></tr>
195
+ <tr><td width="40%">VP60</td><td width="40%">VP 6.0</td></tr>
196
+ <tr><td width="40%">VP61</td><td width="40%">VP 6.1</td></tr>
197
+ <tr><td width="40%">VP62</td><td width="40%">VP 6.2</td></tr>
198
+ <tr><td width="40%">VP70</td><td width="40%">VP 7.0</td></tr>
199
+ <tr><td width="40%">WMV1</td><td width="40%">MS WMV7</td></tr>
200
+ <tr><td width="40%">WMV2</td><td width="40%">MS WMV8</td></tr>
201
+ <tr><td width="40%">WMV3</td><td width="40%">MS WMV9</td></tr>
202
+ <tr><td width="40%">WV1F</td><td width="40%">non-compliant MPEG-4 generated by ?</td></tr>
203
+ <tr><td width="40%">WVC1</td><td width="40%">VC-1</td></tr>
204
+ <tr><td width="40%">XVID</td><td width="40%">non-compliant MPEG-4 generated by old Xvid</td></tr>
205
+ <tr><td width="40%">XVIX</td><td width="40%">non-compliant MPEG-4 generated by old Xvid with interlacing bug</td></tr>
206
+ </tbody>
207
+ </table>
208
+
209
+ <p style="font-size: small;">
210
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
211
+ </p>
212
+ </div>
213
+ </body>
214
+ </html>
ffmpeg-master-latest-win64-gpl/doc/platform.html ADDED
@@ -0,0 +1,390 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <!-- Created by , GNU Texinfo 7.1 -->
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>
7
+ Platform Specific Information
8
+ </title>
9
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
+ <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="style.min.css">
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <h1>
16
+ Platform Specific Information
17
+ </h1>
18
+
19
+
20
+ <a name="SEC_Top"></a>
21
+
22
+ <div class="element-contents" id="SEC_Contents">
23
+ <h2 class="contents-heading">Table of Contents</h2>
24
+
25
+ <div class="contents">
26
+
27
+ <ul class="toc-numbered-mark">
28
+ <li><a id="toc-Unix_002dlike" href="#Unix_002dlike">1 Unix-like</a>
29
+ <ul class="toc-numbered-mark">
30
+ <li><a id="toc-Advanced-linking-configuration" href="#Advanced-linking-configuration">1.1 Advanced linking configuration</a></li>
31
+ <li><a id="toc-BSD" href="#BSD">1.2 BSD</a></li>
32
+ <li><a id="toc-_0028Open_0029Solaris" href="#g_t_0028Open_0029Solaris">1.3 (Open)Solaris</a></li>
33
+ <li><a id="toc-Darwin-_0028Mac-OS-X_002c-iPhone_0029" href="#Darwin-_0028Mac-OS-X_002c-iPhone_0029">1.4 Darwin (Mac OS X, iPhone)</a></li>
34
+ </ul></li>
35
+ <li><a id="toc-DOS" href="#DOS">2 DOS</a></li>
36
+ <li><a id="toc-OS_002f2" href="#OS_002f2">3 OS/2</a></li>
37
+ <li><a id="toc-Windows" href="#Windows">4 Windows</a>
38
+ <ul class="toc-numbered-mark">
39
+ <li><a id="toc-Native-Windows-compilation-using-MinGW-or-MinGW_002dw64" href="#Native-Windows-compilation-using-MinGW-or-MinGW_002dw64">4.1 Native Windows compilation using MinGW or MinGW-w64</a>
40
+ <ul class="toc-numbered-mark">
41
+ <li><a id="toc-Native-Windows-compilation-using-MSYS2" href="#Native-Windows-compilation-using-MSYS2">4.1.1 Native Windows compilation using MSYS2</a></li>
42
+ </ul></li>
43
+ <li><a id="toc-Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows" href="#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows">4.2 Microsoft Visual C++ or Intel C++ Compiler for Windows</a>
44
+ <ul class="toc-numbered-mark">
45
+ <li><a id="toc-Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b" href="#Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b">4.2.1 Linking to FFmpeg with Microsoft Visual C++</a></li>
46
+ </ul></li>
47
+ <li><a id="toc-Cross-compilation-for-Windows-with-Linux-1" href="#Cross-compilation-for-Windows-with-Linux-1">4.3 Cross compilation for Windows with Linux</a></li>
48
+ <li><a id="toc-Compilation-under-Cygwin" href="#Compilation-under-Cygwin">4.4 Compilation under Cygwin</a></li>
49
+ <li><a id="toc-Crosscompilation-for-Windows-under-Cygwin" href="#Crosscompilation-for-Windows-under-Cygwin">4.5 Crosscompilation for Windows under Cygwin</a></li>
50
+ </ul></li>
51
+ </ul>
52
+ </div>
53
+ </div>
54
+
55
+ <a name="Unix_002dlike"></a>
56
+ <h2 class="chapter">1 Unix-like<span class="pull-right"><a class="anchor hidden-xs" href="#Unix_002dlike" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Unix_002dlike" aria-hidden="true">TOC</a></span></h2>
57
+
58
+ <p>Some parts of FFmpeg cannot be built with version 2.15 of the GNU
59
+ assembler which is still provided by a few AMD64 distributions. To
60
+ make sure your compiler really uses the required version of gas
61
+ after a binutils upgrade, run:
62
+ </p>
63
+ <div class="example">
64
+ <pre class="example-preformatted">$(gcc -print-prog-name=as) --version
65
+ </pre></div>
66
+
67
+ <p>If not, then you should install a different compiler that has no
68
+ hard-coded path to gas. In the worst case pass <code class="code">--disable-asm</code>
69
+ to configure.
70
+ </p>
71
+ <a name="Advanced-linking-configuration"></a>
72
+ <h3 class="section">1.1 Advanced linking configuration<span class="pull-right"><a class="anchor hidden-xs" href="#Advanced-linking-configuration" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Advanced-linking-configuration" aria-hidden="true">TOC</a></span></h3>
73
+
74
+ <p>If you compiled FFmpeg libraries statically and you want to use them to
75
+ build your own shared library, you may need to force PIC support (with
76
+ <code class="code">--enable-pic</code> during FFmpeg configure) and add the following option
77
+ to your project LDFLAGS:
78
+ </p>
79
+ <div class="example">
80
+ <pre class="example-preformatted">-Wl,-Bsymbolic
81
+ </pre></div>
82
+
83
+ <p>If your target platform requires position independent binaries, you should
84
+ pass the correct linking flag (e.g. <code class="code">-pie</code>) to <code class="code">--extra-ldexeflags</code>.
85
+ </p>
86
+ <a name="BSD"></a>
87
+ <h3 class="section">1.2 BSD<span class="pull-right"><a class="anchor hidden-xs" href="#BSD" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-BSD" aria-hidden="true">TOC</a></span></h3>
88
+
89
+ <p>BSD make will not build FFmpeg, you need to install and use GNU Make
90
+ (<code class="command">gmake</code>).
91
+ </p>
92
+ <a name="g_t_0028Open_0029Solaris"></a>
93
+ <h3 class="section">1.3 (Open)Solaris<span class="pull-right"><a class="anchor hidden-xs" href="#_0028Open_0029Solaris" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-_0028Open_0029Solaris" aria-hidden="true">TOC</a></span></h3>
94
+
95
+ <p>GNU Make is required to build FFmpeg, so you have to invoke (<code class="command">gmake</code>),
96
+ standard Solaris Make will not work. When building with a non-c99 front-end
97
+ (gcc, generic suncc) add either <code class="code">--extra-libs=/usr/lib/values-xpg6.o</code>
98
+ or <code class="code">--extra-libs=/usr/lib/64/values-xpg6.o</code> to the configure options
99
+ since the libc is not c99-compliant by default. The probes performed by
100
+ configure may raise an exception leading to the death of configure itself
101
+ due to a bug in the system shell. Simply invoke a different shell such as
102
+ bash directly to work around this:
103
+ </p>
104
+ <div class="example">
105
+ <pre class="example-preformatted">bash ./configure
106
+ </pre></div>
107
+
108
+ <a class="anchor" id="Darwin"></a><a name="Darwin-_0028Mac-OS-X_002c-iPhone_0029"></a>
109
+ <h3 class="section">1.4 Darwin (Mac OS X, iPhone)<span class="pull-right"><a class="anchor hidden-xs" href="#Darwin-_0028Mac-OS-X_002c-iPhone_0029" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Darwin-_0028Mac-OS-X_002c-iPhone_0029" aria-hidden="true">TOC</a></span></h3>
110
+
111
+ <p>The toolchain provided with Xcode is sufficient to build the basic
112
+ unaccelerated code.
113
+ </p>
114
+ <p>Mac OS X on PowerPC or ARM (iPhone) requires a preprocessor from
115
+ <a class="url" href="https://github.com/FFmpeg/gas-preprocessor">https://github.com/FFmpeg/gas-preprocessor</a> or
116
+ <a class="url" href="https://github.com/yuvi/gas-preprocessor">https://github.com/yuvi/gas-preprocessor</a>(currently outdated) to build the optimized
117
+ assembly functions. Put the Perl script somewhere
118
+ in your PATH, FFmpeg&rsquo;s configure will pick it up automatically.
119
+ </p>
120
+ <p>Mac OS X on amd64 and x86 requires <code class="command">nasm</code> to build most of the
121
+ optimized assembly functions. <a class="uref" href="http://www.finkproject.org/">Fink</a>,
122
+ <a class="uref" href="https://wiki.gentoo.org/wiki/Project:Prefix">Gentoo Prefix</a>,
123
+ <a class="uref" href="https://mxcl.github.com/homebrew/">Homebrew</a>
124
+ or <a class="uref" href="http://www.macports.org">MacPorts</a> can easily provide it.
125
+ </p>
126
+
127
+ <a name="DOS"></a>
128
+ <h2 class="chapter">2 DOS<span class="pull-right"><a class="anchor hidden-xs" href="#DOS" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-DOS" aria-hidden="true">TOC</a></span></h2>
129
+
130
+ <p>Using a cross-compiler is preferred for various reasons.
131
+ <a class="url" href="http://www.delorie.com/howto/djgpp/linux-x-djgpp.html">http://www.delorie.com/howto/djgpp/linux-x-djgpp.html</a>
132
+ </p>
133
+
134
+ <a name="OS_002f2"></a>
135
+ <h2 class="chapter">3 OS/2<span class="pull-right"><a class="anchor hidden-xs" href="#OS_002f2" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-OS_002f2" aria-hidden="true">TOC</a></span></h2>
136
+
137
+ <p>For information about compiling FFmpeg on OS/2 see
138
+ <a class="url" href="http://www.edm2.com/index.php/FFmpeg">http://www.edm2.com/index.php/FFmpeg</a>.
139
+ </p>
140
+
141
+ <a name="Windows"></a>
142
+ <h2 class="chapter">4 Windows<span class="pull-right"><a class="anchor hidden-xs" href="#Windows" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Windows" aria-hidden="true">TOC</a></span></h2>
143
+
144
+ <a name="Native-Windows-compilation-using-MinGW-or-MinGW_002dw64"></a>
145
+ <h3 class="section">4.1 Native Windows compilation using MinGW or MinGW-w64<span class="pull-right"><a class="anchor hidden-xs" href="#Native-Windows-compilation-using-MinGW-or-MinGW_002dw64" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Native-Windows-compilation-using-MinGW-or-MinGW_002dw64" aria-hidden="true">TOC</a></span></h3>
146
+
147
+ <p>FFmpeg can be built to run natively on Windows using the MinGW-w64
148
+ toolchain. Install the latest versions of MSYS2 and MinGW-w64 from
149
+ <a class="url" href="http://msys2.github.io/">http://msys2.github.io/</a> and/or <a class="url" href="http://mingw-w64.sourceforge.net/">http://mingw-w64.sourceforge.net/</a>.
150
+ You can find detailed installation instructions in the download section and
151
+ the FAQ.
152
+ </p>
153
+ <p>Notes:
154
+ </p>
155
+ <ul class="itemize mark-bullet">
156
+ <li>Building for the MSYS environment is discouraged, MSYS2 provides a full
157
+ MinGW-w64 environment through <samp class="file">mingw64_shell.bat</samp> or
158
+ <samp class="file">mingw32_shell.bat</samp> that should be used instead of the environment
159
+ provided by <samp class="file">msys2_shell.bat</samp>.
160
+
161
+ </li><li>Building using MSYS2 can be sped up by disabling implicit rules in the
162
+ Makefile by calling <code class="code">make -r</code> instead of plain <code class="code">make</code>. This
163
+ speed up is close to non-existent for normal one-off builds and is only
164
+ noticeable when running make for a second time (for example during
165
+ <code class="code">make install</code>).
166
+
167
+ </li><li>In order to compile FFplay, you must have the MinGW development library
168
+ of <a class="uref" href="http://www.libsdl.org/">SDL</a> and <code class="code">pkg-config</code> installed.
169
+
170
+ </li><li>By using <code class="code">./configure --enable-shared</code> when configuring FFmpeg,
171
+ you can build the FFmpeg libraries (e.g. libavutil, libavcodec,
172
+ libavformat) as DLLs.
173
+
174
+ </li></ul>
175
+
176
+ <a name="Native-Windows-compilation-using-MSYS2"></a>
177
+ <h4 class="subsection">4.1.1 Native Windows compilation using MSYS2<span class="pull-right"><a class="anchor hidden-xs" href="#Native-Windows-compilation-using-MSYS2" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Native-Windows-compilation-using-MSYS2" aria-hidden="true">TOC</a></span></h4>
178
+
179
+ <p>The MSYS2 MinGW-w64 environment provides ready to use toolchains and dependencies
180
+ through <code class="command">pacman</code>.
181
+ </p>
182
+ <p>Make sure to use <samp class="file">mingw64_shell.bat</samp> or <samp class="file">mingw32_shell.bat</samp> to have
183
+ the correct MinGW-w64 environment. The default install provides shortcuts to
184
+ them under <code class="command">MinGW-w64 Win64 Shell</code> and <code class="command">MinGW-w64 Win32 Shell</code>.
185
+ </p>
186
+ <div class="example">
187
+ <pre class="example-preformatted"># normal msys2 packages
188
+ pacman -S make pkgconf diffutils
189
+
190
+ # mingw-w64 packages and toolchains
191
+ pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2
192
+ </pre></div>
193
+
194
+ <p>To target 32 bits replace <code class="code">x86_64</code> with <code class="code">i686</code> in the command above.
195
+ </p>
196
+ <a name="Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows"></a>
197
+ <h3 class="section">4.2 Microsoft Visual C++ or Intel C++ Compiler for Windows<span class="pull-right"><a class="anchor hidden-xs" href="#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows" aria-hidden="true">TOC</a></span></h3>
198
+
199
+ <p>FFmpeg can be built with MSVC 2013 or later.
200
+ </p>
201
+ <p>You will need the following prerequisites:
202
+ </p>
203
+ <ul class="itemize mark-bullet">
204
+ <li><a class="uref" href="http://msys2.github.io/">MSYS2</a>
205
+ </li><li><a class="uref" href="http://www.nasm.us/">NASM</a>
206
+ (Also available via MSYS2&rsquo;s package manager.)
207
+ </li></ul>
208
+
209
+ <p>To set up a proper environment in MSYS2, you need to run <code class="code">msys_shell.bat</code> from
210
+ the Visual Studio or Intel Compiler command prompt.
211
+ </p>
212
+ <p>Place <code class="code">nasm.exe</code> somewhere in your <code class="code">PATH</code>.
213
+ </p>
214
+ <p>Next, make sure any other headers and libs you want to use, such as zlib, are
215
+ located in a spot that the compiler can see. Do so by modifying the <code class="code">LIB</code>
216
+ and <code class="code">INCLUDE</code> environment variables to include the <strong class="strong">Windows-style</strong>
217
+ paths to these directories. Alternatively, you can try to use the
218
+ <code class="code">--extra-cflags</code>/<code class="code">--extra-ldflags</code> configure options.
219
+ </p>
220
+ <p>Finally, run:
221
+ </p>
222
+ <div class="example">
223
+ <pre class="example-preformatted">For MSVC:
224
+ ./configure --toolchain=msvc
225
+
226
+ For ICL:
227
+ ./configure --toolchain=icl
228
+
229
+ make
230
+ make install
231
+ </pre></div>
232
+
233
+ <p>If you wish to compile shared libraries, add <code class="code">--enable-shared</code> to your
234
+ configure options. Note that due to the way MSVC and ICL handle DLL imports and
235
+ exports, you cannot compile static and shared libraries at the same time, and
236
+ enabling shared libraries will automatically disable the static ones.
237
+ </p>
238
+ <p>Notes:
239
+ </p>
240
+ <ul class="itemize mark-bullet">
241
+ <li>If you wish to build with zlib support, you will have to grab a compatible
242
+ zlib binary from somewhere, with an MSVC import lib, or if you wish to link
243
+ statically, you can follow the instructions below to build a compatible
244
+ <code class="code">zlib.lib</code> with MSVC. Regardless of which method you use, you must still
245
+ follow step 3, or compilation will fail.
246
+ <ol class="enumerate">
247
+ <li> Grab the <a class="uref" href="http://zlib.net/">zlib sources</a>.
248
+ </li><li> Edit <code class="code">win32/Makefile.msc</code> so that it uses -MT instead of -MD, since
249
+ this is how FFmpeg is built as well.
250
+ </li><li> Edit <code class="code">zconf.h</code> and remove its inclusion of <code class="code">unistd.h</code>. This gets
251
+ erroneously included when building FFmpeg.
252
+ </li><li> Run <code class="code">nmake -f win32/Makefile.msc</code>.
253
+ </li><li> Move <code class="code">zlib.lib</code>, <code class="code">zconf.h</code>, and <code class="code">zlib.h</code> to somewhere MSVC
254
+ can see.
255
+ </li></ol>
256
+
257
+ </li><li>FFmpeg has been tested with the following on i686 and x86_64:
258
+ <ul class="itemize mark-bullet">
259
+ <li>Visual Studio 2013 Pro and Express
260
+ </li><li>Intel Composer XE 2013
261
+ </li><li>Intel Composer XE 2013 SP1
262
+ </li></ul>
263
+ <p>Anything else is not officially supported.
264
+ </p>
265
+ </li></ul>
266
+
267
+ <a name="Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b"></a>
268
+ <h4 class="subsection">4.2.1 Linking to FFmpeg with Microsoft Visual C++<span class="pull-right"><a class="anchor hidden-xs" href="#Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b" aria-hidden="true">TOC</a></span></h4>
269
+
270
+ <p>If you plan to link with MSVC-built static libraries, you will need
271
+ to make sure you have <code class="code">Runtime Library</code> set to
272
+ <code class="code">Multi-threaded (/MT)</code> in your project&rsquo;s settings.
273
+ </p>
274
+ <p>You will need to define <code class="code">inline</code> to something MSVC understands:
275
+ </p><div class="example">
276
+ <pre class="example-preformatted">#define inline __inline
277
+ </pre></div>
278
+
279
+ <p>Also note, that as stated in <strong class="strong">Microsoft Visual C++</strong>, you will need
280
+ an MSVC-compatible <a class="uref" href="http://code.google.com/p/msinttypes/">inttypes.h</a>.
281
+ </p>
282
+ <p>If you plan on using import libraries created by dlltool, you must
283
+ set <code class="code">References</code> to <code class="code">No (/OPT:NOREF)</code> under the linker optimization
284
+ settings, otherwise the resulting binaries will fail during runtime.
285
+ This is not required when using import libraries generated by <code class="code">lib.exe</code>.
286
+ This issue is reported upstream at
287
+ <a class="url" href="http://sourceware.org/bugzilla/show_bug.cgi?id=12633">http://sourceware.org/bugzilla/show_bug.cgi?id=12633</a>.
288
+ </p>
289
+ <p>To create import libraries that work with the <code class="code">/OPT:REF</code> option
290
+ (which is enabled by default in Release mode), follow these steps:
291
+ </p>
292
+ <ol class="enumerate">
293
+ <li> Open the <em class="emph">Visual Studio Command Prompt</em>.
294
+
295
+ <p>Alternatively, in a normal command line prompt, call <samp class="file">vcvars32.bat</samp>
296
+ which sets up the environment variables for the Visual C++ tools
297
+ (the standard location for this file is something like
298
+ <samp class="file">C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat</samp>).
299
+ </p>
300
+ </li><li> Enter the <samp class="file">bin</samp> directory where the created LIB and DLL files
301
+ are stored.
302
+
303
+ </li><li> Generate new import libraries with <code class="command">lib.exe</code>:
304
+
305
+ <div class="example">
306
+ <pre class="example-preformatted">lib /machine:i386 /def:..\lib\foo-version.def /out:foo.lib
307
+ </pre></div>
308
+
309
+ <p>Replace <code class="code">foo-version</code> and <code class="code">foo</code> with the respective library names.
310
+ </p>
311
+ </li></ol>
312
+
313
+ <a class="anchor" id="Cross-compilation-for-Windows-with-Linux"></a><a name="Cross-compilation-for-Windows-with-Linux-1"></a>
314
+ <h3 class="section">4.3 Cross compilation for Windows with Linux<span class="pull-right"><a class="anchor hidden-xs" href="#Cross-compilation-for-Windows-with-Linux-1" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Cross-compilation-for-Windows-with-Linux-1" aria-hidden="true">TOC</a></span></h3>
315
+
316
+ <p>You must use the MinGW cross compilation tools available at
317
+ <a class="url" href="http://www.mingw.org/">http://www.mingw.org/</a>.
318
+ </p>
319
+ <p>Then configure FFmpeg with the following options:
320
+ </p><div class="example">
321
+ <pre class="example-preformatted">./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
322
+ </pre></div>
323
+ <p>(you can change the cross-prefix according to the prefix chosen for the
324
+ MinGW tools).
325
+ </p>
326
+ <p>Then you can easily test FFmpeg with <a class="uref" href="http://www.winehq.com/">Wine</a>.
327
+ </p>
328
+ <a name="Compilation-under-Cygwin"></a>
329
+ <h3 class="section">4.4 Compilation under Cygwin<span class="pull-right"><a class="anchor hidden-xs" href="#Compilation-under-Cygwin" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Compilation-under-Cygwin" aria-hidden="true">TOC</a></span></h3>
330
+
331
+ <p>Please use Cygwin 1.7.x as the obsolete 1.5.x Cygwin versions lack
332
+ llrint() in its C library.
333
+ </p>
334
+ <p>Install your Cygwin with all the &quot;Base&quot; packages, plus the
335
+ following &quot;Devel&quot; ones:
336
+ </p><div class="example">
337
+ <pre class="example-preformatted">binutils, gcc4-core, make, git, mingw-runtime, texinfo
338
+ </pre></div>
339
+
340
+ <p>In order to run FATE you will also need the following &quot;Utils&quot; packages:
341
+ </p><div class="example">
342
+ <pre class="example-preformatted">diffutils
343
+ </pre></div>
344
+
345
+ <p>If you want to build FFmpeg with additional libraries, download Cygwin
346
+ &quot;Devel&quot; packages for Ogg and Vorbis from any Cygwin packages repository:
347
+ </p><div class="example">
348
+ <pre class="example-preformatted">libogg-devel, libvorbis-devel
349
+ </pre></div>
350
+
351
+ <p>These library packages are only available from
352
+ <a class="uref" href="http://sourceware.org/cygwinports/">Cygwin Ports</a>:
353
+ </p>
354
+ <div class="example">
355
+ <pre class="example-preformatted">libSDL-devel, libgsm-devel, libmp3lame-devel,
356
+ speex-devel, libtheora-devel, libxvidcore-devel
357
+ </pre></div>
358
+
359
+ <p>The recommendation for x264 is to build it from source, as it evolves too
360
+ quickly for Cygwin Ports to be up to date.
361
+ </p>
362
+ <a name="Crosscompilation-for-Windows-under-Cygwin"></a>
363
+ <h3 class="section">4.5 Crosscompilation for Windows under Cygwin<span class="pull-right"><a class="anchor hidden-xs" href="#Crosscompilation-for-Windows-under-Cygwin" aria-hidden="true">#</a> <a class="anchor hidden-xs"href="#toc-Crosscompilation-for-Windows-under-Cygwin" aria-hidden="true">TOC</a></span></h3>
364
+
365
+ <p>With Cygwin you can create Windows binaries that do not need the cygwin1.dll.
366
+ </p>
367
+ <p>Just install your Cygwin as explained before, plus these additional
368
+ &quot;Devel&quot; packages:
369
+ </p><div class="example">
370
+ <pre class="example-preformatted">gcc-mingw-core, mingw-runtime, mingw-zlib
371
+ </pre></div>
372
+
373
+ <p>and add some special flags to your configure invocation.
374
+ </p>
375
+ <p>For a static build run
376
+ </p><div class="example">
377
+ <pre class="example-preformatted">./configure --target-os=mingw32 --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
378
+ </pre></div>
379
+
380
+ <p>and for a build with shared libraries
381
+ </p><div class="example">
382
+ <pre class="example-preformatted">./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
383
+ </pre></div>
384
+
385
+ <p style="font-size: small;">
386
+ This document was generated using <a class="uref" href="https://www.gnu.org/software/texinfo/"><em class="emph">makeinfo</em></a>.
387
+ </p>
388
+ </div>
389
+ </body>
390
+ </html>
ffmpeg-master-latest-win64-gpl/doc/style.min.css ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ The MIT License (MIT)
3
+
4
+ Copyright (c) 2014 Barbara Lepage <db0company@gmail.com>
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
23
+ */body{background-color:#313131;color:#e6e6e6;text-align:justify}body, h1, h2, h3, h4, h5, h6{font-family:"Lucida Grande","Lucida Sans Unicode","Lucida Sans","Helvetica Neue",Helvetica,Verdana,Tahoma,sans-serif}a{color:#4cae4c}a strong{color:#e6e6e6}a:hover{color:#7fc77f}a:hover strong{color:#4cae4c}main{width:100% ! important;min-height:600px;margin:auto}h1, h2, h3, h4{font-weight:bold;text-align:left}h1, h2, h3{color:#bebebe}h1 strong, h2 strong, h3 strong{color:#e6e6e6}h4, h5, h6{color:#3c8b3c}h1{border-bottom:4px #bebebe solid;padding:20px 2%}h3{border-bottom:2px #bebebe solid;padding:15px 1%}h4{border-bottom:1px solid #e6e6e6;padding:10px 0;margin:20px 0;color:#e6e6e6}.list-group .list-group-item{background-color:#3e3e3e;border-color:black}.list-group.list-group-big .list-group-item{padding:25px}.list-group a.list-group-item{color:#7fc77f}.list-group a.list-group-item:hover{background-color:#313131;color:#4cae4c}.well{background-color:#242424;border-color:black;color:#bebebe}.well strong{color:#e6e6e6}.well code{background-color:#313131}.well hr{border-color:#3c8b3c}.well h3{margin:5px 0 15px 0;border:0;padding:0}.well a{color:#4cae4c}.well a.btn{color:white}.well small{display:block;padding:0 10px;font-style:italic}.well.example{padding-top:40px;margin-bottom:130px}.well.example pre{margin:50px;margin-bottom:30px;font-size:1.5em}.well.example .btn{margin-right:50px;margin-bottom:20px}.well.well-with-icon{min-height:136px}.well.well-with-icon .pull-right,.well.well-with-icon .pull-left{background-color:#4cae4c;color:#e6e6e6;padding:10px;border-radius:5px;margin:5px}.well.well-with-icon .pull-right{margin-left:20px}.well.well-with-icon .pull-left{margin-right:20px}a.well{display:block}a.well:hover{text-decoration:none;opacity:0.8}.info, .warning{margin:10px;padding:10px;background-color:#3e3e3e;color:#e6e6e6}.info code, .warning code{background-color:#313131}.info{border-left:10px #4cae4c solid}.warning{border-left:10px #ae4c4c solid}.with-icon{padding:30px}.with-icon .pull-left{padding-right:30px}.with-icon .pull-right{padding-left:30px}dd{margin-left:20px}code{background-color:#242424;color:#7fc77f;display:inline-block;margin:5px}.table{margin:20px 0;border-radius:4px}.table th,.table td,.table tr{border:1px solid #171717}.table tr th{background-color:#3e3e3e;border-bottom:2px solid #e6e6e6}.table tr:nth-child(odd){background-color:#242424}#sidebar-wrapper, .navbar{background-color:#171717;overflow-x:hidden}#sidebar-wrapper .sidebar-brand img,#sidebar-wrapper .navbar-brand img, .navbar .sidebar-brand img, .navbar .navbar-brand img{opacity:0.6;margin-right:8px}#sidebar-wrapper .sidebar-brand:hover,#sidebar-wrapper .navbar-brand:hover, .navbar .sidebar-brand:hover, .navbar .navbar-brand:hover{color:#fff}#sidebar-wrapper .sidebar-brand:hover img,#sidebar-wrapper .navbar-brand:hover img, .navbar .sidebar-brand:hover img, .navbar .navbar-brand:hover img{opacity:1}#sidebar-wrapper .sidebar-nav li ul, .navbar .sidebar-nav li ul{list-style-type:none;padding:0}#sidebar-wrapper .sidebar-nav li ul li, .navbar .sidebar-nav li ul li{line-height:20px}#sidebar-wrapper .sidebar-nav li ul li a, .navbar .sidebar-nav li ul li a{padding-left:20px}.content-header{height:auto;background-color:#242424}.content-header h1{color:#e6e6e6;display:block;margin:0;margin-bottom:20px;line-height:normal;border-bottom:none}#download h4, #index h4{margin-top:180px}#download h4.first, #index h4.first{margin-top:20px}#download h4.first small, #index h4.first small{color:inherit;font-size:1em}#download .btn-download-wrapper, #index .btn-download-wrapper{text-align:center;margin:160px auto}#download .btn-download-wrapper .btn, #index .btn-download-wrapper .btn{font-size:3em;padding:3%;display:inline-block;margin-bottom:5px}#download .btn-download-wrapper small, #index .btn-download-wrapper small{display:block;font-size:0.4em}#download h2.description, #index h2.description{color:#e6e6e6;font-size:2em;font-weight:bold;margin:120px 50px;line-height:2em}#download h2.description .label, #index h2.description .label{font-size:0.5em}#download .btn-download-wrapper{margin:40px auto}#download .os-selector{text-align:center;color:#e6e6e6;margin:30px 0}#download .os-selector a.btn-build{color:#e6e6e6;display:block;padding:20px;border-radius:2px}#download .os-selector .btn-build[href="#build-linux"]{background-color:#e43}#download .os-selector .btn-build[href="#build-linux"]:hover{color:#e43;background-color:#e6e6e6}#download .os-selector .btn-build[href="#build-windows"]{background-color:#06a}#download .os-selector .btn-build[href="#build-windows"]:hover{color:#06a;background-color:#e6e6e6}#download .os-selector .btn-build[href="#build-mac"]{background-color:darkgrey}#download .os-selector .btn-build[href="#build-mac"]:hover{color:darkgrey;background-color:#e6e6e6}#download .os-selector .tab-content{margin-top:20px}#download .os-selector #build-linux h3{color:#e43}#download .os-selector #build-windows h3{color:#06a}#download .os-selector #build-mac h3{color:darkgrey}footer{background-color:#242424;border-top:1px #101010 solid;padding:20px 0%}footer a{display:block}footer img[alt="FFmpeg"]{width:50%;display:block;margin:auto}.example.user-good pre{color:#bfbfbf;border:1px solid #357735;border-left:10px solid #357735;background-color:#242424}.example.user-bad pre{color:#bfbfbf;border:1px solid #ae4c4c;border-left:10px solid #ae4c4c;background-color:#242424}
index.html ADDED
@@ -0,0 +1,615 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Audio Classification Workstation</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <style>
9
+ /* Custom scrollbar for history (WebKit browsers) */
10
+ .history-scrollbar::-webkit-scrollbar {
11
+ width: 8px;
12
+ }
13
+ .history-scrollbar::-webkit-scrollbar-track {
14
+ background: #1f2937; /* bg-gray-800 */
15
+ }
16
+ .history-scrollbar::-webkit-scrollbar-thumb {
17
+ background: #4b5563; /* bg-gray-600 */
18
+ border-radius: 4px;
19
+ }
20
+ .history-scrollbar::-webkit-scrollbar-thumb:hover {
21
+ background: #6b7280; /* bg-gray-500 */
22
+ }
23
+ /* Icon styling */
24
+ .icon {
25
+ width: 1.25rem; /* 20px */
26
+ height: 1.25rem; /* 20px */
27
+ display: inline-block;
28
+ vertical-align: middle;
29
+ }
30
+ .status-dot {
31
+ width: 8px;
32
+ height: 8px;
33
+ border-radius: 50%;
34
+ display: inline-block;
35
+ margin-right: 0.5rem;
36
+ }
37
+ .tag {
38
+ display: inline-block;
39
+ background-color: #374151; /* bg-gray-700 */
40
+ color: #d1d5db; /* text-gray-300 */
41
+ padding: 0.25rem 0.75rem;
42
+ border-radius: 9999px; /* rounded-full */
43
+ font-size: 0.75rem; /* text-xs */
44
+ margin: 0.25rem;
45
+ }
46
+ </style>
47
+ </head>
48
+ <body class="bg-gray-900 text-gray-200 min-h-screen flex flex-col">
49
+
50
+ <!-- Header -->
51
+ <header class="bg-gray-800 shadow-md">
52
+ <div class="container mx-auto px-6 py-3 flex justify-between items-center">
53
+ <h1 class="text-xl font-semibold text-white">Audio Classification Workstation</h1>
54
+ <div class="flex items-center space-x-3">
55
+ <button title="Help" class="text-gray-400 hover:text-white">
56
+ <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
57
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.79 4 4s-1.79 4-4 4c-1.742 0-3.223-.835-3.772-2M9 12l3 3m0 0l3-3m-3 3v6m-1.732-8.066A8.969 8.969 0 015.34 6.309m13.42 2.592a8.969 8.969 0 01-2.888 2.592m0 0A8.968 8.968 0 0112 21c-2.485 0-4.733-.985-6.364-2.592m12.728 0A8.969 8.969 0 0121.66 9.63m-16.022-.098A8.969 8.969 0 013.34 6.309m1.991 11.808A8.969 8.969 0 015.34 17.69m13.42-2.592a8.969 8.969 0 012.888-2.592M9 12a3 3 0 11-6 0 3 3 0 016 0z" />
58
+ </svg>
59
+ </button>
60
+ <button title="Settings" class="text-gray-400 hover:text-white">
61
+ <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
62
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
63
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
64
+ </svg>
65
+ </button>
66
+ </div>
67
+ </div>
68
+ </header>
69
+
70
+ <!-- Main Content Area -->
71
+ <main class="flex-grow container mx-auto px-6 py-4 grid grid-cols-1 md:grid-cols-3 gap-6">
72
+
73
+ <!-- Left Column -->
74
+ <div class="md:col-span-1 space-y-6">
75
+ <!-- Audio Input -->
76
+ <div class="bg-gray-800 p-5 rounded-lg shadow-lg">
77
+ <h2 class="text-lg font-semibold text-gray-100 mb-4">Audio Input</h2>
78
+ <div class="space-y-3">
79
+ <div>
80
+ <label for="audioSource" class="block text-sm font-medium text-gray-300 mb-1">Input Device</label>
81
+ <select id="audioSource" name="audioSource" class="w-full bg-gray-700 border border-gray-600 text-gray-200 rounded-md p-2 focus:ring-green-500 focus:border-green-500 text-sm">
82
+ <option>Default Microphone</option>
83
+ <!-- More options could be populated by JS -->
84
+ </select>
85
+ </div>
86
+ <div>
87
+ <label class="block text-sm font-medium text-gray-300 mb-1">Audio Level</label>
88
+ <div class="w-full bg-gray-700 rounded-full h-2.5">
89
+ <div class="bg-green-500 h-2.5 rounded-full" style="width: 45%"></div> <!-- Placeholder level -->
90
+ </div>
91
+ </div>
92
+ <button id="toggleRecordButton" class="w-full bg-gradient-to-br from-green-500 to-green-700 hover:from-green-600 hover:to-green-800 text-white font-bold py-2.5 px-4 rounded-lg shadow-md transition duration-150 ease-in-out transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2 focus:ring-offset-gray-800 flex items-center justify-center space-x-2">
93
+ <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
94
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z" />
95
+ </svg>
96
+ <span>Start Recording</span>
97
+ </button>
98
+ <p class="text-xs text-gray-400 text-center">Recording Time: <span id="timer">0s</span></p>
99
+ </div>
100
+ </div>
101
+
102
+ <!-- Upload Audio File -->
103
+ <div class="bg-gray-800 p-5 rounded-lg shadow-lg">
104
+ <h2 class="text-lg font-semibold text-gray-100 mb-4">Upload Audio File</h2>
105
+ <div class="space-y-3">
106
+ <div class="border-2 border-dashed border-gray-600 rounded-lg p-6 text-center cursor-pointer hover:border-gray-500">
107
+ <svg class="icon mx-auto mb-2 text-gray-500" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
108
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" />
109
+ </svg>
110
+ <p class="text-sm text-gray-400">Drag & drop an audio file or</p>
111
+ <input type="file" id="audioFile" accept="audio/*" class="hidden">
112
+ <button id="browseButton" class="mt-2 text-sm text-green-400 hover:text-green-300 font-semibold">Browse Files</button>
113
+ <p class="text-xs text-gray-500 mt-1">Supported formats: MP3, WAV, OGG, FLAC</p>
114
+ </div>
115
+ <button id="uploadButton" class="w-full bg-gradient-to-br from-blue-500 to-blue-700 hover:from-blue-600 hover:to-blue-800 text-white font-bold py-2.5 px-4 rounded-lg shadow-md transition duration-150 ease-in-out transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 focus:ring-offset-gray-800 flex items-center justify-center space-x-2">
116
+ <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" style="width:18px; height:18px;">
117
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" />
118
+ </svg>
119
+ <span>Upload and Recognize</span>
120
+ </button>
121
+ </div>
122
+ </div>
123
+
124
+ <!-- Model Information -->
125
+ <div class="bg-gray-800 p-5 rounded-lg shadow-lg">
126
+ <h2 class="text-lg font-semibold text-gray-100 mb-4">Model Information</h2>
127
+ <div class="space-y-2 text-sm">
128
+ <p><strong class="text-gray-300">Current Model:</strong> <span class="text-gray-400">Deep Learning Model</span></p>
129
+ <div class="flex flex-wrap items-center">
130
+ <strong class="text-gray-300 mr-2">Supported Categories:</strong>
131
+ <span class="tag">Music</span><span class="tag">Humming</span><span class="tag">Custom Audio</span>
132
+ </div>
133
+ <p><strong class="text-gray-300">Status:</strong> <span class="status-dot bg-green-500"></span><span class="text-green-400">Ready for processing</span></p>
134
+ <button class="mt-2 text-sm text-green-400 hover:text-green-300 font-semibold">View Model Details</button>
135
+ </div>
136
+ </div>
137
+ </div>
138
+
139
+ <!-- Middle Column -->
140
+ <div class="md:col-span-1 bg-gray-800 p-5 rounded-lg shadow-lg flex flex-col">
141
+ <h2 class="text-lg font-semibold text-gray-100 mb-4 flex items-center">
142
+ <svg class="icon mr-2" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
143
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19V6l12-3v13M9 19c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zm12-3c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zM9 10l12-3" />
144
+ </svg>
145
+ Classification Results
146
+ <span id="classificationStatus" class="ml-auto text-xs py-1 px-2.5 rounded-full bg-gray-700 text-gray-300">Ready</span>
147
+ </h2>
148
+ <div id="results" class="flex-grow bg-gray-700 p-4 rounded-md min-h-[200px] text-gray-300 overflow-auto">
149
+ <p class="italic text-gray-400">Record or upload audio to start classification.</p>
150
+ </div>
151
+ </div>
152
+
153
+ <!-- Right Column -->
154
+ <div class="md:col-span-1 bg-gray-800 p-5 rounded-lg shadow-lg flex flex-col">
155
+ <div class="flex justify-between items-center mb-4">
156
+ <h2 class="text-lg font-semibold text-gray-100">Chat with AI</h2>
157
+ <button title="Clear Chat" id="clearChatButton" class="text-gray-400 hover:text-white">
158
+ <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
159
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
160
+ </svg>
161
+ </button>
162
+ </div>
163
+ <div id="chatContainer" class="flex-grow space-y-3 overflow-y-auto history-scrollbar pr-1 min-h-[200px] mb-4">
164
+ <div class="text-center text-gray-500 pt-10">
165
+ <svg class="icon mx-auto mb-2 text-gray-500 w-10 h-10" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
166
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z" />
167
+ </svg>
168
+ <p>Start a conversation about the classification results.</p>
169
+ </div>
170
+ </div>
171
+ <div class="flex items-center space-x-2">
172
+ <input type="text" id="chatInput" placeholder="Type your message..." class="flex-grow bg-gray-700 border border-gray-600 text-gray-200 rounded-md p-2 focus:ring-green-500 focus:border-green-500 text-sm">
173
+ <button id="sendMessageButton" class="p-2 text-gray-400 hover:text-white bg-gray-700 rounded-md hover:bg-gray-600">
174
+ <svg class="icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
175
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8" />
176
+ </svg>
177
+ </button>
178
+ </div>
179
+ </div>
180
+ </main>
181
+
182
+ <script>
183
+ // DOM Elements
184
+ const toggleRecordButton = document.getElementById('toggleRecordButton');
185
+ const timerDisplay = document.getElementById('timer');
186
+ const resultsDiv = document.getElementById('results');
187
+ const classificationStatus = document.getElementById('classificationStatus');
188
+
189
+ const audioFileInput = document.getElementById('audioFile');
190
+ const uploadButton = document.getElementById('uploadButton');
191
+ const browseButton = document.getElementById('browseButton');
192
+
193
+ const chatContainer = document.getElementById('chatContainer');
194
+ const chatInput = document.getElementById('chatInput');
195
+ const sendMessageButton = document.getElementById('sendMessageButton');
196
+ const clearChatButton = document.getElementById('clearChatButton');
197
+
198
+ // Recording state and logic
199
+ let mediaRecorder;
200
+ let audioChunks = [];
201
+ let recognitionIntervalMs = 5000;
202
+ let periodicRecognitionTimer;
203
+ let recordingStartTime;
204
+ let durationUpdateTimer;
205
+ let isRecording = false;
206
+
207
+ let currentClassificationResult = null;
208
+
209
+ // --- Existing Helper Functions (Slightly Modified) ---
210
+ function updateTimerDisplay() {
211
+ if (!recordingStartTime) return;
212
+ const secondsElapsed = Math.floor((Date.now() - recordingStartTime) / 1000);
213
+ timerDisplay.textContent = String(secondsElapsed) + 's';
214
+ }
215
+
216
+ function setButtonState(recording) {
217
+ isRecording = recording;
218
+ const iconSVG = toggleRecordButton.querySelector('svg');
219
+ const textSpan = toggleRecordButton.querySelector('span');
220
+
221
+ if (isRecording) {
222
+ toggleRecordButton.classList.remove('from-green-500', 'to-green-700', 'hover:from-green-600', 'hover:to-green-800', 'focus:ring-green-500');
223
+ toggleRecordButton.classList.add('from-red-500', 'to-red-700', 'hover:from-red-600', 'hover:to-red-800', 'focus:ring-red-500');
224
+ textSpan.textContent = 'Stop Recording';
225
+ iconSVG.innerHTML = '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12v0a9 9 0 01-9 9m0-9a9 9 0 00-9 9m9-9V3m0 0a9 9 0 00-9 9m9-9h1.5M3 12h1.5m15 0V3m0 0a9 9 0 00-9-9m9 9c1.657 0 3-4.03 3-9" transform="matrix(1 0 0 1 0 0) rotate(0 12 12)" style="display: none;"></path><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" transform="matrix(1 0 0 1 0 0) rotate(0 12 12)"></path>'; // Stop Icon (X)
226
+ resultsDiv.innerHTML = '<p class="italic text-gray-400">Listening...</p>';
227
+ classificationStatus.textContent = 'Listening';
228
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-yellow-600 text-yellow-100';
229
+
230
+ recordingStartTime = Date.now();
231
+ updateTimerDisplay();
232
+ durationUpdateTimer = setInterval(updateTimerDisplay, 1000);
233
+ } else {
234
+ toggleRecordButton.classList.remove('from-red-500', 'to-red-700', 'hover:from-red-600', 'hover:to-red-800', 'focus:ring-red-500');
235
+ toggleRecordButton.classList.add('from-green-500', 'to-green-700', 'hover:from-green-600', 'hover:to-green-800', 'focus:ring-green-500');
236
+ textSpan.textContent = 'Start Recording';
237
+ iconSVG.innerHTML = '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z" />'; // Mic Icon
238
+
239
+ clearInterval(durationUpdateTimer);
240
+ recordingStartTime = null;
241
+ timerDisplay.textContent = '0s';
242
+ if (periodicRecognitionTimer) clearInterval(periodicRecognitionTimer);
243
+ }
244
+ }
245
+
246
+ async function startLiveRecording() {
247
+ if (isRecording) return; // Should not happen if button state is managed
248
+ try {
249
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
250
+ setButtonState(true);
251
+
252
+ const options = {
253
+ mimeType: 'audio/webm;codecs=opus',
254
+ audioBitsPerSecond: 128000
255
+ };
256
+ try {
257
+ mediaRecorder = new MediaRecorder(stream, options);
258
+ } catch (e1) {
259
+ console.warn('Failed to create MediaRecorder with audio/webm;codecs=opus: ' + e1.message + '. Trying with default.');
260
+ options.mimeType = '';
261
+ mediaRecorder = new MediaRecorder(stream, options);
262
+ }
263
+ console.log('Using mimeType:', mediaRecorder.mimeType);
264
+
265
+ audioChunks = [];
266
+ mediaRecorder.addEventListener('dataavailable', event => {
267
+ audioChunks.push(event.data);
268
+ });
269
+
270
+ mediaRecorder.addEventListener('stop', async () => {
271
+ stream.getTracks().forEach(track => track.stop());
272
+ setButtonState(false); // Reset button state
273
+
274
+ if (audioChunks.length > 0) {
275
+ await sendAudioChunkForRecognition(true); // isFinalChunk = true
276
+ } else {
277
+ resultsDiv.innerHTML = '<p class="italic text-gray-400">Recording stopped. No audio data.</p>';
278
+ classificationStatus.textContent = 'Ready';
279
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-gray-700 text-gray-300';
280
+ }
281
+ });
282
+
283
+ mediaRecorder.start();
284
+
285
+ // Send first chunk after a short delay
286
+ setTimeout(async () => {
287
+ if (mediaRecorder.state === 'recording') await sendAudioChunkForRecognition();
288
+ }, 2000);
289
+
290
+ // Setup periodic recognition
291
+ periodicRecognitionTimer = setInterval(async () => {
292
+ if (mediaRecorder.state === 'recording' && audioChunks.length > 0) {
293
+ await sendAudioChunkForRecognition();
294
+ }
295
+ }, recognitionIntervalMs);
296
+
297
+ } catch (err) {
298
+ console.error('Error accessing microphone:', err);
299
+ resultsDiv.innerHTML = '<p class="text-red-400">Could not access microphone. Please ensure permission is granted.</p>';
300
+ classificationStatus.textContent = 'Error';
301
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-red-700 text-red-100';
302
+ setButtonState(false); // Reset button state on error
303
+ }
304
+ }
305
+
306
+ function stopLiveRecording() {
307
+ if (mediaRecorder && mediaRecorder.state === 'recording') {
308
+ mediaRecorder.stop();
309
+ }
310
+ // setButtonState(false) is called by mediaRecorder 'stop' event listener
311
+ if (periodicRecognitionTimer) clearInterval(periodicRecognitionTimer);
312
+ if (durationUpdateTimer) clearInterval(durationUpdateTimer);
313
+ // recordingStartTime will be reset by setButtonState via mediaRecorder 'stop'
314
+ }
315
+
316
+ toggleRecordButton.addEventListener('click', () => {
317
+ if (!isRecording) {
318
+ startLiveRecording();
319
+ } else {
320
+ stopLiveRecording();
321
+ }
322
+ });
323
+
324
+ async function sendAudioChunkForRecognition(isFinalChunk = false) {
325
+ if (audioChunks.length === 0 && !isFinalChunk) return;
326
+
327
+ const audioBlob = new Blob(audioChunks, { type: mediaRecorder.mimeType || 'audio/webm;codecs=opus' });
328
+ let tempAudioChunks = [...audioChunks];
329
+ audioChunks = [];
330
+
331
+ if (!isFinalChunk && tempAudioChunks.length === 0) return;
332
+
333
+ // Update status for intermediate chunks if not already showing success
334
+ if (!isFinalChunk && !resultsDiv.querySelector('.text-green-400')) {
335
+ resultsDiv.innerHTML = '<p class="italic text-gray-400">Processing audio...</p>';
336
+ classificationStatus.textContent = 'Processing';
337
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-blue-600 text-blue-100';
338
+ }
339
+
340
+ const formData = new FormData();
341
+ const fileExtension = (mediaRecorder.mimeType.split('/')[1]?.split(';')[0]) || 'webm';
342
+ formData.append('file', audioBlob, 'live_audio_chunk.' + fileExtension);
343
+
344
+ try {
345
+ const response = await fetch('/recognize-live-chunk/', {
346
+ method: 'POST',
347
+ body: formData,
348
+ });
349
+ const result = await response.json();
350
+ displayCombinedResults(result, isFinalChunk);
351
+
352
+ } catch (error) {
353
+ console.error('Error sending audio chunk:', error);
354
+ resultsDiv.innerHTML =
355
+ '<p class="text-red-400">Error sending audio data.</p>' +
356
+ '<p class="text-xs text-gray-500">' + error.message + '</p>';
357
+ classificationStatus.textContent = 'Error';
358
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-red-700 text-red-100';
359
+ }
360
+ }
361
+
362
+ function displayCombinedResults(result, isFinalChunk) {
363
+ let html = '';
364
+
365
+ if (result.success) {
366
+ currentClassificationResult = result; // Store the current classification result
367
+
368
+ if (result.type === 'music') {
369
+ // Display song recognition results
370
+ const musicResult = result.music_result;
371
+ html += '<div class="mb-4">';
372
+ html += '<p class="text-green-400 font-semibold text-lg mb-2">Song Match Found!</p>';
373
+ if (musicResult.song_name) {
374
+ html += '<div class="mb-1"><strong class="text-gray-300">Title:</strong> <span class="text-gray-100">' + musicResult.song_name + '</span></div>';
375
+ }
376
+ if (musicResult.artists) {
377
+ html += '<div class="mb-1"><strong class="text-gray-300">Artists:</strong> <span class="text-gray-100">' + musicResult.artists + '</span></div>';
378
+ }
379
+ if (musicResult.album) {
380
+ html += '<div class="mb-1"><strong class="text-gray-300">Album:</strong> <span class="text-gray-100">' + musicResult.album + '</span></div>';
381
+ }
382
+ html += '</div>';
383
+
384
+ // Add initial AI message about the song
385
+ addAIMessage(`I've detected a song! It's "${musicResult.song_name}" by ${musicResult.artists}. Would you like to know more about this song or artist?`);
386
+
387
+ classificationStatus.textContent = 'Music Found';
388
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-green-600 text-green-100';
389
+ } else if (result.type === 'vehicle') {
390
+ // Display vehicle classification results with model and make
391
+ const vehicleResult = result.vehicle_result;
392
+ const vehicleInfo = {
393
+ 'Car': {
394
+ make: 'Toyota',
395
+ model: 'Camry'
396
+ },
397
+ 'Truck': {
398
+ make: 'Ford',
399
+ model: 'F-150'
400
+ }
401
+ };
402
+
403
+ const info = vehicleInfo[vehicleResult.vehicle_type] || { make: 'Unknown', model: 'Unknown' };
404
+
405
+ html += '<div class="mb-4">';
406
+ html += '<p class="text-purple-400 font-semibold text-lg mb-2">Vehicle Detected:</p>';
407
+ html += '<div class="bg-gray-700 p-4 rounded-lg">';
408
+ html += '<div class="mb-2"><span class="text-gray-100 text-xl font-medium">' + vehicleResult.vehicle_type + '</span></div>';
409
+ html += '<div class="text-gray-300 text-sm">';
410
+ html += '<div class="mb-1"><strong>Make:</strong> ' + info.make + '</div>';
411
+ html += '<div><strong>Model:</strong> ' + info.model + '</div>';
412
+ html += '</div></div></div>';
413
+
414
+ // Add initial AI message about the vehicle
415
+ addAIMessage(`I've detected a ${info.make} ${info.model} ${vehicleResult.vehicle_type.toLowerCase()}. Would you like to know more about this vehicle?`);
416
+
417
+ classificationStatus.textContent = 'Vehicle Detected';
418
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-purple-600 text-purple-100';
419
+ } else if (result.type === 'sound') {
420
+ // Display only the top YAMNet classification result
421
+ const soundResult = result.sound_result;
422
+ const [topLabel] = soundResult.top_classes[0];
423
+
424
+ html += '<div class="mb-4">';
425
+ html += '<p class="text-blue-400 font-semibold text-lg mb-2">Sound Classification:</p>';
426
+ html += '<div class="bg-gray-700 p-4 rounded-lg">';
427
+ html += '<span class="text-gray-100 text-xl font-medium">' + topLabel + '</span>';
428
+ html += '</div></div>';
429
+
430
+ // Add initial AI message about the sound
431
+ addAIMessage(`I've detected a ${topLabel} sound. Would you like to know more about this type of sound?`);
432
+
433
+ classificationStatus.textContent = 'Sound Classified';
434
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-blue-600 text-blue-100';
435
+ }
436
+ } else {
437
+ // No results from any classification
438
+ if (isFinalChunk) {
439
+ html = '<p class="italic text-gray-400">Recording stopped. No matches found.</p>';
440
+ classificationStatus.textContent = 'No Match';
441
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-yellow-600 text-yellow-100';
442
+ } else if (mediaRecorder && mediaRecorder.state === 'recording') {
443
+ const isCurrentlyDisplayingSuccess = resultsDiv.querySelector('.text-green-400, .text-blue-400, .text-purple-400');
444
+ if (!isCurrentlyDisplayingSuccess) {
445
+ html = '<p class="italic text-gray-400">No match yet. Keep recording...</p>';
446
+ classificationStatus.textContent = 'Listening';
447
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-yellow-600 text-yellow-100';
448
+ }
449
+ }
450
+ }
451
+
452
+ resultsDiv.innerHTML = html;
453
+ }
454
+
455
+ // Chat functionality
456
+ function addUserMessage(message) {
457
+ const messageDiv = document.createElement('div');
458
+ messageDiv.className = 'bg-blue-600 p-3 rounded-lg ml-4';
459
+ messageDiv.innerHTML = `<p class="text-white">${message}</p>`;
460
+ chatContainer.appendChild(messageDiv);
461
+ chatContainer.scrollTop = chatContainer.scrollHeight;
462
+ }
463
+
464
+ function addAIMessage(message) {
465
+ const messageDiv = document.createElement('div');
466
+ messageDiv.className = 'bg-gray-700 p-3 rounded-lg mr-4';
467
+ messageDiv.innerHTML = `<p class="text-gray-100">${message}</p>`;
468
+ chatContainer.appendChild(messageDiv);
469
+ chatContainer.scrollTop = chatContainer.scrollHeight;
470
+ }
471
+
472
+ async function sendMessageToMistral(message) {
473
+ if (!currentClassificationResult) {
474
+ addAIMessage("I don't have any classification results to discuss yet. Please record or upload some audio first.");
475
+ return;
476
+ }
477
+
478
+ let systemPrompt = "You are a helpful assistant discussing audio classification results. ";
479
+
480
+ if (currentClassificationResult.type === 'music') {
481
+ const music = currentClassificationResult.music_result;
482
+ systemPrompt += `The user is asking about a song: "${music.song_name}" by ${music.artists} from the album "${music.album}". `;
483
+ } else if (currentClassificationResult.type === 'vehicle') {
484
+ const vehicle = currentClassificationResult.vehicle_result;
485
+ systemPrompt += `The user is asking about a ${vehicle.vehicle_type}. `;
486
+ } else if (currentClassificationResult.type === 'sound') {
487
+ const sound = currentClassificationResult.sound_result;
488
+ systemPrompt += `The user is asking about a sound classified as "${sound.top_classes[0][0]}". `;
489
+ }
490
+
491
+ try {
492
+ const response = await fetch('/chat-with-mistral/', {
493
+ method: 'POST',
494
+ headers: {
495
+ 'Content-Type': 'application/json',
496
+ },
497
+ body: JSON.stringify({
498
+ system_prompt: systemPrompt,
499
+ user_message: message
500
+ })
501
+ });
502
+
503
+ const data = await response.json();
504
+ if (data.success) {
505
+ addAIMessage(data.response);
506
+ } else {
507
+ addAIMessage("I'm sorry, I encountered an error while processing your request.");
508
+ }
509
+ } catch (error) {
510
+ console.error('Error sending message to Mistral:', error);
511
+ addAIMessage("I'm sorry, I encountered an error while processing your request.");
512
+ }
513
+ }
514
+
515
+ sendMessageButton.addEventListener('click', async () => {
516
+ const message = chatInput.value.trim();
517
+ if (message) {
518
+ addUserMessage(message);
519
+ chatInput.value = '';
520
+ await sendMessageToMistral(message);
521
+ }
522
+ });
523
+
524
+ chatInput.addEventListener('keypress', (e) => {
525
+ if (e.key === 'Enter') {
526
+ sendMessageButton.click();
527
+ }
528
+ });
529
+
530
+ clearChatButton.addEventListener('click', () => {
531
+ chatContainer.innerHTML = `
532
+ <div class="text-center text-gray-500 pt-10">
533
+ <svg class="icon mx-auto mb-2 text-gray-500 w-10 h-10" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
534
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z" />
535
+ </svg>
536
+ <p>Start a conversation about the classification results.</p>
537
+ </div>`;
538
+ });
539
+
540
+ // --- File Upload Logic (Slightly Modified) ---
541
+ browseButton.addEventListener('click', () => audioFileInput.click());
542
+
543
+ audioFileInput.addEventListener('change', () => {
544
+ if (audioFileInput.files.length > 0) {
545
+ // Optionally display file name or trigger upload automatically
546
+ // For now, user still needs to click "Upload and Recognize"
547
+ console.log("File selected:", audioFileInput.files[0].name);
548
+ }
549
+ });
550
+
551
+ uploadButton.addEventListener('click', async () => {
552
+ const file = audioFileInput.files[0];
553
+ if (!file) {
554
+ resultsDiv.innerHTML = '<p class="text-red-400">Please select an audio file first.</p>';
555
+ classificationStatus.textContent = 'Error';
556
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-red-700 text-red-100';
557
+ return;
558
+ }
559
+
560
+ resultsDiv.innerHTML = '<p class="text-gray-400 italic">Uploading and analyzing...</p>';
561
+ classificationStatus.textContent = 'Uploading';
562
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-blue-600 text-blue-100';
563
+ const formData = new FormData();
564
+ formData.append('file', file);
565
+
566
+ try {
567
+ const response = await fetch('/classify/', {
568
+ method: 'POST',
569
+ body: formData
570
+ });
571
+
572
+ const result = await response.json();
573
+ displayCombinedResults(result, true);
574
+
575
+ } catch (error) {
576
+ console.error("Error during file upload:", error);
577
+ resultsDiv.innerHTML = '<p class="text-red-400">Error during file upload. Check console for details.</p>';
578
+ classificationStatus.textContent = 'Error';
579
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-red-700 text-red-100';
580
+ }
581
+ });
582
+
583
+ function displayFileUploadResult(data) {
584
+ resultsDiv.innerHTML = '';
585
+
586
+ if (data.success === true) {
587
+ const title = data.song_name || 'Unknown Title';
588
+ const artists = data.artists || 'Unknown Artist';
589
+ const album = data.album || 'Unknown Album';
590
+
591
+ resultsDiv.innerHTML =
592
+ '<h3 class="text-xl font-semibold text-green-400 mb-2">Song Recognized!</h3>' +
593
+ '<p class="mb-1"><strong class="text-gray-300">Title:</strong> <span class="text-gray-100">' + title + '</span></p>' +
594
+ '<p class="mb-1"><strong class="text-gray-300">Artist(s):</strong> <span class="text-gray-100">' + artists + '</span></p>' +
595
+ '<p class="mb-1"><strong class="text-gray-300">Album:</strong> <span class="text-gray-100">' + album + '</span></p>';
596
+ classificationStatus.textContent = 'Success';
597
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-green-600 text-green-100';
598
+
599
+ } else {
600
+ let errorMessage = data.message || "Could not recognize the song.";
601
+ resultsDiv.innerHTML = '<p class="text-yellow-400">' + errorMessage + '</p>';
602
+
603
+ if (data.raw_acr_response) {
604
+ resultsDiv.innerHTML += '<p class="text-xs text-gray-500 mt-2">Details:</p><pre class="text-xs text-gray-600 bg-gray-800 p-2 rounded">' + JSON.stringify(data.raw_acr_response, null, 2) + '</pre>';
605
+ } else {
606
+ resultsDiv.innerHTML += '<p class="text-xs text-gray-500 mt-2">Full Response:</p><pre class="text-xs text-gray-600 bg-gray-800 p-2 rounded">' + JSON.stringify(data, null, 2) + '</pre>';
607
+ }
608
+ classificationStatus.textContent = 'No Match';
609
+ classificationStatus.className = 'ml-auto text-xs py-1 px-2.5 rounded-full bg-yellow-600 text-yellow-100';
610
+ }
611
+ }
612
+
613
+ </script>
614
+ </body>
615
+ </html>
main.py ADDED
@@ -0,0 +1,500 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import logging
3
+ import os
4
+ import shutil
5
+ import tempfile
6
+ from pathlib import Path
7
+
8
+ import librosa
9
+ import numpy as np
10
+ import requests
11
+ import tensorflow as tf
12
+ import tensorflow_hub as hub
13
+ from acrcloud.recognizer import ACRCloudRecognizer
14
+ from fastapi import FastAPI, File, Form, HTTPException, Request, UploadFile
15
+ from fastapi.middleware.cors import CORSMiddleware
16
+ from fastapi.responses import HTMLResponse
17
+ from fastapi.templating import Jinja2Templates
18
+ from pydantic import BaseModel
19
+ from pydub import AudioSegment
20
+ from tensorflow.keras.models import load_model
21
+
22
+ app = FastAPI()
23
+
24
+ # Add CORS middleware
25
+ app.add_middleware(
26
+ CORSMiddleware,
27
+ allow_origins=["*"],
28
+ allow_credentials=True,
29
+ allow_methods=["*"],
30
+ allow_headers=["*"],
31
+ )
32
+
33
+ templates = Jinja2Templates(directory=".")
34
+ model = load_model('./models/neural_networks.h5')
35
+ # ACRCloud Configuration using SDK
36
+ ACRCLOUD_CONFIG = {
37
+ 'host': 'identify-ap-southeast-1.acrcloud.com',
38
+ 'access_key': 'c529996b7457352ca72e2ccb1fcbc4dd',
39
+ 'access_secret': 'MQitmw327GTfkoLhCzk90Uwcf2dL0DGhUvQvQwS0',
40
+ 'timeout': 1 # seconds
41
+ }
42
+ acr_recognizer = ACRCloudRecognizer(ACRCLOUD_CONFIG)
43
+
44
+ # Load YAMNet model and labels
45
+ yamnet_model_handle = 'https://tfhub.dev/google/yamnet/1'
46
+ yamnet_model = hub.load(yamnet_model_handle)
47
+
48
+ with open("yamnet_class_map.csv", "r") as f:
49
+ yamnet_classes = [line.strip().split(",")[2] for line in f.readlines()[1:]]
50
+
51
+ # # Set up ffmpeg path
52
+ # FFMPEG_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ffmpeg-master-latest-win64-gpl", "bin")
53
+ # if os.path.exists(FFMPEG_PATH):
54
+ # os.environ["PATH"] = FFMPEG_PATH + os.pathsep + os.environ["PATH"]
55
+ # AudioSegment.converter = os.path.join(FFMPEG_PATH, "ffmpeg.exe")
56
+ # AudioSegment.ffmpeg = os.path.join(FFMPEG_PATH, "ffmpeg.exe")
57
+ # AudioSegment.ffprobe = os.path.join(FFMPEG_PATH, "ffprobe.exe")
58
+
59
+ # Comment out or remove the Windows-specific FFMPEG_PATH setup
60
+ # In Docker, ffmpeg will be installed via apt-get and should be in the PATH
61
+ # pydub should find it automatically.
62
+ # If issues arise, one might need to set AudioSegment.converter explicitly,
63
+ # but without the Windows-specific path.
64
+ # For example:
65
+ # AudioSegment.converter = "/usr/bin/ffmpeg" # or wherever ffmpeg is installed
66
+ # AudioSegment.ffmpeg = "/usr/bin/ffmpeg"
67
+ # AudioSegment.ffprobe = "/usr/bin/ffprobe"
68
+ # However, this is often not needed if ffmpeg is in the system PATH.
69
+
70
+ def extract_features(audio_path, max_length=100):
71
+ y, sr = librosa.load(audio_path, sr=None)
72
+ y_normalized = librosa.util.normalize(y)
73
+ segments = librosa.effects.split(y_normalized, top_db=20)
74
+
75
+ mfccs = []
76
+ for start, end in segments:
77
+ segment = y[start:end]
78
+ mfcc = librosa.feature.mfcc(y=segment, sr=sr, n_mfcc=13)
79
+ if mfcc.shape[1] > max_length:
80
+ mfcc = mfcc[:, :max_length]
81
+ else:
82
+ pad_width = max_length - mfcc.shape[1]
83
+ mfcc = np.pad(mfcc, pad_width=((0, 0), (0, pad_width)), mode='constant')
84
+ mfccs.append(mfcc)
85
+
86
+ return mfccs
87
+
88
+ def predict_vehicle_class(audio_path):
89
+ features = extract_features(audio_path)
90
+
91
+ # Normalize using training distribution (consider saving stats during training if accuracy matters)
92
+ features = np.array(features)
93
+ features = (features - np.mean(features)) / np.std(features)
94
+
95
+ # Average predictions across all segments
96
+ predictions = model.predict(features)
97
+ averaged_prediction = np.mean(predictions, axis=0)
98
+ predicted_class = int(np.argmax(averaged_prediction)) # Convert numpy.int64 to Python int
99
+
100
+ return predicted_class
101
+
102
+ def convert_audio_to_wav(src_path: str, dst_path: str) -> bool:
103
+ """Convert any audio file to WAV format using pydub."""
104
+ try:
105
+ # Get the file extension
106
+ ext = os.path.splitext(src_path)[1].lower().lstrip('.')
107
+
108
+ # Load the audio file with specific parameters
109
+ audio = AudioSegment.from_file(
110
+ src_path,
111
+ format=ext,
112
+ parameters=["-ar", "16000", "-ac", "1"] # Set sample rate to 16kHz and mono
113
+ )
114
+
115
+ # Export as WAV with specific parameters
116
+ audio.export(
117
+ dst_path,
118
+ format="wav",
119
+ parameters=["-ar", "16000", "-ac", "1", "-acodec", "pcm_s16le"]
120
+ )
121
+ return True
122
+ except Exception as e:
123
+ logging.error(f"Error converting audio file: {str(e)}")
124
+ return False
125
+
126
+ def classify_audio_with_yamnet(file_path):
127
+ try:
128
+ # Create a temporary WAV file
129
+ with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as temp_wav:
130
+ temp_wav_path = temp_wav.name
131
+
132
+ # Convert the input file to WAV if needed
133
+ if not convert_audio_to_wav(file_path, temp_wav_path):
134
+ return {
135
+ "success": False,
136
+ "message": "Failed to convert audio file to WAV format"
137
+ }
138
+
139
+ try:
140
+ # Load and process the audio
141
+ waveform, sr = librosa.load(temp_wav_path, sr=16000) # YAMNet expects 16kHz
142
+ scores, embeddings, spectrogram = yamnet_model(waveform)
143
+ scores_np = scores.numpy().mean(axis=0) # average over time
144
+
145
+ top5_i = np.argsort(scores_np)[::-1][:5]
146
+ top_labels = [(yamnet_classes[i], float(scores_np[i])) for i in top5_i] # Convert scores to Python float
147
+
148
+ return {
149
+ "success": True,
150
+ "top_classes": top_labels
151
+ }
152
+ finally:
153
+ # Clean up the temporary file
154
+ if os.path.exists(temp_wav_path):
155
+ os.unlink(temp_wav_path)
156
+
157
+ except Exception as e:
158
+ logging.exception("YAMNet classification failed:")
159
+ return {
160
+ "success": False,
161
+ "message": f"Audio classification failed: {str(e)}"
162
+ }
163
+
164
+ def is_vehicle_sound(yamnet_classes):
165
+ """
166
+ Check if any of the top YAMNet classifications are vehicle-related.
167
+ Returns True if a vehicle sound is detected, along with the matched class and score.
168
+ """
169
+ vehicle_keywords = [
170
+ # General vehicle terms
171
+ 'vehicle', 'automobile', 'motor vehicle',
172
+ # Specific vehicle types
173
+ 'car', 'truck', 'bus', 'van', 'motorcycle', 'scooter',
174
+ # Vehicle components
175
+ 'engine', 'motor', 'horn', 'siren', 'tire', 'wheel',
176
+ # Vehicle sounds
177
+ 'revving', 'acceleration', 'braking', 'idling',
178
+ # Transportation
179
+ 'transport', 'traffic', 'road'
180
+ ]
181
+
182
+ # Log the top classifications for debugging
183
+ logging.info("Top YAMNet classifications:")
184
+ for class_name, score in yamnet_classes:
185
+ logging.info(f"- {class_name}: {score:.2f}")
186
+
187
+ # Check each classification against vehicle keywords
188
+ for class_name, score in yamnet_classes:
189
+ class_name_lower = class_name.lower()
190
+ for keyword in vehicle_keywords:
191
+ if keyword in class_name_lower:
192
+ logging.info(f"Vehicle sound detected: '{class_name}' (score: {score:.2f})")
193
+ return True, class_name, score
194
+
195
+ logging.info("No vehicle sounds detected in the audio")
196
+ return False, None, 0.0
197
+
198
+ @app.post("/classify/")
199
+ async def classify_audio(file: UploadFile = File(...)):
200
+ temp_filename = f"temp_classify_{file.filename}"
201
+ file_content = await file.read()
202
+
203
+ try:
204
+ with open(temp_filename, "wb") as f:
205
+ f.write(file_content)
206
+
207
+ # First try music recognition
208
+ result_json_str = acr_recognizer.recognize_by_file(temp_filename, 0)
209
+ music_result = format_acrcloud_response(result_json_str)
210
+
211
+ if music_result["success"]:
212
+ # If music recognition was successful, return that result
213
+ return {
214
+ "success": True,
215
+ "type": "music",
216
+ "music_result": music_result
217
+ }
218
+ else:
219
+ # If music recognition failed, try YAMNet classification
220
+ yamnet_result = classify_audio_with_yamnet(temp_filename)
221
+ if yamnet_result["success"]:
222
+ # Check if the sound is vehicle-related
223
+ is_vehicle, vehicle_class, vehicle_score = is_vehicle_sound(yamnet_result["top_classes"])
224
+ if is_vehicle:
225
+ # If it's a vehicle sound, use the neural network for specific classification
226
+ vehicle_class = predict_vehicle_class(temp_filename)
227
+ vehicle_type = "Car" if vehicle_class == 0 else "Truck"
228
+
229
+ return {
230
+ "success": True,
231
+ "type": "vehicle",
232
+ "vehicle_result": {
233
+ "vehicle_type": vehicle_type,
234
+ "detected_sound": vehicle_class,
235
+ "confidence": float(vehicle_score) * 100
236
+ }
237
+ }
238
+
239
+ # If not a vehicle sound, return YAMNet classification
240
+ return {
241
+ "success": True,
242
+ "type": "sound",
243
+ "sound_result": yamnet_result
244
+ }
245
+ else:
246
+ return {
247
+ "success": False,
248
+ "message": "No music, vehicle, or sound patterns recognized."
249
+ }
250
+
251
+ except Exception as e:
252
+ logging.exception("Error during classification:")
253
+ return {"success": False, "message": str(e)}
254
+
255
+ finally:
256
+ if os.path.exists(temp_filename):
257
+ os.remove(temp_filename)
258
+
259
+ @app.get("/", response_class=HTMLResponse)
260
+ async def read_root(request: Request):
261
+ return templates.TemplateResponse("index.html", {"request": request})
262
+
263
+ @app.post("/recognize/")
264
+ async def recognize_song_acr(file: UploadFile = File(...)):
265
+ temp_filename = f"temp_recognize_{file.filename}"
266
+ file_content = await file.read()
267
+
268
+ try:
269
+ with open(temp_filename, "wb") as buffer:
270
+ buffer.write(file_content)
271
+
272
+ result_json_str = acr_recognizer.recognize_by_file(temp_filename, 0)
273
+
274
+ return format_acrcloud_response(result_json_str)
275
+ except Exception as e:
276
+ logging.exception("Error during SDK ACRCloud recognition:")
277
+ return {"success": False, "message": f"Recognition failed: {str(e)}"}
278
+ finally:
279
+ # Changed: Ensure temp file is cleaned up
280
+ if os.path.exists(temp_filename):
281
+ os.remove(temp_filename)
282
+
283
+ @app.post("/upload/")
284
+ async def upload_song_acr(file: UploadFile = File(...), song_name: str = Form(None)):
285
+ temp_filename = f"temp_upload_{file.filename}"
286
+ file_content = await file.read()
287
+
288
+ try:
289
+ with open(temp_filename, "wb") as buffer:
290
+ buffer.write(file_content)
291
+
292
+ result_json_str = acr_recognizer.recognize_by_file(temp_filename, 0)
293
+
294
+ response_data = format_acrcloud_response(result_json_str)
295
+ if song_name and response_data.get("success"):
296
+ response_data["message_context"] = f"Recognition for (originally uploaded as '{song_name}')"
297
+ elif song_name and not response_data.get("success"):
298
+ response_data["message"] = f"Recognition for (originally uploaded as '{song_name}') failed: {response_data.get('message')}"
299
+
300
+ return response_data
301
+ except Exception as e:
302
+ logging.exception("Error during SDK ACRCloud upload/recognition:")
303
+ return {"success": False, "message": f"Upload/Recognition failed: {str(e)}"}
304
+ finally:
305
+ if os.path.exists(temp_filename):
306
+ os.remove(temp_filename)
307
+
308
+ @app.post("/recognize-live-chunk/")
309
+ async def recognize_live_chunk(file: UploadFile = File(...)):
310
+ file_content = await file.read()
311
+
312
+ if not file_content:
313
+ return {"success": False, "message": "Empty audio chunk received."}
314
+
315
+ try:
316
+ logging.info(f"Received live chunk, size: {len(file_content)} bytes, filename: {file.filename}")
317
+
318
+ # First try music recognition
319
+ result_json_str = acr_recognizer.recognize_by_filebuffer(file_content, 0)
320
+ music_result = format_acrcloud_response(result_json_str)
321
+
322
+ # Check if we got a valid music result
323
+ if music_result["success"] and music_result.get("song_name"):
324
+ # If we have a valid song name, return the music result
325
+ return {
326
+ "success": True,
327
+ "type": "music",
328
+ "music_result": music_result
329
+ }
330
+
331
+ # If no valid music result, try YAMNet classification
332
+ with tempfile.NamedTemporaryFile(suffix='.webm', delete=False) as temp_file:
333
+ temp_filename = temp_file.name
334
+ temp_file.write(file_content)
335
+
336
+ try:
337
+ # Convert to WAV first
338
+ wav_filename = temp_filename.replace('.webm', '.wav')
339
+ if convert_audio_to_wav(temp_filename, wav_filename):
340
+ yamnet_result = classify_audio_with_yamnet(wav_filename)
341
+
342
+ if yamnet_result["success"]:
343
+ # Check if the sound is vehicle-related
344
+ is_vehicle, vehicle_class, vehicle_score = is_vehicle_sound(yamnet_result["top_classes"])
345
+ if is_vehicle:
346
+ # If it's a vehicle sound, use the neural network for specific classification
347
+ vehicle_class = predict_vehicle_class(wav_filename)
348
+ vehicle_type = "Car" if vehicle_class == 0 else "Truck"
349
+
350
+ return {
351
+ "success": True,
352
+ "type": "vehicle",
353
+ "vehicle_result": {
354
+ "vehicle_type": vehicle_type,
355
+ "detected_sound": str(vehicle_class), # Convert to string
356
+ "confidence": float(vehicle_score) * 100 # Convert to Python float
357
+ }
358
+ }
359
+
360
+ # If not a vehicle sound, return YAMNet classification
361
+ return {
362
+ "success": True,
363
+ "type": "sound",
364
+ "sound_result": {
365
+ "top_classes": [(str(label), float(score)) for label, score in yamnet_result["top_classes"]]
366
+ }
367
+ }
368
+
369
+ # If we get here, all recognition attempts failed
370
+ return {
371
+ "success": False,
372
+ "message": "No music, vehicle, or sound patterns recognized."
373
+ }
374
+ finally:
375
+ # Clean up temporary files
376
+ if os.path.exists(temp_filename):
377
+ os.remove(temp_filename)
378
+ if os.path.exists(wav_filename):
379
+ os.remove(wav_filename)
380
+
381
+ except Exception as e:
382
+ logging.exception("Error during audio processing:")
383
+ return {"success": False, "message": f"Processing failed: {str(e)}"}
384
+
385
+ def format_acrcloud_response(result_json_str: str):
386
+ """
387
+ Parses the JSON string response from ACRCloud and formats it.
388
+ """
389
+ try:
390
+ result = json.loads(result_json_str)
391
+ logging.info(f"ACRCloud raw response: {result}")
392
+
393
+ # Check if we have a valid music result
394
+ if result.get("status", {}).get("code") == 0 and "metadata" in result and "music" in result["metadata"]:
395
+ # Ensure 'music' list is not empty
396
+ if not result["metadata"]["music"]:
397
+ return {"success": False, "message": "No music metadata found in response."}
398
+
399
+ music_info = result["metadata"]["music"][0]
400
+ title = music_info.get("title")
401
+
402
+ # If no title, it's not a valid music result
403
+ if not title:
404
+ return {"success": False, "message": "No song title found in response."}
405
+
406
+ artists_list = music_info.get("artists", [])
407
+ artists = ", ".join([artist["name"] for artist in artists_list if "name" in artist])
408
+ album = music_info.get("album", {}).get("name")
409
+
410
+ offset_seconds = music_info.get("play_offset_ms", 0) / 1000.0
411
+ if offset_seconds == 0 and "sample_begin_time_offset_ms" in music_info:
412
+ offset_seconds = music_info.get("sample_begin_time_offset_ms", 0) / 1000.0
413
+
414
+ confidence = music_info.get("score", 0)
415
+ if confidence == 0 and "result_type" in result:
416
+ confidence = result.get("result_type",0) * 25
417
+
418
+ return {
419
+ "success": True,
420
+ "song_name": title,
421
+ "artists": artists,
422
+ "album": album,
423
+ "confidence": confidence,
424
+ "offset_seconds": offset_seconds,
425
+ "raw_acr_response": result
426
+ }
427
+ else:
428
+ return {"success": False, "message": result.get("status", {}).get("msg", "Song not recognized or error in response.")}
429
+ except json.JSONDecodeError:
430
+ logging.error(f"Failed to decode ACRCloud JSON response: {result_json_str}")
431
+ return {"success": False, "message": "Error parsing recognition server response."}
432
+ except Exception as e:
433
+ logging.error(f"Error processing ACRCloud response: {e} -- Response was: {result_json_str}")
434
+ return {"success": False, "message": f"An unexpected error occurred: {str(e)}"}
435
+
436
+ @app.post("/predict/")
437
+ async def predict_audio(file: UploadFile = File(...)):
438
+ # Save uploaded file temporarily
439
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp:
440
+ shutil.copyfileobj(file.file, tmp)
441
+ tmp_path = tmp.name
442
+
443
+ try:
444
+ # Predict using the neural network
445
+ predicted_class = predict_vehicle_class(tmp_path)
446
+ return {"filename": file.filename, "predicted_class": int(predicted_class)}
447
+ finally:
448
+ os.remove(tmp_path)
449
+
450
+ # Mistral AI configuration
451
+ MISTRAL_API_KEY = "SDV5ynlJBEs0n15l2PDvO9eor1ki4dTI"
452
+ MISTRAL_API_URL = "https://api.mistral.ai/v1/chat/completions"
453
+
454
+ class ChatRequest(BaseModel):
455
+ system_prompt: str
456
+ user_message: str
457
+
458
+ @app.post("/chat-with-mistral/")
459
+ async def chat_with_mistral(request: ChatRequest):
460
+ try:
461
+ headers = {
462
+ "Authorization": f"Bearer {MISTRAL_API_KEY}",
463
+ "Content-Type": "application/json"
464
+ }
465
+
466
+ data = {
467
+ "model": "mistral-small",
468
+ "messages": [
469
+ {
470
+ "role": "system",
471
+ "content": request.system_prompt
472
+ },
473
+ {
474
+ "role": "user",
475
+ "content": request.user_message
476
+ }
477
+ ]
478
+ }
479
+
480
+ response = requests.post(MISTRAL_API_URL, headers=headers, json=data)
481
+
482
+ if response.status_code == 200:
483
+ ai_response = response.json()["choices"][0]["message"]["content"]
484
+ return {
485
+ "success": True,
486
+ "response": ai_response
487
+ }
488
+ else:
489
+ raise HTTPException(
490
+ status_code=500,
491
+ detail=f"Error from Mistral API: {response.status_code} - {response.text}"
492
+ )
493
+
494
+ except Exception as e:
495
+ raise HTTPException(
496
+ status_code=500,
497
+ detail=str(e)
498
+ )
499
+
500
+ logging.basicConfig(level=logging.INFO)
models/neural_networks.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8fc6f4d76bc4c3673954f31dd5051e74affa44fdc33ed6613e12a81e29508972
3
+ size 4024184
readme.md ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Install ACRCloud SDK
2
+ pip install git+https://github.com/acrcloud/acrcloud_sdk_python.git
3
+
requirements.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn[standard]
3
+ Jinja2
4
+ requests
5
+ pydub
6
+ librosa
7
+ tensorflow
8
+ tensorflow_hub
9
+ numpy
10
+ git+https://github.com/acrcloud/acrcloud_sdk_python.git
yamnet_class_map.csv ADDED
@@ -0,0 +1,522 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ index,mid,display_name
2
+ 0,/m/09x0r,Speech
3
+ 1,/m/0ytgt,"Child speech, kid speaking"
4
+ 2,/m/01h8n0,Conversation
5
+ 3,/m/02qldy,"Narration, monologue"
6
+ 4,/m/0261r1,Babbling
7
+ 5,/m/0brhx,Speech synthesizer
8
+ 6,/m/07p6fty,Shout
9
+ 7,/m/07q4ntr,Bellow
10
+ 8,/m/07rwj3x,Whoop
11
+ 9,/m/07sr1lc,Yell
12
+ 10,/t/dd00135,Children shouting
13
+ 11,/m/03qc9zr,Screaming
14
+ 12,/m/02rtxlg,Whispering
15
+ 13,/m/01j3sz,Laughter
16
+ 14,/t/dd00001,Baby laughter
17
+ 15,/m/07r660_,Giggle
18
+ 16,/m/07s04w4,Snicker
19
+ 17,/m/07sq110,Belly laugh
20
+ 18,/m/07rgt08,"Chuckle, chortle"
21
+ 19,/m/0463cq4,"Crying, sobbing"
22
+ 20,/t/dd00002,"Baby cry, infant cry"
23
+ 21,/m/07qz6j3,Whimper
24
+ 22,/m/07qw_06,"Wail, moan"
25
+ 23,/m/07plz5l,Sigh
26
+ 24,/m/015lz1,Singing
27
+ 25,/m/0l14jd,Choir
28
+ 26,/m/01swy6,Yodeling
29
+ 27,/m/02bk07,Chant
30
+ 28,/m/01c194,Mantra
31
+ 29,/t/dd00005,Child singing
32
+ 30,/t/dd00006,Synthetic singing
33
+ 31,/m/06bxc,Rapping
34
+ 32,/m/02fxyj,Humming
35
+ 33,/m/07s2xch,Groan
36
+ 34,/m/07r4k75,Grunt
37
+ 35,/m/01w250,Whistling
38
+ 36,/m/0lyf6,Breathing
39
+ 37,/m/07mzm6,Wheeze
40
+ 38,/m/01d3sd,Snoring
41
+ 39,/m/07s0dtb,Gasp
42
+ 40,/m/07pyy8b,Pant
43
+ 41,/m/07q0yl5,Snort
44
+ 42,/m/01b_21,Cough
45
+ 43,/m/0dl9sf8,Throat clearing
46
+ 44,/m/01hsr_,Sneeze
47
+ 45,/m/07ppn3j,Sniff
48
+ 46,/m/06h7j,Run
49
+ 47,/m/07qv_x_,Shuffle
50
+ 48,/m/07pbtc8,"Walk, footsteps"
51
+ 49,/m/03cczk,"Chewing, mastication"
52
+ 50,/m/07pdhp0,Biting
53
+ 51,/m/0939n_,Gargling
54
+ 52,/m/01g90h,Stomach rumble
55
+ 53,/m/03q5_w,"Burping, eructation"
56
+ 54,/m/02p3nc,Hiccup
57
+ 55,/m/02_nn,Fart
58
+ 56,/m/0k65p,Hands
59
+ 57,/m/025_jnm,Finger snapping
60
+ 58,/m/0l15bq,Clapping
61
+ 59,/m/01jg02,"Heart sounds, heartbeat"
62
+ 60,/m/01jg1z,Heart murmur
63
+ 61,/m/053hz1,Cheering
64
+ 62,/m/028ght,Applause
65
+ 63,/m/07rkbfh,Chatter
66
+ 64,/m/03qtwd,Crowd
67
+ 65,/m/07qfr4h,"Hubbub, speech noise, speech babble"
68
+ 66,/t/dd00013,Children playing
69
+ 67,/m/0jbk,Animal
70
+ 68,/m/068hy,"Domestic animals, pets"
71
+ 69,/m/0bt9lr,Dog
72
+ 70,/m/05tny_,Bark
73
+ 71,/m/07r_k2n,Yip
74
+ 72,/m/07qf0zm,Howl
75
+ 73,/m/07rc7d9,Bow-wow
76
+ 74,/m/0ghcn6,Growling
77
+ 75,/t/dd00136,Whimper (dog)
78
+ 76,/m/01yrx,Cat
79
+ 77,/m/02yds9,Purr
80
+ 78,/m/07qrkrw,Meow
81
+ 79,/m/07rjwbb,Hiss
82
+ 80,/m/07r81j2,Caterwaul
83
+ 81,/m/0ch8v,"Livestock, farm animals, working animals"
84
+ 82,/m/03k3r,Horse
85
+ 83,/m/07rv9rh,Clip-clop
86
+ 84,/m/07q5rw0,"Neigh, whinny"
87
+ 85,/m/01xq0k1,"Cattle, bovinae"
88
+ 86,/m/07rpkh9,Moo
89
+ 87,/m/0239kh,Cowbell
90
+ 88,/m/068zj,Pig
91
+ 89,/t/dd00018,Oink
92
+ 90,/m/03fwl,Goat
93
+ 91,/m/07q0h5t,Bleat
94
+ 92,/m/07bgp,Sheep
95
+ 93,/m/025rv6n,Fowl
96
+ 94,/m/09b5t,"Chicken, rooster"
97
+ 95,/m/07st89h,Cluck
98
+ 96,/m/07qn5dc,"Crowing, cock-a-doodle-doo"
99
+ 97,/m/01rd7k,Turkey
100
+ 98,/m/07svc2k,Gobble
101
+ 99,/m/09ddx,Duck
102
+ 100,/m/07qdb04,Quack
103
+ 101,/m/0dbvp,Goose
104
+ 102,/m/07qwf61,Honk
105
+ 103,/m/01280g,Wild animals
106
+ 104,/m/0cdnk,"Roaring cats (lions, tigers)"
107
+ 105,/m/04cvmfc,Roar
108
+ 106,/m/015p6,Bird
109
+ 107,/m/020bb7,"Bird vocalization, bird call, bird song"
110
+ 108,/m/07pggtn,"Chirp, tweet"
111
+ 109,/m/07sx8x_,Squawk
112
+ 110,/m/0h0rv,"Pigeon, dove"
113
+ 111,/m/07r_25d,Coo
114
+ 112,/m/04s8yn,Crow
115
+ 113,/m/07r5c2p,Caw
116
+ 114,/m/09d5_,Owl
117
+ 115,/m/07r_80w,Hoot
118
+ 116,/m/05_wcq,"Bird flight, flapping wings"
119
+ 117,/m/01z5f,"Canidae, dogs, wolves"
120
+ 118,/m/06hps,"Rodents, rats, mice"
121
+ 119,/m/04rmv,Mouse
122
+ 120,/m/07r4gkf,Patter
123
+ 121,/m/03vt0,Insect
124
+ 122,/m/09xqv,Cricket
125
+ 123,/m/09f96,Mosquito
126
+ 124,/m/0h2mp,"Fly, housefly"
127
+ 125,/m/07pjwq1,Buzz
128
+ 126,/m/01h3n,"Bee, wasp, etc."
129
+ 127,/m/09ld4,Frog
130
+ 128,/m/07st88b,Croak
131
+ 129,/m/078jl,Snake
132
+ 130,/m/07qn4z3,Rattle
133
+ 131,/m/032n05,Whale vocalization
134
+ 132,/m/04rlf,Music
135
+ 133,/m/04szw,Musical instrument
136
+ 134,/m/0fx80y,Plucked string instrument
137
+ 135,/m/0342h,Guitar
138
+ 136,/m/02sgy,Electric guitar
139
+ 137,/m/018vs,Bass guitar
140
+ 138,/m/042v_gx,Acoustic guitar
141
+ 139,/m/06w87,"Steel guitar, slide guitar"
142
+ 140,/m/01glhc,Tapping (guitar technique)
143
+ 141,/m/07s0s5r,Strum
144
+ 142,/m/018j2,Banjo
145
+ 143,/m/0jtg0,Sitar
146
+ 144,/m/04rzd,Mandolin
147
+ 145,/m/01bns_,Zither
148
+ 146,/m/07xzm,Ukulele
149
+ 147,/m/05148p4,Keyboard (musical)
150
+ 148,/m/05r5c,Piano
151
+ 149,/m/01s0ps,Electric piano
152
+ 150,/m/013y1f,Organ
153
+ 151,/m/03xq_f,Electronic organ
154
+ 152,/m/03gvt,Hammond organ
155
+ 153,/m/0l14qv,Synthesizer
156
+ 154,/m/01v1d8,Sampler
157
+ 155,/m/03q5t,Harpsichord
158
+ 156,/m/0l14md,Percussion
159
+ 157,/m/02hnl,Drum kit
160
+ 158,/m/0cfdd,Drum machine
161
+ 159,/m/026t6,Drum
162
+ 160,/m/06rvn,Snare drum
163
+ 161,/m/03t3fj,Rimshot
164
+ 162,/m/02k_mr,Drum roll
165
+ 163,/m/0bm02,Bass drum
166
+ 164,/m/011k_j,Timpani
167
+ 165,/m/01p970,Tabla
168
+ 166,/m/01qbl,Cymbal
169
+ 167,/m/03qtq,Hi-hat
170
+ 168,/m/01sm1g,Wood block
171
+ 169,/m/07brj,Tambourine
172
+ 170,/m/05r5wn,Rattle (instrument)
173
+ 171,/m/0xzly,Maraca
174
+ 172,/m/0mbct,Gong
175
+ 173,/m/016622,Tubular bells
176
+ 174,/m/0j45pbj,Mallet percussion
177
+ 175,/m/0dwsp,"Marimba, xylophone"
178
+ 176,/m/0dwtp,Glockenspiel
179
+ 177,/m/0dwt5,Vibraphone
180
+ 178,/m/0l156b,Steelpan
181
+ 179,/m/05pd6,Orchestra
182
+ 180,/m/01kcd,Brass instrument
183
+ 181,/m/0319l,French horn
184
+ 182,/m/07gql,Trumpet
185
+ 183,/m/07c6l,Trombone
186
+ 184,/m/0l14_3,Bowed string instrument
187
+ 185,/m/02qmj0d,String section
188
+ 186,/m/07y_7,"Violin, fiddle"
189
+ 187,/m/0d8_n,Pizzicato
190
+ 188,/m/01xqw,Cello
191
+ 189,/m/02fsn,Double bass
192
+ 190,/m/085jw,"Wind instrument, woodwind instrument"
193
+ 191,/m/0l14j_,Flute
194
+ 192,/m/06ncr,Saxophone
195
+ 193,/m/01wy6,Clarinet
196
+ 194,/m/03m5k,Harp
197
+ 195,/m/0395lw,Bell
198
+ 196,/m/03w41f,Church bell
199
+ 197,/m/027m70_,Jingle bell
200
+ 198,/m/0gy1t2s,Bicycle bell
201
+ 199,/m/07n_g,Tuning fork
202
+ 200,/m/0f8s22,Chime
203
+ 201,/m/026fgl,Wind chime
204
+ 202,/m/0150b9,Change ringing (campanology)
205
+ 203,/m/03qjg,Harmonica
206
+ 204,/m/0mkg,Accordion
207
+ 205,/m/0192l,Bagpipes
208
+ 206,/m/02bxd,Didgeridoo
209
+ 207,/m/0l14l2,Shofar
210
+ 208,/m/07kc_,Theremin
211
+ 209,/m/0l14t7,Singing bowl
212
+ 210,/m/01hgjl,Scratching (performance technique)
213
+ 211,/m/064t9,Pop music
214
+ 212,/m/0glt670,Hip hop music
215
+ 213,/m/02cz_7,Beatboxing
216
+ 214,/m/06by7,Rock music
217
+ 215,/m/03lty,Heavy metal
218
+ 216,/m/05r6t,Punk rock
219
+ 217,/m/0dls3,Grunge
220
+ 218,/m/0dl5d,Progressive rock
221
+ 219,/m/07sbbz2,Rock and roll
222
+ 220,/m/05w3f,Psychedelic rock
223
+ 221,/m/06j6l,Rhythm and blues
224
+ 222,/m/0gywn,Soul music
225
+ 223,/m/06cqb,Reggae
226
+ 224,/m/01lyv,Country
227
+ 225,/m/015y_n,Swing music
228
+ 226,/m/0gg8l,Bluegrass
229
+ 227,/m/02x8m,Funk
230
+ 228,/m/02w4v,Folk music
231
+ 229,/m/06j64v,Middle Eastern music
232
+ 230,/m/03_d0,Jazz
233
+ 231,/m/026z9,Disco
234
+ 232,/m/0ggq0m,Classical music
235
+ 233,/m/05lls,Opera
236
+ 234,/m/02lkt,Electronic music
237
+ 235,/m/03mb9,House music
238
+ 236,/m/07gxw,Techno
239
+ 237,/m/07s72n,Dubstep
240
+ 238,/m/0283d,Drum and bass
241
+ 239,/m/0m0jc,Electronica
242
+ 240,/m/08cyft,Electronic dance music
243
+ 241,/m/0fd3y,Ambient music
244
+ 242,/m/07lnk,Trance music
245
+ 243,/m/0g293,Music of Latin America
246
+ 244,/m/0ln16,Salsa music
247
+ 245,/m/0326g,Flamenco
248
+ 246,/m/0155w,Blues
249
+ 247,/m/05fw6t,Music for children
250
+ 248,/m/02v2lh,New-age music
251
+ 249,/m/0y4f8,Vocal music
252
+ 250,/m/0z9c,A capella
253
+ 251,/m/0164x2,Music of Africa
254
+ 252,/m/0145m,Afrobeat
255
+ 253,/m/02mscn,Christian music
256
+ 254,/m/016cjb,Gospel music
257
+ 255,/m/028sqc,Music of Asia
258
+ 256,/m/015vgc,Carnatic music
259
+ 257,/m/0dq0md,Music of Bollywood
260
+ 258,/m/06rqw,Ska
261
+ 259,/m/02p0sh1,Traditional music
262
+ 260,/m/05rwpb,Independent music
263
+ 261,/m/074ft,Song
264
+ 262,/m/025td0t,Background music
265
+ 263,/m/02cjck,Theme music
266
+ 264,/m/03r5q_,Jingle (music)
267
+ 265,/m/0l14gg,Soundtrack music
268
+ 266,/m/07pkxdp,Lullaby
269
+ 267,/m/01z7dr,Video game music
270
+ 268,/m/0140xf,Christmas music
271
+ 269,/m/0ggx5q,Dance music
272
+ 270,/m/04wptg,Wedding music
273
+ 271,/t/dd00031,Happy music
274
+ 272,/t/dd00033,Sad music
275
+ 273,/t/dd00034,Tender music
276
+ 274,/t/dd00035,Exciting music
277
+ 275,/t/dd00036,Angry music
278
+ 276,/t/dd00037,Scary music
279
+ 277,/m/03m9d0z,Wind
280
+ 278,/m/09t49,Rustling leaves
281
+ 279,/t/dd00092,Wind noise (microphone)
282
+ 280,/m/0jb2l,Thunderstorm
283
+ 281,/m/0ngt1,Thunder
284
+ 282,/m/0838f,Water
285
+ 283,/m/06mb1,Rain
286
+ 284,/m/07r10fb,Raindrop
287
+ 285,/t/dd00038,Rain on surface
288
+ 286,/m/0j6m2,Stream
289
+ 287,/m/0j2kx,Waterfall
290
+ 288,/m/05kq4,Ocean
291
+ 289,/m/034srq,"Waves, surf"
292
+ 290,/m/06wzb,Steam
293
+ 291,/m/07swgks,Gurgling
294
+ 292,/m/02_41,Fire
295
+ 293,/m/07pzfmf,Crackle
296
+ 294,/m/07yv9,Vehicle
297
+ 295,/m/019jd,"Boat, Water vehicle"
298
+ 296,/m/0hsrw,"Sailboat, sailing ship"
299
+ 297,/m/056ks2,"Rowboat, canoe, kayak"
300
+ 298,/m/02rlv9,"Motorboat, speedboat"
301
+ 299,/m/06q74,Ship
302
+ 300,/m/012f08,Motor vehicle (road)
303
+ 301,/m/0k4j,Car
304
+ 302,/m/0912c9,"Vehicle horn, car horn, honking"
305
+ 303,/m/07qv_d5,Toot
306
+ 304,/m/02mfyn,Car alarm
307
+ 305,/m/04gxbd,"Power windows, electric windows"
308
+ 306,/m/07rknqz,Skidding
309
+ 307,/m/0h9mv,Tire squeal
310
+ 308,/t/dd00134,Car passing by
311
+ 309,/m/0ltv,"Race car, auto racing"
312
+ 310,/m/07r04,Truck
313
+ 311,/m/0gvgw0,Air brake
314
+ 312,/m/05x_td,"Air horn, truck horn"
315
+ 313,/m/02rhddq,Reversing beeps
316
+ 314,/m/03cl9h,"Ice cream truck, ice cream van"
317
+ 315,/m/01bjv,Bus
318
+ 316,/m/03j1ly,Emergency vehicle
319
+ 317,/m/04qvtq,Police car (siren)
320
+ 318,/m/012n7d,Ambulance (siren)
321
+ 319,/m/012ndj,"Fire engine, fire truck (siren)"
322
+ 320,/m/04_sv,Motorcycle
323
+ 321,/m/0btp2,"Traffic noise, roadway noise"
324
+ 322,/m/06d_3,Rail transport
325
+ 323,/m/07jdr,Train
326
+ 324,/m/04zmvq,Train whistle
327
+ 325,/m/0284vy3,Train horn
328
+ 326,/m/01g50p,"Railroad car, train wagon"
329
+ 327,/t/dd00048,Train wheels squealing
330
+ 328,/m/0195fx,"Subway, metro, underground"
331
+ 329,/m/0k5j,Aircraft
332
+ 330,/m/014yck,Aircraft engine
333
+ 331,/m/04229,Jet engine
334
+ 332,/m/02l6bg,"Propeller, airscrew"
335
+ 333,/m/09ct_,Helicopter
336
+ 334,/m/0cmf2,"Fixed-wing aircraft, airplane"
337
+ 335,/m/0199g,Bicycle
338
+ 336,/m/06_fw,Skateboard
339
+ 337,/m/02mk9,Engine
340
+ 338,/t/dd00065,Light engine (high frequency)
341
+ 339,/m/08j51y,"Dental drill, dentist's drill"
342
+ 340,/m/01yg9g,Lawn mower
343
+ 341,/m/01j4z9,Chainsaw
344
+ 342,/t/dd00066,Medium engine (mid frequency)
345
+ 343,/t/dd00067,Heavy engine (low frequency)
346
+ 344,/m/01h82_,Engine knocking
347
+ 345,/t/dd00130,Engine starting
348
+ 346,/m/07pb8fc,Idling
349
+ 347,/m/07q2z82,"Accelerating, revving, vroom"
350
+ 348,/m/02dgv,Door
351
+ 349,/m/03wwcy,Doorbell
352
+ 350,/m/07r67yg,Ding-dong
353
+ 351,/m/02y_763,Sliding door
354
+ 352,/m/07rjzl8,Slam
355
+ 353,/m/07r4wb8,Knock
356
+ 354,/m/07qcpgn,Tap
357
+ 355,/m/07q6cd_,Squeak
358
+ 356,/m/0642b4,Cupboard open or close
359
+ 357,/m/0fqfqc,Drawer open or close
360
+ 358,/m/04brg2,"Dishes, pots, and pans"
361
+ 359,/m/023pjk,"Cutlery, silverware"
362
+ 360,/m/07pn_8q,Chopping (food)
363
+ 361,/m/0dxrf,Frying (food)
364
+ 362,/m/0fx9l,Microwave oven
365
+ 363,/m/02pjr4,Blender
366
+ 364,/m/02jz0l,"Water tap, faucet"
367
+ 365,/m/0130jx,Sink (filling or washing)
368
+ 366,/m/03dnzn,Bathtub (filling or washing)
369
+ 367,/m/03wvsk,Hair dryer
370
+ 368,/m/01jt3m,Toilet flush
371
+ 369,/m/012xff,Toothbrush
372
+ 370,/m/04fgwm,Electric toothbrush
373
+ 371,/m/0d31p,Vacuum cleaner
374
+ 372,/m/01s0vc,Zipper (clothing)
375
+ 373,/m/03v3yw,Keys jangling
376
+ 374,/m/0242l,Coin (dropping)
377
+ 375,/m/01lsmm,Scissors
378
+ 376,/m/02g901,"Electric shaver, electric razor"
379
+ 377,/m/05rj2,Shuffling cards
380
+ 378,/m/0316dw,Typing
381
+ 379,/m/0c2wf,Typewriter
382
+ 380,/m/01m2v,Computer keyboard
383
+ 381,/m/081rb,Writing
384
+ 382,/m/07pp_mv,Alarm
385
+ 383,/m/07cx4,Telephone
386
+ 384,/m/07pp8cl,Telephone bell ringing
387
+ 385,/m/01hnzm,Ringtone
388
+ 386,/m/02c8p,"Telephone dialing, DTMF"
389
+ 387,/m/015jpf,Dial tone
390
+ 388,/m/01z47d,Busy signal
391
+ 389,/m/046dlr,Alarm clock
392
+ 390,/m/03kmc9,Siren
393
+ 391,/m/0dgbq,Civil defense siren
394
+ 392,/m/030rvx,Buzzer
395
+ 393,/m/01y3hg,"Smoke detector, smoke alarm"
396
+ 394,/m/0c3f7m,Fire alarm
397
+ 395,/m/04fq5q,Foghorn
398
+ 396,/m/0l156k,Whistle
399
+ 397,/m/06hck5,Steam whistle
400
+ 398,/t/dd00077,Mechanisms
401
+ 399,/m/02bm9n,"Ratchet, pawl"
402
+ 400,/m/01x3z,Clock
403
+ 401,/m/07qjznt,Tick
404
+ 402,/m/07qjznl,Tick-tock
405
+ 403,/m/0l7xg,Gears
406
+ 404,/m/05zc1,Pulleys
407
+ 405,/m/0llzx,Sewing machine
408
+ 406,/m/02x984l,Mechanical fan
409
+ 407,/m/025wky1,Air conditioning
410
+ 408,/m/024dl,Cash register
411
+ 409,/m/01m4t,Printer
412
+ 410,/m/0dv5r,Camera
413
+ 411,/m/07bjf,Single-lens reflex camera
414
+ 412,/m/07k1x,Tools
415
+ 413,/m/03l9g,Hammer
416
+ 414,/m/03p19w,Jackhammer
417
+ 415,/m/01b82r,Sawing
418
+ 416,/m/02p01q,Filing (rasp)
419
+ 417,/m/023vsd,Sanding
420
+ 418,/m/0_ksk,Power tool
421
+ 419,/m/01d380,Drill
422
+ 420,/m/014zdl,Explosion
423
+ 421,/m/032s66,"Gunshot, gunfire"
424
+ 422,/m/04zjc,Machine gun
425
+ 423,/m/02z32qm,Fusillade
426
+ 424,/m/0_1c,Artillery fire
427
+ 425,/m/073cg4,Cap gun
428
+ 426,/m/0g6b5,Fireworks
429
+ 427,/g/122z_qxw,Firecracker
430
+ 428,/m/07qsvvw,"Burst, pop"
431
+ 429,/m/07pxg6y,Eruption
432
+ 430,/m/07qqyl4,Boom
433
+ 431,/m/083vt,Wood
434
+ 432,/m/07pczhz,Chop
435
+ 433,/m/07pl1bw,Splinter
436
+ 434,/m/07qs1cx,Crack
437
+ 435,/m/039jq,Glass
438
+ 436,/m/07q7njn,"Chink, clink"
439
+ 437,/m/07rn7sz,Shatter
440
+ 438,/m/04k94,Liquid
441
+ 439,/m/07rrlb6,"Splash, splatter"
442
+ 440,/m/07p6mqd,Slosh
443
+ 441,/m/07qlwh6,Squish
444
+ 442,/m/07r5v4s,Drip
445
+ 443,/m/07prgkl,Pour
446
+ 444,/m/07pqc89,"Trickle, dribble"
447
+ 445,/t/dd00088,Gush
448
+ 446,/m/07p7b8y,Fill (with liquid)
449
+ 447,/m/07qlf79,Spray
450
+ 448,/m/07ptzwd,Pump (liquid)
451
+ 449,/m/07ptfmf,Stir
452
+ 450,/m/0dv3j,Boiling
453
+ 451,/m/0790c,Sonar
454
+ 452,/m/0dl83,Arrow
455
+ 453,/m/07rqsjt,"Whoosh, swoosh, swish"
456
+ 454,/m/07qnq_y,"Thump, thud"
457
+ 455,/m/07rrh0c,Thunk
458
+ 456,/m/0b_fwt,Electronic tuner
459
+ 457,/m/02rr_,Effects unit
460
+ 458,/m/07m2kt,Chorus effect
461
+ 459,/m/018w8,Basketball bounce
462
+ 460,/m/07pws3f,Bang
463
+ 461,/m/07ryjzk,"Slap, smack"
464
+ 462,/m/07rdhzs,"Whack, thwack"
465
+ 463,/m/07pjjrj,"Smash, crash"
466
+ 464,/m/07pc8lb,Breaking
467
+ 465,/m/07pqn27,Bouncing
468
+ 466,/m/07rbp7_,Whip
469
+ 467,/m/07pyf11,Flap
470
+ 468,/m/07qb_dv,Scratch
471
+ 469,/m/07qv4k0,Scrape
472
+ 470,/m/07pdjhy,Rub
473
+ 471,/m/07s8j8t,Roll
474
+ 472,/m/07plct2,Crushing
475
+ 473,/t/dd00112,"Crumpling, crinkling"
476
+ 474,/m/07qcx4z,Tearing
477
+ 475,/m/02fs_r,"Beep, bleep"
478
+ 476,/m/07qwdck,Ping
479
+ 477,/m/07phxs1,Ding
480
+ 478,/m/07rv4dm,Clang
481
+ 479,/m/07s02z0,Squeal
482
+ 480,/m/07qh7jl,Creak
483
+ 481,/m/07qwyj0,Rustle
484
+ 482,/m/07s34ls,Whir
485
+ 483,/m/07qmpdm,Clatter
486
+ 484,/m/07p9k1k,Sizzle
487
+ 485,/m/07qc9xj,Clicking
488
+ 486,/m/07rwm0c,Clickety-clack
489
+ 487,/m/07phhsh,Rumble
490
+ 488,/m/07qyrcz,Plop
491
+ 489,/m/07qfgpx,"Jingle, tinkle"
492
+ 490,/m/07rcgpl,Hum
493
+ 491,/m/07p78v5,Zing
494
+ 492,/t/dd00121,Boing
495
+ 493,/m/07s12q4,Crunch
496
+ 494,/m/028v0c,Silence
497
+ 495,/m/01v_m0,Sine wave
498
+ 496,/m/0b9m1,Harmonic
499
+ 497,/m/0hdsk,Chirp tone
500
+ 498,/m/0c1dj,Sound effect
501
+ 499,/m/07pt_g0,Pulse
502
+ 500,/t/dd00125,"Inside, small room"
503
+ 501,/t/dd00126,"Inside, large room or hall"
504
+ 502,/t/dd00127,"Inside, public space"
505
+ 503,/t/dd00128,"Outside, urban or manmade"
506
+ 504,/t/dd00129,"Outside, rural or natural"
507
+ 505,/m/01b9nn,Reverberation
508
+ 506,/m/01jnbd,Echo
509
+ 507,/m/096m7z,Noise
510
+ 508,/m/06_y0by,Environmental noise
511
+ 509,/m/07rgkc5,Static
512
+ 510,/m/06xkwv,Mains hum
513
+ 511,/m/0g12c5,Distortion
514
+ 512,/m/08p9q4,Sidetone
515
+ 513,/m/07szfh9,Cacophony
516
+ 514,/m/0chx_,White noise
517
+ 515,/m/0cj0r,Pink noise
518
+ 516,/m/07p_0gm,Throbbing
519
+ 517,/m/01jwx6,Vibration
520
+ 518,/m/07c52,Television
521
+ 519,/m/06bz3,Radio
522
+ 520,/m/07hvw1,Field recording