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