yading@10
|
1 @chapter Demuxers
|
yading@10
|
2 @c man begin DEMUXERS
|
yading@10
|
3
|
yading@10
|
4 Demuxers are configured elements in FFmpeg which allow to read the
|
yading@10
|
5 multimedia streams from a particular type of file.
|
yading@10
|
6
|
yading@10
|
7 When you configure your FFmpeg build, all the supported demuxers
|
yading@10
|
8 are enabled by default. You can list all available ones using the
|
yading@10
|
9 configure option @code{--list-demuxers}.
|
yading@10
|
10
|
yading@10
|
11 You can disable all the demuxers using the configure option
|
yading@10
|
12 @code{--disable-demuxers}, and selectively enable a single demuxer with
|
yading@10
|
13 the option @code{--enable-demuxer=@var{DEMUXER}}, or disable it
|
yading@10
|
14 with the option @code{--disable-demuxer=@var{DEMUXER}}.
|
yading@10
|
15
|
yading@10
|
16 The option @code{-formats} of the ff* tools will display the list of
|
yading@10
|
17 enabled demuxers.
|
yading@10
|
18
|
yading@10
|
19 The description of some of the currently available demuxers follows.
|
yading@10
|
20
|
yading@10
|
21 @section applehttp
|
yading@10
|
22
|
yading@10
|
23 Apple HTTP Live Streaming demuxer.
|
yading@10
|
24
|
yading@10
|
25 This demuxer presents all AVStreams from all variant streams.
|
yading@10
|
26 The id field is set to the bitrate variant index number. By setting
|
yading@10
|
27 the discard flags on AVStreams (by pressing 'a' or 'v' in ffplay),
|
yading@10
|
28 the caller can decide which variant streams to actually receive.
|
yading@10
|
29 The total bitrate of the variant that the stream belongs to is
|
yading@10
|
30 available in a metadata key named "variant_bitrate".
|
yading@10
|
31
|
yading@10
|
32 @anchor{concat}
|
yading@10
|
33 @section concat
|
yading@10
|
34
|
yading@10
|
35 Virtual concatenation script demuxer.
|
yading@10
|
36
|
yading@10
|
37 This demuxer reads a list of files and other directives from a text file and
|
yading@10
|
38 demuxes them one after the other, as if all their packet had been muxed
|
yading@10
|
39 together.
|
yading@10
|
40
|
yading@10
|
41 The timestamps in the files are adjusted so that the first file starts at 0
|
yading@10
|
42 and each next file starts where the previous one finishes. Note that it is
|
yading@10
|
43 done globally and may cause gaps if all streams do not have exactly the same
|
yading@10
|
44 length.
|
yading@10
|
45
|
yading@10
|
46 All files must have the same streams (same codecs, same time base, etc.).
|
yading@10
|
47
|
yading@10
|
48 The duration of each file is used to adjust the timestamps of the next file:
|
yading@10
|
49 if the duration is incorrect (because it was computed using the bit-rate or
|
yading@10
|
50 because the file is truncated, for example), it can cause artifacts. The
|
yading@10
|
51 @code{duration} directive can be used to override the duration stored in
|
yading@10
|
52 each file.
|
yading@10
|
53
|
yading@10
|
54 @subsection Syntax
|
yading@10
|
55
|
yading@10
|
56 The script is a text file in extended-ASCII, with one directive per line.
|
yading@10
|
57 Empty lines, leading spaces and lines starting with '#' are ignored. The
|
yading@10
|
58 following directive is recognized:
|
yading@10
|
59
|
yading@10
|
60 @table @option
|
yading@10
|
61
|
yading@10
|
62 @item @code{file @var{path}}
|
yading@10
|
63 Path to a file to read; special characters and spaces must be escaped with
|
yading@10
|
64 backslash or single quotes.
|
yading@10
|
65
|
yading@10
|
66 All subsequent directives apply to that file.
|
yading@10
|
67
|
yading@10
|
68 @item @code{ffconcat version 1.0}
|
yading@10
|
69 Identify the script type and version. It also sets the @option{safe} option
|
yading@10
|
70 to 1 if it was to its default -1.
|
yading@10
|
71
|
yading@10
|
72 To make FFmpeg recognize the format automatically, this directive must
|
yading@10
|
73 appears exactly as is (no extra space or byte-order-mark) on the very first
|
yading@10
|
74 line of the script.
|
yading@10
|
75
|
yading@10
|
76 @item @code{duration @var{dur}}
|
yading@10
|
77 Duration of the file. This information can be specified from the file;
|
yading@10
|
78 specifying it here may be more efficient or help if the information from the
|
yading@10
|
79 file is not available or accurate.
|
yading@10
|
80
|
yading@10
|
81 If the duration is set for all files, then it is possible to seek in the
|
yading@10
|
82 whole concatenated video.
|
yading@10
|
83
|
yading@10
|
84 @end table
|
yading@10
|
85
|
yading@10
|
86 @subsection Options
|
yading@10
|
87
|
yading@10
|
88 This demuxer accepts the following option:
|
yading@10
|
89
|
yading@10
|
90 @table @option
|
yading@10
|
91
|
yading@10
|
92 @item safe
|
yading@10
|
93 If set to 1, reject unsafe file paths. A file path is considered safe if it
|
yading@10
|
94 does not contain a protocol specification and is relative and all components
|
yading@10
|
95 only contain characters from the portable character set (letters, digits,
|
yading@10
|
96 period, underscore and hyphen) and have no period at the beginning of a
|
yading@10
|
97 component.
|
yading@10
|
98
|
yading@10
|
99 If set to 0, any file name is accepted.
|
yading@10
|
100
|
yading@10
|
101 The default is -1, it is equivalent to 1 if the format was automatically
|
yading@10
|
102 probed and 0 otherwise.
|
yading@10
|
103
|
yading@10
|
104 @end table
|
yading@10
|
105
|
yading@10
|
106 @section libquvi
|
yading@10
|
107
|
yading@10
|
108 Play media from Internet services using the quvi project.
|
yading@10
|
109
|
yading@10
|
110 The demuxer accepts a @option{format} option to request a specific quality. It
|
yading@10
|
111 is by default set to @var{best}.
|
yading@10
|
112
|
yading@10
|
113 See @url{http://quvi.sourceforge.net/} for more information.
|
yading@10
|
114
|
yading@10
|
115 FFmpeg needs to be built with @code{--enable-libquvi} for this demuxer to be
|
yading@10
|
116 enabled.
|
yading@10
|
117
|
yading@10
|
118 @section image2
|
yading@10
|
119
|
yading@10
|
120 Image file demuxer.
|
yading@10
|
121
|
yading@10
|
122 This demuxer reads from a list of image files specified by a pattern.
|
yading@10
|
123 The syntax and meaning of the pattern is specified by the
|
yading@10
|
124 option @var{pattern_type}.
|
yading@10
|
125
|
yading@10
|
126 The pattern may contain a suffix which is used to automatically
|
yading@10
|
127 determine the format of the images contained in the files.
|
yading@10
|
128
|
yading@10
|
129 The size, the pixel format, and the format of each image must be the
|
yading@10
|
130 same for all the files in the sequence.
|
yading@10
|
131
|
yading@10
|
132 This demuxer accepts the following options:
|
yading@10
|
133 @table @option
|
yading@10
|
134 @item framerate
|
yading@10
|
135 Set the frame rate for the video stream. It defaults to 25.
|
yading@10
|
136 @item loop
|
yading@10
|
137 If set to 1, loop over the input. Default value is 0.
|
yading@10
|
138 @item pattern_type
|
yading@10
|
139 Select the pattern type used to interpret the provided filename.
|
yading@10
|
140
|
yading@10
|
141 @var{pattern_type} accepts one of the following values.
|
yading@10
|
142 @table @option
|
yading@10
|
143 @item sequence
|
yading@10
|
144 Select a sequence pattern type, used to specify a sequence of files
|
yading@10
|
145 indexed by sequential numbers.
|
yading@10
|
146
|
yading@10
|
147 A sequence pattern may contain the string "%d" or "%0@var{N}d", which
|
yading@10
|
148 specifies the position of the characters representing a sequential
|
yading@10
|
149 number in each filename matched by the pattern. If the form
|
yading@10
|
150 "%d0@var{N}d" is used, the string representing the number in each
|
yading@10
|
151 filename is 0-padded and @var{N} is the total number of 0-padded
|
yading@10
|
152 digits representing the number. The literal character '%' can be
|
yading@10
|
153 specified in the pattern with the string "%%".
|
yading@10
|
154
|
yading@10
|
155 If the sequence pattern contains "%d" or "%0@var{N}d", the first filename of
|
yading@10
|
156 the file list specified by the pattern must contain a number
|
yading@10
|
157 inclusively contained between @var{start_number} and
|
yading@10
|
158 @var{start_number}+@var{start_number_range}-1, and all the following
|
yading@10
|
159 numbers must be sequential.
|
yading@10
|
160
|
yading@10
|
161 For example the pattern "img-%03d.bmp" will match a sequence of
|
yading@10
|
162 filenames of the form @file{img-001.bmp}, @file{img-002.bmp}, ...,
|
yading@10
|
163 @file{img-010.bmp}, etc.; the pattern "i%%m%%g-%d.jpg" will match a
|
yading@10
|
164 sequence of filenames of the form @file{i%m%g-1.jpg},
|
yading@10
|
165 @file{i%m%g-2.jpg}, ..., @file{i%m%g-10.jpg}, etc.
|
yading@10
|
166
|
yading@10
|
167 Note that the pattern must not necessarily contain "%d" or
|
yading@10
|
168 "%0@var{N}d", for example to convert a single image file
|
yading@10
|
169 @file{img.jpeg} you can employ the command:
|
yading@10
|
170 @example
|
yading@10
|
171 ffmpeg -i img.jpeg img.png
|
yading@10
|
172 @end example
|
yading@10
|
173
|
yading@10
|
174 @item glob
|
yading@10
|
175 Select a glob wildcard pattern type.
|
yading@10
|
176
|
yading@10
|
177 The pattern is interpreted like a @code{glob()} pattern. This is only
|
yading@10
|
178 selectable if libavformat was compiled with globbing support.
|
yading@10
|
179
|
yading@10
|
180 @item glob_sequence @emph{(deprecated, will be removed)}
|
yading@10
|
181 Select a mixed glob wildcard/sequence pattern.
|
yading@10
|
182
|
yading@10
|
183 If your version of libavformat was compiled with globbing support, and
|
yading@10
|
184 the provided pattern contains at least one glob meta character among
|
yading@10
|
185 @code{%*?[]@{@}} that is preceded by an unescaped "%", the pattern is
|
yading@10
|
186 interpreted like a @code{glob()} pattern, otherwise it is interpreted
|
yading@10
|
187 like a sequence pattern.
|
yading@10
|
188
|
yading@10
|
189 All glob special characters @code{%*?[]@{@}} must be prefixed
|
yading@10
|
190 with "%". To escape a literal "%" you shall use "%%".
|
yading@10
|
191
|
yading@10
|
192 For example the pattern @code{foo-%*.jpeg} will match all the
|
yading@10
|
193 filenames prefixed by "foo-" and terminating with ".jpeg", and
|
yading@10
|
194 @code{foo-%?%?%?.jpeg} will match all the filenames prefixed with
|
yading@10
|
195 "foo-", followed by a sequence of three characters, and terminating
|
yading@10
|
196 with ".jpeg".
|
yading@10
|
197
|
yading@10
|
198 This pattern type is deprecated in favor of @var{glob} and
|
yading@10
|
199 @var{sequence}.
|
yading@10
|
200 @end table
|
yading@10
|
201
|
yading@10
|
202 Default value is @var{glob_sequence}.
|
yading@10
|
203 @item pixel_format
|
yading@10
|
204 Set the pixel format of the images to read. If not specified the pixel
|
yading@10
|
205 format is guessed from the first image file in the sequence.
|
yading@10
|
206 @item start_number
|
yading@10
|
207 Set the index of the file matched by the image file pattern to start
|
yading@10
|
208 to read from. Default value is 0.
|
yading@10
|
209 @item start_number_range
|
yading@10
|
210 Set the index interval range to check when looking for the first image
|
yading@10
|
211 file in the sequence, starting from @var{start_number}. Default value
|
yading@10
|
212 is 5.
|
yading@10
|
213 @item video_size
|
yading@10
|
214 Set the video size of the images to read. If not specified the video
|
yading@10
|
215 size is guessed from the first image file in the sequence.
|
yading@10
|
216 @end table
|
yading@10
|
217
|
yading@10
|
218 @subsection Examples
|
yading@10
|
219
|
yading@10
|
220 @itemize
|
yading@10
|
221 @item
|
yading@10
|
222 Use @command{ffmpeg} for creating a video from the images in the file
|
yading@10
|
223 sequence @file{img-001.jpeg}, @file{img-002.jpeg}, ..., assuming an
|
yading@10
|
224 input frame rate of 10 frames per second:
|
yading@10
|
225 @example
|
yading@10
|
226 ffmpeg -i 'img-%03d.jpeg' -r 10 out.mkv
|
yading@10
|
227 @end example
|
yading@10
|
228
|
yading@10
|
229 @item
|
yading@10
|
230 As above, but start by reading from a file with index 100 in the sequence:
|
yading@10
|
231 @example
|
yading@10
|
232 ffmpeg -start_number 100 -i 'img-%03d.jpeg' -r 10 out.mkv
|
yading@10
|
233 @end example
|
yading@10
|
234
|
yading@10
|
235 @item
|
yading@10
|
236 Read images matching the "*.png" glob pattern , that is all the files
|
yading@10
|
237 terminating with the ".png" suffix:
|
yading@10
|
238 @example
|
yading@10
|
239 ffmpeg -pattern_type glob -i "*.png" -r 10 out.mkv
|
yading@10
|
240 @end example
|
yading@10
|
241 @end itemize
|
yading@10
|
242
|
yading@10
|
243 @section rawvideo
|
yading@10
|
244
|
yading@10
|
245 Raw video demuxer.
|
yading@10
|
246
|
yading@10
|
247 This demuxer allows to read raw video data. Since there is no header
|
yading@10
|
248 specifying the assumed video parameters, the user must specify them
|
yading@10
|
249 in order to be able to decode the data correctly.
|
yading@10
|
250
|
yading@10
|
251 This demuxer accepts the following options:
|
yading@10
|
252 @table @option
|
yading@10
|
253
|
yading@10
|
254 @item framerate
|
yading@10
|
255 Set input video frame rate. Default value is 25.
|
yading@10
|
256
|
yading@10
|
257 @item pixel_format
|
yading@10
|
258 Set the input video pixel format. Default value is @code{yuv420p}.
|
yading@10
|
259
|
yading@10
|
260 @item video_size
|
yading@10
|
261 Set the input video size. This value must be specified explicitly.
|
yading@10
|
262 @end table
|
yading@10
|
263
|
yading@10
|
264 For example to read a rawvideo file @file{input.raw} with
|
yading@10
|
265 @command{ffplay}, assuming a pixel format of @code{rgb24}, a video
|
yading@10
|
266 size of @code{320x240}, and a frame rate of 10 images per second, use
|
yading@10
|
267 the command:
|
yading@10
|
268 @example
|
yading@10
|
269 ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
|
yading@10
|
270 @end example
|
yading@10
|
271
|
yading@10
|
272 @section sbg
|
yading@10
|
273
|
yading@10
|
274 SBaGen script demuxer.
|
yading@10
|
275
|
yading@10
|
276 This demuxer reads the script language used by SBaGen
|
yading@10
|
277 @url{http://uazu.net/sbagen/} to generate binaural beats sessions. A SBG
|
yading@10
|
278 script looks like that:
|
yading@10
|
279 @example
|
yading@10
|
280 -SE
|
yading@10
|
281 a: 300-2.5/3 440+4.5/0
|
yading@10
|
282 b: 300-2.5/0 440+4.5/3
|
yading@10
|
283 off: -
|
yading@10
|
284 NOW == a
|
yading@10
|
285 +0:07:00 == b
|
yading@10
|
286 +0:14:00 == a
|
yading@10
|
287 +0:21:00 == b
|
yading@10
|
288 +0:30:00 off
|
yading@10
|
289 @end example
|
yading@10
|
290
|
yading@10
|
291 A SBG script can mix absolute and relative timestamps. If the script uses
|
yading@10
|
292 either only absolute timestamps (including the script start time) or only
|
yading@10
|
293 relative ones, then its layout is fixed, and the conversion is
|
yading@10
|
294 straightforward. On the other hand, if the script mixes both kind of
|
yading@10
|
295 timestamps, then the @var{NOW} reference for relative timestamps will be
|
yading@10
|
296 taken from the current time of day at the time the script is read, and the
|
yading@10
|
297 script layout will be frozen according to that reference. That means that if
|
yading@10
|
298 the script is directly played, the actual times will match the absolute
|
yading@10
|
299 timestamps up to the sound controller's clock accuracy, but if the user
|
yading@10
|
300 somehow pauses the playback or seeks, all times will be shifted accordingly.
|
yading@10
|
301
|
yading@10
|
302 @section tedcaptions
|
yading@10
|
303
|
yading@10
|
304 JSON captions used for @url{http://www.ted.com/, TED Talks}.
|
yading@10
|
305
|
yading@10
|
306 TED does not provide links to the captions, but they can be guessed from the
|
yading@10
|
307 page. The file @file{tools/bookmarklets.html} from the FFmpeg source tree
|
yading@10
|
308 contains a bookmarklet to expose them.
|
yading@10
|
309
|
yading@10
|
310 This demuxer accepts the following option:
|
yading@10
|
311 @table @option
|
yading@10
|
312 @item start_time
|
yading@10
|
313 Set the start time of the TED talk, in milliseconds. The default is 15000
|
yading@10
|
314 (15s). It is used to sync the captions with the downloadable videos, because
|
yading@10
|
315 they include a 15s intro.
|
yading@10
|
316 @end table
|
yading@10
|
317
|
yading@10
|
318 Example: convert the captions to a format most players understand:
|
yading@10
|
319 @example
|
yading@10
|
320 ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
|
yading@10
|
321 @end example
|
yading@10
|
322
|
yading@10
|
323 @c man end DEMUXERS
|