blob: 166c929369261717c1603015748c2325c7241492
1 | @chapter Muxers |
2 | @c man begin MUXERS |
3 | |
4 | Muxers are configured elements in FFmpeg which allow writing |
5 | multimedia streams to a particular type of file. |
6 | |
7 | When you configure your FFmpeg build, all the supported muxers |
8 | are enabled by default. You can list all available muxers using the |
9 | configure option @code{--list-muxers}. |
10 | |
11 | You can disable all the muxers with the configure option |
12 | @code{--disable-muxers} and selectively enable / disable single muxers |
13 | with the options @code{--enable-muxer=@var{MUXER}} / |
14 | @code{--disable-muxer=@var{MUXER}}. |
15 | |
16 | The option @code{-muxers} of the ff* tools will display the list of |
17 | enabled muxers. Use @code{-formats} to view a combined list of |
18 | enabled demuxers and muxers. |
19 | |
20 | A description of some of the currently available muxers follows. |
21 | |
22 | @anchor{aiff} |
23 | @section aiff |
24 | |
25 | Audio Interchange File Format muxer. |
26 | |
27 | @subsection Options |
28 | |
29 | It accepts the following options: |
30 | |
31 | @table @option |
32 | @item write_id3v2 |
33 | Enable ID3v2 tags writing when set to 1. Default is 0 (disabled). |
34 | |
35 | @item id3v2_version |
36 | Select ID3v2 version to write. Currently only version 3 and 4 (aka. |
37 | ID3v2.3 and ID3v2.4) are supported. The default is version 4. |
38 | |
39 | @end table |
40 | |
41 | @anchor{asf} |
42 | @section asf |
43 | |
44 | Advanced Systems Format muxer. |
45 | |
46 | Note that Windows Media Audio (wma) and Windows Media Video (wmv) use this |
47 | muxer too. |
48 | |
49 | @subsection Options |
50 | |
51 | It accepts the following options: |
52 | |
53 | @table @option |
54 | @item packet_size |
55 | Set the muxer packet size. By tuning this setting you may reduce data |
56 | fragmentation or muxer overhead depending on your source. Default value is |
57 | 3200, minimum is 100, maximum is 64k. |
58 | |
59 | @end table |
60 | |
61 | @anchor{avi} |
62 | @section avi |
63 | |
64 | Audio Video Interleaved muxer. |
65 | |
66 | @subsection Options |
67 | |
68 | It accepts the following options: |
69 | |
70 | @table @option |
71 | @item reserve_index_space |
72 | Reserve the specified amount of bytes for the OpenDML master index of each |
73 | stream within the file header. By default additional master indexes are |
74 | embedded within the data packets if there is no space left in the first master |
75 | index and are linked together as a chain of indexes. This index structure can |
76 | cause problems for some use cases, e.g. third-party software strictly relying |
77 | on the OpenDML index specification or when file seeking is slow. Reserving |
78 | enough index space in the file header avoids these problems. |
79 | |
80 | The required index space depends on the output file size and should be about 16 |
81 | bytes per gigabyte. When this option is omitted or set to zero the necessary |
82 | index space is guessed. |
83 | |
84 | @item write_channel_mask |
85 | Write the channel layout mask into the audio stream header. |
86 | |
87 | This option is enabled by default. Disabling the channel mask can be useful in |
88 | specific scenarios, e.g. when merging multiple audio streams into one for |
89 | compatibility with software that only supports a single audio stream in AVI |
90 | (see @ref{amerge,,the "amerge" section in the ffmpeg-filters manual,ffmpeg-filters}). |
91 | |
92 | @end table |
93 | |
94 | @anchor{chromaprint} |
95 | @section chromaprint |
96 | |
97 | Chromaprint fingerprinter |
98 | |
99 | This muxer feeds audio data to the Chromaprint library, which generates |
100 | a fingerprint for the provided audio data. It takes a single signed |
101 | native-endian 16-bit raw audio stream. |
102 | |
103 | @subsection Options |
104 | |
105 | @table @option |
106 | @item silence_threshold |
107 | Threshold for detecting silence, ranges from 0 to 32767. -1 for default |
108 | (required for use with the AcoustID service). |
109 | |
110 | @item algorithm |
111 | Algorithm index to fingerprint with. |
112 | |
113 | @item fp_format |
114 | Format to output the fingerprint as. Accepts the following options: |
115 | @table @samp |
116 | @item raw |
117 | Binary raw fingerprint |
118 | |
119 | @item compressed |
120 | Binary compressed fingerprint |
121 | |
122 | @item base64 |
123 | Base64 compressed fingerprint |
124 | |
125 | @end table |
126 | |
127 | @end table |
128 | |
129 | @anchor{crc} |
130 | @section crc |
131 | |
132 | CRC (Cyclic Redundancy Check) testing format. |
133 | |
134 | This muxer computes and prints the Adler-32 CRC of all the input audio |
135 | and video frames. By default audio frames are converted to signed |
136 | 16-bit raw audio and video frames to raw video before computing the |
137 | CRC. |
138 | |
139 | The output of the muxer consists of a single line of the form: |
140 | CRC=0x@var{CRC}, where @var{CRC} is a hexadecimal number 0-padded to |
141 | 8 digits containing the CRC for all the decoded input frames. |
142 | |
143 | See also the @ref{framecrc} muxer. |
144 | |
145 | @subsection Examples |
146 | |
147 | For example to compute the CRC of the input, and store it in the file |
148 | @file{out.crc}: |
149 | @example |
150 | ffmpeg -i INPUT -f crc out.crc |
151 | @end example |
152 | |
153 | You can print the CRC to stdout with the command: |
154 | @example |
155 | ffmpeg -i INPUT -f crc - |
156 | @end example |
157 | |
158 | You can select the output format of each frame with @command{ffmpeg} by |
159 | specifying the audio and video codec and format. For example to |
160 | compute the CRC of the input audio converted to PCM unsigned 8-bit |
161 | and the input video converted to MPEG-2 video, use the command: |
162 | @example |
163 | ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc - |
164 | @end example |
165 | |
166 | @section flv |
167 | |
168 | Adobe Flash Video Format muxer. |
169 | |
170 | This muxer accepts the following options: |
171 | |
172 | @table @option |
173 | |
174 | @item flvflags @var{flags} |
175 | Possible values: |
176 | |
177 | @table @samp |
178 | |
179 | @item aac_seq_header_detect |
180 | Place AAC sequence header based on audio stream data. |
181 | |
182 | @item no_sequence_end |
183 | Disable sequence end tag. |
184 | |
185 | @item no_metadata |
186 | Disable metadata tag. |
187 | |
188 | @item no_duration_filesize |
189 | Disable duration and filesize in metadata when they are equal to zero |
190 | at the end of stream. (Be used to non-seekable living stream). |
191 | |
192 | @item add_keyframe_index |
193 | Used to facilitate seeking; particularly for HTTP pseudo streaming. |
194 | @end table |
195 | @end table |
196 | |
197 | @anchor{framecrc} |
198 | @section framecrc |
199 | |
200 | Per-packet CRC (Cyclic Redundancy Check) testing format. |
201 | |
202 | This muxer computes and prints the Adler-32 CRC for each audio |
203 | and video packet. By default audio frames are converted to signed |
204 | 16-bit raw audio and video frames to raw video before computing the |
205 | CRC. |
206 | |
207 | The output of the muxer consists of a line for each audio and video |
208 | packet of the form: |
209 | @example |
210 | @var{stream_index}, @var{packet_dts}, @var{packet_pts}, @var{packet_duration}, @var{packet_size}, 0x@var{CRC} |
211 | @end example |
212 | |
213 | @var{CRC} is a hexadecimal number 0-padded to 8 digits containing the |
214 | CRC of the packet. |
215 | |
216 | @subsection Examples |
217 | |
218 | For example to compute the CRC of the audio and video frames in |
219 | @file{INPUT}, converted to raw audio and video packets, and store it |
220 | in the file @file{out.crc}: |
221 | @example |
222 | ffmpeg -i INPUT -f framecrc out.crc |
223 | @end example |
224 | |
225 | To print the information to stdout, use the command: |
226 | @example |
227 | ffmpeg -i INPUT -f framecrc - |
228 | @end example |
229 | |
230 | With @command{ffmpeg}, you can select the output format to which the |
231 | audio and video frames are encoded before computing the CRC for each |
232 | packet by specifying the audio and video codec. For example, to |
233 | compute the CRC of each decoded input audio frame converted to PCM |
234 | unsigned 8-bit and of each decoded input video frame converted to |
235 | MPEG-2 video, use the command: |
236 | @example |
237 | ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc - |
238 | @end example |
239 | |
240 | See also the @ref{crc} muxer. |
241 | |
242 | @anchor{framehash} |
243 | @section framehash |
244 | |
245 | Per-packet hash testing format. |
246 | |
247 | This muxer computes and prints a cryptographic hash for each audio |
248 | and video packet. This can be used for packet-by-packet equality |
249 | checks without having to individually do a binary comparison on each. |
250 | |
251 | By default audio frames are converted to signed 16-bit raw audio and |
252 | video frames to raw video before computing the hash, but the output |
253 | of explicit conversions to other codecs can also be used. It uses the |
254 | SHA-256 cryptographic hash function by default, but supports several |
255 | other algorithms. |
256 | |
257 | The output of the muxer consists of a line for each audio and video |
258 | packet of the form: |
259 | @example |
260 | @var{stream_index}, @var{packet_dts}, @var{packet_pts}, @var{packet_duration}, @var{packet_size}, @var{hash} |
261 | @end example |
262 | |
263 | @var{hash} is a hexadecimal number representing the computed hash |
264 | for the packet. |
265 | |
266 | @table @option |
267 | @item hash @var{algorithm} |
268 | Use the cryptographic hash function specified by the string @var{algorithm}. |
269 | Supported values include @code{MD5}, @code{murmur3}, @code{RIPEMD128}, |
270 | @code{RIPEMD160}, @code{RIPEMD256}, @code{RIPEMD320}, @code{SHA160}, |
271 | @code{SHA224}, @code{SHA256} (default), @code{SHA512/224}, @code{SHA512/256}, |
272 | @code{SHA384}, @code{SHA512}, @code{CRC32} and @code{adler32}. |
273 | |
274 | @end table |
275 | |
276 | @subsection Examples |
277 | |
278 | To compute the SHA-256 hash of the audio and video frames in @file{INPUT}, |
279 | converted to raw audio and video packets, and store it in the file |
280 | @file{out.sha256}: |
281 | @example |
282 | ffmpeg -i INPUT -f framehash out.sha256 |
283 | @end example |
284 | |
285 | To print the information to stdout, using the MD5 hash function, use |
286 | the command: |
287 | @example |
288 | ffmpeg -i INPUT -f framehash -hash md5 - |
289 | @end example |
290 | |
291 | See also the @ref{hash} muxer. |
292 | |
293 | @anchor{framemd5} |
294 | @section framemd5 |
295 | |
296 | Per-packet MD5 testing format. |
297 | |
298 | This is a variant of the @ref{framehash} muxer. Unlike that muxer, |
299 | it defaults to using the MD5 hash function. |
300 | |
301 | @subsection Examples |
302 | |
303 | To compute the MD5 hash of the audio and video frames in @file{INPUT}, |
304 | converted to raw audio and video packets, and store it in the file |
305 | @file{out.md5}: |
306 | @example |
307 | ffmpeg -i INPUT -f framemd5 out.md5 |
308 | @end example |
309 | |
310 | To print the information to stdout, use the command: |
311 | @example |
312 | ffmpeg -i INPUT -f framemd5 - |
313 | @end example |
314 | |
315 | See also the @ref{framehash} and @ref{md5} muxers. |
316 | |
317 | @anchor{gif} |
318 | @section gif |
319 | |
320 | Animated GIF muxer. |
321 | |
322 | It accepts the following options: |
323 | |
324 | @table @option |
325 | @item loop |
326 | Set the number of times to loop the output. Use @code{-1} for no loop, @code{0} |
327 | for looping indefinitely (default). |
328 | |
329 | @item final_delay |
330 | Force the delay (expressed in centiseconds) after the last frame. Each frame |
331 | ends with a delay until the next frame. The default is @code{-1}, which is a |
332 | special value to tell the muxer to re-use the previous delay. In case of a |
333 | loop, you might want to customize this value to mark a pause for instance. |
334 | @end table |
335 | |
336 | For example, to encode a gif looping 10 times, with a 5 seconds delay between |
337 | the loops: |
338 | @example |
339 | ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif |
340 | @end example |
341 | |
342 | Note 1: if you wish to extract the frames into separate GIF files, you need to |
343 | force the @ref{image2} muxer: |
344 | @example |
345 | ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif" |
346 | @end example |
347 | |
348 | Note 2: the GIF format has a very large time base: the delay between two frames |
349 | can therefore not be smaller than one centi second. |
350 | |
351 | @anchor{hash} |
352 | @section hash |
353 | |
354 | Hash testing format. |
355 | |
356 | This muxer computes and prints a cryptographic hash of all the input |
357 | audio and video frames. This can be used for equality checks without |
358 | having to do a complete binary comparison. |
359 | |
360 | By default audio frames are converted to signed 16-bit raw audio and |
361 | video frames to raw video before computing the hash, but the output |
362 | of explicit conversions to other codecs can also be used. Timestamps |
363 | are ignored. It uses the SHA-256 cryptographic hash function by default, |
364 | but supports several other algorithms. |
365 | |
366 | The output of the muxer consists of a single line of the form: |
367 | @var{algo}=@var{hash}, where @var{algo} is a short string representing |
368 | the hash function used, and @var{hash} is a hexadecimal number |
369 | representing the computed hash. |
370 | |
371 | @table @option |
372 | @item hash @var{algorithm} |
373 | Use the cryptographic hash function specified by the string @var{algorithm}. |
374 | Supported values include @code{MD5}, @code{murmur3}, @code{RIPEMD128}, |
375 | @code{RIPEMD160}, @code{RIPEMD256}, @code{RIPEMD320}, @code{SHA160}, |
376 | @code{SHA224}, @code{SHA256} (default), @code{SHA512/224}, @code{SHA512/256}, |
377 | @code{SHA384}, @code{SHA512}, @code{CRC32} and @code{adler32}. |
378 | |
379 | @end table |
380 | |
381 | @subsection Examples |
382 | |
383 | To compute the SHA-256 hash of the input converted to raw audio and |
384 | video, and store it in the file @file{out.sha256}: |
385 | @example |
386 | ffmpeg -i INPUT -f hash out.sha256 |
387 | @end example |
388 | |
389 | To print an MD5 hash to stdout use the command: |
390 | @example |
391 | ffmpeg -i INPUT -f hash -hash md5 - |
392 | @end example |
393 | |
394 | See also the @ref{framehash} muxer. |
395 | |
396 | @anchor{hls} |
397 | @section hls |
398 | |
399 | Apple HTTP Live Streaming muxer that segments MPEG-TS according to |
400 | the HTTP Live Streaming (HLS) specification. |
401 | |
402 | It creates a playlist file, and one or more segment files. The output filename |
403 | specifies the playlist filename. |
404 | |
405 | By default, the muxer creates a file for each segment produced. These files |
406 | have the same name as the playlist, followed by a sequential number and a |
407 | .ts extension. |
408 | |
409 | For example, to convert an input file with @command{ffmpeg}: |
410 | @example |
411 | ffmpeg -i in.nut out.m3u8 |
412 | @end example |
413 | This example will produce the playlist, @file{out.m3u8}, and segment files: |
414 | @file{out0.ts}, @file{out1.ts}, @file{out2.ts}, etc. |
415 | |
416 | See also the @ref{segment} muxer, which provides a more generic and |
417 | flexible implementation of a segmenter, and can be used to perform HLS |
418 | segmentation. |
419 | |
420 | @subsection Options |
421 | |
422 | This muxer supports the following options: |
423 | |
424 | @table @option |
425 | @item hls_init_time @var{seconds} |
426 | Set the initial target segment length in seconds. Default value is @var{0}. |
427 | Segment will be cut on the next key frame after this time has passed on the first m3u8 list. |
428 | After the initial playlist is filled @command{ffmpeg} will cut segments |
429 | at duration equal to @code{hls_time} |
430 | |
431 | @item hls_time @var{seconds} |
432 | Set the target segment length in seconds. Default value is 2. |
433 | Segment will be cut on the next key frame after this time has passed. |
434 | |
435 | @item hls_list_size @var{size} |
436 | Set the maximum number of playlist entries. If set to 0 the list file |
437 | will contain all the segments. Default value is 5. |
438 | |
439 | @item hls_ts_options @var{options_list} |
440 | Set output format options using a :-separated list of key=value |
441 | parameters. Values containing @code{:} special characters must be |
442 | escaped. |
443 | |
444 | @item hls_wrap @var{wrap} |
445 | This is a deprecated option, you can use @code{hls_list_size} |
446 | and @code{hls_flags delete_segments} instead it |
447 | |
448 | This option is useful to avoid to fill the disk with many segment |
449 | files, and limits the maximum number of segment files written to disk |
450 | to @var{wrap}. |
451 | |
452 | |
453 | @item hls_start_number_source |
454 | Start the playlist sequence number (@code{#EXT-X-MEDIA-SEQUENCE}) according to the specified source. |
455 | Unless @code{hls_flags single_file} is set, it also specifies source of starting sequence numbers of |
456 | segment and subtitle filenames. In any case, if @code{hls_flags append_list} |
457 | is set and read playlist sequence number is greater than the specified start sequence number, |
458 | then that value will be used as start value. |
459 | |
460 | It accepts the following values: |
461 | |
462 | @table @option |
463 | |
464 | @item generic (default) |
465 | Set the starting sequence numbers according to @var{start_number} option value. |
466 | |
467 | @item epoch |
468 | The start number will be the seconds since epoch (1970-01-01 00:00:00) |
469 | |
470 | @item datetime |
471 | The start number will be based on the current date/time as YYYYmmddHHMMSS. e.g. 20161231235759. |
472 | |
473 | @end table |
474 | |
475 | @item start_number @var{number} |
476 | Start the playlist sequence number (@code{#EXT-X-MEDIA-SEQUENCE}) from the specified @var{number} |
477 | when @var{hls_start_number_source} value is @var{generic}. (This is the default case.) |
478 | Unless @code{hls_flags single_file} is set, it also specifies starting sequence numbers of segment and subtitle filenames. |
479 | Default value is 0. |
480 | |
481 | @item hls_allow_cache @var{allowcache} |
482 | Explicitly set whether the client MAY (1) or MUST NOT (0) cache media segments. |
483 | |
484 | @item hls_base_url @var{baseurl} |
485 | Append @var{baseurl} to every entry in the playlist. |
486 | Useful to generate playlists with absolute paths. |
487 | |
488 | Note that the playlist sequence number must be unique for each segment |
489 | and it is not to be confused with the segment filename sequence number |
490 | which can be cyclic, for example if the @option{wrap} option is |
491 | specified. |
492 | |
493 | @item hls_segment_filename @var{filename} |
494 | Set the segment filename. Unless @code{hls_flags single_file} is set, |
495 | @var{filename} is used as a string format with the segment number: |
496 | @example |
497 | ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8 |
498 | @end example |
499 | This example will produce the playlist, @file{out.m3u8}, and segment files: |
500 | @file{file000.ts}, @file{file001.ts}, @file{file002.ts}, etc. |
501 | |
502 | @var{filename} may contain full path or relative path specification, |
503 | but only the file name part without any path info will be contained in the m3u8 segment list. |
504 | Should a relative path be specified, the path of the created segment |
505 | files will be relative to the current working directory. |
506 | When use_localtime_mkdir is set, the whole expanded value of @var{filename} will be written into the m3u8 segment list. |
507 | |
508 | |
509 | @item use_localtime |
510 | Use strftime() on @var{filename} to expand the segment filename with localtime. |
511 | The segment number is also available in this mode, but to use it, you need to specify second_level_segment_index |
512 | hls_flag and %%d will be the specifier. |
513 | @example |
514 | ffmpeg -i in.nut -use_localtime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8 |
515 | @end example |
516 | This example will produce the playlist, @file{out.m3u8}, and segment files: |
517 | @file{file-20160215-1455569023.ts}, @file{file-20160215-1455569024.ts}, etc. |
518 | Note: On some systems/environments, the @code{%s} specifier is not available. See |
519 | @code{strftime()} documentation. |
520 | @example |
521 | ffmpeg -i in.nut -use_localtime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8 |
522 | @end example |
523 | This example will produce the playlist, @file{out.m3u8}, and segment files: |
524 | @file{file-20160215-0001.ts}, @file{file-20160215-0002.ts}, etc. |
525 | |
526 | @item use_localtime_mkdir |
527 | Used together with -use_localtime, it will create all subdirectories which |
528 | is expanded in @var{filename}. |
529 | @example |
530 | ffmpeg -i in.nut -use_localtime 1 -use_localtime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8 |
531 | @end example |
532 | This example will create a directory 201560215 (if it does not exist), and then |
533 | produce the playlist, @file{out.m3u8}, and segment files: |
534 | @file{20160215/file-20160215-1455569023.ts}, @file{20160215/file-20160215-1455569024.ts}, etc. |
535 | |
536 | @example |
537 | ffmpeg -i in.nut -use_localtime 1 -use_localtime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8 |
538 | @end example |
539 | This example will create a directory hierarchy 2016/02/15 (if any of them do not exist), and then |
540 | produce the playlist, @file{out.m3u8}, and segment files: |
541 | @file{2016/02/15/file-20160215-1455569023.ts}, @file{2016/02/15/file-20160215-1455569024.ts}, etc. |
542 | |
543 | |
544 | @item hls_key_info_file @var{key_info_file} |
545 | Use the information in @var{key_info_file} for segment encryption. The first |
546 | line of @var{key_info_file} specifies the key URI written to the playlist. The |
547 | key URL is used to access the encryption key during playback. The second line |
548 | specifies the path to the key file used to obtain the key during the encryption |
549 | process. The key file is read as a single packed array of 16 octets in binary |
550 | format. The optional third line specifies the initialization vector (IV) as a |
551 | hexadecimal string to be used instead of the segment sequence number (default) |
552 | for encryption. Changes to @var{key_info_file} will result in segment |
553 | encryption with the new key/IV and an entry in the playlist for the new key |
554 | URI/IV. |
555 | |
556 | Key info file format: |
557 | @example |
558 | @var{key URI} |
559 | @var{key file path} |
560 | @var{IV} (optional) |
561 | @end example |
562 | |
563 | Example key URIs: |
564 | @example |
565 | http://server/file.key |
566 | /path/to/file.key |
567 | file.key |
568 | @end example |
569 | |
570 | Example key file paths: |
571 | @example |
572 | file.key |
573 | /path/to/file.key |
574 | @end example |
575 | |
576 | Example IV: |
577 | @example |
578 | 0123456789ABCDEF0123456789ABCDEF |
579 | @end example |
580 | |
581 | Key info file example: |
582 | @example |
583 | http://server/file.key |
584 | /path/to/file.key |
585 | 0123456789ABCDEF0123456789ABCDEF |
586 | @end example |
587 | |
588 | Example shell script: |
589 | @example |
590 | #!/bin/sh |
591 | BASE_URL=$@{1:-'.'@} |
592 | openssl rand 16 > file.key |
593 | echo $BASE_URL/file.key > file.keyinfo |
594 | echo file.key >> file.keyinfo |
595 | echo $(openssl rand -hex 16) >> file.keyinfo |
596 | ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \ |
597 | -hls_key_info_file file.keyinfo out.m3u8 |
598 | @end example |
599 | |
600 | |
601 | @item hls_flags @var{flags} |
602 | Possible values: |
603 | |
604 | @table @samp |
605 | @item single_file |
606 | If this flag is set, the muxer will store all segments in a single MPEG-TS |
607 | file, and will use byte ranges in the playlist. HLS playlists generated with |
608 | this way will have the version number 4. |
609 | For example: |
610 | @example |
611 | ffmpeg -i in.nut -hls_flags single_file out.m3u8 |
612 | @end example |
613 | Will produce the playlist, @file{out.m3u8}, and a single segment file, |
614 | @file{out.ts}. |
615 | |
616 | @item delete_segments |
617 | Segment files removed from the playlist are deleted after a period of time |
618 | equal to the duration of the segment plus the duration of the playlist. |
619 | |
620 | @item append_list |
621 | Append new segments into the end of old segment list, |
622 | and remove the @code{#EXT-X-ENDLIST} from the old segment list. |
623 | |
624 | @item round_durations |
625 | Round the duration info in the playlist file segment info to integer |
626 | values, instead of using floating point. |
627 | |
628 | @item discont_start |
629 | Add the @code{#EXT-X-DISCONTINUITY} tag to the playlist, before the |
630 | first segment's information. |
631 | |
632 | @item omit_endlist |
633 | Do not append the @code{EXT-X-ENDLIST} tag at the end of the playlist. |
634 | |
635 | @item split_by_time |
636 | Allow segments to start on frames other than keyframes. This improves |
637 | behavior on some players when the time between keyframes is inconsistent, |
638 | but may make things worse on others, and can cause some oddities during |
639 | seeking. This flag should be used with the @code{hls_time} option. |
640 | |
641 | @item program_date_time |
642 | Generate @code{EXT-X-PROGRAM-DATE-TIME} tags. |
643 | |
644 | @item second_level_segment_index |
645 | Makes it possible to use segment indexes as %%d in hls_segment_filename expression |
646 | besides date/time values when use_localtime is on. |
647 | To get fixed width numbers with trailing zeroes, %%0xd format is available where x is the required width. |
648 | |
649 | @item second_level_segment_size |
650 | Makes it possible to use segment sizes (counted in bytes) as %%s in hls_segment_filename |
651 | expression besides date/time values when use_localtime is on. |
652 | To get fixed width numbers with trailing zeroes, %%0xs format is available where x is the required width. |
653 | |
654 | @item second_level_segment_duration |
655 | Makes it possible to use segment duration (calculated in microseconds) as %%t in hls_segment_filename |
656 | expression besides date/time values when use_localtime is on. |
657 | To get fixed width numbers with trailing zeroes, %%0xt format is available where x is the required width. |
658 | |
659 | @example |
660 | ffmpeg -i sample.mpeg \ |
661 | -f hls -hls_time 3 -hls_list_size 5 \ |
662 | -hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \ |
663 | -use_localtime 1 -use_localtime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8 |
664 | @end example |
665 | This will produce segments like this: |
666 | @file{segment_20170102194334_0003_00122200_0000003000000.ts}, @file{segment_20170102194334_0004_00120072_0000003000000.ts} etc. |
667 | |
668 | @item temp_file |
669 | Write segment data to filename.tmp and rename to filename only once the segment is complete. A webserver |
670 | serving up segments can be configured to reject requests to *.tmp to prevent access to in-progress segments |
671 | before they have been added to the m3u8 playlist. |
672 | |
673 | @end table |
674 | |
675 | @item hls_playlist_type event |
676 | Emit @code{#EXT-X-PLAYLIST-TYPE:EVENT} in the m3u8 header. Forces |
677 | @option{hls_list_size} to 0; the playlist can only be appended to. |
678 | |
679 | @item hls_playlist_type vod |
680 | Emit @code{#EXT-X-PLAYLIST-TYPE:VOD} in the m3u8 header. Forces |
681 | @option{hls_list_size} to 0; the playlist must not change. |
682 | |
683 | @item method |
684 | Use the given HTTP method to create the hls files. |
685 | @example |
686 | ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8 |
687 | @end example |
688 | This example will upload all the mpegts segment files to the HTTP |
689 | server using the HTTP PUT method, and update the m3u8 files every |
690 | @code{refresh} times using the same method. |
691 | Note that the HTTP server must support the given method for uploading |
692 | files. |
693 | @end table |
694 | |
695 | @anchor{ico} |
696 | @section ico |
697 | |
698 | ICO file muxer. |
699 | |
700 | Microsoft's icon file format (ICO) has some strict limitations that should be noted: |
701 | |
702 | @itemize |
703 | @item |
704 | Size cannot exceed 256 pixels in any dimension |
705 | |
706 | @item |
707 | Only BMP and PNG images can be stored |
708 | |
709 | @item |
710 | If a BMP image is used, it must be one of the following pixel formats: |
711 | @example |
712 | BMP Bit Depth FFmpeg Pixel Format |
713 | 1bit pal8 |
714 | 4bit pal8 |
715 | 8bit pal8 |
716 | 16bit rgb555le |
717 | 24bit bgr24 |
718 | 32bit bgra |
719 | @end example |
720 | |
721 | @item |
722 | If a BMP image is used, it must use the BITMAPINFOHEADER DIB header |
723 | |
724 | @item |
725 | If a PNG image is used, it must use the rgba pixel format |
726 | @end itemize |
727 | |
728 | @anchor{image2} |
729 | @section image2 |
730 | |
731 | Image file muxer. |
732 | |
733 | The image file muxer writes video frames to image files. |
734 | |
735 | The output filenames are specified by a pattern, which can be used to |
736 | produce sequentially numbered series of files. |
737 | The pattern may contain the string "%d" or "%0@var{N}d", this string |
738 | specifies the position of the characters representing a numbering in |
739 | the filenames. If the form "%0@var{N}d" is used, the string |
740 | representing the number in each filename is 0-padded to @var{N} |
741 | digits. The literal character '%' can be specified in the pattern with |
742 | the string "%%". |
743 | |
744 | If the pattern contains "%d" or "%0@var{N}d", the first filename of |
745 | the file list specified will contain the number 1, all the following |
746 | numbers will be sequential. |
747 | |
748 | The pattern may contain a suffix which is used to automatically |
749 | determine the format of the image files to write. |
750 | |
751 | For example the pattern "img-%03d.bmp" will specify a sequence of |
752 | filenames of the form @file{img-001.bmp}, @file{img-002.bmp}, ..., |
753 | @file{img-010.bmp}, etc. |
754 | The pattern "img%%-%d.jpg" will specify a sequence of filenames of the |
755 | form @file{img%-1.jpg}, @file{img%-2.jpg}, ..., @file{img%-10.jpg}, |
756 | etc. |
757 | |
758 | @subsection Examples |
759 | |
760 | The following example shows how to use @command{ffmpeg} for creating a |
761 | sequence of files @file{img-001.jpeg}, @file{img-002.jpeg}, ..., |
762 | taking one image every second from the input video: |
763 | @example |
764 | ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg' |
765 | @end example |
766 | |
767 | Note that with @command{ffmpeg}, if the format is not specified with the |
768 | @code{-f} option and the output filename specifies an image file |
769 | format, the image2 muxer is automatically selected, so the previous |
770 | command can be written as: |
771 | @example |
772 | ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg' |
773 | @end example |
774 | |
775 | Note also that the pattern must not necessarily contain "%d" or |
776 | "%0@var{N}d", for example to create a single image file |
777 | @file{img.jpeg} from the start of the input video you can employ the command: |
778 | @example |
779 | ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg |
780 | @end example |
781 | |
782 | The @option{strftime} option allows you to expand the filename with |
783 | date and time information. Check the documentation of |
784 | the @code{strftime()} function for the syntax. |
785 | |
786 | For example to generate image files from the @code{strftime()} |
787 | "%Y-%m-%d_%H-%M-%S" pattern, the following @command{ffmpeg} command |
788 | can be used: |
789 | @example |
790 | ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg" |
791 | @end example |
792 | |
793 | @subsection Options |
794 | |
795 | @table @option |
796 | @item start_number |
797 | Start the sequence from the specified number. Default value is 0. |
798 | |
799 | @item update |
800 | If set to 1, the filename will always be interpreted as just a |
801 | filename, not a pattern, and the corresponding file will be continuously |
802 | overwritten with new images. Default value is 0. |
803 | |
804 | @item strftime |
805 | If set to 1, expand the filename with date and time information from |
806 | @code{strftime()}. Default value is 0. |
807 | @end table |
808 | |
809 | The image muxer supports the .Y.U.V image file format. This format is |
810 | special in that that each image frame consists of three files, for |
811 | each of the YUV420P components. To read or write this image file format, |
812 | specify the name of the '.Y' file. The muxer will automatically open the |
813 | '.U' and '.V' files as required. |
814 | |
815 | @section matroska |
816 | |
817 | Matroska container muxer. |
818 | |
819 | This muxer implements the matroska and webm container specs. |
820 | |
821 | @subsection Metadata |
822 | |
823 | The recognized metadata settings in this muxer are: |
824 | |
825 | @table @option |
826 | @item title |
827 | Set title name provided to a single track. |
828 | |
829 | @item language |
830 | Specify the language of the track in the Matroska languages form. |
831 | |
832 | The language can be either the 3 letters bibliographic ISO-639-2 (ISO |
833 | 639-2/B) form (like "fre" for French), or a language code mixed with a |
834 | country code for specialities in languages (like "fre-ca" for Canadian |
835 | French). |
836 | |
837 | @item stereo_mode |
838 | Set stereo 3D video layout of two views in a single video track. |
839 | |
840 | The following values are recognized: |
841 | @table @samp |
842 | @item mono |
843 | video is not stereo |
844 | @item left_right |
845 | Both views are arranged side by side, Left-eye view is on the left |
846 | @item bottom_top |
847 | Both views are arranged in top-bottom orientation, Left-eye view is at bottom |
848 | @item top_bottom |
849 | Both views are arranged in top-bottom orientation, Left-eye view is on top |
850 | @item checkerboard_rl |
851 | Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first |
852 | @item checkerboard_lr |
853 | Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first |
854 | @item row_interleaved_rl |
855 | Each view is constituted by a row based interleaving, Right-eye view is first row |
856 | @item row_interleaved_lr |
857 | Each view is constituted by a row based interleaving, Left-eye view is first row |
858 | @item col_interleaved_rl |
859 | Both views are arranged in a column based interleaving manner, Right-eye view is first column |
860 | @item col_interleaved_lr |
861 | Both views are arranged in a column based interleaving manner, Left-eye view is first column |
862 | @item anaglyph_cyan_red |
863 | All frames are in anaglyph format viewable through red-cyan filters |
864 | @item right_left |
865 | Both views are arranged side by side, Right-eye view is on the left |
866 | @item anaglyph_green_magenta |
867 | All frames are in anaglyph format viewable through green-magenta filters |
868 | @item block_lr |
869 | Both eyes laced in one Block, Left-eye view is first |
870 | @item block_rl |
871 | Both eyes laced in one Block, Right-eye view is first |
872 | @end table |
873 | @end table |
874 | |
875 | For example a 3D WebM clip can be created using the following command line: |
876 | @example |
877 | ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm |
878 | @end example |
879 | |
880 | @subsection Options |
881 | |
882 | This muxer supports the following options: |
883 | |
884 | @table @option |
885 | @item reserve_index_space |
886 | By default, this muxer writes the index for seeking (called cues in Matroska |
887 | terms) at the end of the file, because it cannot know in advance how much space |
888 | to leave for the index at the beginning of the file. However for some use cases |
889 | -- e.g. streaming where seeking is possible but slow -- it is useful to put the |
890 | index at the beginning of the file. |
891 | |
892 | If this option is set to a non-zero value, the muxer will reserve a given amount |
893 | of space in the file header and then try to write the cues there when the muxing |
894 | finishes. If the available space does not suffice, muxing will fail. A safe size |
895 | for most use cases should be about 50kB per hour of video. |
896 | |
897 | Note that cues are only written if the output is seekable and this option will |
898 | have no effect if it is not. |
899 | @end table |
900 | |
901 | @anchor{md5} |
902 | @section md5 |
903 | |
904 | MD5 testing format. |
905 | |
906 | This is a variant of the @ref{hash} muxer. Unlike that muxer, it |
907 | defaults to using the MD5 hash function. |
908 | |
909 | @subsection Examples |
910 | |
911 | To compute the MD5 hash of the input converted to raw |
912 | audio and video, and store it in the file @file{out.md5}: |
913 | @example |
914 | ffmpeg -i INPUT -f md5 out.md5 |
915 | @end example |
916 | |
917 | You can print the MD5 to stdout with the command: |
918 | @example |
919 | ffmpeg -i INPUT -f md5 - |
920 | @end example |
921 | |
922 | See also the @ref{hash} and @ref{framemd5} muxers. |
923 | |
924 | @section mov, mp4, ismv |
925 | |
926 | MOV/MP4/ISMV (Smooth Streaming) muxer. |
927 | |
928 | The mov/mp4/ismv muxer supports fragmentation. Normally, a MOV/MP4 |
929 | file has all the metadata about all packets stored in one location |
930 | (written at the end of the file, it can be moved to the start for |
931 | better playback by adding @var{faststart} to the @var{movflags}, or |
932 | using the @command{qt-faststart} tool). A fragmented |
933 | file consists of a number of fragments, where packets and metadata |
934 | about these packets are stored together. Writing a fragmented |
935 | file has the advantage that the file is decodable even if the |
936 | writing is interrupted (while a normal MOV/MP4 is undecodable if |
937 | it is not properly finished), and it requires less memory when writing |
938 | very long files (since writing normal MOV/MP4 files stores info about |
939 | every single packet in memory until the file is closed). The downside |
940 | is that it is less compatible with other applications. |
941 | |
942 | @subsection Options |
943 | |
944 | Fragmentation is enabled by setting one of the AVOptions that define |
945 | how to cut the file into fragments: |
946 | |
947 | @table @option |
948 | @item -moov_size @var{bytes} |
949 | Reserves space for the moov atom at the beginning of the file instead of placing the |
950 | moov atom at the end. If the space reserved is insufficient, muxing will fail. |
951 | @item -movflags frag_keyframe |
952 | Start a new fragment at each video keyframe. |
953 | @item -frag_duration @var{duration} |
954 | Create fragments that are @var{duration} microseconds long. |
955 | @item -frag_size @var{size} |
956 | Create fragments that contain up to @var{size} bytes of payload data. |
957 | @item -movflags frag_custom |
958 | Allow the caller to manually choose when to cut fragments, by |
959 | calling @code{av_write_frame(ctx, NULL)} to write a fragment with |
960 | the packets written so far. (This is only useful with other |
961 | applications integrating libavformat, not from @command{ffmpeg}.) |
962 | @item -min_frag_duration @var{duration} |
963 | Don't create fragments that are shorter than @var{duration} microseconds long. |
964 | @end table |
965 | |
966 | If more than one condition is specified, fragments are cut when |
967 | one of the specified conditions is fulfilled. The exception to this is |
968 | @code{-min_frag_duration}, which has to be fulfilled for any of the other |
969 | conditions to apply. |
970 | |
971 | Additionally, the way the output file is written can be adjusted |
972 | through a few other options: |
973 | |
974 | @table @option |
975 | @item -movflags empty_moov |
976 | Write an initial moov atom directly at the start of the file, without |
977 | describing any samples in it. Generally, an mdat/moov pair is written |
978 | at the start of the file, as a normal MOV/MP4 file, containing only |
979 | a short portion of the file. With this option set, there is no initial |
980 | mdat atom, and the moov atom only describes the tracks but has |
981 | a zero duration. |
982 | |
983 | This option is implicitly set when writing ismv (Smooth Streaming) files. |
984 | @item -movflags separate_moof |
985 | Write a separate moof (movie fragment) atom for each track. Normally, |
986 | packets for all tracks are written in a moof atom (which is slightly |
987 | more efficient), but with this option set, the muxer writes one moof/mdat |
988 | pair for each track, making it easier to separate tracks. |
989 | |
990 | This option is implicitly set when writing ismv (Smooth Streaming) files. |
991 | @item -movflags faststart |
992 | Run a second pass moving the index (moov atom) to the beginning of the file. |
993 | This operation can take a while, and will not work in various situations such |
994 | as fragmented output, thus it is not enabled by default. |
995 | @item -movflags rtphint |
996 | Add RTP hinting tracks to the output file. |
997 | @item -movflags disable_chpl |
998 | Disable Nero chapter markers (chpl atom). Normally, both Nero chapters |
999 | and a QuickTime chapter track are written to the file. With this option |
1000 | set, only the QuickTime chapter track will be written. Nero chapters can |
1001 | cause failures when the file is reprocessed with certain tagging programs, like |
1002 | mp3Tag 2.61a and iTunes 11.3, most likely other versions are affected as well. |
1003 | @item -movflags omit_tfhd_offset |
1004 | Do not write any absolute base_data_offset in tfhd atoms. This avoids |
1005 | tying fragments to absolute byte positions in the file/streams. |
1006 | @item -movflags default_base_moof |
1007 | Similarly to the omit_tfhd_offset, this flag avoids writing the |
1008 | absolute base_data_offset field in tfhd atoms, but does so by using |
1009 | the new default-base-is-moof flag instead. This flag is new from |
1010 | 14496-12:2012. This may make the fragments easier to parse in certain |
1011 | circumstances (avoiding basing track fragment location calculations |
1012 | on the implicit end of the previous track fragment). |
1013 | @item -write_tmcd |
1014 | Specify @code{on} to force writing a timecode track, @code{off} to disable it |
1015 | and @code{auto} to write a timecode track only for mov and mp4 output (default). |
1016 | @end table |
1017 | |
1018 | @subsection Example |
1019 | |
1020 | Smooth Streaming content can be pushed in real time to a publishing |
1021 | point on IIS with this muxer. Example: |
1022 | @example |
1023 | ffmpeg -re @var{<normal input/transcoding options>} -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1) |
1024 | @end example |
1025 | |
1026 | @subsection Audible AAX |
1027 | |
1028 | Audible AAX files are encrypted M4B files, and they can be decrypted by specifying a 4 byte activation secret. |
1029 | @example |
1030 | ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4 |
1031 | @end example |
1032 | |
1033 | @section mp3 |
1034 | |
1035 | The MP3 muxer writes a raw MP3 stream with the following optional features: |
1036 | @itemize @bullet |
1037 | @item |
1038 | An ID3v2 metadata header at the beginning (enabled by default). Versions 2.3 and |
1039 | 2.4 are supported, the @code{id3v2_version} private option controls which one is |
1040 | used (3 or 4). Setting @code{id3v2_version} to 0 disables the ID3v2 header |
1041 | completely. |
1042 | |
1043 | The muxer supports writing attached pictures (APIC frames) to the ID3v2 header. |
1044 | The pictures are supplied to the muxer in form of a video stream with a single |
1045 | packet. There can be any number of those streams, each will correspond to a |
1046 | single APIC frame. The stream metadata tags @var{title} and @var{comment} map |
1047 | to APIC @var{description} and @var{picture type} respectively. See |
1048 | @url{http://id3.org/id3v2.4.0-frames} for allowed picture types. |
1049 | |
1050 | Note that the APIC frames must be written at the beginning, so the muxer will |
1051 | buffer the audio frames until it gets all the pictures. It is therefore advised |
1052 | to provide the pictures as soon as possible to avoid excessive buffering. |
1053 | |
1054 | @item |
1055 | A Xing/LAME frame right after the ID3v2 header (if present). It is enabled by |
1056 | default, but will be written only if the output is seekable. The |
1057 | @code{write_xing} private option can be used to disable it. The frame contains |
1058 | various information that may be useful to the decoder, like the audio duration |
1059 | or encoder delay. |
1060 | |
1061 | @item |
1062 | A legacy ID3v1 tag at the end of the file (disabled by default). It may be |
1063 | enabled with the @code{write_id3v1} private option, but as its capabilities are |
1064 | very limited, its usage is not recommended. |
1065 | @end itemize |
1066 | |
1067 | Examples: |
1068 | |
1069 | Write an mp3 with an ID3v2.3 header and an ID3v1 footer: |
1070 | @example |
1071 | ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3 |
1072 | @end example |
1073 | |
1074 | To attach a picture to an mp3 file select both the audio and the picture stream |
1075 | with @code{map}: |
1076 | @example |
1077 | ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1 |
1078 | -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3 |
1079 | @end example |
1080 | |
1081 | Write a "clean" MP3 without any extra features: |
1082 | @example |
1083 | ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3 |
1084 | @end example |
1085 | |
1086 | @section mpegts |
1087 | |
1088 | MPEG transport stream muxer. |
1089 | |
1090 | This muxer implements ISO 13818-1 and part of ETSI EN 300 468. |
1091 | |
1092 | The recognized metadata settings in mpegts muxer are @code{service_provider} |
1093 | and @code{service_name}. If they are not set the default for |
1094 | @code{service_provider} is @samp{FFmpeg} and the default for |
1095 | @code{service_name} is @samp{Service01}. |
1096 | |
1097 | @subsection Options |
1098 | |
1099 | The muxer options are: |
1100 | |
1101 | @table @option |
1102 | @item mpegts_transport_stream_id @var{integer} |
1103 | Set the @samp{transport_stream_id}. This identifies a transponder in DVB. |
1104 | Default is @code{0x0001}. |
1105 | |
1106 | @item mpegts_original_network_id @var{integer} |
1107 | Set the @samp{original_network_id}. This is unique identifier of a |
1108 | network in DVB. Its main use is in the unique identification of a service |
1109 | through the path @samp{Original_Network_ID, Transport_Stream_ID}. Default |
1110 | is @code{0x0001}. |
1111 | |
1112 | @item mpegts_service_id @var{integer} |
1113 | Set the @samp{service_id}, also known as program in DVB. Default is |
1114 | @code{0x0001}. |
1115 | |
1116 | @item mpegts_service_type @var{integer} |
1117 | Set the program @samp{service_type}. Default is @code{digital_tv}. |
1118 | Accepts the following options: |
1119 | @table @samp |
1120 | @item hex_value |
1121 | Any hexdecimal value between @code{0x01} to @code{0xff} as defined in |
1122 | ETSI 300 468. |
1123 | @item digital_tv |
1124 | Digital TV service. |
1125 | @item digital_radio |
1126 | Digital Radio service. |
1127 | @item teletext |
1128 | Teletext service. |
1129 | @item advanced_codec_digital_radio |
1130 | Advanced Codec Digital Radio service. |
1131 | @item mpeg2_digital_hdtv |
1132 | MPEG2 Digital HDTV service. |
1133 | @item advanced_codec_digital_sdtv |
1134 | Advanced Codec Digital SDTV service. |
1135 | @item advanced_codec_digital_hdtv |
1136 | Advanced Codec Digital HDTV service. |
1137 | @end table |
1138 | |
1139 | @item mpegts_pmt_start_pid @var{integer} |
1140 | Set the first PID for PMT. Default is @code{0x1000}. Max is @code{0x1f00}. |
1141 | |
1142 | @item mpegts_start_pid @var{integer} |
1143 | Set the first PID for data packets. Default is @code{0x0100}. Max is |
1144 | @code{0x0f00}. |
1145 | |
1146 | @item mpegts_m2ts_mode @var{boolean} |
1147 | Enable m2ts mode if set to @code{1}. Default value is @code{-1} which |
1148 | disables m2ts mode. |
1149 | |
1150 | @item muxrate @var{integer} |
1151 | Set a constant muxrate. Default is VBR. |
1152 | |
1153 | @item pes_payload_size @var{integer} |
1154 | Set minimum PES packet payload in bytes. Default is @code{2930}. |
1155 | |
1156 | @item mpegts_flags @var{flags} |
1157 | Set mpegts flags. Accepts the following options: |
1158 | @table @samp |
1159 | @item resend_headers |
1160 | Reemit PAT/PMT before writing the next packet. |
1161 | @item latm |
1162 | Use LATM packetization for AAC. |
1163 | @item pat_pmt_at_frames |
1164 | Reemit PAT and PMT at each video frame. |
1165 | @item system_b |
1166 | Conform to System B (DVB) instead of System A (ATSC). |
1167 | @item initial_discontinuity |
1168 | Mark the initial packet of each stream as discontinuity. |
1169 | @end table |
1170 | |
1171 | @item resend_headers @var{integer} |
1172 | Reemit PAT/PMT before writing the next packet. This option is deprecated: |
1173 | use @option{mpegts_flags} instead. |
1174 | |
1175 | @item mpegts_copyts @var{boolean} |
1176 | Preserve original timestamps, if value is set to @code{1}. Default value |
1177 | is @code{-1}, which results in shifting timestamps so that they start from 0. |
1178 | |
1179 | @item omit_video_pes_length @var{boolean} |
1180 | Omit the PES packet length for video packets. Default is @code{1} (true). |
1181 | |
1182 | @item pcr_period @var{integer} |
1183 | Override the default PCR retransmission time in milliseconds. Ignored if |
1184 | variable muxrate is selected. Default is @code{20}. |
1185 | |
1186 | @item pat_period @var{double} |
1187 | Maximum time in seconds between PAT/PMT tables. |
1188 | |
1189 | @item sdt_period @var{double} |
1190 | Maximum time in seconds between SDT tables. |
1191 | |
1192 | @item tables_version @var{integer} |
1193 | Set PAT, PMT and SDT version (default @code{0}, valid values are from 0 to 31, inclusively). |
1194 | This option allows updating stream structure so that standard consumer may |
1195 | detect the change. To do so, reopen output @code{AVFormatContext} (in case of API |
1196 | usage) or restart @command{ffmpeg} instance, cyclically changing |
1197 | @option{tables_version} value: |
1198 | |
1199 | @example |
1200 | ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 |
1201 | ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 |
1202 | ... |
1203 | ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111 |
1204 | ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 |
1205 | ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 |
1206 | ... |
1207 | @end example |
1208 | @end table |
1209 | |
1210 | @subsection Example |
1211 | |
1212 | @example |
1213 | ffmpeg -i file.mpg -c copy \ |
1214 | -mpegts_original_network_id 0x1122 \ |
1215 | -mpegts_transport_stream_id 0x3344 \ |
1216 | -mpegts_service_id 0x5566 \ |
1217 | -mpegts_pmt_start_pid 0x1500 \ |
1218 | -mpegts_start_pid 0x150 \ |
1219 | -metadata service_provider="Some provider" \ |
1220 | -metadata service_name="Some Channel" \ |
1221 | out.ts |
1222 | @end example |
1223 | |
1224 | @section mxf, mxf_d10 |
1225 | |
1226 | MXF muxer. |
1227 | |
1228 | @subsection Options |
1229 | |
1230 | The muxer options are: |
1231 | |
1232 | @table @option |
1233 | @item store_user_comments @var{bool} |
1234 | Set if user comments should be stored if available or never. |
1235 | IRT D-10 does not allow user comments. The default is thus to write them for |
1236 | mxf but not for mxf_d10 |
1237 | @end table |
1238 | |
1239 | @section null |
1240 | |
1241 | Null muxer. |
1242 | |
1243 | This muxer does not generate any output file, it is mainly useful for |
1244 | testing or benchmarking purposes. |
1245 | |
1246 | For example to benchmark decoding with @command{ffmpeg} you can use the |
1247 | command: |
1248 | @example |
1249 | ffmpeg -benchmark -i INPUT -f null out.null |
1250 | @end example |
1251 | |
1252 | Note that the above command does not read or write the @file{out.null} |
1253 | file, but specifying the output file is required by the @command{ffmpeg} |
1254 | syntax. |
1255 | |
1256 | Alternatively you can write the command as: |
1257 | @example |
1258 | ffmpeg -benchmark -i INPUT -f null - |
1259 | @end example |
1260 | |
1261 | @section nut |
1262 | |
1263 | @table @option |
1264 | @item -syncpoints @var{flags} |
1265 | Change the syncpoint usage in nut: |
1266 | @table @option |
1267 | @item @var{default} use the normal low-overhead seeking aids. |
1268 | @item @var{none} do not use the syncpoints at all, reducing the overhead but making the stream non-seekable; |
1269 | Use of this option is not recommended, as the resulting files are very damage |
1270 | sensitive and seeking is not possible. Also in general the overhead from |
1271 | syncpoints is negligible. Note, -@code{write_index} 0 can be used to disable |
1272 | all growing data tables, allowing to mux endless streams with limited memory |
1273 | and without these disadvantages. |
1274 | @item @var{timestamped} extend the syncpoint with a wallclock field. |
1275 | @end table |
1276 | The @var{none} and @var{timestamped} flags are experimental. |
1277 | @item -write_index @var{bool} |
1278 | Write index at the end, the default is to write an index. |
1279 | @end table |
1280 | |
1281 | @example |
1282 | ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor |
1283 | @end example |
1284 | |
1285 | @section ogg |
1286 | |
1287 | Ogg container muxer. |
1288 | |
1289 | @table @option |
1290 | @item -page_duration @var{duration} |
1291 | Preferred page duration, in microseconds. The muxer will attempt to create |
1292 | pages that are approximately @var{duration} microseconds long. This allows the |
1293 | user to compromise between seek granularity and container overhead. The default |
1294 | is 1 second. A value of 0 will fill all segments, making pages as large as |
1295 | possible. A value of 1 will effectively use 1 packet-per-page in most |
1296 | situations, giving a small seek granularity at the cost of additional container |
1297 | overhead. |
1298 | @item -serial_offset @var{value} |
1299 | Serial value from which to set the streams serial number. |
1300 | Setting it to different and sufficiently large values ensures that the produced |
1301 | ogg files can be safely chained. |
1302 | |
1303 | @end table |
1304 | |
1305 | @anchor{segment} |
1306 | @section segment, stream_segment, ssegment |
1307 | |
1308 | Basic stream segmenter. |
1309 | |
1310 | This muxer outputs streams to a number of separate files of nearly |
1311 | fixed duration. Output filename pattern can be set in a fashion |
1312 | similar to @ref{image2}, or by using a @code{strftime} template if |
1313 | the @option{strftime} option is enabled. |
1314 | |
1315 | @code{stream_segment} is a variant of the muxer used to write to |
1316 | streaming output formats, i.e. which do not require global headers, |
1317 | and is recommended for outputting e.g. to MPEG transport stream segments. |
1318 | @code{ssegment} is a shorter alias for @code{stream_segment}. |
1319 | |
1320 | Every segment starts with a keyframe of the selected reference stream, |
1321 | which is set through the @option{reference_stream} option. |
1322 | |
1323 | Note that if you want accurate splitting for a video file, you need to |
1324 | make the input key frames correspond to the exact splitting times |
1325 | expected by the segmenter, or the segment muxer will start the new |
1326 | segment with the key frame found next after the specified start |
1327 | time. |
1328 | |
1329 | The segment muxer works best with a single constant frame rate video. |
1330 | |
1331 | Optionally it can generate a list of the created segments, by setting |
1332 | the option @var{segment_list}. The list type is specified by the |
1333 | @var{segment_list_type} option. The entry filenames in the segment |
1334 | list are set by default to the basename of the corresponding segment |
1335 | files. |
1336 | |
1337 | See also the @ref{hls} muxer, which provides a more specific |
1338 | implementation for HLS segmentation. |
1339 | |
1340 | @subsection Options |
1341 | |
1342 | The segment muxer supports the following options: |
1343 | |
1344 | @table @option |
1345 | @item increment_tc @var{1|0} |
1346 | if set to @code{1}, increment timecode between each segment |
1347 | If this is selected, the input need to have |
1348 | a timecode in the first video stream. Default value is |
1349 | @code{0}. |
1350 | |
1351 | @item reference_stream @var{specifier} |
1352 | Set the reference stream, as specified by the string @var{specifier}. |
1353 | If @var{specifier} is set to @code{auto}, the reference is chosen |
1354 | automatically. Otherwise it must be a stream specifier (see the ``Stream |
1355 | specifiers'' chapter in the ffmpeg manual) which specifies the |
1356 | reference stream. The default value is @code{auto}. |
1357 | |
1358 | @item segment_format @var{format} |
1359 | Override the inner container format, by default it is guessed by the filename |
1360 | extension. |
1361 | |
1362 | @item segment_format_options @var{options_list} |
1363 | Set output format options using a :-separated list of key=value |
1364 | parameters. Values containing the @code{:} special character must be |
1365 | escaped. |
1366 | |
1367 | @item segment_list @var{name} |
1368 | Generate also a listfile named @var{name}. If not specified no |
1369 | listfile is generated. |
1370 | |
1371 | @item segment_list_flags @var{flags} |
1372 | Set flags affecting the segment list generation. |
1373 | |
1374 | It currently supports the following flags: |
1375 | @table @samp |
1376 | @item cache |
1377 | Allow caching (only affects M3U8 list files). |
1378 | |
1379 | @item live |
1380 | Allow live-friendly file generation. |
1381 | @end table |
1382 | |
1383 | @item segment_list_size @var{size} |
1384 | Update the list file so that it contains at most @var{size} |
1385 | segments. If 0 the list file will contain all the segments. Default |
1386 | value is 0. |
1387 | |
1388 | @item segment_list_entry_prefix @var{prefix} |
1389 | Prepend @var{prefix} to each entry. Useful to generate absolute paths. |
1390 | By default no prefix is applied. |
1391 | |
1392 | @item segment_list_type @var{type} |
1393 | Select the listing format. |
1394 | |
1395 | The following values are recognized: |
1396 | @table @samp |
1397 | @item flat |
1398 | Generate a flat list for the created segments, one segment per line. |
1399 | |
1400 | @item csv, ext |
1401 | Generate a list for the created segments, one segment per line, |
1402 | each line matching the format (comma-separated values): |
1403 | @example |
1404 | @var{segment_filename},@var{segment_start_time},@var{segment_end_time} |
1405 | @end example |
1406 | |
1407 | @var{segment_filename} is the name of the output file generated by the |
1408 | muxer according to the provided pattern. CSV escaping (according to |
1409 | RFC4180) is applied if required. |
1410 | |
1411 | @var{segment_start_time} and @var{segment_end_time} specify |
1412 | the segment start and end time expressed in seconds. |
1413 | |
1414 | A list file with the suffix @code{".csv"} or @code{".ext"} will |
1415 | auto-select this format. |
1416 | |
1417 | @samp{ext} is deprecated in favor or @samp{csv}. |
1418 | |
1419 | @item ffconcat |
1420 | Generate an ffconcat file for the created segments. The resulting file |
1421 | can be read using the FFmpeg @ref{concat} demuxer. |
1422 | |
1423 | A list file with the suffix @code{".ffcat"} or @code{".ffconcat"} will |
1424 | auto-select this format. |
1425 | |
1426 | @item m3u8 |
1427 | Generate an extended M3U8 file, version 3, compliant with |
1428 | @url{http://tools.ietf.org/id/draft-pantos-http-live-streaming}. |
1429 | |
1430 | A list file with the suffix @code{".m3u8"} will auto-select this format. |
1431 | @end table |
1432 | |
1433 | If not specified the type is guessed from the list file name suffix. |
1434 | |
1435 | @item segment_time @var{time} |
1436 | Set segment duration to @var{time}, the value must be a duration |
1437 | specification. Default value is "2". See also the |
1438 | @option{segment_times} option. |
1439 | |
1440 | Note that splitting may not be accurate, unless you force the |
1441 | reference stream key-frames at the given time. See the introductory |
1442 | notice and the examples below. |
1443 | |
1444 | @item segment_atclocktime @var{1|0} |
1445 | If set to "1" split at regular clock time intervals starting from 00:00 |
1446 | o'clock. The @var{time} value specified in @option{segment_time} is |
1447 | used for setting the length of the splitting interval. |
1448 | |
1449 | For example with @option{segment_time} set to "900" this makes it possible |
1450 | to create files at 12:00 o'clock, 12:15, 12:30, etc. |
1451 | |
1452 | Default value is "0". |
1453 | |
1454 | @item segment_clocktime_offset @var{duration} |
1455 | Delay the segment splitting times with the specified duration when using |
1456 | @option{segment_atclocktime}. |
1457 | |
1458 | For example with @option{segment_time} set to "900" and |
1459 | @option{segment_clocktime_offset} set to "300" this makes it possible to |
1460 | create files at 12:05, 12:20, 12:35, etc. |
1461 | |
1462 | Default value is "0". |
1463 | |
1464 | @item segment_clocktime_wrap_duration @var{duration} |
1465 | Force the segmenter to only start a new segment if a packet reaches the muxer |
1466 | within the specified duration after the segmenting clock time. This way you |
1467 | can make the segmenter more resilient to backward local time jumps, such as |
1468 | leap seconds or transition to standard time from daylight savings time. |
1469 | |
1470 | Default is the maximum possible duration which means starting a new segment |
1471 | regardless of the elapsed time since the last clock time. |
1472 | |
1473 | @item segment_time_delta @var{delta} |
1474 | Specify the accuracy time when selecting the start time for a |
1475 | segment, expressed as a duration specification. Default value is "0". |
1476 | |
1477 | When delta is specified a key-frame will start a new segment if its |
1478 | PTS satisfies the relation: |
1479 | @example |
1480 | PTS >= start_time - time_delta |
1481 | @end example |
1482 | |
1483 | This option is useful when splitting video content, which is always |
1484 | split at GOP boundaries, in case a key frame is found just before the |
1485 | specified split time. |
1486 | |
1487 | In particular may be used in combination with the @file{ffmpeg} option |
1488 | @var{force_key_frames}. The key frame times specified by |
1489 | @var{force_key_frames} may not be set accurately because of rounding |
1490 | issues, with the consequence that a key frame time may result set just |
1491 | before the specified time. For constant frame rate videos a value of |
1492 | 1/(2*@var{frame_rate}) should address the worst case mismatch between |
1493 | the specified time and the time set by @var{force_key_frames}. |
1494 | |
1495 | @item segment_times @var{times} |
1496 | Specify a list of split points. @var{times} contains a list of comma |
1497 | separated duration specifications, in increasing order. See also |
1498 | the @option{segment_time} option. |
1499 | |
1500 | @item segment_frames @var{frames} |
1501 | Specify a list of split video frame numbers. @var{frames} contains a |
1502 | list of comma separated integer numbers, in increasing order. |
1503 | |
1504 | This option specifies to start a new segment whenever a reference |
1505 | stream key frame is found and the sequential number (starting from 0) |
1506 | of the frame is greater or equal to the next value in the list. |
1507 | |
1508 | @item segment_wrap @var{limit} |
1509 | Wrap around segment index once it reaches @var{limit}. |
1510 | |
1511 | @item segment_start_number @var{number} |
1512 | Set the sequence number of the first segment. Defaults to @code{0}. |
1513 | |
1514 | @item strftime @var{1|0} |
1515 | Use the @code{strftime} function to define the name of the new |
1516 | segments to write. If this is selected, the output segment name must |
1517 | contain a @code{strftime} function template. Default value is |
1518 | @code{0}. |
1519 | |
1520 | @item break_non_keyframes @var{1|0} |
1521 | If enabled, allow segments to start on frames other than keyframes. This |
1522 | improves behavior on some players when the time between keyframes is |
1523 | inconsistent, but may make things worse on others, and can cause some oddities |
1524 | during seeking. Defaults to @code{0}. |
1525 | |
1526 | @item reset_timestamps @var{1|0} |
1527 | Reset timestamps at the begin of each segment, so that each segment |
1528 | will start with near-zero timestamps. It is meant to ease the playback |
1529 | of the generated segments. May not work with some combinations of |
1530 | muxers/codecs. It is set to @code{0} by default. |
1531 | |
1532 | @item initial_offset @var{offset} |
1533 | Specify timestamp offset to apply to the output packet timestamps. The |
1534 | argument must be a time duration specification, and defaults to 0. |
1535 | |
1536 | @item write_empty_segments @var{1|0} |
1537 | If enabled, write an empty segment if there are no packets during the period a |
1538 | segment would usually span. Otherwise, the segment will be filled with the next |
1539 | packet written. Defaults to @code{0}. |
1540 | @end table |
1541 | |
1542 | @subsection Examples |
1543 | |
1544 | @itemize |
1545 | @item |
1546 | Remux the content of file @file{in.mkv} to a list of segments |
1547 | @file{out-000.nut}, @file{out-001.nut}, etc., and write the list of |
1548 | generated segments to @file{out.list}: |
1549 | @example |
1550 | ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.list out%03d.nut |
1551 | @end example |
1552 | |
1553 | @item |
1554 | Segment input and set output format options for the output segments: |
1555 | @example |
1556 | ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4 |
1557 | @end example |
1558 | |
1559 | @item |
1560 | Segment the input file according to the split points specified by the |
1561 | @var{segment_times} option: |
1562 | @example |
1563 | ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut |
1564 | @end example |
1565 | |
1566 | @item |
1567 | Use the @command{ffmpeg} @option{force_key_frames} |
1568 | option to force key frames in the input at the specified location, together |
1569 | with the segment option @option{segment_time_delta} to account for |
1570 | possible roundings operated when setting key frame times. |
1571 | @example |
1572 | ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \ |
1573 | -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut |
1574 | @end example |
1575 | In order to force key frames on the input file, transcoding is |
1576 | required. |
1577 | |
1578 | @item |
1579 | Segment the input file by splitting the input file according to the |
1580 | frame numbers sequence specified with the @option{segment_frames} option: |
1581 | @example |
1582 | ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut |
1583 | @end example |
1584 | |
1585 | @item |
1586 | Convert the @file{in.mkv} to TS segments using the @code{libx264} |
1587 | and @code{aac} encoders: |
1588 | @example |
1589 | ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts |
1590 | @end example |
1591 | |
1592 | @item |
1593 | Segment the input file, and create an M3U8 live playlist (can be used |
1594 | as live HLS source): |
1595 | @example |
1596 | ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \ |
1597 | -segment_list_flags +live -segment_time 10 out%03d.mkv |
1598 | @end example |
1599 | @end itemize |
1600 | |
1601 | @section smoothstreaming |
1602 | |
1603 | Smooth Streaming muxer generates a set of files (Manifest, chunks) suitable for serving with conventional web server. |
1604 | |
1605 | @table @option |
1606 | @item window_size |
1607 | Specify the number of fragments kept in the manifest. Default 0 (keep all). |
1608 | |
1609 | @item extra_window_size |
1610 | Specify the number of fragments kept outside of the manifest before removing from disk. Default 5. |
1611 | |
1612 | @item lookahead_count |
1613 | Specify the number of lookahead fragments. Default 2. |
1614 | |
1615 | @item min_frag_duration |
1616 | Specify the minimum fragment duration (in microseconds). Default 5000000. |
1617 | |
1618 | @item remove_at_exit |
1619 | Specify whether to remove all fragments when finished. Default 0 (do not remove). |
1620 | |
1621 | @end table |
1622 | |
1623 | @anchor{fifo} |
1624 | @section fifo |
1625 | |
1626 | The fifo pseudo-muxer allows the separation of encoding and muxing by using |
1627 | first-in-first-out queue and running the actual muxer in a separate thread. This |
1628 | is especially useful in combination with the @ref{tee} muxer and can be used to |
1629 | send data to several destinations with different reliability/writing speed/latency. |
1630 | |
1631 | API users should be aware that callback functions (interrupt_callback, |
1632 | io_open and io_close) used within its AVFormatContext must be thread-safe. |
1633 | |
1634 | The behavior of the fifo muxer if the queue fills up or if the output fails is |
1635 | selectable, |
1636 | |
1637 | @itemize @bullet |
1638 | |
1639 | @item |
1640 | output can be transparently restarted with configurable delay between retries |
1641 | based on real time or time of the processed stream. |
1642 | |
1643 | @item |
1644 | encoding can be blocked during temporary failure, or continue transparently |
1645 | dropping packets in case fifo queue fills up. |
1646 | |
1647 | @end itemize |
1648 | |
1649 | @table @option |
1650 | |
1651 | @item fifo_format |
1652 | Specify the format name. Useful if it cannot be guessed from the |
1653 | output name suffix. |
1654 | |
1655 | @item queue_size |
1656 | Specify size of the queue (number of packets). Default value is 60. |
1657 | |
1658 | @item format_opts |
1659 | Specify format options for the underlying muxer. Muxer options can be specified |
1660 | as a list of @var{key}=@var{value} pairs separated by ':'. |
1661 | |
1662 | @item drop_pkts_on_overflow @var{bool} |
1663 | If set to 1 (true), in case the fifo queue fills up, packets will be dropped |
1664 | rather than blocking the encoder. This makes it possible to continue streaming without |
1665 | delaying the input, at the cost of omitting part of the stream. By default |
1666 | this option is set to 0 (false), so in such cases the encoder will be blocked |
1667 | until the muxer processes some of the packets and none of them is lost. |
1668 | |
1669 | @item attempt_recovery @var{bool} |
1670 | If failure occurs, attempt to recover the output. This is especially useful |
1671 | when used with network output, since it makes it possible to restart streaming transparently. |
1672 | By default this option is set to 0 (false). |
1673 | |
1674 | @item max_recovery_attempts |
1675 | Sets maximum number of successive unsuccessful recovery attempts after which |
1676 | the output fails permanently. By default this option is set to 0 (unlimited). |
1677 | |
1678 | @item recovery_wait_time @var{duration} |
1679 | Waiting time before the next recovery attempt after previous unsuccessful |
1680 | recovery attempt. Default value is 5 seconds. |
1681 | |
1682 | @item recovery_wait_streamtime @var{bool} |
1683 | If set to 0 (false), the real time is used when waiting for the recovery |
1684 | attempt (i.e. the recovery will be attempted after at least |
1685 | recovery_wait_time seconds). |
1686 | If set to 1 (true), the time of the processed stream is taken into account |
1687 | instead (i.e. the recovery will be attempted after at least @var{recovery_wait_time} |
1688 | seconds of the stream is omitted). |
1689 | By default, this option is set to 0 (false). |
1690 | |
1691 | @item recover_any_error @var{bool} |
1692 | If set to 1 (true), recovery will be attempted regardless of type of the error |
1693 | causing the failure. By default this option is set to 0 (false) and in case of |
1694 | certain (usually permanent) errors the recovery is not attempted even when |
1695 | @var{attempt_recovery} is set to 1. |
1696 | |
1697 | @item restart_with_keyframe @var{bool} |
1698 | Specify whether to wait for the keyframe after recovering from |
1699 | queue overflow or failure. This option is set to 0 (false) by default. |
1700 | |
1701 | @end table |
1702 | |
1703 | @subsection Examples |
1704 | |
1705 | @itemize |
1706 | |
1707 | @item |
1708 | Stream something to rtmp server, continue processing the stream at real-time |
1709 | rate even in case of temporary failure (network outage) and attempt to recover |
1710 | streaming every second indefinitely. |
1711 | @example |
1712 | ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv -map 0:v -map 0:a |
1713 | -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 rtmp://example.com/live/stream_name |
1714 | @end example |
1715 | |
1716 | @end itemize |
1717 | |
1718 | @anchor{tee} |
1719 | @section tee |
1720 | |
1721 | The tee muxer can be used to write the same data to several files or any |
1722 | other kind of muxer. It can be used, for example, to both stream a video to |
1723 | the network and save it to disk at the same time. |
1724 | |
1725 | It is different from specifying several outputs to the @command{ffmpeg} |
1726 | command-line tool because the audio and video data will be encoded only once |
1727 | with the tee muxer; encoding can be a very expensive process. It is not |
1728 | useful when using the libavformat API directly because it is then possible |
1729 | to feed the same packets to several muxers directly. |
1730 | |
1731 | @table @option |
1732 | |
1733 | @item use_fifo @var{bool} |
1734 | If set to 1, slave outputs will be processed in separate thread using @ref{fifo} |
1735 | muxer. This allows to compensate for different speed/latency/reliability of |
1736 | outputs and setup transparent recovery. By default this feature is turned off. |
1737 | |
1738 | @item fifo_options |
1739 | Options to pass to fifo pseudo-muxer instances. See @ref{fifo}. |
1740 | |
1741 | @end table |
1742 | |
1743 | The slave outputs are specified in the file name given to the muxer, |
1744 | separated by '|'. If any of the slave name contains the '|' separator, |
1745 | leading or trailing spaces or any special character, it must be |
1746 | escaped (see @ref{quoting_and_escaping,,the "Quoting and escaping" |
1747 | section in the ffmpeg-utils(1) manual,ffmpeg-utils}). |
1748 | |
1749 | Muxer options can be specified for each slave by prepending them as a list of |
1750 | @var{key}=@var{value} pairs separated by ':', between square brackets. If |
1751 | the options values contain a special character or the ':' separator, they |
1752 | must be escaped; note that this is a second level escaping. |
1753 | |
1754 | The following special options are also recognized: |
1755 | @table @option |
1756 | @item f |
1757 | Specify the format name. Useful if it cannot be guessed from the |
1758 | output name suffix. |
1759 | |
1760 | @item bsfs[/@var{spec}] |
1761 | Specify a list of bitstream filters to apply to the specified |
1762 | output. |
1763 | |
1764 | @item use_fifo @var{bool} |
1765 | This allows to override tee muxer use_fifo option for individual slave muxer. |
1766 | |
1767 | @item fifo_options |
1768 | This allows to override tee muxer fifo_options for individual slave muxer. |
1769 | See @ref{fifo}. |
1770 | |
1771 | It is possible to specify to which streams a given bitstream filter |
1772 | applies, by appending a stream specifier to the option separated by |
1773 | @code{/}. @var{spec} must be a stream specifier (see @ref{Format |
1774 | stream specifiers}). If the stream specifier is not specified, the |
1775 | bitstream filters will be applied to all streams in the output. |
1776 | |
1777 | Several bitstream filters can be specified, separated by ",". |
1778 | |
1779 | @item select |
1780 | Select the streams that should be mapped to the slave output, |
1781 | specified by a stream specifier. If not specified, this defaults to |
1782 | all the input streams. You may use multiple stream specifiers |
1783 | separated by commas (@code{,}) e.g.: @code{a:0,v} |
1784 | |
1785 | @item onfail |
1786 | Specify behaviour on output failure. This can be set to either @code{abort} (which is |
1787 | default) or @code{ignore}. @code{abort} will cause whole process to fail in case of failure |
1788 | on this slave output. @code{ignore} will ignore failure on this output, so other outputs |
1789 | will continue without being affected. |
1790 | @end table |
1791 | |
1792 | @subsection Examples |
1793 | |
1794 | @itemize |
1795 | @item |
1796 | Encode something and both archive it in a WebM file and stream it |
1797 | as MPEG-TS over UDP (the streams need to be explicitly mapped): |
1798 | @example |
1799 | ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a |
1800 | "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" |
1801 | @end example |
1802 | |
1803 | @item |
1804 | As above, but continue streaming even if output to local file fails |
1805 | (for example local drive fills up): |
1806 | @example |
1807 | ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a |
1808 | "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" |
1809 | @end example |
1810 | |
1811 | @item |
1812 | Use @command{ffmpeg} to encode the input, and send the output |
1813 | to three different destinations. The @code{dump_extra} bitstream |
1814 | filter is used to add extradata information to all the output video |
1815 | keyframes packets, as requested by the MPEG-TS format. The select |
1816 | option is applied to @file{out.aac} in order to make it contain only |
1817 | audio packets. |
1818 | @example |
1819 | ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac |
1820 | -f tee "[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac" |
1821 | @end example |
1822 | |
1823 | @item |
1824 | As below, but select only stream @code{a:1} for the audio output. Note |
1825 | that a second level escaping must be performed, as ":" is a special |
1826 | character used to separate options. |
1827 | @example |
1828 | ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac |
1829 | -f tee "[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac" |
1830 | @end example |
1831 | @end itemize |
1832 | |
1833 | Note: some codecs may need different options depending on the output format; |
1834 | the auto-detection of this can not work with the tee muxer. The main example |
1835 | is the @option{global_header} flag. |
1836 | |
1837 | @section webm_dash_manifest |
1838 | |
1839 | WebM DASH Manifest muxer. |
1840 | |
1841 | This muxer implements the WebM DASH Manifest specification to generate the DASH |
1842 | manifest XML. It also supports manifest generation for DASH live streams. |
1843 | |
1844 | For more information see: |
1845 | |
1846 | @itemize @bullet |
1847 | @item |
1848 | WebM DASH Specification: @url{https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification} |
1849 | @item |
1850 | ISO DASH Specification: @url{http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip} |
1851 | @end itemize |
1852 | |
1853 | @subsection Options |
1854 | |
1855 | This muxer supports the following options: |
1856 | |
1857 | @table @option |
1858 | @item adaptation_sets |
1859 | This option has the following syntax: "id=x,streams=a,b,c id=y,streams=d,e" where x and y are the |
1860 | unique identifiers of the adaptation sets and a,b,c,d and e are the indices of the corresponding |
1861 | audio and video streams. Any number of adaptation sets can be added using this option. |
1862 | |
1863 | @item live |
1864 | Set this to 1 to create a live stream DASH Manifest. Default: 0. |
1865 | |
1866 | @item chunk_start_index |
1867 | Start index of the first chunk. This will go in the @samp{startNumber} attribute |
1868 | of the @samp{SegmentTemplate} element in the manifest. Default: 0. |
1869 | |
1870 | @item chunk_duration_ms |
1871 | Duration of each chunk in milliseconds. This will go in the @samp{duration} |
1872 | attribute of the @samp{SegmentTemplate} element in the manifest. Default: 1000. |
1873 | |
1874 | @item utc_timing_url |
1875 | URL of the page that will return the UTC timestamp in ISO format. This will go |
1876 | in the @samp{value} attribute of the @samp{UTCTiming} element in the manifest. |
1877 | Default: None. |
1878 | |
1879 | @item time_shift_buffer_depth |
1880 | Smallest time (in seconds) shifting buffer for which any Representation is |
1881 | guaranteed to be available. This will go in the @samp{timeShiftBufferDepth} |
1882 | attribute of the @samp{MPD} element. Default: 60. |
1883 | |
1884 | @item minimum_update_period |
1885 | Minimum update period (in seconds) of the manifest. This will go in the |
1886 | @samp{minimumUpdatePeriod} attribute of the @samp{MPD} element. Default: 0. |
1887 | |
1888 | @end table |
1889 | |
1890 | @subsection Example |
1891 | @example |
1892 | ffmpeg -f webm_dash_manifest -i video1.webm \ |
1893 | -f webm_dash_manifest -i video2.webm \ |
1894 | -f webm_dash_manifest -i audio1.webm \ |
1895 | -f webm_dash_manifest -i audio2.webm \ |
1896 | -map 0 -map 1 -map 2 -map 3 \ |
1897 | -c copy \ |
1898 | -f webm_dash_manifest \ |
1899 | -adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \ |
1900 | manifest.xml |
1901 | @end example |
1902 | |
1903 | @section webm_chunk |
1904 | |
1905 | WebM Live Chunk Muxer. |
1906 | |
1907 | This muxer writes out WebM headers and chunks as separate files which can be |
1908 | consumed by clients that support WebM Live streams via DASH. |
1909 | |
1910 | @subsection Options |
1911 | |
1912 | This muxer supports the following options: |
1913 | |
1914 | @table @option |
1915 | @item chunk_start_index |
1916 | Index of the first chunk (defaults to 0). |
1917 | |
1918 | @item header |
1919 | Filename of the header where the initialization data will be written. |
1920 | |
1921 | @item audio_chunk_duration |
1922 | Duration of each audio chunk in milliseconds (defaults to 5000). |
1923 | @end table |
1924 | |
1925 | @subsection Example |
1926 | @example |
1927 | ffmpeg -f v4l2 -i /dev/video0 \ |
1928 | -f alsa -i hw:0 \ |
1929 | -map 0:0 \ |
1930 | -c:v libvpx-vp9 \ |
1931 | -s 640x360 -keyint_min 30 -g 30 \ |
1932 | -f webm_chunk \ |
1933 | -header webm_live_video_360.hdr \ |
1934 | -chunk_start_index 1 \ |
1935 | webm_live_video_360_%d.chk \ |
1936 | -map 1:0 \ |
1937 | -c:a libvorbis \ |
1938 | -b:a 128k \ |
1939 | -f webm_chunk \ |
1940 | -header webm_live_audio_128.hdr \ |
1941 | -chunk_start_index 1 \ |
1942 | -audio_chunk_duration 1000 \ |
1943 | webm_live_audio_128_%d.chk |
1944 | @end example |
1945 | |
1946 | @c man end MUXERS |
1947 |