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