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