• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1@chapter Muxers
2@c man begin MUXERS
3
4Muxers are configured elements in FFmpeg which allow writing
5multimedia streams to a particular type of file.
6
7When you configure your FFmpeg build, all the supported muxers
8are enabled by default. You can list all available muxers using the
9configure option @code{--list-muxers}.
10
11You can disable all the muxers with the configure option
12@code{--disable-muxers} and selectively enable / disable single muxers
13with the options @code{--enable-muxer=@var{MUXER}} /
14@code{--disable-muxer=@var{MUXER}}.
15
16The option @code{-muxers} of the ff* tools will display the list of
17enabled muxers. Use @code{-formats} to view a combined list of
18enabled demuxers and muxers.
19
20A description of some of the currently available muxers follows.
21
22@anchor{a64}
23@section a64
24
25A64 muxer for Commodore 64 video. Accepts a single @code{a64_multi} or @code{a64_multi5} codec video stream.
26
27@anchor{adts}
28@section adts
29
30Audio Data Transport Stream muxer. It accepts a single AAC stream.
31
32@subsection Options
33
34It accepts the following options:
35
36@table @option
37
38@item write_id3v2 @var{bool}
39Enable to write ID3v2.4 tags at the start of the stream. Default is disabled.
40
41@item write_apetag @var{bool}
42Enable to write APE tags at the end of the stream. Default is disabled.
43
44@item write_mpeg2 @var{bool}
45Enable to set MPEG version bit in the ADTS frame header to 1 which indicates MPEG-2. Default is 0, which indicates MPEG-4.
46
47@end table
48
49@anchor{aiff}
50@section aiff
51
52Audio Interchange File Format muxer.
53
54@subsection Options
55
56It accepts the following options:
57
58@table @option
59@item write_id3v2
60Enable ID3v2 tags writing when set to 1. Default is 0 (disabled).
61
62@item id3v2_version
63Select ID3v2 version to write. Currently only version 3 and 4 (aka.
64ID3v2.3 and ID3v2.4) are supported. The default is version 4.
65
66@end table
67
68@anchor{alp}
69@section alp
70
71Muxer for audio of High Voltage Software's Lego Racers game. It accepts a single ADPCM_IMA_ALP stream
72with no more than 2 channels nor a sample rate greater than 44100 Hz.
73
74Extensions: tun, pcm
75
76@subsection Options
77
78It accepts the following options:
79
80@table @option
81
82@item type @var{type}
83Set file type.
84
85@table @samp
86@item tun
87Set file type as music. Must have a sample rate of 22050 Hz.
88
89@item pcm
90Set file type as sfx.
91
92@item auto
93Set file type as per output file extension. @code{.pcm} results in type @code{pcm} else type @code{tun} is set. @var{(default)}
94
95@end table
96
97@end table
98
99@anchor{asf}
100@section asf
101
102Advanced Systems Format muxer.
103
104Note that Windows Media Audio (wma) and Windows Media Video (wmv) use this
105muxer too.
106
107@subsection Options
108
109It accepts the following options:
110
111@table @option
112@item packet_size
113Set the muxer packet size. By tuning this setting you may reduce data
114fragmentation or muxer overhead depending on your source. Default value is
1153200, minimum is 100, maximum is 64k.
116
117@end table
118
119@anchor{avi}
120@section avi
121
122Audio Video Interleaved muxer.
123
124@subsection Options
125
126It accepts the following options:
127
128@table @option
129@item reserve_index_space
130Reserve the specified amount of bytes for the OpenDML master index of each
131stream within the file header. By default additional master indexes are
132embedded within the data packets if there is no space left in the first master
133index and are linked together as a chain of indexes. This index structure can
134cause problems for some use cases, e.g. third-party software strictly relying
135on the OpenDML index specification or when file seeking is slow. Reserving
136enough index space in the file header avoids these problems.
137
138The required index space depends on the output file size and should be about 16
139bytes per gigabyte. When this option is omitted or set to zero the necessary
140index space is guessed.
141
142@item write_channel_mask
143Write the channel layout mask into the audio stream header.
144
145This option is enabled by default. Disabling the channel mask can be useful in
146specific scenarios, e.g. when merging multiple audio streams into one for
147compatibility with software that only supports a single audio stream in AVI
148(see @ref{amerge,,the "amerge" section in the ffmpeg-filters manual,ffmpeg-filters}).
149
150@item flipped_raw_rgb
151If set to true, store positive height for raw RGB bitmaps, which indicates
152bitmap is stored bottom-up. Note that this option does not flip the bitmap
153which has to be done manually beforehand, e.g. by using the vflip filter.
154Default is @var{false} and indicates bitmap is stored top down.
155
156@end table
157
158@anchor{chromaprint}
159@section chromaprint
160
161Chromaprint fingerprinter.
162
163This muxer feeds audio data to the Chromaprint library,
164which generates a fingerprint for the provided audio data. See @url{https://acoustid.org/chromaprint}
165
166It takes a single signed native-endian 16-bit raw audio stream of at most 2 channels.
167
168@subsection Options
169
170@table @option
171@item silence_threshold
172Threshold for detecting silence. Range is from -1 to 32767, where -1 disables
173silence detection. Silence detection can only be used with version 3 of the
174algorithm.
175Silence detection must be disabled for use with the AcoustID service. Default is -1.
176
177@item algorithm
178Version of algorithm to fingerprint with. Range is 0 to 4.
179Version 3 enables silence detection. Default is 1.
180
181@item fp_format
182Format to output the fingerprint as. Accepts the following options:
183@table @samp
184@item raw
185Binary raw fingerprint
186
187@item compressed
188Binary compressed fingerprint
189
190@item base64
191Base64 compressed fingerprint @emph{(default)}
192
193@end table
194
195@end table
196
197@anchor{crc}
198@section crc
199
200CRC (Cyclic Redundancy Check) testing format.
201
202This muxer computes and prints the Adler-32 CRC of all the input audio
203and video frames. By default audio frames are converted to signed
20416-bit raw audio and video frames to raw video before computing the
205CRC.
206
207The output of the muxer consists of a single line of the form:
208CRC=0x@var{CRC}, where @var{CRC} is a hexadecimal number 0-padded to
2098 digits containing the CRC for all the decoded input frames.
210
211See also the @ref{framecrc} muxer.
212
213@subsection Examples
214
215For example to compute the CRC of the input, and store it in the file
216@file{out.crc}:
217@example
218ffmpeg -i INPUT -f crc out.crc
219@end example
220
221You can print the CRC to stdout with the command:
222@example
223ffmpeg -i INPUT -f crc -
224@end example
225
226You can select the output format of each frame with @command{ffmpeg} by
227specifying the audio and video codec and format. For example to
228compute the CRC of the input audio converted to PCM unsigned 8-bit
229and the input video converted to MPEG-2 video, use the command:
230@example
231ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
232@end example
233
234@anchor{dash}
235@section dash
236
237Dynamic Adaptive Streaming over HTTP (DASH) muxer that creates segments
238and manifest files according to the MPEG-DASH standard ISO/IEC 23009-1:2014.
239
240For more information see:
241
242@itemize @bullet
243@item
244ISO DASH Specification: @url{http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip}
245@item
246WebM DASH Specification: @url{https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification}
247@end itemize
248
249It creates a MPD manifest file and segment files for each stream.
250
251The segment filename might contain pre-defined identifiers used with SegmentTemplate
252as defined in section 5.3.9.4.4 of the standard. Available identifiers are "$RepresentationID$",
253"$Number$", "$Bandwidth$" and "$Time$".
254In addition to the standard identifiers, an ffmpeg-specific "$ext$" identifier is also supported.
255When specified ffmpeg will replace $ext$ in the file name with muxing format's extensions such as mp4, webm etc.,
256
257@example
258ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \
259-b:v:0 800k -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline \
260-profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 \
261-b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 \
262-window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" \
263-f dash /path/to/out.mpd
264@end example
265
266@table @option
267@item seg_duration @var{duration}
268Set the segment length in seconds (fractional value can be set). The value is
269treated as average segment duration when @var{use_template} is enabled and
270@var{use_timeline} is disabled and as minimum segment duration for all the other
271use cases.
272@item frag_duration @var{duration}
273Set the length in seconds of fragments within segments (fractional value can be set).
274@item frag_type @var{type}
275Set the type of interval for fragmentation.
276@item window_size @var{size}
277Set the maximum number of segments kept in the manifest.
278@item extra_window_size @var{size}
279Set the maximum number of segments kept outside of the manifest before removing from disk.
280@item remove_at_exit @var{remove}
281Enable (1) or disable (0) removal of all segments when finished.
282@item use_template @var{template}
283Enable (1) or disable (0) use of SegmentTemplate instead of SegmentList.
284@item use_timeline @var{timeline}
285Enable (1) or disable (0) use of SegmentTimeline in SegmentTemplate.
286@item single_file @var{single_file}
287Enable (1) or disable (0) storing all segments in one file, accessed using byte ranges.
288@item single_file_name @var{file_name}
289DASH-templated name to be used for baseURL. Implies @var{single_file} set to "1". In the template, "$ext$" is replaced with the file name extension specific for the segment format.
290@item init_seg_name @var{init_name}
291DASH-templated name to used for the initialization segment. Default is "init-stream$RepresentationID$.$ext$". "$ext$" is replaced with the file name extension specific for the segment format.
292@item media_seg_name @var{segment_name}
293DASH-templated name to used for the media segments. Default is "chunk-stream$RepresentationID$-$Number%05d$.$ext$". "$ext$" is replaced with the file name extension specific for the segment format.
294@item utc_timing_url @var{utc_url}
295URL of the page that will return the UTC timestamp in ISO format. Example: "https://time.akamai.com/?iso"
296@item method @var{method}
297Use the given HTTP method to create output files. Generally set to PUT or POST.
298@item http_user_agent @var{user_agent}
299Override User-Agent field in HTTP header. Applicable only for HTTP output.
300@item http_persistent @var{http_persistent}
301Use persistent HTTP connections. Applicable only for HTTP output.
302@item hls_playlist @var{hls_playlist}
303Generate HLS playlist files as well. The master playlist is generated with the filename @var{hls_master_name}.
304One media playlist file is generated for each stream with filenames media_0.m3u8, media_1.m3u8, etc.
305@item hls_master_name @var{file_name}
306HLS master playlist name. Default is "master.m3u8".
307@item streaming @var{streaming}
308Enable (1) or disable (0) chunk streaming mode of output. In chunk streaming
309mode, each frame will be a moof fragment which forms a chunk.
310@item adaptation_sets @var{adaptation_sets}
311Assign streams to AdaptationSets. Syntax is "id=x,streams=a,b,c id=y,streams=d,e" with x and y being the IDs
312of the adaptation sets and a,b,c,d and e are the indices of the mapped streams.
313
314To map all video (or audio) streams to an AdaptationSet, "v" (or "a") can be used as stream identifier instead of IDs.
315
316When no assignment is defined, this defaults to an AdaptationSet for each stream.
317
318Optional syntax is "id=x,seg_duration=x,frag_duration=x,frag_type=type,descriptor=descriptor_string,streams=a,b,c id=y,seg_duration=y,frag_type=type,streams=d,e" and so on,
319descriptor is useful to the scheme defined by ISO/IEC 23009-1:2014/Amd.2:2015.
320For example, -adaptation_sets "id=0,descriptor=<SupplementalProperty schemeIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/>,streams=v".
321Please note that descriptor string should be a self-closing xml tag.
322seg_duration, frag_duration and frag_type override the global option values for each adaptation set.
323For example, -adaptation_sets "id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a"
324type_id marks an adaptation set as containing streams meant to be used for Trick Mode for the referenced adaptation set.
325For example, -adaptation_sets "id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1"
326@item timeout @var{timeout}
327Set timeout for socket I/O operations. Applicable only for HTTP output.
328@item index_correction @var{index_correction}
329Enable (1) or Disable (0) segment index correction logic. Applicable only when
330@var{use_template} is enabled and @var{use_timeline} is disabled.
331
332When enabled, the logic monitors the flow of segment indexes. If a streams's
333segment index value is not at the expected real time position, then the logic
334corrects that index value.
335
336Typically this logic is needed in live streaming use cases. The network bandwidth
337fluctuations are common during long run streaming. Each fluctuation can cause
338the segment indexes fall behind the expected real time position.
339@item format_options @var{options_list}
340Set container format (mp4/webm) options using a @code{:} separated list of
341key=value parameters. Values containing @code{:} special characters must be
342escaped.
343
344@item global_sidx @var{global_sidx}
345Write global SIDX atom. Applicable only for single file, mp4 output, non-streaming mode.
346
347@item dash_segment_type @var{dash_segment_type}
348Possible values:
349@table @option
350@item auto
351If this flag is set, the dash segment files format will be selected based on the stream codec. This is the default mode.
352
353@item mp4
354If this flag is set, the dash segment files will be in in ISOBMFF format.
355
356@item webm
357If this flag is set, the dash segment files will be in in WebM format.
358@end table
359
360@item ignore_io_errors @var{ignore_io_errors}
361Ignore IO errors during open and write. Useful for long-duration runs with network output.
362
363@item lhls @var{lhls}
364Enable Low-latency HLS(LHLS). Adds #EXT-X-PREFETCH tag with current segment's URI.
365hls.js player folks are trying to standardize an open LHLS spec. The draft spec is available in https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md
366This option tries to comply with the above open spec.
367It enables @var{streaming} and @var{hls_playlist} options automatically.
368This is an experimental feature.
369
370Note: This is not Apple's version LHLS. See @url{https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis}
371
372@item ldash @var{ldash}
373Enable Low-latency Dash by constraining the presence and values of some elements.
374
375@item master_m3u8_publish_rate @var{master_m3u8_publish_rate}
376Publish master playlist repeatedly every after specified number of segment intervals.
377
378@item write_prft @var{write_prft}
379Write Producer Reference Time elements on supported streams. This also enables writing
380prft boxes in the underlying muxer. Applicable only when the @var{utc_url} option is enabled.
381It's set to auto by default, in which case the muxer will attempt to enable it only in modes
382that require it.
383
384@item mpd_profile @var{mpd_profile}
385Set one or more manifest profiles.
386
387@item http_opts @var{http_opts}
388A :-separated list of key=value options to pass to the underlying HTTP
389protocol. Applicable only for HTTP output.
390
391@item target_latency @var{target_latency}
392Set an intended target latency in seconds (fractional value can be set) for serving. Applicable only when @var{streaming} and @var{write_prft} options are enabled.
393This is an informative fields clients can use to measure the latency of the service.
394
395@item min_playback_rate @var{min_playback_rate}
396Set the minimum playback rate indicated as appropriate for the purposes of automatically
397adjusting playback latency and buffer occupancy during normal playback by clients.
398
399@item max_playback_rate @var{max_playback_rate}
400Set the maximum playback rate indicated as appropriate for the purposes of automatically
401adjusting playback latency and buffer occupancy during normal playback by clients.
402
403@item update_period @var{update_period}
404 Set the mpd update period ,for dynamic content.
405 The unit is second.
406
407@end table
408
409@anchor{fifo}
410@section fifo
411
412The fifo pseudo-muxer allows the separation of encoding and muxing by using
413first-in-first-out queue and running the actual muxer in a separate thread. This
414is especially useful in combination with the @ref{tee} muxer and can be used to
415send data to several destinations with different reliability/writing speed/latency.
416
417API users should be aware that callback functions (interrupt_callback,
418io_open and io_close) used within its AVFormatContext must be thread-safe.
419
420The behavior of the fifo muxer if the queue fills up or if the output fails is
421selectable,
422
423@itemize @bullet
424
425@item
426output can be transparently restarted with configurable delay between retries
427based on real time or time of the processed stream.
428
429@item
430encoding can be blocked during temporary failure, or continue transparently
431dropping packets in case fifo queue fills up.
432
433@end itemize
434
435@table @option
436
437@item fifo_format
438Specify the format name. Useful if it cannot be guessed from the
439output name suffix.
440
441@item queue_size
442Specify size of the queue (number of packets). Default value is 60.
443
444@item format_opts
445Specify format options for the underlying muxer. Muxer options can be specified
446as a list of @var{key}=@var{value} pairs separated by ':'.
447
448@item drop_pkts_on_overflow @var{bool}
449If set to 1 (true), in case the fifo queue fills up, packets will be dropped
450rather than blocking the encoder. This makes it possible to continue streaming without
451delaying the input, at the cost of omitting part of the stream. By default
452this option is set to 0 (false), so in such cases the encoder will be blocked
453until the muxer processes some of the packets and none of them is lost.
454
455@item attempt_recovery @var{bool}
456If failure occurs, attempt to recover the output. This is especially useful
457when used with network output, since it makes it possible to restart streaming transparently.
458By default this option is set to 0 (false).
459
460@item max_recovery_attempts
461Sets maximum number of successive unsuccessful recovery attempts after which
462the output fails permanently. By default this option is set to 0 (unlimited).
463
464@item recovery_wait_time @var{duration}
465Waiting time before the next recovery attempt after previous unsuccessful
466recovery attempt. Default value is 5 seconds.
467
468@item recovery_wait_streamtime @var{bool}
469If set to 0 (false), the real time is used when waiting for the recovery
470attempt (i.e. the recovery will be attempted after at least
471recovery_wait_time seconds).
472If set to 1 (true), the time of the processed stream is taken into account
473instead (i.e. the recovery will be attempted after at least @var{recovery_wait_time}
474seconds of the stream is omitted).
475By default, this option is set to 0 (false).
476
477@item recover_any_error @var{bool}
478If set to 1 (true), recovery will be attempted regardless of type of the error
479causing the failure. By default this option is set to 0 (false) and in case of
480certain (usually permanent) errors the recovery is not attempted even when
481@var{attempt_recovery} is set to 1.
482
483@item restart_with_keyframe @var{bool}
484Specify whether to wait for the keyframe after recovering from
485queue overflow or failure. This option is set to 0 (false) by default.
486
487@item timeshift @var{duration}
488Buffer the specified amount of packets and delay writing the output. Note that
489@var{queue_size} must be big enough to store the packets for timeshift. At the
490end of the input the fifo buffer is flushed at realtime speed.
491
492@end table
493
494@subsection Examples
495
496@itemize
497
498@item
499Stream something to rtmp server, continue processing the stream at real-time
500rate even in case of temporary failure (network outage) and attempt to recover
501streaming every second indefinitely.
502@example
503ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv -map 0:v -map 0:a
504  -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 rtmp://example.com/live/stream_name
505@end example
506
507@end itemize
508
509@section flv
510
511Adobe Flash Video Format muxer.
512
513This muxer accepts the following options:
514
515@table @option
516
517@item flvflags @var{flags}
518Possible values:
519
520@table @samp
521
522@item aac_seq_header_detect
523Place AAC sequence header based on audio stream data.
524
525@item no_sequence_end
526Disable sequence end tag.
527
528@item no_metadata
529Disable metadata tag.
530
531@item no_duration_filesize
532Disable duration and filesize in metadata when they are equal to zero
533at the end of stream. (Be used to non-seekable living stream).
534
535@item add_keyframe_index
536Used to facilitate seeking; particularly for HTTP pseudo streaming.
537@end table
538@end table
539
540@anchor{framecrc}
541@section framecrc
542
543Per-packet CRC (Cyclic Redundancy Check) testing format.
544
545This muxer computes and prints the Adler-32 CRC for each audio
546and video packet. By default audio frames are converted to signed
54716-bit raw audio and video frames to raw video before computing the
548CRC.
549
550The output of the muxer consists of a line for each audio and video
551packet of the form:
552@example
553@var{stream_index}, @var{packet_dts}, @var{packet_pts}, @var{packet_duration}, @var{packet_size}, 0x@var{CRC}
554@end example
555
556@var{CRC} is a hexadecimal number 0-padded to 8 digits containing the
557CRC of the packet.
558
559@subsection Examples
560
561For example to compute the CRC of the audio and video frames in
562@file{INPUT}, converted to raw audio and video packets, and store it
563in the file @file{out.crc}:
564@example
565ffmpeg -i INPUT -f framecrc out.crc
566@end example
567
568To print the information to stdout, use the command:
569@example
570ffmpeg -i INPUT -f framecrc -
571@end example
572
573With @command{ffmpeg}, you can select the output format to which the
574audio and video frames are encoded before computing the CRC for each
575packet by specifying the audio and video codec. For example, to
576compute the CRC of each decoded input audio frame converted to PCM
577unsigned 8-bit and of each decoded input video frame converted to
578MPEG-2 video, use the command:
579@example
580ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
581@end example
582
583See also the @ref{crc} muxer.
584
585@anchor{framehash}
586@section framehash
587
588Per-packet hash testing format.
589
590This muxer computes and prints a cryptographic hash for each audio
591and video packet. This can be used for packet-by-packet equality
592checks without having to individually do a binary comparison on each.
593
594By default audio frames are converted to signed 16-bit raw audio and
595video frames to raw video before computing the hash, but the output
596of explicit conversions to other codecs can also be used. It uses the
597SHA-256 cryptographic hash function by default, but supports several
598other algorithms.
599
600The output of the muxer consists of a line for each audio and video
601packet of the form:
602@example
603@var{stream_index}, @var{packet_dts}, @var{packet_pts}, @var{packet_duration}, @var{packet_size}, @var{hash}
604@end example
605
606@var{hash} is a hexadecimal number representing the computed hash
607for the packet.
608
609@table @option
610@item hash @var{algorithm}
611Use the cryptographic hash function specified by the string @var{algorithm}.
612Supported values include @code{MD5}, @code{murmur3}, @code{RIPEMD128},
613@code{RIPEMD160}, @code{RIPEMD256}, @code{RIPEMD320}, @code{SHA160},
614@code{SHA224}, @code{SHA256} (default), @code{SHA512/224}, @code{SHA512/256},
615@code{SHA384}, @code{SHA512}, @code{CRC32} and @code{adler32}.
616
617@end table
618
619@subsection Examples
620
621To compute the SHA-256 hash of the audio and video frames in @file{INPUT},
622converted to raw audio and video packets, and store it in the file
623@file{out.sha256}:
624@example
625ffmpeg -i INPUT -f framehash out.sha256
626@end example
627
628To print the information to stdout, using the MD5 hash function, use
629the command:
630@example
631ffmpeg -i INPUT -f framehash -hash md5 -
632@end example
633
634See also the @ref{hash} muxer.
635
636@anchor{framemd5}
637@section framemd5
638
639Per-packet MD5 testing format.
640
641This is a variant of the @ref{framehash} muxer. Unlike that muxer,
642it defaults to using the MD5 hash function.
643
644@subsection Examples
645
646To compute the MD5 hash of the audio and video frames in @file{INPUT},
647converted to raw audio and video packets, and store it in the file
648@file{out.md5}:
649@example
650ffmpeg -i INPUT -f framemd5 out.md5
651@end example
652
653To print the information to stdout, use the command:
654@example
655ffmpeg -i INPUT -f framemd5 -
656@end example
657
658See also the @ref{framehash} and @ref{md5} muxers.
659
660@anchor{gif}
661@section gif
662
663Animated GIF muxer.
664
665It accepts the following options:
666
667@table @option
668@item loop
669Set the number of times to loop the output. Use @code{-1} for no loop, @code{0}
670for looping indefinitely (default).
671
672@item final_delay
673Force the delay (expressed in centiseconds) after the last frame. Each frame
674ends with a delay until the next frame. The default is @code{-1}, which is a
675special value to tell the muxer to re-use the previous delay. In case of a
676loop, you might want to customize this value to mark a pause for instance.
677@end table
678
679For example, to encode a gif looping 10 times, with a 5 seconds delay between
680the loops:
681@example
682ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
683@end example
684
685Note 1: if you wish to extract the frames into separate GIF files, you need to
686force the @ref{image2} muxer:
687@example
688ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
689@end example
690
691Note 2: the GIF format has a very large time base: the delay between two frames
692can therefore not be smaller than one centi second.
693
694@anchor{hash}
695@section hash
696
697Hash testing format.
698
699This muxer computes and prints a cryptographic hash of all the input
700audio and video frames. This can be used for equality checks without
701having to do a complete binary comparison.
702
703By default audio frames are converted to signed 16-bit raw audio and
704video frames to raw video before computing the hash, but the output
705of explicit conversions to other codecs can also be used. Timestamps
706are ignored. It uses the SHA-256 cryptographic hash function by default,
707but supports several other algorithms.
708
709The output of the muxer consists of a single line of the form:
710@var{algo}=@var{hash}, where @var{algo} is a short string representing
711the hash function used, and @var{hash} is a hexadecimal number
712representing the computed hash.
713
714@table @option
715@item hash @var{algorithm}
716Use the cryptographic hash function specified by the string @var{algorithm}.
717Supported values include @code{MD5}, @code{murmur3}, @code{RIPEMD128},
718@code{RIPEMD160}, @code{RIPEMD256}, @code{RIPEMD320}, @code{SHA160},
719@code{SHA224}, @code{SHA256} (default), @code{SHA512/224}, @code{SHA512/256},
720@code{SHA384}, @code{SHA512}, @code{CRC32} and @code{adler32}.
721
722@end table
723
724@subsection Examples
725
726To compute the SHA-256 hash of the input converted to raw audio and
727video, and store it in the file @file{out.sha256}:
728@example
729ffmpeg -i INPUT -f hash out.sha256
730@end example
731
732To print an MD5 hash to stdout use the command:
733@example
734ffmpeg -i INPUT -f hash -hash md5 -
735@end example
736
737See also the @ref{framehash} muxer.
738
739@anchor{hls}
740@section hls
741
742Apple HTTP Live Streaming muxer that segments MPEG-TS according to
743the HTTP Live Streaming (HLS) specification.
744
745It creates a playlist file, and one or more segment files. The output filename
746specifies the playlist filename.
747
748By default, the muxer creates a file for each segment produced. These files
749have the same name as the playlist, followed by a sequential number and a
750.ts extension.
751
752Make sure to require a closed GOP when encoding and to set the GOP
753size to fit your segment time constraint.
754
755For example, to convert an input file with @command{ffmpeg}:
756@example
757ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8
758@end example
759This example will produce the playlist, @file{out.m3u8}, and segment files:
760@file{out0.ts}, @file{out1.ts}, @file{out2.ts}, etc.
761
762See also the @ref{segment} muxer, which provides a more generic and
763flexible implementation of a segmenter, and can be used to perform HLS
764segmentation.
765
766@subsection Options
767
768This muxer supports the following options:
769
770@table @option
771@item hls_init_time @var{duration}
772Set the initial target segment length. Default value is @var{0}.
773
774@var{duration} must be a time duration specification,
775see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
776
777Segment will be cut on the next key frame after this time has passed on the first m3u8 list.
778After the initial playlist is filled @command{ffmpeg} will cut segments
779at duration equal to @code{hls_time}
780
781@item hls_time @var{duration}
782Set the target segment length. Default value is 2.
783
784@var{duration} must be a time duration specification,
785see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
786Segment will be cut on the next key frame after this time has passed.
787
788@item hls_list_size @var{size}
789Set the maximum number of playlist entries. If set to 0 the list file
790will contain all the segments. Default value is 5.
791
792@item hls_delete_threshold @var{size}
793Set the number of unreferenced segments to keep on disk before @code{hls_flags delete_segments}
794deletes them. Increase this to allow continue clients to download segments which
795were recently referenced in the playlist. Default value is 1, meaning segments older than
796@code{hls_list_size+1} will be deleted.
797
798@item hls_ts_options @var{options_list}
799Set output format options using a :-separated list of key=value
800parameters. Values containing @code{:} special characters must be
801escaped.
802@code{hls_ts_options} is deprecated, use hls_segment_options instead of it..
803
804@item hls_start_number_source
805Start the playlist sequence number (@code{#EXT-X-MEDIA-SEQUENCE}) according to the specified source.
806Unless @code{hls_flags single_file} is set, it also specifies source of starting sequence numbers of
807segment and subtitle filenames. In any case, if @code{hls_flags append_list}
808is set and read playlist sequence number is greater than the specified start sequence number,
809then that value will be used as start value.
810
811It accepts the following values:
812
813@table @option
814
815@item generic (default)
816Set the starting sequence numbers according to @var{start_number} option value.
817
818@item epoch
819The start number will be the seconds since epoch (1970-01-01 00:00:00)
820
821@item epoch_us
822The start number will be the microseconds since epoch (1970-01-01 00:00:00)
823
824@item datetime
825The start number will be based on the current date/time as YYYYmmddHHMMSS. e.g. 20161231235759.
826
827@end table
828
829@item start_number @var{number}
830Start the playlist sequence number (@code{#EXT-X-MEDIA-SEQUENCE}) from the specified @var{number}
831when @var{hls_start_number_source} value is @var{generic}. (This is the default case.)
832Unless @code{hls_flags single_file} is set, it also specifies starting sequence numbers of segment and subtitle filenames.
833Default value is 0.
834
835@item hls_allow_cache @var{allowcache}
836Explicitly set whether the client MAY (1) or MUST NOT (0) cache media segments.
837
838@item hls_base_url @var{baseurl}
839Append @var{baseurl} to every entry in the playlist.
840Useful to generate playlists with absolute paths.
841
842Note that the playlist sequence number must be unique for each segment
843and it is not to be confused with the segment filename sequence number
844which can be cyclic, for example if the @option{wrap} option is
845specified.
846
847@item hls_segment_filename @var{filename}
848Set the segment filename. Unless @code{hls_flags single_file} is set,
849@var{filename} is used as a string format with the segment number:
850@example
851ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
852@end example
853This example will produce the playlist, @file{out.m3u8}, and segment files:
854@file{file000.ts}, @file{file001.ts}, @file{file002.ts}, etc.
855
856@var{filename} may contain full path or relative path specification,
857but only the file name part without any path info will be contained in the m3u8 segment list.
858Should a relative path be specified, the path of the created segment
859files will be relative to the current working directory.
860When strftime_mkdir is set, the whole expanded value of @var{filename} will be written into the m3u8 segment list.
861
862When @code{var_stream_map} is set with two or more variant streams, the
863@var{filename} pattern must contain the string "%v", this string specifies
864the position of variant stream index in the generated segment file names.
865@example
866ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
867  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
868  -hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8
869@end example
870This example will produce the playlists segment file sets:
871@file{file_0_000.ts}, @file{file_0_001.ts}, @file{file_0_002.ts}, etc. and
872@file{file_1_000.ts}, @file{file_1_001.ts}, @file{file_1_002.ts}, etc.
873
874The string "%v" may be present in the filename or in the last directory name
875containing the file, but only in one of them. (Additionally, %v may appear multiple times in the last
876sub-directory or filename.) If the string %v is present in the directory name, then
877sub-directories are created after expanding the directory name pattern. This
878enables creation of segments corresponding to different variant streams in
879subdirectories.
880@example
881ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
882  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
883  -hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8
884@end example
885This example will produce the playlists segment file sets:
886@file{vs0/file_000.ts}, @file{vs0/file_001.ts}, @file{vs0/file_002.ts}, etc. and
887@file{vs1/file_000.ts}, @file{vs1/file_001.ts}, @file{vs1/file_002.ts}, etc.
888
889@item strftime
890Use strftime() on @var{filename} to expand the segment filename with localtime.
891The segment number is also available in this mode, but to use it, you need to specify second_level_segment_index
892hls_flag and %%d will be the specifier.
893@example
894ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8
895@end example
896This example will produce the playlist, @file{out.m3u8}, and segment files:
897@file{file-20160215-1455569023.ts}, @file{file-20160215-1455569024.ts}, etc.
898Note: On some systems/environments, the @code{%s} specifier is not available. See
899  @code{strftime()} documentation.
900@example
901ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8
902@end example
903This example will produce the playlist, @file{out.m3u8}, and segment files:
904@file{file-20160215-0001.ts}, @file{file-20160215-0002.ts}, etc.
905
906@item strftime_mkdir
907Used together with -strftime_mkdir, it will create all subdirectories which
908is expanded in @var{filename}.
909@example
910ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8
911@end example
912This example will create a directory 201560215 (if it does not exist), and then
913produce the playlist, @file{out.m3u8}, and segment files:
914@file{20160215/file-20160215-1455569023.ts}, @file{20160215/file-20160215-1455569024.ts}, etc.
915
916@example
917ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8
918@end example
919This example will create a directory hierarchy 2016/02/15 (if any of them do not exist), and then
920produce the playlist, @file{out.m3u8}, and segment files:
921@file{2016/02/15/file-20160215-1455569023.ts}, @file{2016/02/15/file-20160215-1455569024.ts}, etc.
922
923@item hls_segment_options @var{options_list}
924Set output format options using a :-separated list of key=value
925parameters. Values containing @code{:} special characters must be
926escaped.
927
928@item hls_key_info_file @var{key_info_file}
929Use the information in @var{key_info_file} for segment encryption. The first
930line of @var{key_info_file} specifies the key URI written to the playlist. The
931key URL is used to access the encryption key during playback. The second line
932specifies the path to the key file used to obtain the key during the encryption
933process. The key file is read as a single packed array of 16 octets in binary
934format. The optional third line specifies the initialization vector (IV) as a
935hexadecimal string to be used instead of the segment sequence number (default)
936for encryption. Changes to @var{key_info_file} will result in segment
937encryption with the new key/IV and an entry in the playlist for the new key
938URI/IV if @code{hls_flags periodic_rekey} is enabled.
939
940Key info file format:
941@example
942@var{key URI}
943@var{key file path}
944@var{IV} (optional)
945@end example
946
947Example key URIs:
948@example
949http://server/file.key
950/path/to/file.key
951file.key
952@end example
953
954Example key file paths:
955@example
956file.key
957/path/to/file.key
958@end example
959
960Example IV:
961@example
9620123456789ABCDEF0123456789ABCDEF
963@end example
964
965Key info file example:
966@example
967http://server/file.key
968/path/to/file.key
9690123456789ABCDEF0123456789ABCDEF
970@end example
971
972Example shell script:
973@example
974#!/bin/sh
975BASE_URL=$@{1:-'.'@}
976openssl rand 16 > file.key
977echo $BASE_URL/file.key > file.keyinfo
978echo file.key >> file.keyinfo
979echo $(openssl rand -hex 16) >> file.keyinfo
980ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \
981  -hls_key_info_file file.keyinfo out.m3u8
982@end example
983
984@item -hls_enc @var{enc}
985Enable (1) or disable (0) the AES128 encryption.
986When enabled every segment generated is encrypted and the encryption key
987is saved as @var{playlist name}.key.
988
989@item -hls_enc_key @var{key}
99016-octet key to encrypt the segments, by default it
991is randomly generated.
992
993@item -hls_enc_key_url @var{keyurl}
994If set, @var{keyurl} is prepended instead of @var{baseurl} to the key filename
995in the playlist.
996
997@item -hls_enc_iv @var{iv}
99816-octet initialization vector for every segment instead
999of the autogenerated ones.
1000
1001@item hls_segment_type @var{flags}
1002Possible values:
1003
1004@table @samp
1005@item mpegts
1006Output segment files in MPEG-2 Transport Stream format. This is
1007compatible with all HLS versions.
1008
1009@item fmp4
1010Output segment files in fragmented MP4 format, similar to MPEG-DASH.
1011fmp4 files may be used in HLS version 7 and above.
1012
1013@end table
1014
1015@item hls_fmp4_init_filename @var{filename}
1016Set filename to the fragment files header file, default filename is @file{init.mp4}.
1017
1018Use @code{-strftime 1} on @var{filename} to expand the segment filename with localtime.
1019@example
1020ffmpeg -i in.nut  -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8
1021@end example
1022This will produce init like this
1023@file{1602678741_init.mp4}
1024
1025@item hls_fmp4_init_resend
1026Resend init file after m3u8 file refresh every time, default is @var{0}.
1027
1028When @code{var_stream_map} is set with two or more variant streams, the
1029@var{filename} pattern must contain the string "%v", this string specifies
1030the position of variant stream index in the generated init file names.
1031The string "%v" may be present in the filename or in the last directory name
1032containing the file. If the string is present in the directory name, then
1033sub-directories are created after expanding the directory name pattern. This
1034enables creation of init files corresponding to different variant streams in
1035subdirectories.
1036
1037@item hls_flags @var{flags}
1038Possible values:
1039
1040@table @samp
1041@item single_file
1042If this flag is set, the muxer will store all segments in a single MPEG-TS
1043file, and will use byte ranges in the playlist. HLS playlists generated with
1044this way will have the version number 4.
1045For example:
1046@example
1047ffmpeg -i in.nut -hls_flags single_file out.m3u8
1048@end example
1049Will produce the playlist, @file{out.m3u8}, and a single segment file,
1050@file{out.ts}.
1051
1052@item delete_segments
1053Segment files removed from the playlist are deleted after a period of time
1054equal to the duration of the segment plus the duration of the playlist.
1055
1056@item append_list
1057Append new segments into the end of old segment list,
1058and remove the @code{#EXT-X-ENDLIST} from the old segment list.
1059
1060@item round_durations
1061Round the duration info in the playlist file segment info to integer
1062values, instead of using floating point.
1063If there are no other features requiring higher HLS versions be used,
1064then this will allow ffmpeg to output a HLS version 2 m3u8.
1065
1066@item discont_start
1067Add the @code{#EXT-X-DISCONTINUITY} tag to the playlist, before the
1068first segment's information.
1069
1070@item omit_endlist
1071Do not append the @code{EXT-X-ENDLIST} tag at the end of the playlist.
1072
1073@item periodic_rekey
1074The file specified by @code{hls_key_info_file} will be checked periodically and
1075detect updates to the encryption info. Be sure to replace this file atomically,
1076including the file containing the AES encryption key.
1077
1078@item independent_segments
1079Add the @code{#EXT-X-INDEPENDENT-SEGMENTS} to playlists that has video segments
1080and when all the segments of that playlist are guaranteed to start with a Key frame.
1081
1082@item iframes_only
1083Add the @code{#EXT-X-I-FRAMES-ONLY} to playlists that has video segments
1084and can play only I-frames in the @code{#EXT-X-BYTERANGE} mode.
1085
1086@item split_by_time
1087Allow segments to start on frames other than keyframes. This improves
1088behavior on some players when the time between keyframes is inconsistent,
1089but may make things worse on others, and can cause some oddities during
1090seeking. This flag should be used with the @code{hls_time} option.
1091
1092@item program_date_time
1093Generate @code{EXT-X-PROGRAM-DATE-TIME} tags.
1094
1095@item second_level_segment_index
1096Makes it possible to use segment indexes as %%d in hls_segment_filename expression
1097besides date/time values when strftime is on.
1098To get fixed width numbers with trailing zeroes, %%0xd format is available where x is the required width.
1099
1100@item second_level_segment_size
1101Makes it possible to use segment sizes (counted in bytes) as %%s in hls_segment_filename
1102expression besides date/time values when strftime is on.
1103To get fixed width numbers with trailing zeroes, %%0xs format is available where x is the required width.
1104
1105@item second_level_segment_duration
1106Makes it possible to use segment duration (calculated  in microseconds) as %%t in hls_segment_filename
1107expression besides date/time values when strftime is on.
1108To get fixed width numbers with trailing zeroes, %%0xt format is available where x is the required width.
1109
1110@example
1111ffmpeg -i sample.mpeg \
1112   -f hls -hls_time 3 -hls_list_size 5 \
1113   -hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \
1114   -strftime 1 -strftime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8
1115@end example
1116This will produce segments like this:
1117@file{segment_20170102194334_0003_00122200_0000003000000.ts}, @file{segment_20170102194334_0004_00120072_0000003000000.ts} etc.
1118
1119@item temp_file
1120Write segment data to filename.tmp and rename to filename only once the segment is complete. A webserver
1121serving up segments can be configured to reject requests to *.tmp to prevent access to in-progress segments
1122before they have been added to the m3u8 playlist. This flag also affects how m3u8 playlist files are created.
1123If this flag is set, all playlist files will written into temporary file and renamed after they are complete, similarly as segments are handled.
1124But playlists with @code{file} protocol and with type (@code{hls_playlist_type}) other than @code{vod}
1125are always written into temporary file regardless of this flag. Master playlist files (@code{master_pl_name}), if any, with @code{file} protocol,
1126are always written into temporary file regardless of this flag if @code{master_pl_publish_rate} value is other than zero.
1127
1128@end table
1129
1130@item hls_playlist_type event
1131Emit @code{#EXT-X-PLAYLIST-TYPE:EVENT} in the m3u8 header. Forces
1132@option{hls_list_size} to 0; the playlist can only be appended to.
1133
1134@item hls_playlist_type vod
1135Emit @code{#EXT-X-PLAYLIST-TYPE:VOD} in the m3u8 header. Forces
1136@option{hls_list_size} to 0; the playlist must not change.
1137
1138@item method
1139Use the given HTTP method to create the hls files.
1140@example
1141ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8
1142@end example
1143This example will upload all the mpegts segment files to the HTTP
1144server using the HTTP PUT method, and update the m3u8 files every
1145@code{refresh} times using the same method.
1146Note that the HTTP server must support the given method for uploading
1147files.
1148
1149@item http_user_agent
1150Override User-Agent field in HTTP header. Applicable only for HTTP output.
1151
1152@item var_stream_map
1153Map string which specifies how to group the audio, video and subtitle streams
1154into different variant streams. The variant stream groups are separated
1155by space.
1156Expected string format is like this "a:0,v:0 a:1,v:1 ....". Here a:, v:, s: are
1157the keys to specify audio, video and subtitle streams respectively.
1158Allowed values are 0 to 9 (limited just based on practical usage).
1159
1160When there are two or more variant streams, the output filename pattern must
1161contain the string "%v", this string specifies the position of variant stream
1162index in the output media playlist filenames. The string "%v" may be present in
1163the filename or in the last directory name containing the file. If the string is
1164present in the directory name, then sub-directories are created after expanding
1165the directory name pattern. This enables creation of variant streams in
1166subdirectories.
1167
1168@example
1169ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
1170  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
1171  http://example.com/live/out_%v.m3u8
1172@end example
1173This example creates two hls variant streams. The first variant stream will
1174contain video stream of bitrate 1000k and audio stream of bitrate 64k and the
1175second variant stream will contain video stream of bitrate 256k and audio
1176stream of bitrate 32k. Here, two media playlist with file names out_0.m3u8 and
1177out_1.m3u8 will be created. If you want something meaningful text instead of indexes
1178in result names, you may specify names for each or some of the variants
1179as in the following example.
1180
1181
1182@example
1183ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
1184  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0,name:my_hd v:1,a:1,name:my_sd" \
1185  http://example.com/live/out_%v.m3u8
1186@end example
1187
1188This example creates two hls variant streams as in the previous one.
1189But here, the two media playlist with file names out_my_hd.m3u8 and
1190out_my_sd.m3u8 will be created.
1191
1192@example
1193ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \
1194  -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \
1195  http://example.com/live/out_%v.m3u8
1196@end example
1197This example creates three hls variant streams. The first variant stream will
1198be a video only stream with video bitrate 1000k, the second variant stream will
1199be an audio only stream with bitrate 64k and the third variant stream will be a
1200video only stream with bitrate 256k. Here, three media playlist with file names
1201out_0.m3u8, out_1.m3u8 and out_2.m3u8 will be created.
1202@example
1203ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
1204  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
1205  http://example.com/live/vs_%v/out.m3u8
1206@end example
1207This example creates the variant streams in subdirectories. Here, the first
1208media playlist is created at @file{http://example.com/live/vs_0/out.m3u8} and
1209the second one at @file{http://example.com/live/vs_1/out.m3u8}.
1210@example
1211ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k  \
1212  -map 0:a -map 0:a -map 0:v -map 0:v -f hls \
1213  -var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \
1214  -master_pl_name master.m3u8 \
1215  http://example.com/live/out_%v.m3u8
1216@end example
1217This example creates two audio only and two video only variant streams. In
1218addition to the #EXT-X-STREAM-INF tag for each variant stream in the master
1219playlist, #EXT-X-MEDIA tag is also added for the two audio only variant streams
1220and they are mapped to the two video only variant streams with audio group names
1221'aud_low' and 'aud_high'.
1222
1223By default, a single hls variant containing all the encoded streams is created.
1224
1225@example
1226ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \
1227  -map 0:a -map 0:a -map 0:v -f hls \
1228  -var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \
1229  -master_pl_name master.m3u8 \
1230  http://example.com/live/out_%v.m3u8
1231@end example
1232This example creates two audio only and one video only variant streams. In
1233addition to the #EXT-X-STREAM-INF tag for each variant stream in the master
1234playlist, #EXT-X-MEDIA tag is also added for the two audio only variant streams
1235and they are mapped to the one video only variant streams with audio group name
1236'aud_low', and the audio group have default stat is NO or YES.
1237
1238By default, a single hls variant containing all the encoded streams is created.
1239
1240@example
1241ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \
1242  -map 0:a -map 0:a -map 0:v -f hls \
1243  -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \
1244  -master_pl_name master.m3u8 \
1245  http://example.com/live/out_%v.m3u8
1246@end example
1247This example creates two audio only and one video only variant streams. In
1248addition to the #EXT-X-STREAM-INF tag for each variant stream in the master
1249playlist, #EXT-X-MEDIA tag is also added for the two audio only variant streams
1250and they are mapped to the one video only variant streams with audio group name
1251'aud_low', and the audio group have default stat is NO or YES, and one audio
1252have and language is named ENG, the other audio language is named CHN.
1253
1254By default, a single hls variant containing all the encoded streams is created.
1255
1256@example
1257ffmpeg -y -i input_with_subtitle.mkv \
1258 -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \
1259 -b:a:0 256k \
1260 -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \
1261 -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle" \
1262 -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \
1263 10 -master_pl_publish_rate 10  -hls_flags \
1264 delete_segments+discont_start+split_by_time ./tmp/video.m3u8
1265@end example
1266
1267This example adds @code{#EXT-X-MEDIA} tag with @code{TYPE=SUBTITLES} in
1268the master playlist with webvtt subtitle group name 'subtitle'. Please make sure
1269the input file has one text subtitle stream at least.
1270
1271@item cc_stream_map
1272Map string which specifies different closed captions groups and their
1273attributes. The closed captions stream groups are separated by space.
1274Expected string format is like this
1275"ccgroup:<group name>,instreamid:<INSTREAM-ID>,language:<language code> ....".
1276'ccgroup' and 'instreamid' are mandatory attributes. 'language' is an optional
1277attribute.
1278The closed captions groups configured using this option are mapped to different
1279variant streams by providing the same 'ccgroup' name in the
1280@code{var_stream_map} string. If @code{var_stream_map} is not set, then the
1281first available ccgroup in @code{cc_stream_map} is mapped to the output variant
1282stream. The examples for these two use cases are given below.
1283
1284@example
1285ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \
1286  -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \
1287  -master_pl_name master.m3u8 \
1288  http://example.com/live/out.m3u8
1289@end example
1290This example adds @code{#EXT-X-MEDIA} tag with @code{TYPE=CLOSED-CAPTIONS} in
1291the master playlist with group name 'cc', language 'en' (english) and
1292INSTREAM-ID 'CC1'. Also, it adds @code{CLOSED-CAPTIONS} attribute with group
1293name 'cc' for the output variant stream.
1294@example
1295ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
1296  -a53cc:0 1 -a53cc:1 1\
1297  -map 0:v -map 0:a -map 0:v -map 0:a -f hls \
1298  -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \
1299  -var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \
1300  -master_pl_name master.m3u8 \
1301  http://example.com/live/out_%v.m3u8
1302@end example
1303This example adds two @code{#EXT-X-MEDIA} tags with @code{TYPE=CLOSED-CAPTIONS} in
1304the master playlist for the INSTREAM-IDs 'CC1' and 'CC2'. Also, it adds
1305@code{CLOSED-CAPTIONS} attribute with group name 'cc' for the two output variant
1306streams.
1307
1308@item master_pl_name
1309Create HLS master playlist with the given name.
1310
1311@example
1312ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8
1313@end example
1314This example creates HLS master playlist with name master.m3u8 and it is
1315published at http://example.com/live/
1316
1317@item master_pl_publish_rate
1318Publish master play list repeatedly every after specified number of segment intervals.
1319
1320@example
1321ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 \
1322-hls_time 2 -master_pl_publish_rate 30 http://example.com/live/out.m3u8
1323@end example
1324
1325This example creates HLS master playlist with name master.m3u8 and keep
1326publishing it repeatedly every after 30 segments i.e. every after 60s.
1327
1328@item http_persistent
1329Use persistent HTTP connections. Applicable only for HTTP output.
1330
1331@item timeout
1332Set timeout for socket I/O operations. Applicable only for HTTP output.
1333
1334@item -ignore_io_errors
1335Ignore IO errors during open, write and delete. Useful for long-duration runs with network output.
1336
1337@item headers
1338Set custom HTTP headers, can override built in default headers. Applicable only for HTTP output.
1339
1340@end table
1341
1342@anchor{ico}
1343@section ico
1344
1345ICO file muxer.
1346
1347Microsoft's icon file format (ICO) has some strict limitations that should be noted:
1348
1349@itemize
1350@item
1351Size cannot exceed 256 pixels in any dimension
1352
1353@item
1354Only BMP and PNG images can be stored
1355
1356@item
1357If a BMP image is used, it must be one of the following pixel formats:
1358@example
1359BMP Bit Depth      FFmpeg Pixel Format
13601bit               pal8
13614bit               pal8
13628bit               pal8
136316bit              rgb555le
136424bit              bgr24
136532bit              bgra
1366@end example
1367
1368@item
1369If a BMP image is used, it must use the BITMAPINFOHEADER DIB header
1370
1371@item
1372If a PNG image is used, it must use the rgba pixel format
1373@end itemize
1374
1375@anchor{image2}
1376@section image2
1377
1378Image file muxer.
1379
1380The image file muxer writes video frames to image files.
1381
1382The output filenames are specified by a pattern, which can be used to
1383produce sequentially numbered series of files.
1384The pattern may contain the string "%d" or "%0@var{N}d", this string
1385specifies the position of the characters representing a numbering in
1386the filenames. If the form "%0@var{N}d" is used, the string
1387representing the number in each filename is 0-padded to @var{N}
1388digits. The literal character '%' can be specified in the pattern with
1389the string "%%".
1390
1391If the pattern contains "%d" or "%0@var{N}d", the first filename of
1392the file list specified will contain the number 1, all the following
1393numbers will be sequential.
1394
1395The pattern may contain a suffix which is used to automatically
1396determine the format of the image files to write.
1397
1398For example the pattern "img-%03d.bmp" will specify a sequence of
1399filenames of the form @file{img-001.bmp}, @file{img-002.bmp}, ...,
1400@file{img-010.bmp}, etc.
1401The pattern "img%%-%d.jpg" will specify a sequence of filenames of the
1402form @file{img%-1.jpg}, @file{img%-2.jpg}, ..., @file{img%-10.jpg},
1403etc.
1404
1405The image muxer supports the .Y.U.V image file format. This format is
1406special in that that each image frame consists of three files, for
1407each of the YUV420P components. To read or write this image file format,
1408specify the name of the '.Y' file. The muxer will automatically open the
1409'.U' and '.V' files as required.
1410
1411@subsection Options
1412
1413@table @option
1414@item frame_pts
1415If set to 1, expand the filename with pts from pkt->pts.
1416Default value is 0.
1417
1418@item start_number
1419Start the sequence from the specified number. Default value is 1.
1420
1421@item update
1422If set to 1, the filename will always be interpreted as just a
1423filename, not a pattern, and the corresponding file will be continuously
1424overwritten with new images. Default value is 0.
1425
1426@item strftime
1427If set to 1, expand the filename with date and time information from
1428@code{strftime()}. Default value is 0.
1429
1430@item atomic_writing
1431Write output to a temporary file, which is renamed to target filename once
1432writing is completed. Default is disabled.
1433
1434@item protocol_opts @var{options_list}
1435Set protocol options as a :-separated list of key=value parameters. Values
1436containing the @code{:} special character must be escaped.
1437
1438@end table
1439
1440@subsection Examples
1441
1442The following example shows how to use @command{ffmpeg} for creating a
1443sequence of files @file{img-001.jpeg}, @file{img-002.jpeg}, ...,
1444taking one image every second from the input video:
1445@example
1446ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg'
1447@end example
1448
1449Note that with @command{ffmpeg}, if the format is not specified with the
1450@code{-f} option and the output filename specifies an image file
1451format, the image2 muxer is automatically selected, so the previous
1452command can be written as:
1453@example
1454ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg'
1455@end example
1456
1457Note also that the pattern must not necessarily contain "%d" or
1458"%0@var{N}d", for example to create a single image file
1459@file{img.jpeg} from the start of the input video you can employ the command:
1460@example
1461ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
1462@end example
1463
1464The @option{strftime} option allows you to expand the filename with
1465date and time information. Check the documentation of
1466the @code{strftime()} function for the syntax.
1467
1468For example to generate image files from the @code{strftime()}
1469"%Y-%m-%d_%H-%M-%S" pattern, the following @command{ffmpeg} command
1470can be used:
1471@example
1472ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
1473@end example
1474
1475You can set the file name with current frame's PTS:
1476@example
1477ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg"
1478@end example
1479
1480A more complex example is to publish contents of your desktop directly to a
1481WebDAV server every second:
1482@example
1483ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg
1484@end example
1485
1486@section matroska
1487
1488Matroska container muxer.
1489
1490This muxer implements the matroska and webm container specs.
1491
1492@subsection Metadata
1493
1494The recognized metadata settings in this muxer are:
1495
1496@table @option
1497@item title
1498Set title name provided to a single track. This gets mapped to
1499the FileDescription element for a stream written as attachment.
1500
1501@item language
1502Specify the language of the track in the Matroska languages form.
1503
1504The language can be either the 3 letters bibliographic ISO-639-2 (ISO
1505639-2/B) form (like "fre" for French), or a language code mixed with a
1506country code for specialities in languages (like "fre-ca" for Canadian
1507French).
1508
1509@item stereo_mode
1510Set stereo 3D video layout of two views in a single video track.
1511
1512The following values are recognized:
1513@table @samp
1514@item mono
1515video is not stereo
1516@item left_right
1517Both views are arranged side by side, Left-eye view is on the left
1518@item bottom_top
1519Both views are arranged in top-bottom orientation, Left-eye view is at bottom
1520@item top_bottom
1521Both views are arranged in top-bottom orientation, Left-eye view is on top
1522@item checkerboard_rl
1523Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first
1524@item checkerboard_lr
1525Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first
1526@item row_interleaved_rl
1527Each view is constituted by a row based interleaving, Right-eye view is first row
1528@item row_interleaved_lr
1529Each view is constituted by a row based interleaving, Left-eye view is first row
1530@item col_interleaved_rl
1531Both views are arranged in a column based interleaving manner, Right-eye view is first column
1532@item col_interleaved_lr
1533Both views are arranged in a column based interleaving manner, Left-eye view is first column
1534@item anaglyph_cyan_red
1535All frames are in anaglyph format viewable through red-cyan filters
1536@item right_left
1537Both views are arranged side by side, Right-eye view is on the left
1538@item anaglyph_green_magenta
1539All frames are in anaglyph format viewable through green-magenta filters
1540@item block_lr
1541Both eyes laced in one Block, Left-eye view is first
1542@item block_rl
1543Both eyes laced in one Block, Right-eye view is first
1544@end table
1545@end table
1546
1547For example a 3D WebM clip can be created using the following command line:
1548@example
1549ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
1550@end example
1551
1552@subsection Options
1553
1554This muxer supports the following options:
1555
1556@table @option
1557@item reserve_index_space
1558By default, this muxer writes the index for seeking (called cues in Matroska
1559terms) at the end of the file, because it cannot know in advance how much space
1560to leave for the index at the beginning of the file. However for some use cases
1561-- e.g.  streaming where seeking is possible but slow -- it is useful to put the
1562index at the beginning of the file.
1563
1564If this option is set to a non-zero value, the muxer will reserve a given amount
1565of space in the file header and then try to write the cues there when the muxing
1566finishes. If the reserved space does not suffice, no Cues will be written, the
1567file will be finalized and writing the trailer will return an error.
1568A safe size for most use cases should be about 50kB per hour of video.
1569
1570Note that cues are only written if the output is seekable and this option will
1571have no effect if it is not.
1572
1573@item cues_to_front
1574If set, the muxer will write the index at the beginning of the file
1575by shifting the main data if necessary. This can be combined with
1576reserve_index_space in which case the data is only shifted if
1577the initially reserved space turns out to be insufficient.
1578
1579This option is ignored if the output is unseekable.
1580
1581@item default_mode
1582This option controls how the FlagDefault of the output tracks will be set.
1583It influences which tracks players should play by default. The default mode
1584is @samp{passthrough}.
1585@table @samp
1586@item infer
1587Every track with disposition default will have the FlagDefault set.
1588Additionally, for each type of track (audio, video or subtitle), if no track
1589with disposition default of this type exists, then the first track of this type
1590will be marked as default (if existing). This ensures that the default flag
1591is set in a sensible way even if the input originated from containers that
1592lack the concept of default tracks.
1593@item infer_no_subs
1594This mode is the same as infer except that if no subtitle track with
1595disposition default exists, no subtitle track will be marked as default.
1596@item passthrough
1597In this mode the FlagDefault is set if and only if the AV_DISPOSITION_DEFAULT
1598flag is set in the disposition of the corresponding stream.
1599@end table
1600
1601@item flipped_raw_rgb
1602If set to true, store positive height for raw RGB bitmaps, which indicates
1603bitmap is stored bottom-up. Note that this option does not flip the bitmap
1604which has to be done manually beforehand, e.g. by using the vflip filter.
1605Default is @var{false} and indicates bitmap is stored top down.
1606
1607@end table
1608
1609@anchor{md5}
1610@section md5
1611
1612MD5 testing format.
1613
1614This is a variant of the @ref{hash} muxer. Unlike that muxer, it
1615defaults to using the MD5 hash function.
1616
1617@subsection Examples
1618
1619To compute the MD5 hash of the input converted to raw
1620audio and video, and store it in the file @file{out.md5}:
1621@example
1622ffmpeg -i INPUT -f md5 out.md5
1623@end example
1624
1625You can print the MD5 to stdout with the command:
1626@example
1627ffmpeg -i INPUT -f md5 -
1628@end example
1629
1630See also the @ref{hash} and @ref{framemd5} muxers.
1631
1632@section mov, mp4, ismv
1633
1634MOV/MP4/ISMV (Smooth Streaming) muxer.
1635
1636The mov/mp4/ismv muxer supports fragmentation. Normally, a MOV/MP4
1637file has all the metadata about all packets stored in one location
1638(written at the end of the file, it can be moved to the start for
1639better playback by adding @var{faststart} to the @var{movflags}, or
1640using the @command{qt-faststart} tool). A fragmented
1641file consists of a number of fragments, where packets and metadata
1642about these packets are stored together. Writing a fragmented
1643file has the advantage that the file is decodable even if the
1644writing is interrupted (while a normal MOV/MP4 is undecodable if
1645it is not properly finished), and it requires less memory when writing
1646very long files (since writing normal MOV/MP4 files stores info about
1647every single packet in memory until the file is closed). The downside
1648is that it is less compatible with other applications.
1649
1650@subsection Options
1651
1652Fragmentation is enabled by setting one of the AVOptions that define
1653how to cut the file into fragments:
1654
1655@table @option
1656@item -moov_size @var{bytes}
1657Reserves space for the moov atom at the beginning of the file instead of placing the
1658moov atom at the end. If the space reserved is insufficient, muxing will fail.
1659@item -movflags frag_keyframe
1660Start a new fragment at each video keyframe.
1661@item -frag_duration @var{duration}
1662Create fragments that are @var{duration} microseconds long.
1663@item -frag_size @var{size}
1664Create fragments that contain up to @var{size} bytes of payload data.
1665@item -movflags frag_custom
1666Allow the caller to manually choose when to cut fragments, by
1667calling @code{av_write_frame(ctx, NULL)} to write a fragment with
1668the packets written so far. (This is only useful with other
1669applications integrating libavformat, not from @command{ffmpeg}.)
1670@item -min_frag_duration @var{duration}
1671Don't create fragments that are shorter than @var{duration} microseconds long.
1672@end table
1673
1674If more than one condition is specified, fragments are cut when
1675one of the specified conditions is fulfilled. The exception to this is
1676@code{-min_frag_duration}, which has to be fulfilled for any of the other
1677conditions to apply.
1678
1679Additionally, the way the output file is written can be adjusted
1680through a few other options:
1681
1682@table @option
1683@item -movflags empty_moov
1684Write an initial moov atom directly at the start of the file, without
1685describing any samples in it. Generally, an mdat/moov pair is written
1686at the start of the file, as a normal MOV/MP4 file, containing only
1687a short portion of the file. With this option set, there is no initial
1688mdat atom, and the moov atom only describes the tracks but has
1689a zero duration.
1690
1691This option is implicitly set when writing ismv (Smooth Streaming) files.
1692@item -movflags separate_moof
1693Write a separate moof (movie fragment) atom for each track. Normally,
1694packets for all tracks are written in a moof atom (which is slightly
1695more efficient), but with this option set, the muxer writes one moof/mdat
1696pair for each track, making it easier to separate tracks.
1697
1698This option is implicitly set when writing ismv (Smooth Streaming) files.
1699@item -movflags skip_sidx
1700Skip writing of sidx atom. When bitrate overhead due to sidx atom is high,
1701this option could be used for cases where sidx atom is not mandatory.
1702When global_sidx flag is enabled, this option will be ignored.
1703@item -movflags faststart
1704Run a second pass moving the index (moov atom) to the beginning of the file.
1705This operation can take a while, and will not work in various situations such
1706as fragmented output, thus it is not enabled by default.
1707@item -movflags rtphint
1708Add RTP hinting tracks to the output file.
1709@item -movflags disable_chpl
1710Disable Nero chapter markers (chpl atom).  Normally, both Nero chapters
1711and a QuickTime chapter track are written to the file. With this option
1712set, only the QuickTime chapter track will be written. Nero chapters can
1713cause failures when the file is reprocessed with certain tagging programs, like
1714mp3Tag 2.61a and iTunes 11.3, most likely other versions are affected as well.
1715@item -movflags omit_tfhd_offset
1716Do not write any absolute base_data_offset in tfhd atoms. This avoids
1717tying fragments to absolute byte positions in the file/streams.
1718@item -movflags default_base_moof
1719Similarly to the omit_tfhd_offset, this flag avoids writing the
1720absolute base_data_offset field in tfhd atoms, but does so by using
1721the new default-base-is-moof flag instead. This flag is new from
172214496-12:2012. This may make the fragments easier to parse in certain
1723circumstances (avoiding basing track fragment location calculations
1724on the implicit end of the previous track fragment).
1725@item -write_tmcd
1726Specify @code{on} to force writing a timecode track, @code{off} to disable it
1727and @code{auto} to write a timecode track only for mov and mp4 output (default).
1728@item -movflags negative_cts_offsets
1729Enables utilization of version 1 of the CTTS box, in which the CTS offsets can
1730be negative. This enables the initial sample to have DTS/CTS of zero, and
1731reduces the need for edit lists for some cases such as video tracks with
1732B-frames. Additionally, eases conformance with the DASH-IF interoperability
1733guidelines.
1734
1735This option is implicitly set when writing ismv (Smooth Streaming) files.
1736
1737@item -write_btrt @var{bool}
1738Force or disable writing bitrate box inside stsd box of a track.
1739The box contains decoding buffer size (in bytes), maximum bitrate and
1740average bitrate for the track. The box will be skipped if none of these values
1741can be computed.
1742Default is @code{-1} or @code{auto}, which will write the box only in MP4 mode.
1743
1744@item -write_prft
1745Write producer time reference box (PRFT) with a specified time source for the
1746NTP field in the PRFT box. Set value as @samp{wallclock} to specify timesource
1747as wallclock time and @samp{pts} to specify timesource as input packets' PTS
1748values.
1749
1750Setting value to @samp{pts} is applicable only for a live encoding use case,
1751where PTS values are set as as wallclock time at the source. For example, an
1752encoding use case with decklink capture source where @option{video_pts} and
1753@option{audio_pts} are set to @samp{abs_wallclock}.
1754
1755@item -empty_hdlr_name @var{bool}
1756Enable to skip writing the name inside a @code{hdlr} box.
1757Default is @code{false}.
1758
1759@item -movie_timescale @var{scale}
1760Set the timescale written in the movie header box (@code{mvhd}).
1761Range is 1 to INT_MAX. Default is 1000.
1762
1763@item -video_track_timescale @var{scale}
1764Set the timescale used for video tracks. Range is 0 to INT_MAX.
1765If set to @code{0}, the timescale is automatically set based on
1766the native stream time base. Default is 0.
1767@end table
1768
1769@subsection Example
1770
1771Smooth Streaming content can be pushed in real time to a publishing
1772point on IIS with this muxer. Example:
1773@example
1774ffmpeg -re @var{<normal input/transcoding options>} -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
1775@end example
1776
1777@section mp3
1778
1779The MP3 muxer writes a raw MP3 stream with the following optional features:
1780@itemize @bullet
1781@item
1782An ID3v2 metadata header at the beginning (enabled by default). Versions 2.3 and
17832.4 are supported, the @code{id3v2_version} private option controls which one is
1784used (3 or 4). Setting @code{id3v2_version} to 0 disables the ID3v2 header
1785completely.
1786
1787The muxer supports writing attached pictures (APIC frames) to the ID3v2 header.
1788The pictures are supplied to the muxer in form of a video stream with a single
1789packet. There can be any number of those streams, each will correspond to a
1790single APIC frame.  The stream metadata tags @var{title} and @var{comment} map
1791to APIC @var{description} and @var{picture type} respectively. See
1792@url{http://id3.org/id3v2.4.0-frames} for allowed picture types.
1793
1794Note that the APIC frames must be written at the beginning, so the muxer will
1795buffer the audio frames until it gets all the pictures. It is therefore advised
1796to provide the pictures as soon as possible to avoid excessive buffering.
1797
1798@item
1799A Xing/LAME frame right after the ID3v2 header (if present). It is enabled by
1800default, but will be written only if the output is seekable. The
1801@code{write_xing} private option can be used to disable it.  The frame contains
1802various information that may be useful to the decoder, like the audio duration
1803or encoder delay.
1804
1805@item
1806A legacy ID3v1 tag at the end of the file (disabled by default). It may be
1807enabled with the @code{write_id3v1} private option, but as its capabilities are
1808very limited, its usage is not recommended.
1809@end itemize
1810
1811Examples:
1812
1813Write an mp3 with an ID3v2.3 header and an ID3v1 footer:
1814@example
1815ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
1816@end example
1817
1818To attach a picture to an mp3 file select both the audio and the picture stream
1819with @code{map}:
1820@example
1821ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1
1822-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
1823@end example
1824
1825Write a "clean" MP3 without any extra features:
1826@example
1827ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3
1828@end example
1829
1830@section mpegts
1831
1832MPEG transport stream muxer.
1833
1834This muxer implements ISO 13818-1 and part of ETSI EN 300 468.
1835
1836The recognized metadata settings in mpegts muxer are @code{service_provider}
1837and @code{service_name}. If they are not set the default for
1838@code{service_provider} is @samp{FFmpeg} and the default for
1839@code{service_name} is @samp{Service01}.
1840
1841@subsection Options
1842
1843The muxer options are:
1844
1845@table @option
1846@item mpegts_transport_stream_id @var{integer}
1847Set the @samp{transport_stream_id}. This identifies a transponder in DVB.
1848Default is @code{0x0001}.
1849
1850@item mpegts_original_network_id @var{integer}
1851Set the @samp{original_network_id}. This is unique identifier of a
1852network in DVB. Its main use is in the unique identification of a service
1853through the path @samp{Original_Network_ID, Transport_Stream_ID}. Default
1854is @code{0x0001}.
1855
1856@item mpegts_service_id @var{integer}
1857Set the @samp{service_id}, also known as program in DVB. Default is
1858@code{0x0001}.
1859
1860@item mpegts_service_type @var{integer}
1861Set the program @samp{service_type}. Default is @code{digital_tv}.
1862Accepts the following options:
1863@table @samp
1864@item hex_value
1865Any hexadecimal value between @code{0x01} and @code{0xff} as defined in
1866ETSI 300 468.
1867@item digital_tv
1868Digital TV service.
1869@item digital_radio
1870Digital Radio service.
1871@item teletext
1872Teletext service.
1873@item advanced_codec_digital_radio
1874Advanced Codec Digital Radio service.
1875@item mpeg2_digital_hdtv
1876MPEG2 Digital HDTV service.
1877@item advanced_codec_digital_sdtv
1878Advanced Codec Digital SDTV service.
1879@item advanced_codec_digital_hdtv
1880Advanced Codec Digital HDTV service.
1881@end table
1882
1883@item mpegts_pmt_start_pid @var{integer}
1884Set the first PID for PMTs. Default is @code{0x1000}, minimum is @code{0x0020},
1885maximum is @code{0x1ffa}. This option has no effect in m2ts mode where the PMT
1886PID is fixed @code{0x0100}.
1887
1888@item mpegts_start_pid @var{integer}
1889Set the first PID for elementary streams. Default is @code{0x0100}, minimum is
1890@code{0x0020}, maximum is @code{0x1ffa}. This option has no effect in m2ts mode
1891where the elementary stream PIDs are fixed.
1892
1893@item mpegts_m2ts_mode @var{boolean}
1894Enable m2ts mode if set to @code{1}. Default value is @code{-1} which
1895disables m2ts mode.
1896
1897@item muxrate @var{integer}
1898Set a constant muxrate. Default is VBR.
1899
1900@item pes_payload_size @var{integer}
1901Set minimum PES packet payload in bytes. Default is @code{2930}.
1902
1903@item mpegts_flags @var{flags}
1904Set mpegts flags. Accepts the following options:
1905@table @samp
1906@item resend_headers
1907Reemit PAT/PMT before writing the next packet.
1908@item latm
1909Use LATM packetization for AAC.
1910@item pat_pmt_at_frames
1911Reemit PAT and PMT at each video frame.
1912@item system_b
1913Conform to System B (DVB) instead of System A (ATSC).
1914@item initial_discontinuity
1915Mark the initial packet of each stream as discontinuity.
1916@item nit
1917Emit NIT table.
1918@end table
1919
1920@item mpegts_copyts @var{boolean}
1921Preserve original timestamps, if value is set to @code{1}. Default value
1922is @code{-1}, which results in shifting timestamps so that they start from 0.
1923
1924@item omit_video_pes_length @var{boolean}
1925Omit the PES packet length for video packets. Default is @code{1} (true).
1926
1927@item pcr_period @var{integer}
1928Override the default PCR retransmission time in milliseconds. Default is
1929@code{-1} which means that the PCR interval will be determined automatically:
193020 ms is used for CBR streams, the highest multiple of the frame duration which
1931is less than 100 ms is used for VBR streams.
1932
1933@item pat_period @var{duration}
1934Maximum time in seconds between PAT/PMT tables. Default is @code{0.1}.
1935
1936@item sdt_period @var{duration}
1937Maximum time in seconds between SDT tables. Default is @code{0.5}.
1938
1939@item nit_period @var{duration}
1940Maximum time in seconds between NIT tables. Default is @code{0.5}.
1941
1942@item tables_version @var{integer}
1943Set PAT, PMT, SDT and NIT version (default @code{0}, valid values are from 0 to 31, inclusively).
1944This option allows updating stream structure so that standard consumer may
1945detect the change. To do so, reopen output @code{AVFormatContext} (in case of API
1946usage) or restart @command{ffmpeg} instance, cyclically changing
1947@option{tables_version} value:
1948
1949@example
1950ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
1951ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
1952...
1953ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111
1954ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
1955ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
1956...
1957@end example
1958@end table
1959
1960@subsection Example
1961
1962@example
1963ffmpeg -i file.mpg -c copy \
1964     -mpegts_original_network_id 0x1122 \
1965     -mpegts_transport_stream_id 0x3344 \
1966     -mpegts_service_id 0x5566 \
1967     -mpegts_pmt_start_pid 0x1500 \
1968     -mpegts_start_pid 0x150 \
1969     -metadata service_provider="Some provider" \
1970     -metadata service_name="Some Channel" \
1971     out.ts
1972@end example
1973
1974@section mxf, mxf_d10, mxf_opatom
1975
1976MXF muxer.
1977
1978@subsection Options
1979
1980The muxer options are:
1981
1982@table @option
1983@item store_user_comments @var{bool}
1984Set if user comments should be stored if available or never.
1985IRT D-10 does not allow user comments. The default is thus to write them for
1986mxf and mxf_opatom but not for mxf_d10
1987@end table
1988
1989@section null
1990
1991Null muxer.
1992
1993This muxer does not generate any output file, it is mainly useful for
1994testing or benchmarking purposes.
1995
1996For example to benchmark decoding with @command{ffmpeg} you can use the
1997command:
1998@example
1999ffmpeg -benchmark -i INPUT -f null out.null
2000@end example
2001
2002Note that the above command does not read or write the @file{out.null}
2003file, but specifying the output file is required by the @command{ffmpeg}
2004syntax.
2005
2006Alternatively you can write the command as:
2007@example
2008ffmpeg -benchmark -i INPUT -f null -
2009@end example
2010
2011@section nut
2012
2013@table @option
2014@item -syncpoints @var{flags}
2015Change the syncpoint usage in nut:
2016@table @option
2017@item @var{default} use the normal low-overhead seeking aids.
2018@item @var{none} do not use the syncpoints at all, reducing the overhead but making the stream non-seekable;
2019    Use of this option is not recommended, as the resulting files are very damage
2020    sensitive and seeking is not possible. Also in general the overhead from
2021    syncpoints is negligible. Note, -@code{write_index} 0 can be used to disable
2022    all growing data tables, allowing to mux endless streams with limited memory
2023    and without these disadvantages.
2024@item @var{timestamped} extend the syncpoint with a wallclock field.
2025@end table
2026The @var{none} and @var{timestamped} flags are experimental.
2027@item -write_index @var{bool}
2028Write index at the end, the default is to write an index.
2029@end table
2030
2031@example
2032ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor
2033@end example
2034
2035@section ogg
2036
2037Ogg container muxer.
2038
2039@table @option
2040@item -page_duration @var{duration}
2041Preferred page duration, in microseconds. The muxer will attempt to create
2042pages that are approximately @var{duration} microseconds long. This allows the
2043user to compromise between seek granularity and container overhead. The default
2044is 1 second. A value of 0 will fill all segments, making pages as large as
2045possible. A value of 1 will effectively use 1 packet-per-page in most
2046situations, giving a small seek granularity at the cost of additional container
2047overhead.
2048@item -serial_offset @var{value}
2049Serial value from which to set the streams serial number.
2050Setting it to different and sufficiently large values ensures that the produced
2051ogg files can be safely chained.
2052
2053@end table
2054
2055@anchor{raw muxers}
2056@section raw muxers
2057
2058Raw muxers accept a single stream matching the designated codec. They do not store timestamps or metadata.
2059The recognized extension is the same as the muxer name unless indicated otherwise.
2060
2061@subsection ac3
2062
2063Dolby Digital, also known as AC-3, audio.
2064
2065@subsection adx
2066
2067CRI Middleware ADX audio.
2068
2069This muxer will write out the total sample count near the start of the first packet
2070when the output is seekable and the count can be stored in 32 bits.
2071
2072@subsection aptx
2073
2074aptX (Audio Processing Technology for Bluetooth) audio.
2075
2076@subsection aptx_hd
2077
2078aptX HD (Audio Processing Technology for Bluetooth) audio.
2079
2080Extensions: aptxhd
2081
2082@subsection avs2
2083
2084AVS2-P2/IEEE1857.4 video.
2085
2086Extensions: avs, avs2
2087
2088@subsection cavsvideo
2089
2090Chinese AVS (Audio Video Standard) video.
2091
2092Extensions: cavs
2093
2094@subsection codec2raw
2095
2096Codec 2 audio.
2097
2098No extension is registered so format name has to be supplied e.g. with the ffmpeg CLI tool @code{-f codec2raw}.
2099
2100@subsection data
2101
2102Data muxer accepts a single stream with any codec of any type.
2103The input stream has to be selected using the @code{-map} option with the ffmpeg CLI tool.
2104
2105No extension is registered so format name has to be supplied e.g. with the ffmpeg CLI tool @code{-f data}.
2106
2107@subsection dirac
2108
2109BBC Dirac video. The Dirac Pro codec is a subset and is standardized as SMPTE VC-2.
2110
2111Extensions: drc, vc2
2112
2113@subsection dnxhd
2114
2115Avid DNxHD video. It is standardized as SMPTE VC-3. Accepts DNxHR streams.
2116
2117Extensions: dnxhd, dnxhr
2118
2119@subsection dts
2120
2121DTS Coherent Acoustics (DCA) audio.
2122
2123@subsection eac3
2124
2125Dolby Digital Plus, also known as Enhanced AC-3, audio.
2126
2127@subsection g722
2128
2129ITU-T G.722 audio.
2130
2131@subsection g723_1
2132
2133ITU-T G.723.1 audio.
2134
2135Extensions: tco, rco
2136
2137@subsection g726
2138
2139ITU-T G.726 big-endian ("left-justified") audio.
2140
2141No extension is registered so format name has to be supplied e.g. with the ffmpeg CLI tool @code{-f g726}.
2142
2143@subsection g726le
2144
2145ITU-T G.726 little-endian ("right-justified") audio.
2146
2147No extension is registered so format name has to be supplied e.g. with the ffmpeg CLI tool @code{-f g726le}.
2148
2149@subsection gsm
2150
2151Global System for Mobile Communications audio.
2152
2153@subsection h261
2154
2155ITU-T H.261 video.
2156
2157@subsection h263
2158
2159ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 video.
2160
2161@subsection h264
2162
2163ITU-T H.264 / MPEG-4 Part 10 AVC video. Bitstream shall be converted to Annex B syntax if it's in length-prefixed mode.
2164
2165Extensions: h264, 264
2166
2167@subsection hevc
2168
2169ITU-T H.265 / MPEG-H Part 2 HEVC video. Bitstream shall be converted to Annex B syntax if it's in length-prefixed mode.
2170
2171Extensions: hevc, h265, 265
2172
2173@subsection m4v
2174
2175MPEG-4 Part 2 video.
2176
2177@subsection mjpeg
2178
2179Motion JPEG video.
2180
2181Extensions: mjpg, mjpeg
2182
2183@subsection mlp
2184
2185Meridian Lossless Packing, also known as Packed PCM, audio.
2186
2187@subsection mp2
2188
2189MPEG-1 Audio Layer II audio.
2190
2191Extensions: mp2, m2a, mpa
2192
2193@subsection mpeg1video
2194
2195MPEG-1 Part 2 video.
2196
2197Extensions: mpg, mpeg, m1v
2198
2199@subsection mpeg2video
2200
2201ITU-T H.262 / MPEG-2 Part 2 video.
2202
2203Extensions: m2v
2204
2205@subsection obu
2206
2207AV1 low overhead Open Bitstream Units muxer. Temporal delimiter OBUs will be inserted in all temporal units of the stream.
2208
2209@subsection rawvideo
2210
2211Raw uncompressed video.
2212
2213Extensions: yuv, rgb
2214
2215@subsection sbc
2216
2217Bluetooth SIG low-complexity subband codec audio.
2218
2219Extensions: sbc, msbc
2220
2221@subsection truehd
2222
2223Dolby TrueHD audio.
2224
2225Extensions: thd
2226
2227@subsection vc1
2228
2229SMPTE 421M / VC-1 video.
2230
2231@anchor{segment}
2232@section segment, stream_segment, ssegment
2233
2234Basic stream segmenter.
2235
2236This muxer outputs streams to a number of separate files of nearly
2237fixed duration. Output filename pattern can be set in a fashion
2238similar to @ref{image2}, or by using a @code{strftime} template if
2239the @option{strftime} option is enabled.
2240
2241@code{stream_segment} is a variant of the muxer used to write to
2242streaming output formats, i.e. which do not require global headers,
2243and is recommended for outputting e.g. to MPEG transport stream segments.
2244@code{ssegment} is a shorter alias for @code{stream_segment}.
2245
2246Every segment starts with a keyframe of the selected reference stream,
2247which is set through the @option{reference_stream} option.
2248
2249Note that if you want accurate splitting for a video file, you need to
2250make the input key frames correspond to the exact splitting times
2251expected by the segmenter, or the segment muxer will start the new
2252segment with the key frame found next after the specified start
2253time.
2254
2255The segment muxer works best with a single constant frame rate video.
2256
2257Optionally it can generate a list of the created segments, by setting
2258the option @var{segment_list}. The list type is specified by the
2259@var{segment_list_type} option. The entry filenames in the segment
2260list are set by default to the basename of the corresponding segment
2261files.
2262
2263See also the @ref{hls} muxer, which provides a more specific
2264implementation for HLS segmentation.
2265
2266@subsection Options
2267
2268The segment muxer supports the following options:
2269
2270@table @option
2271@item increment_tc @var{1|0}
2272if set to @code{1}, increment timecode between each segment
2273If this is selected, the input need to have
2274a timecode in the first video stream. Default value is
2275@code{0}.
2276
2277@item reference_stream @var{specifier}
2278Set the reference stream, as specified by the string @var{specifier}.
2279If @var{specifier} is set to @code{auto}, the reference is chosen
2280automatically. Otherwise it must be a stream specifier (see the ``Stream
2281specifiers'' chapter in the ffmpeg manual) which specifies the
2282reference stream. The default value is @code{auto}.
2283
2284@item segment_format @var{format}
2285Override the inner container format, by default it is guessed by the filename
2286extension.
2287
2288@item segment_format_options @var{options_list}
2289Set output format options using a :-separated list of key=value
2290parameters. Values containing the @code{:} special character must be
2291escaped.
2292
2293@item segment_list @var{name}
2294Generate also a listfile named @var{name}. If not specified no
2295listfile is generated.
2296
2297@item segment_list_flags @var{flags}
2298Set flags affecting the segment list generation.
2299
2300It currently supports the following flags:
2301@table @samp
2302@item cache
2303Allow caching (only affects M3U8 list files).
2304
2305@item live
2306Allow live-friendly file generation.
2307@end table
2308
2309@item segment_list_size @var{size}
2310Update the list file so that it contains at most @var{size}
2311segments. If 0 the list file will contain all the segments. Default
2312value is 0.
2313
2314@item segment_list_entry_prefix @var{prefix}
2315Prepend @var{prefix} to each entry. Useful to generate absolute paths.
2316By default no prefix is applied.
2317
2318@item segment_list_type @var{type}
2319Select the listing format.
2320
2321The following values are recognized:
2322@table @samp
2323@item flat
2324Generate a flat list for the created segments, one segment per line.
2325
2326@item csv, ext
2327Generate a list for the created segments, one segment per line,
2328each line matching the format (comma-separated values):
2329@example
2330@var{segment_filename},@var{segment_start_time},@var{segment_end_time}
2331@end example
2332
2333@var{segment_filename} is the name of the output file generated by the
2334muxer according to the provided pattern. CSV escaping (according to
2335RFC4180) is applied if required.
2336
2337@var{segment_start_time} and @var{segment_end_time} specify
2338the segment start and end time expressed in seconds.
2339
2340A list file with the suffix @code{".csv"} or @code{".ext"} will
2341auto-select this format.
2342
2343@samp{ext} is deprecated in favor or @samp{csv}.
2344
2345@item ffconcat
2346Generate an ffconcat file for the created segments. The resulting file
2347can be read using the FFmpeg @ref{concat} demuxer.
2348
2349A list file with the suffix @code{".ffcat"} or @code{".ffconcat"} will
2350auto-select this format.
2351
2352@item m3u8
2353Generate an extended M3U8 file, version 3, compliant with
2354@url{http://tools.ietf.org/id/draft-pantos-http-live-streaming}.
2355
2356A list file with the suffix @code{".m3u8"} will auto-select this format.
2357@end table
2358
2359If not specified the type is guessed from the list file name suffix.
2360
2361@item segment_time @var{time}
2362Set segment duration to @var{time}, the value must be a duration
2363specification. Default value is "2". See also the
2364@option{segment_times} option.
2365
2366Note that splitting may not be accurate, unless you force the
2367reference stream key-frames at the given time. See the introductory
2368notice and the examples below.
2369
2370@item segment_atclocktime @var{1|0}
2371If set to "1" split at regular clock time intervals starting from 00:00
2372o'clock. The @var{time} value specified in @option{segment_time} is
2373used for setting the length of the splitting interval.
2374
2375For example with @option{segment_time} set to "900" this makes it possible
2376to create files at 12:00 o'clock, 12:15, 12:30, etc.
2377
2378Default value is "0".
2379
2380@item segment_clocktime_offset @var{duration}
2381Delay the segment splitting times with the specified duration when using
2382@option{segment_atclocktime}.
2383
2384For example with @option{segment_time} set to "900" and
2385@option{segment_clocktime_offset} set to "300" this makes it possible to
2386create files at 12:05, 12:20, 12:35, etc.
2387
2388Default value is "0".
2389
2390@item segment_clocktime_wrap_duration @var{duration}
2391Force the segmenter to only start a new segment if a packet reaches the muxer
2392within the specified duration after the segmenting clock time. This way you
2393can make the segmenter more resilient to backward local time jumps, such as
2394leap seconds or transition to standard time from daylight savings time.
2395
2396Default is the maximum possible duration which means starting a new segment
2397regardless of the elapsed time since the last clock time.
2398
2399@item segment_time_delta @var{delta}
2400Specify the accuracy time when selecting the start time for a
2401segment, expressed as a duration specification. Default value is "0".
2402
2403When delta is specified a key-frame will start a new segment if its
2404PTS satisfies the relation:
2405@example
2406PTS >= start_time - time_delta
2407@end example
2408
2409This option is useful when splitting video content, which is always
2410split at GOP boundaries, in case a key frame is found just before the
2411specified split time.
2412
2413In particular may be used in combination with the @file{ffmpeg} option
2414@var{force_key_frames}. The key frame times specified by
2415@var{force_key_frames} may not be set accurately because of rounding
2416issues, with the consequence that a key frame time may result set just
2417before the specified time. For constant frame rate videos a value of
24181/(2*@var{frame_rate}) should address the worst case mismatch between
2419the specified time and the time set by @var{force_key_frames}.
2420
2421@item segment_times @var{times}
2422Specify a list of split points. @var{times} contains a list of comma
2423separated duration specifications, in increasing order. See also
2424the @option{segment_time} option.
2425
2426@item segment_frames @var{frames}
2427Specify a list of split video frame numbers. @var{frames} contains a
2428list of comma separated integer numbers, in increasing order.
2429
2430This option specifies to start a new segment whenever a reference
2431stream key frame is found and the sequential number (starting from 0)
2432of the frame is greater or equal to the next value in the list.
2433
2434@item segment_wrap @var{limit}
2435Wrap around segment index once it reaches @var{limit}.
2436
2437@item segment_start_number @var{number}
2438Set the sequence number of the first segment. Defaults to @code{0}.
2439
2440@item strftime @var{1|0}
2441Use the @code{strftime} function to define the name of the new
2442segments to write. If this is selected, the output segment name must
2443contain a @code{strftime} function template. Default value is
2444@code{0}.
2445
2446@item break_non_keyframes @var{1|0}
2447If enabled, allow segments to start on frames other than keyframes. This
2448improves behavior on some players when the time between keyframes is
2449inconsistent, but may make things worse on others, and can cause some oddities
2450during seeking. Defaults to @code{0}.
2451
2452@item reset_timestamps @var{1|0}
2453Reset timestamps at the beginning of each segment, so that each segment
2454will start with near-zero timestamps. It is meant to ease the playback
2455of the generated segments. May not work with some combinations of
2456muxers/codecs. It is set to @code{0} by default.
2457
2458@item initial_offset @var{offset}
2459Specify timestamp offset to apply to the output packet timestamps. The
2460argument must be a time duration specification, and defaults to 0.
2461
2462@item write_empty_segments @var{1|0}
2463If enabled, write an empty segment if there are no packets during the period a
2464segment would usually span. Otherwise, the segment will be filled with the next
2465packet written. Defaults to @code{0}.
2466@end table
2467
2468Make sure to require a closed GOP when encoding and to set the GOP
2469size to fit your segment time constraint.
2470
2471@subsection Examples
2472
2473@itemize
2474@item
2475Remux the content of file @file{in.mkv} to a list of segments
2476@file{out-000.nut}, @file{out-001.nut}, etc., and write the list of
2477generated segments to @file{out.list}:
2478@example
2479ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut
2480@end example
2481
2482@item
2483Segment input and set output format options for the output segments:
2484@example
2485ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4
2486@end example
2487
2488@item
2489Segment the input file according to the split points specified by the
2490@var{segment_times} option:
2491@example
2492ffmpeg -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
2493@end example
2494
2495@item
2496Use the @command{ffmpeg} @option{force_key_frames}
2497option to force key frames in the input at the specified location, together
2498with the segment option @option{segment_time_delta} to account for
2499possible roundings operated when setting key frame times.
2500@example
2501ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \
2502-f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
2503@end example
2504In order to force key frames on the input file, transcoding is
2505required.
2506
2507@item
2508Segment the input file by splitting the input file according to the
2509frame numbers sequence specified with the @option{segment_frames} option:
2510@example
2511ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
2512@end example
2513
2514@item
2515Convert the @file{in.mkv} to TS segments using the @code{libx264}
2516and @code{aac} encoders:
2517@example
2518ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts
2519@end example
2520
2521@item
2522Segment the input file, and create an M3U8 live playlist (can be used
2523as live HLS source):
2524@example
2525ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \
2526-segment_list_flags +live -segment_time 10 out%03d.mkv
2527@end example
2528@end itemize
2529
2530@section smoothstreaming
2531
2532Smooth Streaming muxer generates a set of files (Manifest, chunks) suitable for serving with conventional web server.
2533
2534@table @option
2535@item window_size
2536Specify the number of fragments kept in the manifest. Default 0 (keep all).
2537
2538@item extra_window_size
2539Specify the number of fragments kept outside of the manifest before removing from disk. Default 5.
2540
2541@item lookahead_count
2542Specify the number of lookahead fragments. Default 2.
2543
2544@item min_frag_duration
2545Specify the minimum fragment duration (in microseconds). Default 5000000.
2546
2547@item remove_at_exit
2548Specify whether to remove all fragments when finished. Default 0 (do not remove).
2549
2550@end table
2551
2552@anchor{streamhash}
2553@section streamhash
2554
2555Per stream hash testing format.
2556
2557This muxer computes and prints a cryptographic hash of all the input frames,
2558on a per-stream basis. This can be used for equality checks without having
2559to do a complete binary comparison.
2560
2561By default audio frames are converted to signed 16-bit raw audio and
2562video frames to raw video before computing the hash, but the output
2563of explicit conversions to other codecs can also be used. Timestamps
2564are ignored. It uses the SHA-256 cryptographic hash function by default,
2565but supports several other algorithms.
2566
2567The output of the muxer consists of one line per stream of the form:
2568@var{streamindex},@var{streamtype},@var{algo}=@var{hash}, where
2569@var{streamindex} is the index of the mapped stream, @var{streamtype} is a
2570single character indicating the type of stream, @var{algo} is a short string
2571representing the hash function used, and @var{hash} is a hexadecimal number
2572representing the computed hash.
2573
2574@table @option
2575@item hash @var{algorithm}
2576Use the cryptographic hash function specified by the string @var{algorithm}.
2577Supported values include @code{MD5}, @code{murmur3}, @code{RIPEMD128},
2578@code{RIPEMD160}, @code{RIPEMD256}, @code{RIPEMD320}, @code{SHA160},
2579@code{SHA224}, @code{SHA256} (default), @code{SHA512/224}, @code{SHA512/256},
2580@code{SHA384}, @code{SHA512}, @code{CRC32} and @code{adler32}.
2581
2582@end table
2583
2584@subsection Examples
2585
2586To compute the SHA-256 hash of the input converted to raw audio and
2587video, and store it in the file @file{out.sha256}:
2588@example
2589ffmpeg -i INPUT -f streamhash out.sha256
2590@end example
2591
2592To print an MD5 hash to stdout use the command:
2593@example
2594ffmpeg -i INPUT -f streamhash -hash md5 -
2595@end example
2596
2597See also the @ref{hash} and @ref{framehash} muxers.
2598
2599@anchor{tee}
2600@section tee
2601
2602The tee muxer can be used to write the same data to several outputs, such as files or streams.
2603It can be used, for example, to stream a video over a network and save it to disk at the same time.
2604
2605It is different from specifying several outputs to the @command{ffmpeg}
2606command-line tool. With the tee muxer, the audio and video data will be encoded only once.
2607With conventional multiple outputs, multiple encoding operations in parallel are initiated,
2608which can be a very expensive process. The tee muxer is not useful when using the libavformat API
2609directly because it is then possible to feed the same packets to several muxers directly.
2610
2611Since the tee muxer does not represent any particular output format, ffmpeg cannot auto-select
2612output streams. So all streams intended for output must be specified using @code{-map}. See
2613the examples below.
2614
2615Some encoders may need different options depending on the output format;
2616the auto-detection of this can not work with the tee muxer, so they need to be explicitly specified.
2617The main example is the @option{global_header} flag.
2618
2619The slave outputs are specified in the file name given to the muxer,
2620separated by '|'. If any of the slave name contains the '|' separator,
2621leading or trailing spaces or any special character, those must be
2622escaped (see @ref{quoting_and_escaping,,the "Quoting and escaping"
2623section in the ffmpeg-utils(1) manual,ffmpeg-utils}).
2624
2625@subsection Options
2626
2627@table @option
2628
2629@item use_fifo @var{bool}
2630If set to 1, slave outputs will be processed in separate threads using the @ref{fifo}
2631muxer. This allows to compensate for different speed/latency/reliability of
2632outputs and setup transparent recovery. By default this feature is turned off.
2633
2634@item fifo_options
2635Options to pass to fifo pseudo-muxer instances. See @ref{fifo}.
2636
2637@end table
2638
2639Muxer options can be specified for each slave by prepending them as a list of
2640@var{key}=@var{value} pairs separated by ':', between square brackets. If
2641the options values contain a special character or the ':' separator, they
2642must be escaped; note that this is a second level escaping.
2643
2644The following special options are also recognized:
2645@table @option
2646@item f
2647Specify the format name. Required if it cannot be guessed from the
2648output URL.
2649
2650@item bsfs[/@var{spec}]
2651Specify a list of bitstream filters to apply to the specified
2652output.
2653
2654It is possible to specify to which streams a given bitstream filter
2655applies, by appending a stream specifier to the option separated by
2656@code{/}. @var{spec} must be a stream specifier (see @ref{Format
2657stream specifiers}).
2658
2659If the stream specifier is not specified, the bitstream filters will be
2660applied to all streams in the output. This will cause that output operation
2661to fail if the output contains streams to which the bitstream filter cannot
2662be applied e.g. @code{h264_mp4toannexb} being applied to an output containing an audio stream.
2663
2664Options for a bitstream filter must be specified in the form of @code{opt=value}.
2665
2666Several bitstream filters can be specified, separated by ",".
2667
2668@item use_fifo @var{bool}
2669This allows to override tee muxer use_fifo option for individual slave muxer.
2670
2671@item fifo_options
2672This allows to override tee muxer fifo_options for individual slave muxer.
2673See @ref{fifo}.
2674
2675@item select
2676Select the streams that should be mapped to the slave output,
2677specified by a stream specifier. If not specified, this defaults to
2678all the mapped streams. This will cause that output operation to fail
2679if the output format does not accept all mapped streams.
2680
2681You may use multiple stream specifiers separated by commas (@code{,}) e.g.: @code{a:0,v}
2682
2683@item onfail
2684Specify behaviour on output failure. This can be set to either @code{abort} (which is
2685default) or @code{ignore}. @code{abort} will cause whole process to fail in case of failure
2686on this slave output. @code{ignore} will ignore failure on this output, so other outputs
2687will continue without being affected.
2688@end table
2689
2690@subsection Examples
2691
2692@itemize
2693@item
2694Encode something and both archive it in a WebM file and stream it
2695as MPEG-TS over UDP:
2696@example
2697ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a
2698  "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
2699@end example
2700
2701@item
2702As above, but continue streaming even if output to local file fails
2703(for example local drive fills up):
2704@example
2705ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a
2706  "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
2707@end example
2708
2709@item
2710Use @command{ffmpeg} to encode the input, and send the output
2711to three different destinations. The @code{dump_extra} bitstream
2712filter is used to add extradata information to all the output video
2713keyframes packets, as requested by the MPEG-TS format. The select
2714option is applied to @file{out.aac} in order to make it contain only
2715audio packets.
2716@example
2717ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac
2718       -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac"
2719@end example
2720
2721@item
2722As above, but select only stream @code{a:1} for the audio output. Note
2723that a second level escaping must be performed, as ":" is a special
2724character used to separate options.
2725@example
2726ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac
2727       -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
2728@end example
2729@end itemize
2730
2731@section webm_chunk
2732
2733WebM Live Chunk Muxer.
2734
2735This muxer writes out WebM headers and chunks as separate files which can be
2736consumed by clients that support WebM Live streams via DASH.
2737
2738@subsection Options
2739
2740This muxer supports the following options:
2741
2742@table @option
2743@item chunk_start_index
2744Index of the first chunk (defaults to 0).
2745
2746@item header
2747Filename of the header where the initialization data will be written.
2748
2749@item audio_chunk_duration
2750Duration of each audio chunk in milliseconds (defaults to 5000).
2751@end table
2752
2753@subsection Example
2754@example
2755ffmpeg -f v4l2 -i /dev/video0 \
2756       -f alsa -i hw:0 \
2757       -map 0:0 \
2758       -c:v libvpx-vp9 \
2759       -s 640x360 -keyint_min 30 -g 30 \
2760       -f webm_chunk \
2761       -header webm_live_video_360.hdr \
2762       -chunk_start_index 1 \
2763       webm_live_video_360_%d.chk \
2764       -map 1:0 \
2765       -c:a libvorbis \
2766       -b:a 128k \
2767       -f webm_chunk \
2768       -header webm_live_audio_128.hdr \
2769       -chunk_start_index 1 \
2770       -audio_chunk_duration 1000 \
2771       webm_live_audio_128_%d.chk
2772@end example
2773
2774@section webm_dash_manifest
2775
2776WebM DASH Manifest muxer.
2777
2778This muxer implements the WebM DASH Manifest specification to generate the DASH
2779manifest XML. It also supports manifest generation for DASH live streams.
2780
2781For more information see:
2782
2783@itemize @bullet
2784@item
2785WebM DASH Specification: @url{https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification}
2786@item
2787ISO DASH Specification: @url{http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip}
2788@end itemize
2789
2790@subsection Options
2791
2792This muxer supports the following options:
2793
2794@table @option
2795@item adaptation_sets
2796This option has the following syntax: "id=x,streams=a,b,c id=y,streams=d,e" where x and y are the
2797unique identifiers of the adaptation sets and a,b,c,d and e are the indices of the corresponding
2798audio and video streams. Any number of adaptation sets can be added using this option.
2799
2800@item live
2801Set this to 1 to create a live stream DASH Manifest. Default: 0.
2802
2803@item chunk_start_index
2804Start index of the first chunk. This will go in the @samp{startNumber} attribute
2805of the @samp{SegmentTemplate} element in the manifest. Default: 0.
2806
2807@item chunk_duration_ms
2808Duration of each chunk in milliseconds. This will go in the @samp{duration}
2809attribute of the @samp{SegmentTemplate} element in the manifest. Default: 1000.
2810
2811@item utc_timing_url
2812URL of the page that will return the UTC timestamp in ISO format. This will go
2813in the @samp{value} attribute of the @samp{UTCTiming} element in the manifest.
2814Default: None.
2815
2816@item time_shift_buffer_depth
2817Smallest time (in seconds) shifting buffer for which any Representation is
2818guaranteed to be available. This will go in the @samp{timeShiftBufferDepth}
2819attribute of the @samp{MPD} element. Default: 60.
2820
2821@item minimum_update_period
2822Minimum update period (in seconds) of the manifest. This will go in the
2823@samp{minimumUpdatePeriod} attribute of the @samp{MPD} element. Default: 0.
2824
2825@end table
2826
2827@subsection Example
2828@example
2829ffmpeg -f webm_dash_manifest -i video1.webm \
2830       -f webm_dash_manifest -i video2.webm \
2831       -f webm_dash_manifest -i audio1.webm \
2832       -f webm_dash_manifest -i audio2.webm \
2833       -map 0 -map 1 -map 2 -map 3 \
2834       -c copy \
2835       -f webm_dash_manifest \
2836       -adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \
2837       manifest.xml
2838@end example
2839
2840@c man end MUXERS
2841