annotate ffmpeg/doc/muxers.texi @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents 6840f77b83aa
children
rev   line source
yading@10 1 @chapter Muxers
yading@10 2 @c man begin MUXERS
yading@10 3
yading@10 4 Muxers are configured elements in FFmpeg which allow writing
yading@10 5 multimedia streams to a particular type of file.
yading@10 6
yading@10 7 When you configure your FFmpeg build, all the supported muxers
yading@10 8 are enabled by default. You can list all available muxers using the
yading@10 9 configure option @code{--list-muxers}.
yading@10 10
yading@10 11 You can disable all the muxers with the configure option
yading@10 12 @code{--disable-muxers} and selectively enable / disable single muxers
yading@10 13 with the options @code{--enable-muxer=@var{MUXER}} /
yading@10 14 @code{--disable-muxer=@var{MUXER}}.
yading@10 15
yading@10 16 The option @code{-formats} of the ff* tools will display the list of
yading@10 17 enabled muxers.
yading@10 18
yading@10 19 A description of some of the currently available muxers follows.
yading@10 20
yading@10 21 @anchor{crc}
yading@10 22 @section crc
yading@10 23
yading@10 24 CRC (Cyclic Redundancy Check) testing format.
yading@10 25
yading@10 26 This muxer computes and prints the Adler-32 CRC of all the input audio
yading@10 27 and video frames. By default audio frames are converted to signed
yading@10 28 16-bit raw audio and video frames to raw video before computing the
yading@10 29 CRC.
yading@10 30
yading@10 31 The output of the muxer consists of a single line of the form:
yading@10 32 CRC=0x@var{CRC}, where @var{CRC} is a hexadecimal number 0-padded to
yading@10 33 8 digits containing the CRC for all the decoded input frames.
yading@10 34
yading@10 35 For example to compute the CRC of the input, and store it in the file
yading@10 36 @file{out.crc}:
yading@10 37 @example
yading@10 38 ffmpeg -i INPUT -f crc out.crc
yading@10 39 @end example
yading@10 40
yading@10 41 You can print the CRC to stdout with the command:
yading@10 42 @example
yading@10 43 ffmpeg -i INPUT -f crc -
yading@10 44 @end example
yading@10 45
yading@10 46 You can select the output format of each frame with @command{ffmpeg} by
yading@10 47 specifying the audio and video codec and format. For example to
yading@10 48 compute the CRC of the input audio converted to PCM unsigned 8-bit
yading@10 49 and the input video converted to MPEG-2 video, use the command:
yading@10 50 @example
yading@10 51 ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
yading@10 52 @end example
yading@10 53
yading@10 54 See also the @ref{framecrc} muxer.
yading@10 55
yading@10 56 @anchor{framecrc}
yading@10 57 @section framecrc
yading@10 58
yading@10 59 Per-packet CRC (Cyclic Redundancy Check) testing format.
yading@10 60
yading@10 61 This muxer computes and prints the Adler-32 CRC for each audio
yading@10 62 and video packet. By default audio frames are converted to signed
yading@10 63 16-bit raw audio and video frames to raw video before computing the
yading@10 64 CRC.
yading@10 65
yading@10 66 The output of the muxer consists of a line for each audio and video
yading@10 67 packet of the form:
yading@10 68 @example
yading@10 69 @var{stream_index}, @var{packet_dts}, @var{packet_pts}, @var{packet_duration}, @var{packet_size}, 0x@var{CRC}
yading@10 70 @end example
yading@10 71
yading@10 72 @var{CRC} is a hexadecimal number 0-padded to 8 digits containing the
yading@10 73 CRC of the packet.
yading@10 74
yading@10 75 For example to compute the CRC of the audio and video frames in
yading@10 76 @file{INPUT}, converted to raw audio and video packets, and store it
yading@10 77 in the file @file{out.crc}:
yading@10 78 @example
yading@10 79 ffmpeg -i INPUT -f framecrc out.crc
yading@10 80 @end example
yading@10 81
yading@10 82 To print the information to stdout, use the command:
yading@10 83 @example
yading@10 84 ffmpeg -i INPUT -f framecrc -
yading@10 85 @end example
yading@10 86
yading@10 87 With @command{ffmpeg}, you can select the output format to which the
yading@10 88 audio and video frames are encoded before computing the CRC for each
yading@10 89 packet by specifying the audio and video codec. For example, to
yading@10 90 compute the CRC of each decoded input audio frame converted to PCM
yading@10 91 unsigned 8-bit and of each decoded input video frame converted to
yading@10 92 MPEG-2 video, use the command:
yading@10 93 @example
yading@10 94 ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
yading@10 95 @end example
yading@10 96
yading@10 97 See also the @ref{crc} muxer.
yading@10 98
yading@10 99 @anchor{framemd5}
yading@10 100 @section framemd5
yading@10 101
yading@10 102 Per-packet MD5 testing format.
yading@10 103
yading@10 104 This muxer computes and prints the MD5 hash for each audio
yading@10 105 and video packet. By default audio frames are converted to signed
yading@10 106 16-bit raw audio and video frames to raw video before computing the
yading@10 107 hash.
yading@10 108
yading@10 109 The output of the muxer consists of a line for each audio and video
yading@10 110 packet of the form:
yading@10 111 @example
yading@10 112 @var{stream_index}, @var{packet_dts}, @var{packet_pts}, @var{packet_duration}, @var{packet_size}, @var{MD5}
yading@10 113 @end example
yading@10 114
yading@10 115 @var{MD5} is a hexadecimal number representing the computed MD5 hash
yading@10 116 for the packet.
yading@10 117
yading@10 118 For example to compute the MD5 of the audio and video frames in
yading@10 119 @file{INPUT}, converted to raw audio and video packets, and store it
yading@10 120 in the file @file{out.md5}:
yading@10 121 @example
yading@10 122 ffmpeg -i INPUT -f framemd5 out.md5
yading@10 123 @end example
yading@10 124
yading@10 125 To print the information to stdout, use the command:
yading@10 126 @example
yading@10 127 ffmpeg -i INPUT -f framemd5 -
yading@10 128 @end example
yading@10 129
yading@10 130 See also the @ref{md5} muxer.
yading@10 131
yading@10 132 @anchor{hls}
yading@10 133 @section hls
yading@10 134
yading@10 135 Apple HTTP Live Streaming muxer that segments MPEG-TS according to
yading@10 136 the HTTP Live Streaming specification.
yading@10 137
yading@10 138 It creates a playlist file and numbered segment files. The output
yading@10 139 filename specifies the playlist filename; the segment filenames
yading@10 140 receive the same basename as the playlist, a sequential number and
yading@10 141 a .ts extension.
yading@10 142
yading@10 143 @example
yading@10 144 ffmpeg -i in.nut out.m3u8
yading@10 145 @end example
yading@10 146
yading@10 147 @table @option
yading@10 148 @item -hls_time @var{seconds}
yading@10 149 Set the segment length in seconds.
yading@10 150 @item -hls_list_size @var{size}
yading@10 151 Set the maximum number of playlist entries.
yading@10 152 @item -hls_wrap @var{wrap}
yading@10 153 Set the number after which index wraps.
yading@10 154 @item -start_number @var{number}
yading@10 155 Start the sequence from @var{number}.
yading@10 156 @end table
yading@10 157
yading@10 158 @anchor{ico}
yading@10 159 @section ico
yading@10 160
yading@10 161 ICO file muxer.
yading@10 162
yading@10 163 Microsoft's icon file format (ICO) has some strict limitations that should be noted:
yading@10 164
yading@10 165 @itemize
yading@10 166 @item
yading@10 167 Size cannot exceed 256 pixels in any dimension
yading@10 168
yading@10 169 @item
yading@10 170 Only BMP and PNG images can be stored
yading@10 171
yading@10 172 @item
yading@10 173 If a BMP image is used, it must be one of the following pixel formats:
yading@10 174 @example
yading@10 175 BMP Bit Depth FFmpeg Pixel Format
yading@10 176 1bit pal8
yading@10 177 4bit pal8
yading@10 178 8bit pal8
yading@10 179 16bit rgb555le
yading@10 180 24bit bgr24
yading@10 181 32bit bgra
yading@10 182 @end example
yading@10 183
yading@10 184 @item
yading@10 185 If a BMP image is used, it must use the BITMAPINFOHEADER DIB header
yading@10 186
yading@10 187 @item
yading@10 188 If a PNG image is used, it must use the rgba pixel format
yading@10 189 @end itemize
yading@10 190
yading@10 191 @anchor{image2}
yading@10 192 @section image2
yading@10 193
yading@10 194 Image file muxer.
yading@10 195
yading@10 196 The image file muxer writes video frames to image files.
yading@10 197
yading@10 198 The output filenames are specified by a pattern, which can be used to
yading@10 199 produce sequentially numbered series of files.
yading@10 200 The pattern may contain the string "%d" or "%0@var{N}d", this string
yading@10 201 specifies the position of the characters representing a numbering in
yading@10 202 the filenames. If the form "%0@var{N}d" is used, the string
yading@10 203 representing the number in each filename is 0-padded to @var{N}
yading@10 204 digits. The literal character '%' can be specified in the pattern with
yading@10 205 the string "%%".
yading@10 206
yading@10 207 If the pattern contains "%d" or "%0@var{N}d", the first filename of
yading@10 208 the file list specified will contain the number 1, all the following
yading@10 209 numbers will be sequential.
yading@10 210
yading@10 211 The pattern may contain a suffix which is used to automatically
yading@10 212 determine the format of the image files to write.
yading@10 213
yading@10 214 For example the pattern "img-%03d.bmp" will specify a sequence of
yading@10 215 filenames of the form @file{img-001.bmp}, @file{img-002.bmp}, ...,
yading@10 216 @file{img-010.bmp}, etc.
yading@10 217 The pattern "img%%-%d.jpg" will specify a sequence of filenames of the
yading@10 218 form @file{img%-1.jpg}, @file{img%-2.jpg}, ..., @file{img%-10.jpg},
yading@10 219 etc.
yading@10 220
yading@10 221 The following example shows how to use @command{ffmpeg} for creating a
yading@10 222 sequence of files @file{img-001.jpeg}, @file{img-002.jpeg}, ...,
yading@10 223 taking one image every second from the input video:
yading@10 224 @example
yading@10 225 ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg'
yading@10 226 @end example
yading@10 227
yading@10 228 Note that with @command{ffmpeg}, if the format is not specified with the
yading@10 229 @code{-f} option and the output filename specifies an image file
yading@10 230 format, the image2 muxer is automatically selected, so the previous
yading@10 231 command can be written as:
yading@10 232 @example
yading@10 233 ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg'
yading@10 234 @end example
yading@10 235
yading@10 236 Note also that the pattern must not necessarily contain "%d" or
yading@10 237 "%0@var{N}d", for example to create a single image file
yading@10 238 @file{img.jpeg} from the input video you can employ the command:
yading@10 239 @example
yading@10 240 ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
yading@10 241 @end example
yading@10 242
yading@10 243 @table @option
yading@10 244 @item start_number @var{number}
yading@10 245 Start the sequence from @var{number}. Default value is 1. Must be a
yading@10 246 positive number.
yading@10 247
yading@10 248 @item -update @var{number}
yading@10 249 If @var{number} is nonzero, the filename will always be interpreted as just a
yading@10 250 filename, not a pattern, and this file will be continuously overwritten with new
yading@10 251 images.
yading@10 252
yading@10 253 @end table
yading@10 254
yading@10 255 The image muxer supports the .Y.U.V image file format. This format is
yading@10 256 special in that that each image frame consists of three files, for
yading@10 257 each of the YUV420P components. To read or write this image file format,
yading@10 258 specify the name of the '.Y' file. The muxer will automatically open the
yading@10 259 '.U' and '.V' files as required.
yading@10 260
yading@10 261 @anchor{md5}
yading@10 262 @section md5
yading@10 263
yading@10 264 MD5 testing format.
yading@10 265
yading@10 266 This muxer computes and prints the MD5 hash of all the input audio
yading@10 267 and video frames. By default audio frames are converted to signed
yading@10 268 16-bit raw audio and video frames to raw video before computing the
yading@10 269 hash.
yading@10 270
yading@10 271 The output of the muxer consists of a single line of the form:
yading@10 272 MD5=@var{MD5}, where @var{MD5} is a hexadecimal number representing
yading@10 273 the computed MD5 hash.
yading@10 274
yading@10 275 For example to compute the MD5 hash of the input converted to raw
yading@10 276 audio and video, and store it in the file @file{out.md5}:
yading@10 277 @example
yading@10 278 ffmpeg -i INPUT -f md5 out.md5
yading@10 279 @end example
yading@10 280
yading@10 281 You can print the MD5 to stdout with the command:
yading@10 282 @example
yading@10 283 ffmpeg -i INPUT -f md5 -
yading@10 284 @end example
yading@10 285
yading@10 286 See also the @ref{framemd5} muxer.
yading@10 287
yading@10 288 @section MOV/MP4/ISMV
yading@10 289
yading@10 290 The mov/mp4/ismv muxer supports fragmentation. Normally, a MOV/MP4
yading@10 291 file has all the metadata about all packets stored in one location
yading@10 292 (written at the end of the file, it can be moved to the start for
yading@10 293 better playback by adding @var{faststart} to the @var{movflags}, or
yading@10 294 using the @command{qt-faststart} tool). A fragmented
yading@10 295 file consists of a number of fragments, where packets and metadata
yading@10 296 about these packets are stored together. Writing a fragmented
yading@10 297 file has the advantage that the file is decodable even if the
yading@10 298 writing is interrupted (while a normal MOV/MP4 is undecodable if
yading@10 299 it is not properly finished), and it requires less memory when writing
yading@10 300 very long files (since writing normal MOV/MP4 files stores info about
yading@10 301 every single packet in memory until the file is closed). The downside
yading@10 302 is that it is less compatible with other applications.
yading@10 303
yading@10 304 Fragmentation is enabled by setting one of the AVOptions that define
yading@10 305 how to cut the file into fragments:
yading@10 306
yading@10 307 @table @option
yading@10 308 @item -moov_size @var{bytes}
yading@10 309 Reserves space for the moov atom at the beginning of the file instead of placing the
yading@10 310 moov atom at the end. If the space reserved is insufficient, muxing will fail.
yading@10 311 @item -movflags frag_keyframe
yading@10 312 Start a new fragment at each video keyframe.
yading@10 313 @item -frag_duration @var{duration}
yading@10 314 Create fragments that are @var{duration} microseconds long.
yading@10 315 @item -frag_size @var{size}
yading@10 316 Create fragments that contain up to @var{size} bytes of payload data.
yading@10 317 @item -movflags frag_custom
yading@10 318 Allow the caller to manually choose when to cut fragments, by
yading@10 319 calling @code{av_write_frame(ctx, NULL)} to write a fragment with
yading@10 320 the packets written so far. (This is only useful with other
yading@10 321 applications integrating libavformat, not from @command{ffmpeg}.)
yading@10 322 @item -min_frag_duration @var{duration}
yading@10 323 Don't create fragments that are shorter than @var{duration} microseconds long.
yading@10 324 @end table
yading@10 325
yading@10 326 If more than one condition is specified, fragments are cut when
yading@10 327 one of the specified conditions is fulfilled. The exception to this is
yading@10 328 @code{-min_frag_duration}, which has to be fulfilled for any of the other
yading@10 329 conditions to apply.
yading@10 330
yading@10 331 Additionally, the way the output file is written can be adjusted
yading@10 332 through a few other options:
yading@10 333
yading@10 334 @table @option
yading@10 335 @item -movflags empty_moov
yading@10 336 Write an initial moov atom directly at the start of the file, without
yading@10 337 describing any samples in it. Generally, an mdat/moov pair is written
yading@10 338 at the start of the file, as a normal MOV/MP4 file, containing only
yading@10 339 a short portion of the file. With this option set, there is no initial
yading@10 340 mdat atom, and the moov atom only describes the tracks but has
yading@10 341 a zero duration.
yading@10 342
yading@10 343 Files written with this option set do not work in QuickTime.
yading@10 344 This option is implicitly set when writing ismv (Smooth Streaming) files.
yading@10 345 @item -movflags separate_moof
yading@10 346 Write a separate moof (movie fragment) atom for each track. Normally,
yading@10 347 packets for all tracks are written in a moof atom (which is slightly
yading@10 348 more efficient), but with this option set, the muxer writes one moof/mdat
yading@10 349 pair for each track, making it easier to separate tracks.
yading@10 350
yading@10 351 This option is implicitly set when writing ismv (Smooth Streaming) files.
yading@10 352 @item -movflags faststart
yading@10 353 Run a second pass moving the moov atom on top of the file. This
yading@10 354 operation can take a while, and will not work in various situations such
yading@10 355 as fragmented output, thus it is not enabled by default.
yading@10 356 @item -movflags rtphint
yading@10 357 Add RTP hinting tracks to the output file.
yading@10 358 @end table
yading@10 359
yading@10 360 Smooth Streaming content can be pushed in real time to a publishing
yading@10 361 point on IIS with this muxer. Example:
yading@10 362 @example
yading@10 363 ffmpeg -re @var{<normal input/transcoding options>} -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
yading@10 364 @end example
yading@10 365
yading@10 366 @section mpegts
yading@10 367
yading@10 368 MPEG transport stream muxer.
yading@10 369
yading@10 370 This muxer implements ISO 13818-1 and part of ETSI EN 300 468.
yading@10 371
yading@10 372 The muxer options are:
yading@10 373
yading@10 374 @table @option
yading@10 375 @item -mpegts_original_network_id @var{number}
yading@10 376 Set the original_network_id (default 0x0001). This is unique identifier
yading@10 377 of a network in DVB. Its main use is in the unique identification of a
yading@10 378 service through the path Original_Network_ID, Transport_Stream_ID.
yading@10 379 @item -mpegts_transport_stream_id @var{number}
yading@10 380 Set the transport_stream_id (default 0x0001). This identifies a
yading@10 381 transponder in DVB.
yading@10 382 @item -mpegts_service_id @var{number}
yading@10 383 Set the service_id (default 0x0001) also known as program in DVB.
yading@10 384 @item -mpegts_pmt_start_pid @var{number}
yading@10 385 Set the first PID for PMT (default 0x1000, max 0x1f00).
yading@10 386 @item -mpegts_start_pid @var{number}
yading@10 387 Set the first PID for data packets (default 0x0100, max 0x0f00).
yading@10 388 @end table
yading@10 389
yading@10 390 The recognized metadata settings in mpegts muxer are @code{service_provider}
yading@10 391 and @code{service_name}. If they are not set the default for
yading@10 392 @code{service_provider} is "FFmpeg" and the default for
yading@10 393 @code{service_name} is "Service01".
yading@10 394
yading@10 395 @example
yading@10 396 ffmpeg -i file.mpg -c copy \
yading@10 397 -mpegts_original_network_id 0x1122 \
yading@10 398 -mpegts_transport_stream_id 0x3344 \
yading@10 399 -mpegts_service_id 0x5566 \
yading@10 400 -mpegts_pmt_start_pid 0x1500 \
yading@10 401 -mpegts_start_pid 0x150 \
yading@10 402 -metadata service_provider="Some provider" \
yading@10 403 -metadata service_name="Some Channel" \
yading@10 404 -y out.ts
yading@10 405 @end example
yading@10 406
yading@10 407 @section null
yading@10 408
yading@10 409 Null muxer.
yading@10 410
yading@10 411 This muxer does not generate any output file, it is mainly useful for
yading@10 412 testing or benchmarking purposes.
yading@10 413
yading@10 414 For example to benchmark decoding with @command{ffmpeg} you can use the
yading@10 415 command:
yading@10 416 @example
yading@10 417 ffmpeg -benchmark -i INPUT -f null out.null
yading@10 418 @end example
yading@10 419
yading@10 420 Note that the above command does not read or write the @file{out.null}
yading@10 421 file, but specifying the output file is required by the @command{ffmpeg}
yading@10 422 syntax.
yading@10 423
yading@10 424 Alternatively you can write the command as:
yading@10 425 @example
yading@10 426 ffmpeg -benchmark -i INPUT -f null -
yading@10 427 @end example
yading@10 428
yading@10 429 @section matroska
yading@10 430
yading@10 431 Matroska container muxer.
yading@10 432
yading@10 433 This muxer implements the matroska and webm container specs.
yading@10 434
yading@10 435 The recognized metadata settings in this muxer are:
yading@10 436
yading@10 437 @table @option
yading@10 438
yading@10 439 @item title=@var{title name}
yading@10 440 Name provided to a single track
yading@10 441 @end table
yading@10 442
yading@10 443 @table @option
yading@10 444
yading@10 445 @item language=@var{language name}
yading@10 446 Specifies the language of the track in the Matroska languages form
yading@10 447 @end table
yading@10 448
yading@10 449 @table @option
yading@10 450
yading@10 451 @item stereo_mode=@var{mode}
yading@10 452 Stereo 3D video layout of two views in a single video track
yading@10 453 @table @option
yading@10 454 @item mono
yading@10 455 video is not stereo
yading@10 456 @item left_right
yading@10 457 Both views are arranged side by side, Left-eye view is on the left
yading@10 458 @item bottom_top
yading@10 459 Both views are arranged in top-bottom orientation, Left-eye view is at bottom
yading@10 460 @item top_bottom
yading@10 461 Both views are arranged in top-bottom orientation, Left-eye view is on top
yading@10 462 @item checkerboard_rl
yading@10 463 Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first
yading@10 464 @item checkerboard_lr
yading@10 465 Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first
yading@10 466 @item row_interleaved_rl
yading@10 467 Each view is constituted by a row based interleaving, Right-eye view is first row
yading@10 468 @item row_interleaved_lr
yading@10 469 Each view is constituted by a row based interleaving, Left-eye view is first row
yading@10 470 @item col_interleaved_rl
yading@10 471 Both views are arranged in a column based interleaving manner, Right-eye view is first column
yading@10 472 @item col_interleaved_lr
yading@10 473 Both views are arranged in a column based interleaving manner, Left-eye view is first column
yading@10 474 @item anaglyph_cyan_red
yading@10 475 All frames are in anaglyph format viewable through red-cyan filters
yading@10 476 @item right_left
yading@10 477 Both views are arranged side by side, Right-eye view is on the left
yading@10 478 @item anaglyph_green_magenta
yading@10 479 All frames are in anaglyph format viewable through green-magenta filters
yading@10 480 @item block_lr
yading@10 481 Both eyes laced in one Block, Left-eye view is first
yading@10 482 @item block_rl
yading@10 483 Both eyes laced in one Block, Right-eye view is first
yading@10 484 @end table
yading@10 485 @end table
yading@10 486
yading@10 487 For example a 3D WebM clip can be created using the following command line:
yading@10 488 @example
yading@10 489 ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
yading@10 490 @end example
yading@10 491
yading@10 492 @section segment, stream_segment, ssegment
yading@10 493
yading@10 494 Basic stream segmenter.
yading@10 495
yading@10 496 The segmenter muxer outputs streams to a number of separate files of nearly
yading@10 497 fixed duration. Output filename pattern can be set in a fashion similar to
yading@10 498 @ref{image2}.
yading@10 499
yading@10 500 @code{stream_segment} is a variant of the muxer used to write to
yading@10 501 streaming output formats, i.e. which do not require global headers,
yading@10 502 and is recommended for outputting e.g. to MPEG transport stream segments.
yading@10 503 @code{ssegment} is a shorter alias for @code{stream_segment}.
yading@10 504
yading@10 505 Every segment starts with a keyframe of the selected reference stream,
yading@10 506 which is set through the @option{reference_stream} option.
yading@10 507
yading@10 508 Note that if you want accurate splitting for a video file, you need to
yading@10 509 make the input key frames correspond to the exact splitting times
yading@10 510 expected by the segmenter, or the segment muxer will start the new
yading@10 511 segment with the key frame found next after the specified start
yading@10 512 time.
yading@10 513
yading@10 514 The segment muxer works best with a single constant frame rate video.
yading@10 515
yading@10 516 Optionally it can generate a list of the created segments, by setting
yading@10 517 the option @var{segment_list}. The list type is specified by the
yading@10 518 @var{segment_list_type} option.
yading@10 519
yading@10 520 The segment muxer supports the following options:
yading@10 521
yading@10 522 @table @option
yading@10 523 @item reference_stream @var{specifier}
yading@10 524 Set the reference stream, as specified by the string @var{specifier}.
yading@10 525 If @var{specifier} is set to @code{auto}, the reference is choosen
yading@10 526 automatically. Otherwise it must be a stream specifier (see the ``Stream
yading@10 527 specifiers'' chapter in the ffmpeg manual) which specifies the
yading@10 528 reference stream. The default value is ``auto''.
yading@10 529
yading@10 530 @item segment_format @var{format}
yading@10 531 Override the inner container format, by default it is guessed by the filename
yading@10 532 extension.
yading@10 533
yading@10 534 @item segment_list @var{name}
yading@10 535 Generate also a listfile named @var{name}. If not specified no
yading@10 536 listfile is generated.
yading@10 537
yading@10 538 @item segment_list_flags @var{flags}
yading@10 539 Set flags affecting the segment list generation.
yading@10 540
yading@10 541 It currently supports the following flags:
yading@10 542 @table @var
yading@10 543 @item cache
yading@10 544 Allow caching (only affects M3U8 list files).
yading@10 545
yading@10 546 @item live
yading@10 547 Allow live-friendly file generation.
yading@10 548 @end table
yading@10 549
yading@10 550 Default value is @code{cache}.
yading@10 551
yading@10 552 @item segment_list_size @var{size}
yading@10 553 Update the list file so that it contains at most the last @var{size}
yading@10 554 segments. If 0 the list file will contain all the segments. Default
yading@10 555 value is 0.
yading@10 556
yading@10 557 @item segment_list type @var{type}
yading@10 558 Specify the format for the segment list file.
yading@10 559
yading@10 560 The following values are recognized:
yading@10 561 @table @option
yading@10 562 @item flat
yading@10 563 Generate a flat list for the created segments, one segment per line.
yading@10 564
yading@10 565 @item csv, ext
yading@10 566 Generate a list for the created segments, one segment per line,
yading@10 567 each line matching the format (comma-separated values):
yading@10 568 @example
yading@10 569 @var{segment_filename},@var{segment_start_time},@var{segment_end_time}
yading@10 570 @end example
yading@10 571
yading@10 572 @var{segment_filename} is the name of the output file generated by the
yading@10 573 muxer according to the provided pattern. CSV escaping (according to
yading@10 574 RFC4180) is applied if required.
yading@10 575
yading@10 576 @var{segment_start_time} and @var{segment_end_time} specify
yading@10 577 the segment start and end time expressed in seconds.
yading@10 578
yading@10 579 A list file with the suffix @code{".csv"} or @code{".ext"} will
yading@10 580 auto-select this format.
yading@10 581
yading@10 582 @code{ext} is deprecated in favor or @code{csv}.
yading@10 583
yading@10 584 @item ffconcat
yading@10 585 Generate an ffconcat file for the created segments. The resulting file
yading@10 586 can be read using the FFmpeg @ref{concat} demuxer.
yading@10 587
yading@10 588 A list file with the suffix @code{".ffcat"} or @code{".ffconcat"} will
yading@10 589 auto-select this format.
yading@10 590
yading@10 591 @item m3u8
yading@10 592 Generate an extended M3U8 file, version 3, compliant with
yading@10 593 @url{http://tools.ietf.org/id/draft-pantos-http-live-streaming}.
yading@10 594
yading@10 595 A list file with the suffix @code{".m3u8"} will auto-select this format.
yading@10 596 @end table
yading@10 597
yading@10 598 If not specified the type is guessed from the list file name suffix.
yading@10 599
yading@10 600 @item segment_time @var{time}
yading@10 601 Set segment duration to @var{time}, the value must be a duration
yading@10 602 specification. Default value is "2". See also the
yading@10 603 @option{segment_times} option.
yading@10 604
yading@10 605 Note that splitting may not be accurate, unless you force the
yading@10 606 reference stream key-frames at the given time. See the introductory
yading@10 607 notice and the examples below.
yading@10 608
yading@10 609 @item segment_time_delta @var{delta}
yading@10 610 Specify the accuracy time when selecting the start time for a
yading@10 611 segment, expressed as a duration specification. Default value is "0".
yading@10 612
yading@10 613 When delta is specified a key-frame will start a new segment if its
yading@10 614 PTS satisfies the relation:
yading@10 615 @example
yading@10 616 PTS >= start_time - time_delta
yading@10 617 @end example
yading@10 618
yading@10 619 This option is useful when splitting video content, which is always
yading@10 620 split at GOP boundaries, in case a key frame is found just before the
yading@10 621 specified split time.
yading@10 622
yading@10 623 In particular may be used in combination with the @file{ffmpeg} option
yading@10 624 @var{force_key_frames}. The key frame times specified by
yading@10 625 @var{force_key_frames} may not be set accurately because of rounding
yading@10 626 issues, with the consequence that a key frame time may result set just
yading@10 627 before the specified time. For constant frame rate videos a value of
yading@10 628 1/2*@var{frame_rate} should address the worst case mismatch between
yading@10 629 the specified time and the time set by @var{force_key_frames}.
yading@10 630
yading@10 631 @item segment_times @var{times}
yading@10 632 Specify a list of split points. @var{times} contains a list of comma
yading@10 633 separated duration specifications, in increasing order. See also
yading@10 634 the @option{segment_time} option.
yading@10 635
yading@10 636 @item segment_frames @var{frames}
yading@10 637 Specify a list of split video frame numbers. @var{frames} contains a
yading@10 638 list of comma separated integer numbers, in increasing order.
yading@10 639
yading@10 640 This option specifies to start a new segment whenever a reference
yading@10 641 stream key frame is found and the sequential number (starting from 0)
yading@10 642 of the frame is greater or equal to the next value in the list.
yading@10 643
yading@10 644 @item segment_wrap @var{limit}
yading@10 645 Wrap around segment index once it reaches @var{limit}.
yading@10 646
yading@10 647 @item segment_start_number @var{number}
yading@10 648 Set the sequence number of the first segment. Defaults to @code{0}.
yading@10 649
yading@10 650 @item reset_timestamps @var{1|0}
yading@10 651 Reset timestamps at the begin of each segment, so that each segment
yading@10 652 will start with near-zero timestamps. It is meant to ease the playback
yading@10 653 of the generated segments. May not work with some combinations of
yading@10 654 muxers/codecs. It is set to @code{0} by default.
yading@10 655 @end table
yading@10 656
yading@10 657 @subsection Examples
yading@10 658
yading@10 659 @itemize
yading@10 660 @item
yading@10 661 To remux the content of file @file{in.mkv} to a list of segments
yading@10 662 @file{out-000.nut}, @file{out-001.nut}, etc., and write the list of
yading@10 663 generated segments to @file{out.list}:
yading@10 664 @example
yading@10 665 ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.list out%03d.nut
yading@10 666 @end example
yading@10 667
yading@10 668 @item
yading@10 669 As the example above, but segment the input file according to the split
yading@10 670 points specified by the @var{segment_times} option:
yading@10 671 @example
yading@10 672 ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut
yading@10 673 @end example
yading@10 674
yading@10 675 @item
yading@10 676 As the example above, but use the @code{ffmpeg} @var{force_key_frames}
yading@10 677 option to force key frames in the input at the specified location, together
yading@10 678 with the segment option @var{segment_time_delta} to account for
yading@10 679 possible roundings operated when setting key frame times.
yading@10 680 @example
yading@10 681 ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \
yading@10 682 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
yading@10 683 @end example
yading@10 684 In order to force key frames on the input file, transcoding is
yading@10 685 required.
yading@10 686
yading@10 687 @item
yading@10 688 Segment the input file by splitting the input file according to the
yading@10 689 frame numbers sequence specified with the @var{segment_frames} option:
yading@10 690 @example
yading@10 691 ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
yading@10 692 @end example
yading@10 693
yading@10 694 @item
yading@10 695 To convert the @file{in.mkv} to TS segments using the @code{libx264}
yading@10 696 and @code{libfaac} encoders:
yading@10 697 @example
yading@10 698 ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a libfaac -f ssegment -segment_list out.list out%03d.ts
yading@10 699 @end example
yading@10 700
yading@10 701 @item
yading@10 702 Segment the input file, and create an M3U8 live playlist (can be used
yading@10 703 as live HLS source):
yading@10 704 @example
yading@10 705 ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \
yading@10 706 -segment_list_flags +live -segment_time 10 out%03d.mkv
yading@10 707 @end example
yading@10 708 @end itemize
yading@10 709
yading@10 710 @section mp3
yading@10 711
yading@10 712 The MP3 muxer writes a raw MP3 stream with an ID3v2 header at the beginning and
yading@10 713 optionally an ID3v1 tag at the end. ID3v2.3 and ID3v2.4 are supported, the
yading@10 714 @code{id3v2_version} option controls which one is used. The legacy ID3v1 tag is
yading@10 715 not written by default, but may be enabled with the @code{write_id3v1} option.
yading@10 716
yading@10 717 For seekable output the muxer also writes a Xing frame at the beginning, which
yading@10 718 contains the number of frames in the file. It is useful for computing duration
yading@10 719 of VBR files.
yading@10 720
yading@10 721 The muxer supports writing ID3v2 attached pictures (APIC frames). The pictures
yading@10 722 are supplied to the muxer in form of a video stream with a single packet. There
yading@10 723 can be any number of those streams, each will correspond to a single APIC frame.
yading@10 724 The stream metadata tags @var{title} and @var{comment} map to APIC
yading@10 725 @var{description} and @var{picture type} respectively. See
yading@10 726 @url{http://id3.org/id3v2.4.0-frames} for allowed picture types.
yading@10 727
yading@10 728 Note that the APIC frames must be written at the beginning, so the muxer will
yading@10 729 buffer the audio frames until it gets all the pictures. It is therefore advised
yading@10 730 to provide the pictures as soon as possible to avoid excessive buffering.
yading@10 731
yading@10 732 Examples:
yading@10 733
yading@10 734 Write an mp3 with an ID3v2.3 header and an ID3v1 footer:
yading@10 735 @example
yading@10 736 ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
yading@10 737 @end example
yading@10 738
yading@10 739 To attach a picture to an mp3 file select both the audio and the picture stream
yading@10 740 with @code{map}:
yading@10 741 @example
yading@10 742 ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1
yading@10 743 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
yading@10 744 @end example
yading@10 745
yading@10 746 @section ogg
yading@10 747
yading@10 748 Ogg container muxer.
yading@10 749
yading@10 750 @table @option
yading@10 751 @item -page_duration @var{duration}
yading@10 752 Preferred page duration, in microseconds. The muxer will attempt to create
yading@10 753 pages that are approximately @var{duration} microseconds long. This allows the
yading@10 754 user to compromise between seek granularity and container overhead. The default
yading@10 755 is 1 second. A value of 0 will fill all segments, making pages as large as
yading@10 756 possible. A value of 1 will effectively use 1 packet-per-page in most
yading@10 757 situations, giving a small seek granularity at the cost of additional container
yading@10 758 overhead.
yading@10 759 @end table
yading@10 760
yading@10 761 @section tee
yading@10 762
yading@10 763 The tee muxer can be used to write the same data to several files or any
yading@10 764 other kind of muxer. It can be used, for example, to both stream a video to
yading@10 765 the network and save it to disk at the same time.
yading@10 766
yading@10 767 It is different from specifying several outputs to the @command{ffmpeg}
yading@10 768 command-line tool because the audio and video data will be encoded only once
yading@10 769 with the tee muxer; encoding can be a very expensive process. It is not
yading@10 770 useful when using the libavformat API directly because it is then possible
yading@10 771 to feed the same packets to several muxers directly.
yading@10 772
yading@10 773 The slave outputs are specified in the file name given to the muxer,
yading@10 774 separated by '|'. If any of the slave name contains the '|' separator,
yading@10 775 leading or trailing spaces or any special character, it must be
yading@10 776 escaped (see the ``Quoting and escaping'' section in the ffmpeg-utils
yading@10 777 manual).
yading@10 778
yading@10 779 Options can be specified for each slave by prepending them as a list of
yading@10 780 @var{key}=@var{value} pairs separated by ':', between square brackets. If
yading@10 781 the options values contain a special character or the ':' separator, they
yading@10 782 must be escaped; note that this is a second level escaping.
yading@10 783
yading@10 784 Example: encode something and both archive it in a WebM file and stream it
yading@10 785 as MPEG-TS over UDP (the streams need to be explicitly mapped):
yading@10 786
yading@10 787 @example
yading@10 788 ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a
yading@10 789 "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
yading@10 790 @end example
yading@10 791
yading@10 792 Note: some codecs may need different options depending on the output format;
yading@10 793 the auto-detection of this can not work with the tee muxer. The main example
yading@10 794 is the @option{global_header} flag.
yading@10 795
yading@10 796 @c man end MUXERS