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
|