|
=encoding utf8 |
|
|
|
=head1 NAME |
|
|
|
ffmpeg-formats - FFmpeg formats |
|
|
|
=head1 DESCRIPTION |
|
|
|
|
|
This document describes the supported formats (muxers and demuxers) |
|
provided by the libavformat library. |
|
|
|
|
|
|
|
=head1 FORMAT OPTIONS |
|
|
|
|
|
The libavformat library provides some generic global options, which |
|
can be set on all the muxers and demuxers. In addition each muxer or |
|
demuxer may support so-called private options, which are specific for |
|
that component. |
|
|
|
Options may be set by specifying -I<option> I<value> in the |
|
FFmpeg tools, or by setting the value explicitly in the |
|
C<AVFormatContext> options or using the F<libavutil/opt.h> API |
|
for programmatic use. |
|
|
|
The list of supported options follows: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<avioflags> I<flags> B<(>I<input/output>B<)> |
|
|
|
Possible values: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<direct> |
|
|
|
Reduce buffering. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<probesize> I<integer> B<(>I<input>B<)> |
|
|
|
Set probing size in bytes, i.e. the size of the data to analyze to get |
|
stream information. A higher value will enable detecting more |
|
information in case it is dispersed into the stream, but will increase |
|
latency. Must be an integer not lesser than 32. It is 5000000 by default. |
|
|
|
|
|
=item B<max_probe_packets> I<integer> B<(>I<input>B<)> |
|
|
|
Set the maximum number of buffered packets when probing a codec. |
|
Default is 2500 packets. |
|
|
|
|
|
=item B<packetsize> I<integer> B<(>I<output>B<)> |
|
|
|
Set packet size. |
|
|
|
|
|
=item B<fflags> I<flags> |
|
|
|
Set format flags. Some are implemented for a limited number of formats. |
|
|
|
Possible values for input files: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<discardcorrupt> |
|
|
|
Discard corrupted packets. |
|
|
|
=item B<fastseek> |
|
|
|
Enable fast, but inaccurate seeks for some formats. |
|
|
|
=item B<genpts> |
|
|
|
Generate missing PTS if DTS is present. |
|
|
|
=item B<igndts> |
|
|
|
Ignore DTS if PTS is set. Inert when nofillin is set. |
|
|
|
=item B<ignidx> |
|
|
|
Ignore index. |
|
|
|
=item B<nobuffer> |
|
|
|
Reduce the latency introduced by buffering during initial input streams analysis. |
|
|
|
=item B<nofillin> |
|
|
|
Do not fill in missing values in packet fields that can be exactly calculated. |
|
|
|
=item B<noparse> |
|
|
|
Disable AVParsers, this needs C<+nofillin> too. |
|
|
|
=item B<sortdts> |
|
|
|
Try to interleave output packets by DTS. At present, available only for AVIs with an index. |
|
|
|
=back |
|
|
|
|
|
Possible values for output files: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<autobsf> |
|
|
|
Automatically apply bitstream filters as required by the output format. Enabled by default. |
|
|
|
=item B<bitexact> |
|
|
|
Only write platform-, build- and time-independent data. |
|
This ensures that file and data checksums are reproducible and match between |
|
platforms. Its primary use is for regression testing. |
|
|
|
=item B<flush_packets> |
|
|
|
Write out packets immediately. |
|
|
|
=item B<shortest> |
|
|
|
Stop muxing at the end of the shortest stream. |
|
It may be needed to increase max_interleave_delta to avoid flushing the longer |
|
streams before EOF. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<seek2any> I<integer> B<(>I<input>B<)> |
|
|
|
Allow seeking to non-keyframes on demuxer level when supported if set to 1. |
|
Default is 0. |
|
|
|
|
|
=item B<analyzeduration> I<integer> B<(>I<input>B<)> |
|
|
|
Specify how many microseconds are analyzed to probe the input. A |
|
higher value will enable detecting more accurate information, but will |
|
increase latency. It defaults to 5,000,000 microseconds = 5 seconds. |
|
|
|
|
|
=item B<cryptokey> I<hexadecimal string> B<(>I<input>B<)> |
|
|
|
Set decryption key. |
|
|
|
|
|
=item B<indexmem> I<integer> B<(>I<input>B<)> |
|
|
|
Set max memory used for timestamp index (per stream). |
|
|
|
|
|
=item B<rtbufsize> I<integer> B<(>I<input>B<)> |
|
|
|
Set max memory used for buffering real-time frames. |
|
|
|
|
|
=item B<fdebug> I<flags> B<(>I<input/output>B<)> |
|
|
|
Print specific debug info. |
|
|
|
Possible values: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<ts> |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=item B<max_delay> I<integer> B<(>I<input/output>B<)> |
|
|
|
Set maximum muxing or demuxing delay in microseconds. |
|
|
|
|
|
=item B<fpsprobesize> I<integer> B<(>I<input>B<)> |
|
|
|
Set number of frames used to probe fps. |
|
|
|
|
|
=item B<audio_preload> I<integer> B<(>I<output>B<)> |
|
|
|
Set microseconds by which audio packets should be interleaved earlier. |
|
|
|
|
|
=item B<chunk_duration> I<integer> B<(>I<output>B<)> |
|
|
|
Set microseconds for each chunk. |
|
|
|
|
|
=item B<chunk_size> I<integer> B<(>I<output>B<)> |
|
|
|
Set size in bytes for each chunk. |
|
|
|
|
|
=item B<err_detect, f_err_detect> I<flags> B<(>I<input>B<)> |
|
|
|
Set error detection flags. C<f_err_detect> is deprecated and |
|
should be used only via the B<ffmpeg> tool. |
|
|
|
Possible values: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<crccheck> |
|
|
|
Verify embedded CRCs. |
|
|
|
=item B<bitstream> |
|
|
|
Detect bitstream specification deviations. |
|
|
|
=item B<buffer> |
|
|
|
Detect improper bitstream length. |
|
|
|
=item B<explode> |
|
|
|
Abort decoding on minor error detection. |
|
|
|
=item B<careful> |
|
|
|
Consider things that violate the spec and have not been seen in the |
|
wild as errors. |
|
|
|
=item B<compliant> |
|
|
|
Consider all spec non compliancies as errors. |
|
|
|
=item B<aggressive> |
|
|
|
Consider things that a sane encoder should not do as an error. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<max_interleave_delta> I<integer> B<(>I<output>B<)> |
|
|
|
Set maximum buffering duration for interleaving. The duration is |
|
expressed in microseconds, and defaults to 10000000 (10 seconds). |
|
|
|
To ensure all the streams are interleaved correctly, libavformat will |
|
wait until it has at least one packet for each stream before actually |
|
writing any packets to the output file. When some streams are |
|
"sparse" (i.e. there are large gaps between successive packets), this |
|
can result in excessive buffering. |
|
|
|
This field specifies the maximum difference between the timestamps of the |
|
first and the last packet in the muxing queue, above which libavformat |
|
will output a packet regardless of whether it has queued a packet for all |
|
the streams. |
|
|
|
If set to 0, libavformat will continue buffering packets until it has |
|
a packet for each stream, regardless of the maximum timestamp |
|
difference between the buffered packets. |
|
|
|
|
|
=item B<use_wallclock_as_timestamps> I<integer> B<(>I<input>B<)> |
|
|
|
Use wallclock as timestamps if set to 1. Default is 0. |
|
|
|
|
|
=item B<avoid_negative_ts> I<integer> B<(>I<output>B<)> |
|
|
|
|
|
Possible values: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<make_non_negative> |
|
|
|
Shift timestamps to make them non-negative. |
|
Also note that this affects only leading negative timestamps, and not |
|
non-monotonic negative timestamps. |
|
|
|
=item B<make_zero> |
|
|
|
Shift timestamps so that the first timestamp is 0. |
|
|
|
=item B<auto (default)> |
|
|
|
Enables shifting when required by the target format. |
|
|
|
=item B<disabled> |
|
|
|
Disables shifting of timestamp. |
|
|
|
=back |
|
|
|
|
|
When shifting is enabled, all output timestamps are shifted by the |
|
same amount. Audio, video, and subtitles desynching and relative |
|
timestamp differences are preserved compared to how they would have |
|
been without shifting. |
|
|
|
|
|
=item B<skip_initial_bytes> I<integer> B<(>I<input>B<)> |
|
|
|
Set number of bytes to skip before reading header and frames if set to 1. |
|
Default is 0. |
|
|
|
|
|
=item B<correct_ts_overflow> I<integer> B<(>I<input>B<)> |
|
|
|
Correct single timestamp overflows if set to 1. Default is 1. |
|
|
|
|
|
=item B<flush_packets> I<integer> B<(>I<output>B<)> |
|
|
|
Flush the underlying I/O stream after each packet. Default is -1 (auto), which |
|
means that the underlying protocol will decide, 1 enables it, and has the |
|
effect of reducing the latency, 0 disables it and may increase IO throughput in |
|
some cases. |
|
|
|
|
|
=item B<output_ts_offset> I<offset> B<(>I<output>B<)> |
|
|
|
Set the output time offset. |
|
|
|
I<offset> must be a time duration specification, |
|
see B<the Time duration section in the ffmpeg-utils(1) manual>. |
|
|
|
The offset is added by the muxer to the output timestamps. |
|
|
|
Specifying a positive offset means that the corresponding streams are |
|
delayed bt the time duration specified in I<offset>. Default value |
|
is C<0> (meaning that no offset is applied). |
|
|
|
|
|
=item B<format_whitelist> I<list> B<(>I<input>B<)> |
|
|
|
"," separated list of allowed demuxers. By default all are allowed. |
|
|
|
|
|
=item B<dump_separator> I<string> B<(>I<input>B<)> |
|
|
|
Separator used to separate the fields printed on the command line about the |
|
Stream parameters. |
|
For example, to separate the fields with newlines and indentation: |
|
|
|
ffprobe -dump_separator " |
|
" -i ~/videos/matrixbench_mpeg2.mpg |
|
|
|
|
|
|
|
=item B<max_streams> I<integer> B<(>I<input>B<)> |
|
|
|
Specifies the maximum number of streams. This can be used to reject files that |
|
would require too many resources due to a large number of streams. |
|
|
|
|
|
=item B<skip_estimate_duration_from_pts> I<bool> B<(>I<input>B<)> |
|
|
|
Skip estimation of input duration when calculated using PTS. |
|
At present, applicable for MPEG-PS and MPEG-TS. |
|
|
|
|
|
=item B<strict, f_strict> I<integer> B<(>I<input/output>B<)> |
|
|
|
Specify how strictly to follow the standards. C<f_strict> is deprecated and |
|
should be used only via the B<ffmpeg> tool. |
|
|
|
Possible values: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<very> |
|
|
|
strictly conform to an older more strict version of the spec or reference software |
|
|
|
=item B<strict> |
|
|
|
strictly conform to all the things in the spec no matter what consequences |
|
|
|
=item B<normal> |
|
|
|
|
|
|
|
=item B<unofficial> |
|
|
|
allow unofficial extensions |
|
|
|
=item B<experimental> |
|
|
|
allow non standardized experimental things, experimental |
|
(unfinished/work in progress/not well tested) decoders and encoders. |
|
Note: experimental decoders can pose a security risk, do not use this for |
|
decoding untrusted input. |
|
|
|
=back |
|
|
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
|
|
=head2 Format stream specifiers |
|
|
|
|
|
Format stream specifiers allow selection of one or more streams that |
|
match specific properties. |
|
|
|
The exact semantics of stream specifiers is defined by the |
|
C<avformat_match_stream_specifier()> function declared in the |
|
F<libavformat/avformat.h> header and documented in the |
|
B<Stream specifiers section in the ffmpeg(1) manual>. |
|
|
|
|
|
=head1 DEMUXERS |
|
|
|
|
|
Demuxers are configured elements in FFmpeg that can read the |
|
multimedia streams from a particular type of file. |
|
|
|
When you configure your FFmpeg build, all the supported demuxers |
|
are enabled by default. You can list all available ones using the |
|
configure option C<--list-demuxers>. |
|
|
|
You can disable all the demuxers using the configure option |
|
C<--disable-demuxers>, and selectively enable a single demuxer with |
|
the option C<--enable-demuxer=I<DEMUXER>>, or disable it |
|
with the option C<--disable-demuxer=I<DEMUXER>>. |
|
|
|
The option C<-demuxers> of the ff* tools will display the list of |
|
enabled demuxers. Use C<-formats> to view a combined list of |
|
enabled demuxers and muxers. |
|
|
|
The description of some of the currently available demuxers follows. |
|
|
|
|
|
=head2 aa |
|
|
|
|
|
Audible Format 2, 3, and 4 demuxer. |
|
|
|
This demuxer is used to demux Audible Format 2, 3, and 4 (.aa) files. |
|
|
|
|
|
=head2 aac |
|
|
|
|
|
Raw Audio Data Transport Stream AAC demuxer. |
|
|
|
This demuxer is used to demux an ADTS input containing a single AAC stream |
|
alongwith any ID3v1/2 or APE tags in it. |
|
|
|
|
|
=head2 apng |
|
|
|
|
|
Animated Portable Network Graphics demuxer. |
|
|
|
This demuxer is used to demux APNG files. |
|
All headers, but the PNG signature, up to (but not including) the first |
|
fcTL chunk are transmitted as extradata. |
|
Frames are then split as being all the chunks between two fcTL ones, or |
|
between the last fcTL and IEND chunks. |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<-ignore_loop> I<bool> |
|
|
|
Ignore the loop variable in the file if set. Default is enabled. |
|
|
|
|
|
=item B<-max_fps> I<int> |
|
|
|
Maximum framerate in frames per second. Default of 0 imposes no limit. |
|
|
|
|
|
=item B<-default_fps> I<int> |
|
|
|
Default framerate in frames per second when none is specified in the file |
|
(0 meaning as fast as possible). Default is 15. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 asf |
|
|
|
|
|
Advanced Systems Format demuxer. |
|
|
|
This demuxer is used to demux ASF files and MMS network streams. |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<-no_resync_search> I<bool> |
|
|
|
Do not try to resynchronize by looking for a certain optional start code. |
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 concat |
|
|
|
|
|
Virtual concatenation script demuxer. |
|
|
|
This demuxer reads a list of files and other directives from a text file and |
|
demuxes them one after the other, as if all their packets had been muxed |
|
together. |
|
|
|
The timestamps in the files are adjusted so that the first file starts at 0 |
|
and each next file starts where the previous one finishes. Note that it is |
|
done globally and may cause gaps if all streams do not have exactly the same |
|
length. |
|
|
|
All files must have the same streams (same codecs, same time base, etc.). |
|
|
|
The duration of each file is used to adjust the timestamps of the next file: |
|
if the duration is incorrect (because it was computed using the bit-rate or |
|
because the file is truncated, for example), it can cause artifacts. The |
|
C<duration> directive can be used to override the duration stored in |
|
each file. |
|
|
|
|
|
=head3 Syntax |
|
|
|
|
|
The script is a text file in extended-ASCII, with one directive per line. |
|
Empty lines, leading spaces and lines starting with '#' are ignored. The |
|
following directive is recognized: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<C<file I<path>>> |
|
|
|
Path to a file to read; special characters and spaces must be escaped with |
|
backslash or single quotes. |
|
|
|
All subsequent file-related directives apply to that file. |
|
|
|
|
|
=item B<C<ffconcat version 1.0>> |
|
|
|
Identify the script type and version. |
|
|
|
To make FFmpeg recognize the format automatically, this directive must |
|
appear exactly as is (no extra space or byte-order-mark) on the very first |
|
line of the script. |
|
|
|
|
|
=item B<C<duration I<dur>>> |
|
|
|
Duration of the file. This information can be specified from the file; |
|
specifying it here may be more efficient or help if the information from the |
|
file is not available or accurate. |
|
|
|
If the duration is set for all files, then it is possible to seek in the |
|
whole concatenated video. |
|
|
|
|
|
=item B<C<inpoint I<timestamp>>> |
|
|
|
In point of the file. When the demuxer opens the file it instantly seeks to the |
|
specified timestamp. Seeking is done so that all streams can be presented |
|
successfully at In point. |
|
|
|
This directive works best with intra frame codecs, because for non-intra frame |
|
ones you will usually get extra packets before the actual In point and the |
|
decoded content will most likely contain frames before In point too. |
|
|
|
For each file, packets before the file In point will have timestamps less than |
|
the calculated start timestamp of the file (negative in case of the first |
|
file), and the duration of the files (if not specified by the C<duration> |
|
directive) will be reduced based on their specified In point. |
|
|
|
Because of potential packets before the specified In point, packet timestamps |
|
may overlap between two concatenated files. |
|
|
|
|
|
=item B<C<outpoint I<timestamp>>> |
|
|
|
Out point of the file. When the demuxer reaches the specified decoding |
|
timestamp in any of the streams, it handles it as an end of file condition and |
|
skips the current and all the remaining packets from all streams. |
|
|
|
Out point is exclusive, which means that the demuxer will not output packets |
|
with a decoding timestamp greater or equal to Out point. |
|
|
|
This directive works best with intra frame codecs and formats where all streams |
|
are tightly interleaved. For non-intra frame codecs you will usually get |
|
additional packets with presentation timestamp after Out point therefore the |
|
decoded content will most likely contain frames after Out point too. If your |
|
streams are not tightly interleaved you may not get all the packets from all |
|
streams before Out point and you may only will be able to decode the earliest |
|
stream until Out point. |
|
|
|
The duration of the files (if not specified by the C<duration> |
|
directive) will be reduced based on their specified Out point. |
|
|
|
|
|
=item B<C<file_packet_metadata I<key=value>>> |
|
|
|
Metadata of the packets of the file. The specified metadata will be set for |
|
each file packet. You can specify this directive multiple times to add multiple |
|
metadata entries. |
|
This directive is deprecated, use C<file_packet_meta> instead. |
|
|
|
|
|
=item B<C<file_packet_meta I<key> I<value>>> |
|
|
|
Metadata of the packets of the file. The specified metadata will be set for |
|
each file packet. You can specify this directive multiple times to add multiple |
|
metadata entries. |
|
|
|
|
|
=item B<C<option I<key> I<value>>> |
|
|
|
Option to access, open and probe the file. |
|
Can be present multiple times. |
|
|
|
|
|
=item B<C<stream>> |
|
|
|
Introduce a stream in the virtual file. |
|
All subsequent stream-related directives apply to the last introduced |
|
stream. |
|
Some streams properties must be set in order to allow identifying the |
|
matching streams in the subfiles. |
|
If no streams are defined in the script, the streams from the first file are |
|
copied. |
|
|
|
|
|
=item B<C<exact_stream_id I<id>>> |
|
|
|
Set the id of the stream. |
|
If this directive is given, the string with the corresponding id in the |
|
subfiles will be used. |
|
This is especially useful for MPEG-PS (VOB) files, where the order of the |
|
streams is not reliable. |
|
|
|
|
|
=item B<C<stream_meta I<key> I<value>>> |
|
|
|
Metadata for the stream. |
|
Can be present multiple times. |
|
|
|
|
|
=item B<C<stream_codec I<value>>> |
|
|
|
Codec for the stream. |
|
|
|
|
|
=item B<C<stream_extradata I<hex_string>>> |
|
|
|
Extradata for the string, encoded in hexadecimal. |
|
|
|
|
|
=item B<C<chapter I<id> I<start> I<end>>> |
|
|
|
Add a chapter. I<id> is an unique identifier, possibly small and |
|
consecutive. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Options |
|
|
|
|
|
This demuxer accepts the following option: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<safe> |
|
|
|
If set to 1, reject unsafe file paths and directives. |
|
A file path is considered safe if it |
|
does not contain a protocol specification and is relative and all components |
|
only contain characters from the portable character set (letters, digits, |
|
period, underscore and hyphen) and have no period at the beginning of a |
|
component. |
|
|
|
If set to 0, any file name is accepted. |
|
|
|
The default is 1. |
|
|
|
|
|
=item B<auto_convert> |
|
|
|
If set to 1, try to perform automatic conversions on packet data to make the |
|
streams concatenable. |
|
The default is 1. |
|
|
|
Currently, the only conversion is adding the h264_mp4toannexb bitstream |
|
filter to H.264 streams in MP4 format. This is necessary in particular if |
|
there are resolution changes. |
|
|
|
|
|
=item B<segment_time_metadata> |
|
|
|
If set to 1, every packet will contain the I<lavf.concat.start_time> and the |
|
I<lavf.concat.duration> packet metadata values which are the start_time and |
|
the duration of the respective file segments in the concatenated output |
|
expressed in microseconds. The duration metadata is only set if it is known |
|
based on the concat file. |
|
The default is 0. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item * |
|
|
|
Use absolute filenames and include some comments: |
|
|
|
# my first filename |
|
file /mnt/share/file-1.wav |
|
# my second filename including whitespace |
|
file '/mnt/share/file 2.wav' |
|
# my third filename including whitespace plus single quote |
|
file '/mnt/share/file 3'\''.wav' |
|
|
|
|
|
|
|
=item * |
|
|
|
Allow for input format auto-probing, use safe filenames and set the duration of |
|
the first file: |
|
|
|
ffconcat version 1.0 |
|
|
|
file file-1.wav |
|
duration 20.0 |
|
|
|
file subdir/file-2.wav |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 dash |
|
|
|
|
|
Dynamic Adaptive Streaming over HTTP demuxer. |
|
|
|
This demuxer presents all AVStreams found in the manifest. |
|
By setting the discard flags on AVStreams the caller can decide |
|
which streams to actually receive. |
|
Each stream mirrors the C<id> and C<bandwidth> properties from the |
|
C<E<lt>RepresentationE<gt>> as metadata keys named "id" and "variant_bitrate" respectively. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
This demuxer accepts the following option: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<cenc_decryption_key> |
|
|
|
16-byte key, in hex, to decrypt files encrypted using ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 ea |
|
|
|
|
|
Electronic Arts Multimedia format demuxer. |
|
|
|
This format is used by various Electronic Arts games. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<merge_alpha> I<bool> |
|
|
|
|
|
Normally the VP6 alpha channel (if exists) is returned as a secondary video |
|
stream, by setting this option you can make the demuxer return a single video |
|
stream which contains the alpha channel in addition to the ordinary video. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 imf |
|
|
|
|
|
Interoperable Master Format demuxer. |
|
|
|
This demuxer presents audio and video streams found in an IMF Composition, as |
|
specified in E<lt>B<https://doi.org/10.5594/SMPTE.ST2067-2.2020>E<gt>. |
|
|
|
|
|
ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ... |
|
|
|
|
|
If C<-assetmaps> is not specified, the demuxer looks for a file called |
|
F<ASSETMAP.xml> in the same directory as the CPL. |
|
|
|
|
|
=head2 flv, live_flv, kux |
|
|
|
|
|
Adobe Flash Video Format demuxer. |
|
|
|
This demuxer is used to demux FLV files and RTMP network streams. In case of live network streams, if you force format, you may use live_flv option instead of flv to survive timestamp discontinuities. |
|
KUX is a flv variant used on the Youku platform. |
|
|
|
|
|
ffmpeg -f flv -i myfile.flv ... |
|
ffmpeg -f live_flv -i rtmp://<any.server>/anything/key .... |
|
|
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<-flv_metadata> I<bool> |
|
|
|
Allocate the streams according to the onMetaData array content. |
|
|
|
|
|
=item B<-flv_ignore_prevtag> I<bool> |
|
|
|
Ignore the size of previous tag value. |
|
|
|
|
|
=item B<-flv_full_metadata> I<bool> |
|
|
|
Output all context of the onMetadata. |
|
|
|
=back |
|
|
|
|
|
|
|
=head2 gif |
|
|
|
|
|
Animated GIF demuxer. |
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<min_delay> |
|
|
|
Set the minimum valid delay between frames in hundredths of seconds. |
|
Range is 0 to 6000. Default value is 2. |
|
|
|
|
|
=item B<max_gif_delay> |
|
|
|
Set the maximum valid delay between frames in hundredth of seconds. |
|
Range is 0 to 65535. Default value is 65535 (nearly eleven minutes), |
|
the maximum value allowed by the specification. |
|
|
|
|
|
=item B<default_delay> |
|
|
|
Set the default delay between frames in hundredths of seconds. |
|
Range is 0 to 6000. Default value is 10. |
|
|
|
|
|
=item B<ignore_loop> |
|
|
|
GIF files can contain information to loop a certain number of times (or |
|
infinitely). If B<ignore_loop> is set to 1, then the loop setting |
|
from the input will be ignored and looping will not occur. If set to 0, |
|
then looping will occur and will cycle the number of times according to |
|
the GIF. Default value is 1. |
|
|
|
=back |
|
|
|
|
|
For example, with the overlay filter, place an infinitely looping GIF |
|
over another video: |
|
|
|
ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv |
|
|
|
|
|
Note that in the above example the shortest option for overlay filter is |
|
used to end the output video at the length of the shortest input file, |
|
which in this case is F<input.mp4> as the GIF in this example loops |
|
infinitely. |
|
|
|
|
|
=head2 hls |
|
|
|
|
|
HLS demuxer |
|
|
|
Apple HTTP Live Streaming demuxer. |
|
|
|
This demuxer presents all AVStreams from all variant streams. |
|
The id field is set to the bitrate variant index number. By setting |
|
the discard flags on AVStreams (by pressing 'a' or 'v' in ffplay), |
|
the caller can decide which variant streams to actually receive. |
|
The total bitrate of the variant that the stream belongs to is |
|
available in a metadata key named "variant_bitrate". |
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<live_start_index> |
|
|
|
segment index to start live streams at (negative values are from the end). |
|
|
|
|
|
=item B<prefer_x_start> |
|
|
|
prefer to use #EXT-X-START if it's in playlist instead of live_start_index. |
|
|
|
|
|
=item B<allowed_extensions> |
|
|
|
',' separated list of file extensions that hls is allowed to access. |
|
|
|
|
|
=item B<max_reload> |
|
|
|
Maximum number of times a insufficient list is attempted to be reloaded. |
|
Default value is 1000. |
|
|
|
|
|
=item B<m3u8_hold_counters> |
|
|
|
The maximum number of times to load m3u8 when it refreshes without new segments. |
|
Default value is 1000. |
|
|
|
|
|
=item B<http_persistent> |
|
|
|
Use persistent HTTP connections. Applicable only for HTTP streams. |
|
Enabled by default. |
|
|
|
|
|
=item B<http_multiple> |
|
|
|
Use multiple HTTP connections for downloading HTTP segments. |
|
Enabled by default for HTTP/1.1 servers. |
|
|
|
|
|
=item B<http_seekable> |
|
|
|
Use HTTP partial requests for downloading HTTP segments. |
|
0 = disable, 1 = enable, -1 = auto, Default is auto. |
|
|
|
|
|
=item B<seg_format_options> |
|
|
|
Set options for the demuxer of media segments using a list of key=value pairs separated by C<:>. |
|
|
|
|
|
=item B<seg_max_retry> |
|
|
|
Maximum number of times to reload a segment on error, useful when segment skip on network error is not desired. |
|
Default value is 0. |
|
|
|
=back |
|
|
|
|
|
|
|
=head2 image2 |
|
|
|
|
|
Image file demuxer. |
|
|
|
This demuxer reads from a list of image files specified by a pattern. |
|
The syntax and meaning of the pattern is specified by the |
|
option I<pattern_type>. |
|
|
|
The pattern may contain a suffix which is used to automatically |
|
determine the format of the images contained in the files. |
|
|
|
The size, the pixel format, and the format of each image must be the |
|
same for all the files in the sequence. |
|
|
|
This demuxer accepts the following options: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<framerate> |
|
|
|
Set the frame rate for the video stream. It defaults to 25. |
|
|
|
=item B<loop> |
|
|
|
If set to 1, loop over the input. Default value is 0. |
|
|
|
=item B<pattern_type> |
|
|
|
Select the pattern type used to interpret the provided filename. |
|
|
|
I<pattern_type> accepts one of the following values. |
|
|
|
=over 4 |
|
|
|
|
|
=item B<none> |
|
|
|
Disable pattern matching, therefore the video will only contain the specified |
|
image. You should use this option if you do not want to create sequences from |
|
multiple images and your filenames may contain special pattern characters. |
|
|
|
=item B<sequence> |
|
|
|
Select a sequence pattern type, used to specify a sequence of files |
|
indexed by sequential numbers. |
|
|
|
A sequence pattern may contain the string "%d" or "%0I<N>d", which |
|
specifies the position of the characters representing a sequential |
|
number in each filename matched by the pattern. If the form |
|
"%d0I<N>d" is used, the string representing the number in each |
|
filename is 0-padded and I<N> is the total number of 0-padded |
|
digits representing the number. The literal character '%' can be |
|
specified in the pattern with the string "%%". |
|
|
|
If the sequence pattern contains "%d" or "%0I<N>d", the first filename of |
|
the file list specified by the pattern must contain a number |
|
inclusively contained between I<start_number> and |
|
I<start_number>+I<start_number_range>-1, and all the following |
|
numbers must be sequential. |
|
|
|
For example the pattern "img-%03d.bmp" will match a sequence of |
|
filenames of the form F<img-001.bmp>, F<img-002.bmp>, ..., |
|
F<img-010.bmp>, etc.; the pattern "i%%m%%g-%d.jpg" will match a |
|
sequence of filenames of the form F<i%m%g-1.jpg>, |
|
F<i%m%g-2.jpg>, ..., F<i%m%g-10.jpg>, etc. |
|
|
|
Note that the pattern must not necessarily contain "%d" or |
|
"%0I<N>d", for example to convert a single image file |
|
F<img.jpeg> you can employ the command: |
|
|
|
ffmpeg -i img.jpeg img.png |
|
|
|
|
|
|
|
=item B<glob> |
|
|
|
Select a glob wildcard pattern type. |
|
|
|
The pattern is interpreted like a C<glob()> pattern. This is only |
|
selectable if libavformat was compiled with globbing support. |
|
|
|
|
|
=item B<glob_sequence> I<(deprecated, will be removed)> |
|
|
|
Select a mixed glob wildcard/sequence pattern. |
|
|
|
If your version of libavformat was compiled with globbing support, and |
|
the provided pattern contains at least one glob meta character among |
|
C<%*?[]{}> that is preceded by an unescaped "%", the pattern is |
|
interpreted like a C<glob()> pattern, otherwise it is interpreted |
|
like a sequence pattern. |
|
|
|
All glob special characters C<%*?[]{}> must be prefixed |
|
with "%". To escape a literal "%" you shall use "%%". |
|
|
|
For example the pattern C<foo-%*.jpeg> will match all the |
|
filenames prefixed by "foo-" and terminating with ".jpeg", and |
|
C<foo-%?%?%?.jpeg> will match all the filenames prefixed with |
|
"foo-", followed by a sequence of three characters, and terminating |
|
with ".jpeg". |
|
|
|
This pattern type is deprecated in favor of I<glob> and |
|
I<sequence>. |
|
|
|
=back |
|
|
|
|
|
Default value is I<glob_sequence>. |
|
|
|
=item B<pixel_format> |
|
|
|
Set the pixel format of the images to read. If not specified the pixel |
|
format is guessed from the first image file in the sequence. |
|
|
|
=item B<start_number> |
|
|
|
Set the index of the file matched by the image file pattern to start |
|
to read from. Default value is 0. |
|
|
|
=item B<start_number_range> |
|
|
|
Set the index interval range to check when looking for the first image |
|
file in the sequence, starting from I<start_number>. Default value |
|
is 5. |
|
|
|
=item B<ts_from_file> |
|
|
|
If set to 1, will set frame timestamp to modification time of image file. Note |
|
that monotonity of timestamps is not provided: images go in the same order as |
|
without this option. Default value is 0. |
|
If set to 2, will set frame timestamp to the modification time of the image file in |
|
nanosecond precision. |
|
|
|
=item B<video_size> |
|
|
|
Set the video size of the images to read. If not specified the video |
|
size is guessed from the first image file in the sequence. |
|
|
|
=item B<export_path_metadata> |
|
|
|
If set to 1, will add two extra fields to the metadata found in input, making them |
|
also available for other filters (see I<drawtext> filter for examples). Default |
|
value is 0. The extra fields are described below: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<lavf.image2dec.source_path> |
|
|
|
Corresponds to the full path to the input file being read. |
|
|
|
=item B<lavf.image2dec.source_basename> |
|
|
|
Corresponds to the name of the file being read. |
|
|
|
=back |
|
|
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item * |
|
|
|
Use B<ffmpeg> for creating a video from the images in the file |
|
sequence F<img-001.jpeg>, F<img-002.jpeg>, ..., assuming an |
|
input frame rate of 10 frames per second: |
|
|
|
ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv |
|
|
|
|
|
|
|
=item * |
|
|
|
As above, but start by reading from a file with index 100 in the sequence: |
|
|
|
ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv |
|
|
|
|
|
|
|
=item * |
|
|
|
Read images matching the "*.png" glob pattern , that is all the files |
|
terminating with the ".png" suffix: |
|
|
|
ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 libgme |
|
|
|
|
|
The Game Music Emu library is a collection of video game music file emulators. |
|
|
|
See E<lt>B<https://bitbucket.org/mpyne/game-music-emu/overview>E<gt> for more information. |
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<track_index> |
|
|
|
Set the index of which track to demux. The demuxer can only export one track. |
|
Track indexes start at 0. Default is to pick the first track. Number of tracks |
|
is exported as I<tracks> metadata entry. |
|
|
|
|
|
=item B<sample_rate> |
|
|
|
Set the sampling rate of the exported track. Range is 1000 to 999999. Default is 44100. |
|
|
|
|
|
=item B<max_size> I<(bytes)> |
|
|
|
The demuxer buffers the entire file into memory. Adjust this value to set the maximum buffer size, |
|
which in turn, acts as a ceiling for the size of files that can be read. |
|
Default is 50 MiB. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 libmodplug |
|
|
|
|
|
ModPlug based module demuxer |
|
|
|
See E<lt>B<https://github.com/Konstanty/libmodplug>E<gt> |
|
|
|
It will export one 2-channel 16-bit 44.1 kHz audio stream. |
|
Optionally, a C<pal8> 16-color video stream can be exported with or without printed metadata. |
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<noise_reduction> |
|
|
|
Apply a simple low-pass filter. Can be 1 (on) or 0 (off). Default is 0. |
|
|
|
|
|
=item B<reverb_depth> |
|
|
|
Set amount of reverb. Range 0-100. Default is 0. |
|
|
|
|
|
=item B<reverb_delay> |
|
|
|
Set delay in ms, clamped to 40-250 ms. Default is 0. |
|
|
|
|
|
=item B<bass_amount> |
|
|
|
Apply bass expansion a.k.a. XBass or megabass. Range is 0 (quiet) to 100 (loud). Default is 0. |
|
|
|
|
|
=item B<bass_range> |
|
|
|
Set cutoff i.e. upper-bound for bass frequencies. Range is 10-100 Hz. Default is 0. |
|
|
|
|
|
=item B<surround_depth> |
|
|
|
Apply a Dolby Pro-Logic surround effect. Range is 0 (quiet) to 100 (heavy). Default is 0. |
|
|
|
|
|
=item B<surround_delay> |
|
|
|
Set surround delay in ms, clamped to 5-40 ms. Default is 0. |
|
|
|
|
|
=item B<max_size> |
|
|
|
The demuxer buffers the entire file into memory. Adjust this value to set the maximum buffer size, |
|
which in turn, acts as a ceiling for the size of files that can be read. Range is 0 to 100 MiB. |
|
0 removes buffer size limit (not recommended). Default is 5 MiB. |
|
|
|
|
|
=item B<video_stream_expr> |
|
|
|
String which is evaluated using the eval API to assign colors to the generated video stream. |
|
Variables which can be used are C<x>, C<y>, C<w>, C<h>, C<t>, C<speed>, |
|
C<tempo>, C<order>, C<pattern> and C<row>. |
|
|
|
|
|
=item B<video_stream> |
|
|
|
Generate video stream. Can be 1 (on) or 0 (off). Default is 0. |
|
|
|
|
|
=item B<video_stream_w> |
|
|
|
Set video frame width in 'chars' where one char indicates 8 pixels. Range is 20-512. Default is 30. |
|
|
|
|
|
=item B<video_stream_h> |
|
|
|
Set video frame height in 'chars' where one char indicates 8 pixels. Range is 20-512. Default is 30. |
|
|
|
|
|
=item B<video_stream_ptxt> |
|
|
|
Print metadata on video stream. Includes C<speed>, C<tempo>, C<order>, C<pattern>, |
|
C<row> and C<ts> (time in ms). Can be 1 (on) or 0 (off). Default is 1. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 libopenmpt |
|
|
|
|
|
libopenmpt based module demuxer |
|
|
|
See E<lt>B<https://lib.openmpt.org/libopenmpt/>E<gt> for more information. |
|
|
|
Some files have multiple subsongs (tracks) this can be set with the B<subsong> |
|
option. |
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<subsong> |
|
|
|
Set the subsong index. This can be either 'all', 'auto', or the index of the |
|
subsong. Subsong indexes start at 0. The default is 'auto'. |
|
|
|
The default value is to let libopenmpt choose. |
|
|
|
|
|
=item B<layout> |
|
|
|
Set the channel layout. Valid values are 1, 2, and 4 channel layouts. |
|
The default value is STEREO. |
|
|
|
|
|
=item B<sample_rate> |
|
|
|
Set the sample rate for libopenmpt to output. |
|
Range is from 1000 to INT_MAX. The value default is 48000. |
|
|
|
=back |
|
|
|
|
|
|
|
=head2 mov/mp4/3gp |
|
|
|
|
|
Demuxer for Quicktime File Format & ISO/IEC Base Media File Format (ISO/IEC 14496-12 or MPEG-4 Part 12, ISO/IEC 15444-12 or JPEG 2000 Part 12). |
|
|
|
Registered extensions: mov, mp4, m4a, 3gp, 3g2, mj2, psp, m4b, ism, ismv, isma, f4v |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
This demuxer accepts the following options: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<enable_drefs> |
|
|
|
Enable loading of external tracks, disabled by default. |
|
Enabling this can theoretically leak information in some use cases. |
|
|
|
|
|
=item B<use_absolute_path> |
|
|
|
Allows loading of external tracks via absolute paths, disabled by default. |
|
Enabling this poses a security risk. It should only be enabled if the source |
|
is known to be non-malicious. |
|
|
|
|
|
=item B<seek_streams_individually> |
|
|
|
When seeking, identify the closest point in each stream individually and demux packets in |
|
that stream from identified point. This can lead to a different sequence of packets compared |
|
to demuxing linearly from the beginning. Default is true. |
|
|
|
|
|
=item B<ignore_editlist> |
|
|
|
Ignore any edit list atoms. The demuxer, by default, modifies the stream index to reflect the |
|
timeline described by the edit list. Default is false. |
|
|
|
|
|
=item B<advanced_editlist> |
|
|
|
Modify the stream index to reflect the timeline described by the edit list. C<ignore_editlist> |
|
must be set to false for this option to be effective. |
|
If both C<ignore_editlist> and this option are set to false, then only the |
|
start of the stream index is modified to reflect initial dwell time or starting timestamp |
|
described by the edit list. Default is true. |
|
|
|
|
|
=item B<ignore_chapters> |
|
|
|
Don't parse chapters. This includes GoPro 'HiLight' tags/moments. Note that chapters are |
|
only parsed when input is seekable. Default is false. |
|
|
|
|
|
=item B<use_mfra_for> |
|
|
|
For seekable fragmented input, set fragment's starting timestamp from media fragment random access box, if present. |
|
|
|
Following options are available: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<auto> |
|
|
|
Auto-detect whether to set mfra timestamps as PTS or DTS I<(default)> |
|
|
|
|
|
=item B<dts> |
|
|
|
Set mfra timestamps as DTS |
|
|
|
|
|
=item B<pts> |
|
|
|
Set mfra timestamps as PTS |
|
|
|
|
|
=item B<0> |
|
|
|
Don't use mfra box to set timestamps |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<use_tfdt> |
|
|
|
For fragmented input, set fragment's starting timestamp to C<baseMediaDecodeTime> from the C<tfdt> box. |
|
Default is enabled, which will prefer to use the C<tfdt> box to set DTS. Disable to use the C<earliest_presentation_time> from the C<sidx> box. |
|
In either case, the timestamp from the C<mfra> box will be used if it's available and C<use_mfra_for> is |
|
set to pts or dts. |
|
|
|
|
|
=item B<export_all> |
|
|
|
Export unrecognized boxes within the I<udta> box as metadata entries. The first four |
|
characters of the box type are set as the key. Default is false. |
|
|
|
|
|
=item B<export_xmp> |
|
|
|
Export entire contents of I<XMP_> box and I<uuid> box as a string with key C<xmp>. Note that |
|
if C<export_all> is set and this option isn't, the contents of I<XMP_> box are still exported |
|
but with key C<XMP_>. Default is false. |
|
|
|
|
|
=item B<activation_bytes> |
|
|
|
4-byte key required to decrypt Audible AAX and AAX+ files. See Audible AAX subsection below. |
|
|
|
|
|
=item B<audible_fixed_key> |
|
|
|
Fixed key used for handling Audible AAX/AAX+ files. It has been pre-set so should not be necessary to |
|
specify. |
|
|
|
|
|
=item B<decryption_key> |
|
|
|
16-byte key, in hex, to decrypt files encrypted using ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). |
|
|
|
|
|
=item B<max_stts_delta> |
|
|
|
Very high sample deltas written in a trak's stts box may occasionally be intended but usually they are written in |
|
error or used to store a negative value for dts correction when treated as signed 32-bit integers. This option lets |
|
the user set an upper limit, beyond which the delta is clamped to 1. Values greater than the limit if negative when |
|
cast to int32 are used to adjust onward dts. |
|
|
|
Unit is the track time scale. Range is 0 to UINT_MAX. Default is C<UINT_MAX - 48000*10> which allows upto |
|
a 10 second dts correction for 48 kHz audio streams while accommodating 99.9% of C<uint32> range. |
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Audible AAX |
|
|
|
|
|
Audible AAX files are encrypted M4B files, and they can be decrypted by specifying a 4 byte activation secret. |
|
|
|
ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4 |
|
|
|
|
|
|
|
=head2 mpegts |
|
|
|
|
|
MPEG-2 transport stream demuxer. |
|
|
|
This demuxer accepts the following options: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<resync_size> |
|
|
|
Set size limit for looking up a new synchronization. Default value is |
|
65536. |
|
|
|
|
|
=item B<skip_unknown_pmt> |
|
|
|
Skip PMTs for programs not defined in the PAT. Default value is 0. |
|
|
|
|
|
=item B<fix_teletext_pts> |
|
|
|
Override teletext packet PTS and DTS values with the timestamps calculated |
|
from the PCR of the first program which the teletext stream is part of and is |
|
not discarded. Default value is 1, set this option to 0 if you want your |
|
teletext packet PTS and DTS values untouched. |
|
|
|
|
|
=item B<ts_packetsize> |
|
|
|
Output option carrying the raw packet size in bytes. |
|
Show the detected raw packet size, cannot be set by the user. |
|
|
|
|
|
=item B<scan_all_pmts> |
|
|
|
Scan and combine all PMTs. The value is an integer with value from -1 |
|
to 1 (-1 means automatic setting, 1 means enabled, 0 means |
|
disabled). Default value is -1. |
|
|
|
|
|
=item B<merge_pmt_versions> |
|
|
|
Re-use existing streams when a PMT's version is updated and elementary |
|
streams move to different PIDs. Default value is 0. |
|
|
|
|
|
=item B<max_packet_size> |
|
|
|
Set maximum size, in bytes, of packet emitted by the demuxer. Payloads above this size |
|
are split across multiple packets. Range is 1 to INT_MAX/2. Default is 204800 bytes. |
|
|
|
=back |
|
|
|
|
|
|
|
=head2 mpjpeg |
|
|
|
|
|
MJPEG encapsulated in multi-part MIME demuxer. |
|
|
|
This demuxer allows reading of MJPEG, where each frame is represented as a part of |
|
multipart/x-mixed-replace stream. |
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<strict_mime_boundary> |
|
|
|
Default implementation applies a relaxed standard to multi-part MIME boundary detection, |
|
to prevent regression with numerous existing endpoints not generating a proper MIME |
|
MJPEG stream. Turning this option on by setting it to 1 will result in a stricter check |
|
of the boundary value. |
|
|
|
=back |
|
|
|
|
|
|
|
=head2 rawvideo |
|
|
|
|
|
Raw video demuxer. |
|
|
|
This demuxer allows one to read raw video data. Since there is no header |
|
specifying the assumed video parameters, the user must specify them |
|
in order to be able to decode the data correctly. |
|
|
|
This demuxer accepts the following options: |
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<framerate> |
|
|
|
Set input video frame rate. Default value is 25. |
|
|
|
|
|
=item B<pixel_format> |
|
|
|
Set the input video pixel format. Default value is C<yuv420p>. |
|
|
|
|
|
=item B<video_size> |
|
|
|
Set the input video size. This value must be specified explicitly. |
|
|
|
=back |
|
|
|
|
|
For example to read a rawvideo file F<input.raw> with |
|
B<ffplay>, assuming a pixel format of C<rgb24>, a video |
|
size of C<320x240>, and a frame rate of 10 images per second, use |
|
the command: |
|
|
|
ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw |
|
|
|
|
|
|
|
=head2 sbg |
|
|
|
|
|
SBaGen script demuxer. |
|
|
|
This demuxer reads the script language used by SBaGen |
|
E<lt>B<http://uazu.net/sbagen/>E<gt> to generate binaural beats sessions. A SBG |
|
script looks like that: |
|
|
|
-SE |
|
a: 300-2.5/3 440+4.5/0 |
|
b: 300-2.5/0 440+4.5/3 |
|
off: - |
|
NOW == a |
|
+0:07:00 == b |
|
+0:14:00 == a |
|
+0:21:00 == b |
|
+0:30:00 off |
|
|
|
|
|
A SBG script can mix absolute and relative timestamps. If the script uses |
|
either only absolute timestamps (including the script start time) or only |
|
relative ones, then its layout is fixed, and the conversion is |
|
straightforward. On the other hand, if the script mixes both kind of |
|
timestamps, then the I<NOW> reference for relative timestamps will be |
|
taken from the current time of day at the time the script is read, and the |
|
script layout will be frozen according to that reference. That means that if |
|
the script is directly played, the actual times will match the absolute |
|
timestamps up to the sound controller's clock accuracy, but if the user |
|
somehow pauses the playback or seeks, all times will be shifted accordingly. |
|
|
|
|
|
=head2 tedcaptions |
|
|
|
|
|
JSON captions used for E<lt>B<http://www.ted.com/>E<gt>. |
|
|
|
TED does not provide links to the captions, but they can be guessed from the |
|
page. The file F<tools/bookmarklets.html> from the FFmpeg source tree |
|
contains a bookmarklet to expose them. |
|
|
|
This demuxer accepts the following option: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<start_time> |
|
|
|
Set the start time of the TED talk, in milliseconds. The default is 15000 |
|
(15s). It is used to sync the captions with the downloadable videos, because |
|
they include a 15s intro. |
|
|
|
=back |
|
|
|
|
|
Example: convert the captions to a format most players understand: |
|
|
|
ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt |
|
|
|
|
|
|
|
=head2 vapoursynth |
|
|
|
|
|
Vapoursynth wrapper. |
|
|
|
Due to security concerns, Vapoursynth scripts will not |
|
be autodetected so the input format has to be forced. For ff* CLI tools, |
|
add C<-f vapoursynth> before the input C<-i yourscript.vpy>. |
|
|
|
This demuxer accepts the following option: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<max_script_size> |
|
|
|
The demuxer buffers the entire script into memory. Adjust this value to set the maximum buffer size, |
|
which in turn, acts as a ceiling for the size of scripts that can be read. |
|
Default is 1 MiB. |
|
|
|
=back |
|
|
|
|
|
|
|
=head1 MUXERS |
|
|
|
|
|
Muxers are configured elements in FFmpeg which allow writing |
|
multimedia streams to a particular type of file. |
|
|
|
When you configure your FFmpeg build, all the supported muxers |
|
are enabled by default. You can list all available muxers using the |
|
configure option C<--list-muxers>. |
|
|
|
You can disable all the muxers with the configure option |
|
C<--disable-muxers> and selectively enable / disable single muxers |
|
with the options C<--enable-muxer=I<MUXER>> / |
|
C<--disable-muxer=I<MUXER>>. |
|
|
|
The option C<-muxers> of the ff* tools will display the list of |
|
enabled muxers. Use C<-formats> to view a combined list of |
|
enabled demuxers and muxers. |
|
|
|
A description of some of the currently available muxers follows. |
|
|
|
|
|
|
|
=head2 a64 |
|
|
|
|
|
A64 muxer for Commodore 64 video. Accepts a single C<a64_multi> or C<a64_multi5> codec video stream. |
|
|
|
|
|
|
|
=head2 adts |
|
|
|
|
|
Audio Data Transport Stream muxer. It accepts a single AAC stream. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<write_id3v2> I<bool> |
|
|
|
Enable to write ID3v2.4 tags at the start of the stream. Default is disabled. |
|
|
|
|
|
=item B<write_apetag> I<bool> |
|
|
|
Enable to write APE tags at the end of the stream. Default is disabled. |
|
|
|
|
|
=item B<write_mpeg2> I<bool> |
|
|
|
Enable to set MPEG version bit in the ADTS frame header to 1 which indicates MPEG-2. Default is 0, which indicates MPEG-4. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 aiff |
|
|
|
|
|
Audio Interchange File Format muxer. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<write_id3v2> |
|
|
|
Enable ID3v2 tags writing when set to 1. Default is 0 (disabled). |
|
|
|
|
|
=item B<id3v2_version> |
|
|
|
Select ID3v2 version to write. Currently only version 3 and 4 (aka. |
|
ID3v2.3 and ID3v2.4) are supported. The default is version 4. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 alp |
|
|
|
|
|
Muxer for audio of High Voltage Software's Lego Racers game. It accepts a single ADPCM_IMA_ALP stream |
|
with no more than 2 channels nor a sample rate greater than 44100 Hz. |
|
|
|
Extensions: tun, pcm |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<type> I<type> |
|
|
|
Set file type. |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<tun> |
|
|
|
Set file type as music. Must have a sample rate of 22050 Hz. |
|
|
|
|
|
=item B<pcm> |
|
|
|
Set file type as sfx. |
|
|
|
|
|
=item B<auto> |
|
|
|
Set file type as per output file extension. C<.pcm> results in type C<pcm> else type C<tun> is set. I<(default)> |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 asf |
|
|
|
|
|
Advanced Systems Format muxer. |
|
|
|
Note that Windows Media Audio (wma) and Windows Media Video (wmv) use this |
|
muxer too. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<packet_size> |
|
|
|
Set the muxer packet size. By tuning this setting you may reduce data |
|
fragmentation or muxer overhead depending on your source. Default value is |
|
3200, minimum is 100, maximum is 64k. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 avi |
|
|
|
|
|
Audio Video Interleaved muxer. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<reserve_index_space> |
|
|
|
Reserve the specified amount of bytes for the OpenDML master index of each |
|
stream within the file header. By default additional master indexes are |
|
embedded within the data packets if there is no space left in the first master |
|
index and are linked together as a chain of indexes. This index structure can |
|
cause problems for some use cases, e.g. third-party software strictly relying |
|
on the OpenDML index specification or when file seeking is slow. Reserving |
|
enough index space in the file header avoids these problems. |
|
|
|
The required index space depends on the output file size and should be about 16 |
|
bytes per gigabyte. When this option is omitted or set to zero the necessary |
|
index space is guessed. |
|
|
|
|
|
=item B<write_channel_mask> |
|
|
|
Write the channel layout mask into the audio stream header. |
|
|
|
This option is enabled by default. Disabling the channel mask can be useful in |
|
specific scenarios, e.g. when merging multiple audio streams into one for |
|
compatibility with software that only supports a single audio stream in AVI |
|
(see B<the "amerge" section in the ffmpeg-filters manual>). |
|
|
|
|
|
=item B<flipped_raw_rgb> |
|
|
|
If set to true, store positive height for raw RGB bitmaps, which indicates |
|
bitmap is stored bottom-up. Note that this option does not flip the bitmap |
|
which has to be done manually beforehand, e.g. by using the vflip filter. |
|
Default is I<false> and indicates bitmap is stored top down. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 chromaprint |
|
|
|
|
|
Chromaprint fingerprinter. |
|
|
|
This muxer feeds audio data to the Chromaprint library, |
|
which generates a fingerprint for the provided audio data. See E<lt>B<https://acoustid.org/chromaprint>E<gt> |
|
|
|
It takes a single signed native-endian 16-bit raw audio stream of at most 2 channels. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<silence_threshold> |
|
|
|
Threshold for detecting silence. Range is from -1 to 32767, where -1 disables |
|
silence detection. Silence detection can only be used with version 3 of the |
|
algorithm. |
|
Silence detection must be disabled for use with the AcoustID service. Default is -1. |
|
|
|
|
|
=item B<algorithm> |
|
|
|
Version of algorithm to fingerprint with. Range is 0 to 4. |
|
Version 3 enables silence detection. Default is 1. |
|
|
|
|
|
=item B<fp_format> |
|
|
|
Format to output the fingerprint as. Accepts the following options: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<raw> |
|
|
|
Binary raw fingerprint |
|
|
|
|
|
=item B<compressed> |
|
|
|
Binary compressed fingerprint |
|
|
|
|
|
=item B<base64> |
|
|
|
Base64 compressed fingerprint I<(default)> |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 crc |
|
|
|
|
|
CRC (Cyclic Redundancy Check) testing format. |
|
|
|
This muxer computes and prints the Adler-32 CRC of all the input audio |
|
and video frames. By default audio frames are converted to signed |
|
16-bit raw audio and video frames to raw video before computing the |
|
CRC. |
|
|
|
The output of the muxer consists of a single line of the form: |
|
CRC=0xI<CRC>, where I<CRC> is a hexadecimal number 0-padded to |
|
8 digits containing the CRC for all the decoded input frames. |
|
|
|
See also the B<framecrc> muxer. |
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
For example to compute the CRC of the input, and store it in the file |
|
F<out.crc>: |
|
|
|
ffmpeg -i INPUT -f crc out.crc |
|
|
|
|
|
You can print the CRC to stdout with the command: |
|
|
|
ffmpeg -i INPUT -f crc - |
|
|
|
|
|
You can select the output format of each frame with B<ffmpeg> by |
|
specifying the audio and video codec and format. For example to |
|
compute the CRC of the input audio converted to PCM unsigned 8-bit |
|
and the input video converted to MPEG-2 video, use the command: |
|
|
|
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc - |
|
|
|
|
|
|
|
|
|
=head2 dash |
|
|
|
|
|
Dynamic Adaptive Streaming over HTTP (DASH) muxer that creates segments |
|
and manifest files according to the MPEG-DASH standard ISO/IEC 23009-1:2014. |
|
|
|
For more information see: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item * |
|
|
|
ISO DASH Specification: E<lt>B<http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip>E<gt> |
|
|
|
=item * |
|
|
|
WebM DASH Specification: E<lt>B<https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification>E<gt> |
|
|
|
=back |
|
|
|
|
|
It creates a MPD manifest file and segment files for each stream. |
|
|
|
The segment filename might contain pre-defined identifiers used with SegmentTemplate |
|
as defined in section 5.3.9.4.4 of the standard. Available identifiers are "$RepresentationID$", |
|
"$Number$", "$Bandwidth$" and "$Time$". |
|
In addition to the standard identifiers, an ffmpeg-specific "$ext$" identifier is also supported. |
|
When specified ffmpeg will replace $ext$ in the file name with muxing format's extensions such as mp4, webm etc., |
|
|
|
|
|
ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \ |
|
-b:v:0 800k -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline \ |
|
-profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 \ |
|
-b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 \ |
|
-window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" \ |
|
-f dash /path/to/out.mpd |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<seg_duration> I<duration> |
|
|
|
Set the segment length in seconds (fractional value can be set). The value is |
|
treated as average segment duration when I<use_template> is enabled and |
|
I<use_timeline> is disabled and as minimum segment duration for all the other |
|
use cases. |
|
|
|
=item B<frag_duration> I<duration> |
|
|
|
Set the length in seconds of fragments within segments (fractional value can be set). |
|
|
|
=item B<frag_type> I<type> |
|
|
|
Set the type of interval for fragmentation. |
|
|
|
=item B<window_size> I<size> |
|
|
|
Set the maximum number of segments kept in the manifest. |
|
|
|
=item B<extra_window_size> I<size> |
|
|
|
Set the maximum number of segments kept outside of the manifest before removing from disk. |
|
|
|
=item B<remove_at_exit> I<remove> |
|
|
|
Enable (1) or disable (0) removal of all segments when finished. |
|
|
|
=item B<use_template> I<template> |
|
|
|
Enable (1) or disable (0) use of SegmentTemplate instead of SegmentList. |
|
|
|
=item B<use_timeline> I<timeline> |
|
|
|
Enable (1) or disable (0) use of SegmentTimeline in SegmentTemplate. |
|
|
|
=item B<single_file> I<single_file> |
|
|
|
Enable (1) or disable (0) storing all segments in one file, accessed using byte ranges. |
|
|
|
=item B<single_file_name> I<file_name> |
|
|
|
DASH-templated name to be used for baseURL. Implies I<single_file> set to "1". In the template, "$ext$" is replaced with the file name extension specific for the segment format. |
|
|
|
=item B<init_seg_name> I<init_name> |
|
|
|
DASH-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. |
|
|
|
=item B<media_seg_name> I<segment_name> |
|
|
|
DASH-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. |
|
|
|
=item B<utc_timing_url> I<utc_url> |
|
|
|
URL of the page that will return the UTC timestamp in ISO format. Example: "https://time.akamai.com/?iso" |
|
|
|
=item B<method> I<method> |
|
|
|
Use the given HTTP method to create output files. Generally set to PUT or POST. |
|
|
|
=item B<http_user_agent> I<user_agent> |
|
|
|
Override User-Agent field in HTTP header. Applicable only for HTTP output. |
|
|
|
=item B<http_persistent> I<http_persistent> |
|
|
|
Use persistent HTTP connections. Applicable only for HTTP output. |
|
|
|
=item B<hls_playlist> I<hls_playlist> |
|
|
|
Generate HLS playlist files as well. The master playlist is generated with the filename I<hls_master_name>. |
|
One media playlist file is generated for each stream with filenames media_0.m3u8, media_1.m3u8, etc. |
|
|
|
=item B<hls_master_name> I<file_name> |
|
|
|
HLS master playlist name. Default is "master.m3u8". |
|
|
|
=item B<streaming> I<streaming> |
|
|
|
Enable (1) or disable (0) chunk streaming mode of output. In chunk streaming |
|
mode, each frame will be a moof fragment which forms a chunk. |
|
|
|
=item B<adaptation_sets> I<adaptation_sets> |
|
|
|
Assign streams to AdaptationSets. Syntax is "id=x,streams=a,b,c id=y,streams=d,e" with x and y being the IDs |
|
of the adaptation sets and a,b,c,d and e are the indices of the mapped streams. |
|
|
|
To map all video (or audio) streams to an AdaptationSet, "v" (or "a") can be used as stream identifier instead of IDs. |
|
|
|
When no assignment is defined, this defaults to an AdaptationSet for each stream. |
|
|
|
Optional 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, |
|
descriptor is useful to the scheme defined by ISO/IEC 23009-1:2014/Amd.2:2015. |
|
For example, -adaptation_sets "id=0,descriptor=E<lt>SupplementalProperty schemeIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/E<gt>,streams=v". |
|
Please note that descriptor string should be a self-closing xml tag. |
|
seg_duration, frag_duration and frag_type override the global option values for each adaptation set. |
|
For 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" |
|
type_id marks an adaptation set as containing streams meant to be used for Trick Mode for the referenced adaptation set. |
|
For 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" |
|
|
|
=item B<timeout> I<timeout> |
|
|
|
Set timeout for socket I/O operations. Applicable only for HTTP output. |
|
|
|
=item B<index_correction> I<index_correction> |
|
|
|
Enable (1) or Disable (0) segment index correction logic. Applicable only when |
|
I<use_template> is enabled and I<use_timeline> is disabled. |
|
|
|
When enabled, the logic monitors the flow of segment indexes. If a streams's |
|
segment index value is not at the expected real time position, then the logic |
|
corrects that index value. |
|
|
|
Typically this logic is needed in live streaming use cases. The network bandwidth |
|
fluctuations are common during long run streaming. Each fluctuation can cause |
|
the segment indexes fall behind the expected real time position. |
|
|
|
=item B<format_options> I<options_list> |
|
|
|
Set container format (mp4/webm) options using a C<:> separated list of |
|
key=value parameters. Values containing C<:> special characters must be |
|
escaped. |
|
|
|
|
|
=item B<global_sidx> I<global_sidx> |
|
|
|
Write global SIDX atom. Applicable only for single file, mp4 output, non-streaming mode. |
|
|
|
|
|
=item B<dash_segment_type> I<dash_segment_type> |
|
|
|
Possible values: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<auto> |
|
|
|
If this flag is set, the dash segment files format will be selected based on the stream codec. This is the default mode. |
|
|
|
|
|
=item B<mp4> |
|
|
|
If this flag is set, the dash segment files will be in in ISOBMFF format. |
|
|
|
|
|
=item B<webm> |
|
|
|
If this flag is set, the dash segment files will be in in WebM format. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<ignore_io_errors> I<ignore_io_errors> |
|
|
|
Ignore IO errors during open and write. Useful for long-duration runs with network output. |
|
|
|
|
|
=item B<lhls> I<lhls> |
|
|
|
Enable Low-latency HLS(LHLS). Adds #EXT-X-PREFETCH tag with current segment's URI. |
|
hls.js player folks are trying to standardize an open LHLS spec. The draft spec is available in https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md |
|
This option tries to comply with the above open spec. |
|
It enables I<streaming> and I<hls_playlist> options automatically. |
|
This is an experimental feature. |
|
|
|
Note: This is not Apple's version LHLS. See E<lt>B<https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis>E<gt> |
|
|
|
|
|
=item B<ldash> I<ldash> |
|
|
|
Enable Low-latency Dash by constraining the presence and values of some elements. |
|
|
|
|
|
=item B<master_m3u8_publish_rate> I<master_m3u8_publish_rate> |
|
|
|
Publish master playlist repeatedly every after specified number of segment intervals. |
|
|
|
|
|
=item B<write_prft> I<write_prft> |
|
|
|
Write Producer Reference Time elements on supported streams. This also enables writing |
|
prft boxes in the underlying muxer. Applicable only when the I<utc_url> option is enabled. |
|
It's set to auto by default, in which case the muxer will attempt to enable it only in modes |
|
that require it. |
|
|
|
|
|
=item B<mpd_profile> I<mpd_profile> |
|
|
|
Set one or more manifest profiles. |
|
|
|
|
|
=item B<http_opts> I<http_opts> |
|
|
|
A :-separated list of key=value options to pass to the underlying HTTP |
|
protocol. Applicable only for HTTP output. |
|
|
|
|
|
=item B<target_latency> I<target_latency> |
|
|
|
Set an intended target latency in seconds (fractional value can be set) for serving. Applicable only when I<streaming> and I<write_prft> options are enabled. |
|
This is an informative fields clients can use to measure the latency of the service. |
|
|
|
|
|
=item B<min_playback_rate> I<min_playback_rate> |
|
|
|
Set the minimum playback rate indicated as appropriate for the purposes of automatically |
|
adjusting playback latency and buffer occupancy during normal playback by clients. |
|
|
|
|
|
=item B<max_playback_rate> I<max_playback_rate> |
|
|
|
Set the maximum playback rate indicated as appropriate for the purposes of automatically |
|
adjusting playback latency and buffer occupancy during normal playback by clients. |
|
|
|
|
|
=item B<update_period> I<update_period> |
|
|
|
Set the mpd update period ,for dynamic content. |
|
The unit is second. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 fifo |
|
|
|
|
|
The fifo pseudo-muxer allows the separation of encoding and muxing by using |
|
first-in-first-out queue and running the actual muxer in a separate thread. This |
|
is especially useful in combination with the B<tee> muxer and can be used to |
|
send data to several destinations with different reliability/writing speed/latency. |
|
|
|
API users should be aware that callback functions (interrupt_callback, |
|
io_open and io_close) used within its AVFormatContext must be thread-safe. |
|
|
|
The behavior of the fifo muxer if the queue fills up or if the output fails is |
|
selectable, |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item * |
|
|
|
output can be transparently restarted with configurable delay between retries |
|
based on real time or time of the processed stream. |
|
|
|
|
|
=item * |
|
|
|
encoding can be blocked during temporary failure, or continue transparently |
|
dropping packets in case fifo queue fills up. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<fifo_format> |
|
|
|
Specify the format name. Useful if it cannot be guessed from the |
|
output name suffix. |
|
|
|
|
|
=item B<queue_size> |
|
|
|
Specify size of the queue (number of packets). Default value is 60. |
|
|
|
|
|
=item B<format_opts> |
|
|
|
Specify format options for the underlying muxer. Muxer options can be specified |
|
as a list of I<key>=I<value> pairs separated by ':'. |
|
|
|
|
|
=item B<drop_pkts_on_overflow> I<bool> |
|
|
|
If set to 1 (true), in case the fifo queue fills up, packets will be dropped |
|
rather than blocking the encoder. This makes it possible to continue streaming without |
|
delaying the input, at the cost of omitting part of the stream. By default |
|
this option is set to 0 (false), so in such cases the encoder will be blocked |
|
until the muxer processes some of the packets and none of them is lost. |
|
|
|
|
|
=item B<attempt_recovery> I<bool> |
|
|
|
If failure occurs, attempt to recover the output. This is especially useful |
|
when used with network output, since it makes it possible to restart streaming transparently. |
|
By default this option is set to 0 (false). |
|
|
|
|
|
=item B<max_recovery_attempts> |
|
|
|
Sets maximum number of successive unsuccessful recovery attempts after which |
|
the output fails permanently. By default this option is set to 0 (unlimited). |
|
|
|
|
|
=item B<recovery_wait_time> I<duration> |
|
|
|
Waiting time before the next recovery attempt after previous unsuccessful |
|
recovery attempt. Default value is 5 seconds. |
|
|
|
|
|
=item B<recovery_wait_streamtime> I<bool> |
|
|
|
If set to 0 (false), the real time is used when waiting for the recovery |
|
attempt (i.e. the recovery will be attempted after at least |
|
recovery_wait_time seconds). |
|
If set to 1 (true), the time of the processed stream is taken into account |
|
instead (i.e. the recovery will be attempted after at least I<recovery_wait_time> |
|
seconds of the stream is omitted). |
|
By default, this option is set to 0 (false). |
|
|
|
|
|
=item B<recover_any_error> I<bool> |
|
|
|
If set to 1 (true), recovery will be attempted regardless of type of the error |
|
causing the failure. By default this option is set to 0 (false) and in case of |
|
certain (usually permanent) errors the recovery is not attempted even when |
|
I<attempt_recovery> is set to 1. |
|
|
|
|
|
=item B<restart_with_keyframe> I<bool> |
|
|
|
Specify whether to wait for the keyframe after recovering from |
|
queue overflow or failure. This option is set to 0 (false) by default. |
|
|
|
|
|
=item B<timeshift> I<duration> |
|
|
|
Buffer the specified amount of packets and delay writing the output. Note that |
|
I<queue_size> must be big enough to store the packets for timeshift. At the |
|
end of the input the fifo buffer is flushed at realtime speed. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item * |
|
|
|
Stream something to rtmp server, continue processing the stream at real-time |
|
rate even in case of temporary failure (network outage) and attempt to recover |
|
streaming every second indefinitely. |
|
|
|
ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv -map 0:v -map 0:a |
|
-drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 rtmp://example.com/live/stream_name |
|
|
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 flv |
|
|
|
|
|
Adobe Flash Video Format muxer. |
|
|
|
This muxer accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<flvflags> I<flags> |
|
|
|
Possible values: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<aac_seq_header_detect> |
|
|
|
Place AAC sequence header based on audio stream data. |
|
|
|
|
|
=item B<no_sequence_end> |
|
|
|
Disable sequence end tag. |
|
|
|
|
|
=item B<no_metadata> |
|
|
|
Disable metadata tag. |
|
|
|
|
|
=item B<no_duration_filesize> |
|
|
|
Disable duration and filesize in metadata when they are equal to zero |
|
at the end of stream. (Be used to non-seekable living stream). |
|
|
|
|
|
=item B<add_keyframe_index> |
|
|
|
Used to facilitate seeking; particularly for HTTP pseudo streaming. |
|
|
|
=back |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 framecrc |
|
|
|
|
|
Per-packet CRC (Cyclic Redundancy Check) testing format. |
|
|
|
This muxer computes and prints the Adler-32 CRC for each audio |
|
and video packet. By default audio frames are converted to signed |
|
16-bit raw audio and video frames to raw video before computing the |
|
CRC. |
|
|
|
The output of the muxer consists of a line for each audio and video |
|
packet of the form: |
|
|
|
<stream_index>, <packet_dts>, <packet_pts>, <packet_duration>, <packet_size>, 0x<CRC> |
|
|
|
|
|
I<CRC> is a hexadecimal number 0-padded to 8 digits containing the |
|
CRC of the packet. |
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
For example to compute the CRC of the audio and video frames in |
|
F<INPUT>, converted to raw audio and video packets, and store it |
|
in the file F<out.crc>: |
|
|
|
ffmpeg -i INPUT -f framecrc out.crc |
|
|
|
|
|
To print the information to stdout, use the command: |
|
|
|
ffmpeg -i INPUT -f framecrc - |
|
|
|
|
|
With B<ffmpeg>, you can select the output format to which the |
|
audio and video frames are encoded before computing the CRC for each |
|
packet by specifying the audio and video codec. For example, to |
|
compute the CRC of each decoded input audio frame converted to PCM |
|
unsigned 8-bit and of each decoded input video frame converted to |
|
MPEG-2 video, use the command: |
|
|
|
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc - |
|
|
|
|
|
See also the B<crc> muxer. |
|
|
|
|
|
|
|
=head2 framehash |
|
|
|
|
|
Per-packet hash testing format. |
|
|
|
This muxer computes and prints a cryptographic hash for each audio |
|
and video packet. This can be used for packet-by-packet equality |
|
checks without having to individually do a binary comparison on each. |
|
|
|
By default audio frames are converted to signed 16-bit raw audio and |
|
video frames to raw video before computing the hash, but the output |
|
of explicit conversions to other codecs can also be used. It uses the |
|
SHA-256 cryptographic hash function by default, but supports several |
|
other algorithms. |
|
|
|
The output of the muxer consists of a line for each audio and video |
|
packet of the form: |
|
|
|
<stream_index>, <packet_dts>, <packet_pts>, <packet_duration>, <packet_size>, <hash> |
|
|
|
|
|
I<hash> is a hexadecimal number representing the computed hash |
|
for the packet. |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<hash> I<algorithm> |
|
|
|
Use the cryptographic hash function specified by the string I<algorithm>. |
|
Supported values include C<MD5>, C<murmur3>, C<RIPEMD128>, |
|
C<RIPEMD160>, C<RIPEMD256>, C<RIPEMD320>, C<SHA160>, |
|
C<SHA224>, C<SHA256> (default), C<SHA512/224>, C<SHA512/256>, |
|
C<SHA384>, C<SHA512>, C<CRC32> and C<adler32>. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
To compute the SHA-256 hash of the audio and video frames in F<INPUT>, |
|
converted to raw audio and video packets, and store it in the file |
|
F<out.sha256>: |
|
|
|
ffmpeg -i INPUT -f framehash out.sha256 |
|
|
|
|
|
To print the information to stdout, using the MD5 hash function, use |
|
the command: |
|
|
|
ffmpeg -i INPUT -f framehash -hash md5 - |
|
|
|
|
|
See also the B<hash> muxer. |
|
|
|
|
|
|
|
=head2 framemd5 |
|
|
|
|
|
Per-packet MD5 testing format. |
|
|
|
This is a variant of the B<framehash> muxer. Unlike that muxer, |
|
it defaults to using the MD5 hash function. |
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
To compute the MD5 hash of the audio and video frames in F<INPUT>, |
|
converted to raw audio and video packets, and store it in the file |
|
F<out.md5>: |
|
|
|
ffmpeg -i INPUT -f framemd5 out.md5 |
|
|
|
|
|
To print the information to stdout, use the command: |
|
|
|
ffmpeg -i INPUT -f framemd5 - |
|
|
|
|
|
See also the B<framehash> and B<md5> muxers. |
|
|
|
|
|
|
|
=head2 gif |
|
|
|
|
|
Animated GIF muxer. |
|
|
|
It accepts the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<loop> |
|
|
|
Set the number of times to loop the output. Use C<-1> for no loop, C<0> |
|
for looping indefinitely (default). |
|
|
|
|
|
=item B<final_delay> |
|
|
|
Force the delay (expressed in centiseconds) after the last frame. Each frame |
|
ends with a delay until the next frame. The default is C<-1>, which is a |
|
special value to tell the muxer to re-use the previous delay. In case of a |
|
loop, you might want to customize this value to mark a pause for instance. |
|
|
|
=back |
|
|
|
|
|
For example, to encode a gif looping 10 times, with a 5 seconds delay between |
|
the loops: |
|
|
|
ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif |
|
|
|
|
|
Note 1: if you wish to extract the frames into separate GIF files, you need to |
|
force the B<image2> muxer: |
|
|
|
ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif" |
|
|
|
|
|
Note 2: the GIF format has a very large time base: the delay between two frames |
|
can therefore not be smaller than one centi second. |
|
|
|
|
|
|
|
=head2 hash |
|
|
|
|
|
Hash testing format. |
|
|
|
This muxer computes and prints a cryptographic hash of all the input |
|
audio and video frames. This can be used for equality checks without |
|
having to do a complete binary comparison. |
|
|
|
By default audio frames are converted to signed 16-bit raw audio and |
|
video frames to raw video before computing the hash, but the output |
|
of explicit conversions to other codecs can also be used. Timestamps |
|
are ignored. It uses the SHA-256 cryptographic hash function by default, |
|
but supports several other algorithms. |
|
|
|
The output of the muxer consists of a single line of the form: |
|
I<algo>=I<hash>, where I<algo> is a short string representing |
|
the hash function used, and I<hash> is a hexadecimal number |
|
representing the computed hash. |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<hash> I<algorithm> |
|
|
|
Use the cryptographic hash function specified by the string I<algorithm>. |
|
Supported values include C<MD5>, C<murmur3>, C<RIPEMD128>, |
|
C<RIPEMD160>, C<RIPEMD256>, C<RIPEMD320>, C<SHA160>, |
|
C<SHA224>, C<SHA256> (default), C<SHA512/224>, C<SHA512/256>, |
|
C<SHA384>, C<SHA512>, C<CRC32> and C<adler32>. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
To compute the SHA-256 hash of the input converted to raw audio and |
|
video, and store it in the file F<out.sha256>: |
|
|
|
ffmpeg -i INPUT -f hash out.sha256 |
|
|
|
|
|
To print an MD5 hash to stdout use the command: |
|
|
|
ffmpeg -i INPUT -f hash -hash md5 - |
|
|
|
|
|
See also the B<framehash> muxer. |
|
|
|
|
|
|
|
=head2 hls |
|
|
|
|
|
Apple HTTP Live Streaming muxer that segments MPEG-TS according to |
|
the HTTP Live Streaming (HLS) specification. |
|
|
|
It creates a playlist file, and one or more segment files. The output filename |
|
specifies the playlist filename. |
|
|
|
By default, the muxer creates a file for each segment produced. These files |
|
have the same name as the playlist, followed by a sequential number and a |
|
.ts extension. |
|
|
|
Make sure to require a closed GOP when encoding and to set the GOP |
|
size to fit your segment time constraint. |
|
|
|
For example, to convert an input file with B<ffmpeg>: |
|
|
|
ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8 |
|
|
|
This example will produce the playlist, F<out.m3u8>, and segment files: |
|
F<out0.ts>, F<out1.ts>, F<out2.ts>, etc. |
|
|
|
See also the B<segment> muxer, which provides a more generic and |
|
flexible implementation of a segmenter, and can be used to perform HLS |
|
segmentation. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
This muxer supports the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<hls_init_time> I<duration> |
|
|
|
Set the initial target segment length. Default value is I<0>. |
|
|
|
I<duration> must be a time duration specification, |
|
see B<the Time duration section in the ffmpeg-utils(1) manual>. |
|
|
|
Segment will be cut on the next key frame after this time has passed on the first m3u8 list. |
|
After the initial playlist is filled B<ffmpeg> will cut segments |
|
at duration equal to C<hls_time> |
|
|
|
|
|
=item B<hls_time> I<duration> |
|
|
|
Set the target segment length. Default value is 2. |
|
|
|
I<duration> must be a time duration specification, |
|
see B<the Time duration section in the ffmpeg-utils(1) manual>. |
|
Segment will be cut on the next key frame after this time has passed. |
|
|
|
|
|
=item B<hls_list_size> I<size> |
|
|
|
Set the maximum number of playlist entries. If set to 0 the list file |
|
will contain all the segments. Default value is 5. |
|
|
|
|
|
=item B<hls_delete_threshold> I<size> |
|
|
|
Set the number of unreferenced segments to keep on disk before C<hls_flags delete_segments> |
|
deletes them. Increase this to allow continue clients to download segments which |
|
were recently referenced in the playlist. Default value is 1, meaning segments older than |
|
C<hls_list_size+1> will be deleted. |
|
|
|
|
|
=item B<hls_start_number_source> |
|
|
|
Start the playlist sequence number (C<#EXT-X-MEDIA-SEQUENCE>) according to the specified source. |
|
Unless C<hls_flags single_file> is set, it also specifies source of starting sequence numbers of |
|
segment and subtitle filenames. In any case, if C<hls_flags append_list> |
|
is set and read playlist sequence number is greater than the specified start sequence number, |
|
then that value will be used as start value. |
|
|
|
It accepts the following values: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<generic (default)> |
|
|
|
Set the starting sequence numbers according to I<start_number> option value. |
|
|
|
|
|
=item B<epoch> |
|
|
|
The start number will be the seconds since epoch (1970-01-01 00:00:00) |
|
|
|
|
|
=item B<epoch_us> |
|
|
|
The start number will be the microseconds since epoch (1970-01-01 00:00:00) |
|
|
|
|
|
=item B<datetime> |
|
|
|
The start number will be based on the current date/time as YYYYmmddHHMMSS. e.g. 20161231235759. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=item B<start_number> I<number> |
|
|
|
Start the playlist sequence number (C<#EXT-X-MEDIA-SEQUENCE>) from the specified I<number> |
|
when I<hls_start_number_source> value is I<generic>. (This is the default case.) |
|
Unless C<hls_flags single_file> is set, it also specifies starting sequence numbers of segment and subtitle filenames. |
|
Default value is 0. |
|
|
|
|
|
=item B<hls_allow_cache> I<allowcache> |
|
|
|
Explicitly set whether the client MAY (1) or MUST NOT (0) cache media segments. |
|
|
|
|
|
=item B<hls_base_url> I<baseurl> |
|
|
|
Append I<baseurl> to every entry in the playlist. |
|
Useful to generate playlists with absolute paths. |
|
|
|
Note that the playlist sequence number must be unique for each segment |
|
and it is not to be confused with the segment filename sequence number |
|
which can be cyclic, for example if the B<wrap> option is |
|
specified. |
|
|
|
|
|
=item B<hls_segment_filename> I<filename> |
|
|
|
Set the segment filename. Unless C<hls_flags single_file> is set, |
|
I<filename> is used as a string format with the segment number: |
|
|
|
ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8 |
|
|
|
This example will produce the playlist, F<out.m3u8>, and segment files: |
|
F<file000.ts>, F<file001.ts>, F<file002.ts>, etc. |
|
|
|
I<filename> may contain full path or relative path specification, |
|
but only the file name part without any path info will be contained in the m3u8 segment list. |
|
Should a relative path be specified, the path of the created segment |
|
files will be relative to the current working directory. |
|
When strftime_mkdir is set, the whole expanded value of I<filename> will be written into the m3u8 segment list. |
|
|
|
When C<var_stream_map> is set with two or more variant streams, the |
|
I<filename> pattern must contain the string "%v", this string specifies |
|
the position of variant stream index in the generated segment file names. |
|
|
|
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ |
|
-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" \ |
|
-hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8 |
|
|
|
This example will produce the playlists segment file sets: |
|
F<file_0_000.ts>, F<file_0_001.ts>, F<file_0_002.ts>, etc. and |
|
F<file_1_000.ts>, F<file_1_001.ts>, F<file_1_002.ts>, etc. |
|
|
|
The string "%v" may be present in the filename or in the last directory name |
|
containing the file, but only in one of them. (Additionally, %v may appear multiple times in the last |
|
sub-directory or filename.) If the string %v is present in the directory name, then |
|
sub-directories are created after expanding the directory name pattern. This |
|
enables creation of segments corresponding to different variant streams in |
|
subdirectories. |
|
|
|
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ |
|
-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" \ |
|
-hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8 |
|
|
|
This example will produce the playlists segment file sets: |
|
F<vs0/file_000.ts>, F<vs0/file_001.ts>, F<vs0/file_002.ts>, etc. and |
|
F<vs1/file_000.ts>, F<vs1/file_001.ts>, F<vs1/file_002.ts>, etc. |
|
|
|
|
|
=item B<strftime> |
|
|
|
Use strftime() on I<filename> to expand the segment filename with localtime. |
|
The segment number is also available in this mode, but to use it, you need to specify second_level_segment_index |
|
hls_flag and %%d will be the specifier. |
|
|
|
ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8 |
|
|
|
This example will produce the playlist, F<out.m3u8>, and segment files: |
|
F<file-20160215-1455569023.ts>, F<file-20160215-1455569024.ts>, etc. |
|
Note: On some systems/environments, the C<%s> specifier is not available. See |
|
C<strftime()> documentation. |
|
|
|
ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8 |
|
|
|
This example will produce the playlist, F<out.m3u8>, and segment files: |
|
F<file-20160215-0001.ts>, F<file-20160215-0002.ts>, etc. |
|
|
|
|
|
=item B<strftime_mkdir> |
|
|
|
Used together with -strftime_mkdir, it will create all subdirectories which |
|
is expanded in I<filename>. |
|
|
|
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8 |
|
|
|
This example will create a directory 201560215 (if it does not exist), and then |
|
produce the playlist, F<out.m3u8>, and segment files: |
|
F<20160215/file-20160215-1455569023.ts>, F<20160215/file-20160215-1455569024.ts>, etc. |
|
|
|
|
|
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8 |
|
|
|
This example will create a directory hierarchy 2016/02/15 (if any of them do not exist), and then |
|
produce the playlist, F<out.m3u8>, and segment files: |
|
F<2016/02/15/file-20160215-1455569023.ts>, F<2016/02/15/file-20160215-1455569024.ts>, etc. |
|
|
|
|
|
=item B<hls_segment_options> I<options_list> |
|
|
|
Set output format options using a :-separated list of key=value |
|
parameters. Values containing C<:> special characters must be |
|
escaped. |
|
|
|
|
|
=item B<hls_key_info_file> I<key_info_file> |
|
|
|
Use the information in I<key_info_file> for segment encryption. The first |
|
line of I<key_info_file> specifies the key URI written to the playlist. The |
|
key URL is used to access the encryption key during playback. The second line |
|
specifies the path to the key file used to obtain the key during the encryption |
|
process. The key file is read as a single packed array of 16 octets in binary |
|
format. The optional third line specifies the initialization vector (IV) as a |
|
hexadecimal string to be used instead of the segment sequence number (default) |
|
for encryption. Changes to I<key_info_file> will result in segment |
|
encryption with the new key/IV and an entry in the playlist for the new key |
|
URI/IV if C<hls_flags periodic_rekey> is enabled. |
|
|
|
Key info file format: |
|
|
|
<key URI> |
|
<key file path> |
|
<IV> (optional) |
|
|
|
|
|
Example key URIs: |
|
|
|
http://server/file.key |
|
/path/to/file.key |
|
file.key |
|
|
|
|
|
Example key file paths: |
|
|
|
file.key |
|
/path/to/file.key |
|
|
|
|
|
Example IV: |
|
|
|
0123456789ABCDEF0123456789ABCDEF |
|
|
|
|
|
Key info file example: |
|
|
|
http://server/file.key |
|
/path/to/file.key |
|
0123456789ABCDEF0123456789ABCDEF |
|
|
|
|
|
Example shell script: |
|
|
|
#!/bin/sh |
|
BASE_URL=${1:-'.'} |
|
openssl rand 16 > file.key |
|
echo $BASE_URL/file.key > file.keyinfo |
|
echo file.key >> file.keyinfo |
|
echo $(openssl rand -hex 16) >> file.keyinfo |
|
ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \ |
|
-hls_key_info_file file.keyinfo out.m3u8 |
|
|
|
|
|
|
|
=item B<-hls_enc> I<enc> |
|
|
|
Enable (1) or disable (0) the AES128 encryption. |
|
When enabled every segment generated is encrypted and the encryption key |
|
is saved as I<playlist name>.key. |
|
|
|
|
|
=item B<-hls_enc_key> I<key> |
|
|
|
16-octet key to encrypt the segments, by default it |
|
is randomly generated. |
|
|
|
|
|
=item B<-hls_enc_key_url> I<keyurl> |
|
|
|
If set, I<keyurl> is prepended instead of I<baseurl> to the key filename |
|
in the playlist. |
|
|
|
|
|
=item B<-hls_enc_iv> I<iv> |
|
|
|
16-octet initialization vector for every segment instead |
|
of the autogenerated ones. |
|
|
|
|
|
=item B<hls_segment_type> I<flags> |
|
|
|
Possible values: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<mpegts> |
|
|
|
Output segment files in MPEG-2 Transport Stream format. This is |
|
compatible with all HLS versions. |
|
|
|
|
|
=item B<fmp4> |
|
|
|
Output segment files in fragmented MP4 format, similar to MPEG-DASH. |
|
fmp4 files may be used in HLS version 7 and above. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=item B<hls_fmp4_init_filename> I<filename> |
|
|
|
Set filename to the fragment files header file, default filename is F<init.mp4>. |
|
|
|
Use C<-strftime 1> on I<filename> to expand the segment filename with localtime. |
|
|
|
ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8 |
|
|
|
This will produce init like this |
|
F<1602678741_init.mp4> |
|
|
|
|
|
=item B<hls_fmp4_init_resend> |
|
|
|
Resend init file after m3u8 file refresh every time, default is I<0>. |
|
|
|
When C<var_stream_map> is set with two or more variant streams, the |
|
I<filename> pattern must contain the string "%v", this string specifies |
|
the position of variant stream index in the generated init file names. |
|
The string "%v" may be present in the filename or in the last directory name |
|
containing the file. If the string is present in the directory name, then |
|
sub-directories are created after expanding the directory name pattern. This |
|
enables creation of init files corresponding to different variant streams in |
|
subdirectories. |
|
|
|
|
|
=item B<hls_flags> I<flags> |
|
|
|
Possible values: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<single_file> |
|
|
|
If this flag is set, the muxer will store all segments in a single MPEG-TS |
|
file, and will use byte ranges in the playlist. HLS playlists generated with |
|
this way will have the version number 4. |
|
For example: |
|
|
|
ffmpeg -i in.nut -hls_flags single_file out.m3u8 |
|
|
|
Will produce the playlist, F<out.m3u8>, and a single segment file, |
|
F<out.ts>. |
|
|
|
|
|
=item B<delete_segments> |
|
|
|
Segment files removed from the playlist are deleted after a period of time |
|
equal to the duration of the segment plus the duration of the playlist. |
|
|
|
|
|
=item B<append_list> |
|
|
|
Append new segments into the end of old segment list, |
|
and remove the C<#EXT-X-ENDLIST> from the old segment list. |
|
|
|
|
|
=item B<round_durations> |
|
|
|
Round the duration info in the playlist file segment info to integer |
|
values, instead of using floating point. |
|
If there are no other features requiring higher HLS versions be used, |
|
then this will allow ffmpeg to output a HLS version 2 m3u8. |
|
|
|
|
|
=item B<discont_start> |
|
|
|
Add the C<#EXT-X-DISCONTINUITY> tag to the playlist, before the |
|
first segment's information. |
|
|
|
|
|
=item B<omit_endlist> |
|
|
|
Do not append the C<EXT-X-ENDLIST> tag at the end of the playlist. |
|
|
|
|
|
=item B<periodic_rekey> |
|
|
|
The file specified by C<hls_key_info_file> will be checked periodically and |
|
detect updates to the encryption info. Be sure to replace this file atomically, |
|
including the file containing the AES encryption key. |
|
|
|
|
|
=item B<independent_segments> |
|
|
|
Add the C<#EXT-X-INDEPENDENT-SEGMENTS> to playlists that has video segments |
|
and when all the segments of that playlist are guaranteed to start with a Key frame. |
|
|
|
|
|
=item B<iframes_only> |
|
|
|
Add the C<#EXT-X-I-FRAMES-ONLY> to playlists that has video segments |
|
and can play only I-frames in the C<#EXT-X-BYTERANGE> mode. |
|
|
|
|
|
=item B<split_by_time> |
|
|
|
Allow segments to start on frames other than keyframes. This improves |
|
behavior on some players when the time between keyframes is inconsistent, |
|
but may make things worse on others, and can cause some oddities during |
|
seeking. This flag should be used with the C<hls_time> option. |
|
|
|
|
|
=item B<program_date_time> |
|
|
|
Generate C<EXT-X-PROGRAM-DATE-TIME> tags. |
|
|
|
|
|
=item B<second_level_segment_index> |
|
|
|
Makes it possible to use segment indexes as %%d in hls_segment_filename expression |
|
besides date/time values when strftime is on. |
|
To get fixed width numbers with trailing zeroes, %%0xd format is available where x is the required width. |
|
|
|
|
|
=item B<second_level_segment_size> |
|
|
|
Makes it possible to use segment sizes (counted in bytes) as %%s in hls_segment_filename |
|
expression besides date/time values when strftime is on. |
|
To get fixed width numbers with trailing zeroes, %%0xs format is available where x is the required width. |
|
|
|
|
|
=item B<second_level_segment_duration> |
|
|
|
Makes it possible to use segment duration (calculated in microseconds) as %%t in hls_segment_filename |
|
expression besides date/time values when strftime is on. |
|
To get fixed width numbers with trailing zeroes, %%0xt format is available where x is the required width. |
|
|
|
|
|
ffmpeg -i sample.mpeg \ |
|
-f hls -hls_time 3 -hls_list_size 5 \ |
|
-hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \ |
|
-strftime 1 -strftime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8 |
|
|
|
This will produce segments like this: |
|
F<segment_20170102194334_0003_00122200_0000003000000.ts>, F<segment_20170102194334_0004_00120072_0000003000000.ts> etc. |
|
|
|
|
|
=item B<temp_file> |
|
|
|
Write segment data to filename.tmp and rename to filename only once the segment is complete. A webserver |
|
serving up segments can be configured to reject requests to *.tmp to prevent access to in-progress segments |
|
before they have been added to the m3u8 playlist. This flag also affects how m3u8 playlist files are created. |
|
If this flag is set, all playlist files will written into temporary file and renamed after they are complete, similarly as segments are handled. |
|
But playlists with C<file> protocol and with type (C<hls_playlist_type>) other than C<vod> |
|
are always written into temporary file regardless of this flag. Master playlist files (C<master_pl_name>), if any, with C<file> protocol, |
|
are always written into temporary file regardless of this flag if C<master_pl_publish_rate> value is other than zero. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=item B<hls_playlist_type event> |
|
|
|
Emit C<#EXT-X-PLAYLIST-TYPE:EVENT> in the m3u8 header. Forces |
|
B<hls_list_size> to 0; the playlist can only be appended to. |
|
|
|
|
|
=item B<hls_playlist_type vod> |
|
|
|
Emit C<#EXT-X-PLAYLIST-TYPE:VOD> in the m3u8 header. Forces |
|
B<hls_list_size> to 0; the playlist must not change. |
|
|
|
|
|
=item B<method> |
|
|
|
Use the given HTTP method to create the hls files. |
|
|
|
ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8 |
|
|
|
This example will upload all the mpegts segment files to the HTTP |
|
server using the HTTP PUT method, and update the m3u8 files every |
|
C<refresh> times using the same method. |
|
Note that the HTTP server must support the given method for uploading |
|
files. |
|
|
|
|
|
=item B<http_user_agent> |
|
|
|
Override User-Agent field in HTTP header. Applicable only for HTTP output. |
|
|
|
|
|
=item B<var_stream_map> |
|
|
|
Map string which specifies how to group the audio, video and subtitle streams |
|
into different variant streams. The variant stream groups are separated |
|
by space. |
|
Expected string format is like this "a:0,v:0 a:1,v:1 ....". Here a:, v:, s: are |
|
the keys to specify audio, video and subtitle streams respectively. |
|
Allowed values are 0 to 9 (limited just based on practical usage). |
|
|
|
When there are two or more variant streams, the output filename pattern must |
|
contain the string "%v", this string specifies the position of variant stream |
|
index in the output media playlist filenames. The string "%v" may be present in |
|
the filename or in the last directory name containing the file. If the string is |
|
present in the directory name, then sub-directories are created after expanding |
|
the directory name pattern. This enables creation of variant streams in |
|
subdirectories. |
|
|
|
|
|
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ |
|
-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" \ |
|
http://example.com/live/out_%v.m3u8 |
|
|
|
This example creates two hls variant streams. The first variant stream will |
|
contain video stream of bitrate 1000k and audio stream of bitrate 64k and the |
|
second variant stream will contain video stream of bitrate 256k and audio |
|
stream of bitrate 32k. Here, two media playlist with file names out_0.m3u8 and |
|
out_1.m3u8 will be created. If you want something meaningful text instead of indexes |
|
in result names, you may specify names for each or some of the variants |
|
as in the following example. |
|
|
|
|
|
|
|
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ |
|
-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" \ |
|
http://example.com/live/out_%v.m3u8 |
|
|
|
|
|
This example creates two hls variant streams as in the previous one. |
|
But here, the two media playlist with file names out_my_hd.m3u8 and |
|
out_my_sd.m3u8 will be created. |
|
|
|
|
|
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \ |
|
-map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \ |
|
http://example.com/live/out_%v.m3u8 |
|
|
|
This example creates three hls variant streams. The first variant stream will |
|
be a video only stream with video bitrate 1000k, the second variant stream will |
|
be an audio only stream with bitrate 64k and the third variant stream will be a |
|
video only stream with bitrate 256k. Here, three media playlist with file names |
|
out_0.m3u8, out_1.m3u8 and out_2.m3u8 will be created. |
|
|
|
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ |
|
-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" \ |
|
http://example.com/live/vs_%v/out.m3u8 |
|
|
|
This example creates the variant streams in subdirectories. Here, the first |
|
media playlist is created at F<http://example.com/live/vs_0/out.m3u8> and |
|
the second one at F<http://example.com/live/vs_1/out.m3u8>. |
|
|
|
ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k \ |
|
-map 0:a -map 0:a -map 0:v -map 0:v -f hls \ |
|
-var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \ |
|
-master_pl_name master.m3u8 \ |
|
http://example.com/live/out_%v.m3u8 |
|
|
|
This example creates two audio only and two video only variant streams. In |
|
addition to the #EXT-X-STREAM-INF tag for each variant stream in the master |
|
playlist, #EXT-X-MEDIA tag is also added for the two audio only variant streams |
|
and they are mapped to the two video only variant streams with audio group names |
|
'aud_low' and 'aud_high'. |
|
|
|
By default, a single hls variant containing all the encoded streams is created. |
|
|
|
|
|
ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ |
|
-map 0:a -map 0:a -map 0:v -f hls \ |
|
-var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \ |
|
-master_pl_name master.m3u8 \ |
|
http://example.com/live/out_%v.m3u8 |
|
|
|
This example creates two audio only and one video only variant streams. In |
|
addition to the #EXT-X-STREAM-INF tag for each variant stream in the master |
|
playlist, #EXT-X-MEDIA tag is also added for the two audio only variant streams |
|
and they are mapped to the one video only variant streams with audio group name |
|
'aud_low', and the audio group have default stat is NO or YES. |
|
|
|
By default, a single hls variant containing all the encoded streams is created. |
|
|
|
|
|
ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ |
|
-map 0:a -map 0:a -map 0:v -f hls \ |
|
-var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \ |
|
-master_pl_name master.m3u8 \ |
|
http://example.com/live/out_%v.m3u8 |
|
|
|
This example creates two audio only and one video only variant streams. In |
|
addition to the #EXT-X-STREAM-INF tag for each variant stream in the master |
|
playlist, #EXT-X-MEDIA tag is also added for the two audio only variant streams |
|
and they are mapped to the one video only variant streams with audio group name |
|
'aud_low', and the audio group have default stat is NO or YES, and one audio |
|
have and language is named ENG, the other audio language is named CHN. |
|
|
|
By default, a single hls variant containing all the encoded streams is created. |
|
|
|
|
|
ffmpeg -y -i input_with_subtitle.mkv \ |
|
-b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \ |
|
-b:a:0 256k \ |
|
-c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \ |
|
-f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle" \ |
|
-master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \ |
|
10 -master_pl_publish_rate 10 -hls_flags \ |
|
delete_segments+discont_start+split_by_time ./tmp/video.m3u8 |
|
|
|
|
|
This example adds C<#EXT-X-MEDIA> tag with C<TYPE=SUBTITLES> in |
|
the master playlist with webvtt subtitle group name 'subtitle'. Please make sure |
|
the input file has one text subtitle stream at least. |
|
|
|
|
|
=item B<cc_stream_map> |
|
|
|
Map string which specifies different closed captions groups and their |
|
attributes. The closed captions stream groups are separated by space. |
|
Expected string format is like this |
|
"ccgroup:E<lt>group nameE<gt>,instreamid:E<lt>INSTREAM-IDE<gt>,language:E<lt>language codeE<gt> ....". |
|
'ccgroup' and 'instreamid' are mandatory attributes. 'language' is an optional |
|
attribute. |
|
The closed captions groups configured using this option are mapped to different |
|
variant streams by providing the same 'ccgroup' name in the |
|
C<var_stream_map> string. If C<var_stream_map> is not set, then the |
|
first available ccgroup in C<cc_stream_map> is mapped to the output variant |
|
stream. The examples for these two use cases are given below. |
|
|
|
|
|
ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \ |
|
-cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \ |
|
-master_pl_name master.m3u8 \ |
|
http://example.com/live/out.m3u8 |
|
|
|
This example adds C<#EXT-X-MEDIA> tag with C<TYPE=CLOSED-CAPTIONS> in |
|
the master playlist with group name 'cc', language 'en' (english) and |
|
INSTREAM-ID 'CC1'. Also, it adds C<CLOSED-CAPTIONS> attribute with group |
|
name 'cc' for the output variant stream. |
|
|
|
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ |
|
-a53cc:0 1 -a53cc:1 1\ |
|
-map 0:v -map 0:a -map 0:v -map 0:a -f hls \ |
|
-cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \ |
|
-var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \ |
|
-master_pl_name master.m3u8 \ |
|
http://example.com/live/out_%v.m3u8 |
|
|
|
This example adds two C<#EXT-X-MEDIA> tags with C<TYPE=CLOSED-CAPTIONS> in |
|
the master playlist for the INSTREAM-IDs 'CC1' and 'CC2'. Also, it adds |
|
C<CLOSED-CAPTIONS> attribute with group name 'cc' for the two output variant |
|
streams. |
|
|
|
|
|
=item B<master_pl_name> |
|
|
|
Create HLS master playlist with the given name. |
|
|
|
|
|
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8 |
|
|
|
This example creates HLS master playlist with name master.m3u8 and it is |
|
published at http://example.com/live/ |
|
|
|
|
|
=item B<master_pl_publish_rate> |
|
|
|
Publish master play list repeatedly every after specified number of segment intervals. |
|
|
|
|
|
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 \ |
|
-hls_time 2 -master_pl_publish_rate 30 http://example.com/live/out.m3u8 |
|
|
|
|
|
This example creates HLS master playlist with name master.m3u8 and keep |
|
publishing it repeatedly every after 30 segments i.e. every after 60s. |
|
|
|
|
|
=item B<http_persistent> |
|
|
|
Use persistent HTTP connections. Applicable only for HTTP output. |
|
|
|
|
|
=item B<timeout> |
|
|
|
Set timeout for socket I/O operations. Applicable only for HTTP output. |
|
|
|
|
|
=item B<ignore_io_errors> |
|
|
|
Ignore IO errors during open, write and delete. Useful for long-duration runs with network output. |
|
|
|
|
|
=item B<headers> |
|
|
|
Set custom HTTP headers, can override built in default headers. Applicable only for HTTP output. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 ico |
|
|
|
|
|
ICO file muxer. |
|
|
|
Microsoft's icon file format (ICO) has some strict limitations that should be noted: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item * |
|
|
|
Size cannot exceed 256 pixels in any dimension |
|
|
|
|
|
=item * |
|
|
|
Only BMP and PNG images can be stored |
|
|
|
|
|
=item * |
|
|
|
If a BMP image is used, it must be one of the following pixel formats: |
|
|
|
BMP Bit Depth FFmpeg Pixel Format |
|
1bit pal8 |
|
4bit pal8 |
|
8bit pal8 |
|
16bit rgb555le |
|
24bit bgr24 |
|
32bit bgra |
|
|
|
|
|
|
|
=item * |
|
|
|
If a BMP image is used, it must use the BITMAPINFOHEADER DIB header |
|
|
|
|
|
=item * |
|
|
|
If a PNG image is used, it must use the rgba pixel format |
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 image2 |
|
|
|
|
|
Image file muxer. |
|
|
|
The image file muxer writes video frames to image files. |
|
|
|
The output filenames are specified by a pattern, which can be used to |
|
produce sequentially numbered series of files. |
|
The pattern may contain the string "%d" or "%0I<N>d", this string |
|
specifies the position of the characters representing a numbering in |
|
the filenames. If the form "%0I<N>d" is used, the string |
|
representing the number in each filename is 0-padded to I<N> |
|
digits. The literal character '%' can be specified in the pattern with |
|
the string "%%". |
|
|
|
If the pattern contains "%d" or "%0I<N>d", the first filename of |
|
the file list specified will contain the number 1, all the following |
|
numbers will be sequential. |
|
|
|
The pattern may contain a suffix which is used to automatically |
|
determine the format of the image files to write. |
|
|
|
For example the pattern "img-%03d.bmp" will specify a sequence of |
|
filenames of the form F<img-001.bmp>, F<img-002.bmp>, ..., |
|
F<img-010.bmp>, etc. |
|
The pattern "img%%-%d.jpg" will specify a sequence of filenames of the |
|
form F<img%-1.jpg>, F<img%-2.jpg>, ..., F<img%-10.jpg>, |
|
etc. |
|
|
|
The image muxer supports the .Y.U.V image file format. This format is |
|
special in that that each image frame consists of three files, for |
|
each of the YUV420P components. To read or write this image file format, |
|
specify the name of the '.Y' file. The muxer will automatically open the |
|
'.U' and '.V' files as required. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<frame_pts> |
|
|
|
If set to 1, expand the filename with pts from pkt-E<gt>pts. |
|
Default value is 0. |
|
|
|
|
|
=item B<start_number> |
|
|
|
Start the sequence from the specified number. Default value is 1. |
|
|
|
|
|
=item B<update> |
|
|
|
If set to 1, the filename will always be interpreted as just a |
|
filename, not a pattern, and the corresponding file will be continuously |
|
overwritten with new images. Default value is 0. |
|
|
|
|
|
=item B<strftime> |
|
|
|
If set to 1, expand the filename with date and time information from |
|
C<strftime()>. Default value is 0. |
|
|
|
|
|
=item B<atomic_writing> |
|
|
|
Write output to a temporary file, which is renamed to target filename once |
|
writing is completed. Default is disabled. |
|
|
|
|
|
=item B<protocol_opts> I<options_list> |
|
|
|
Set protocol options as a :-separated list of key=value parameters. Values |
|
containing the C<:> special character must be escaped. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
The following example shows how to use B<ffmpeg> for creating a |
|
sequence of files F<img-001.jpeg>, F<img-002.jpeg>, ..., |
|
taking one image every second from the input video: |
|
|
|
ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg' |
|
|
|
|
|
Note that with B<ffmpeg>, if the format is not specified with the |
|
C<-f> option and the output filename specifies an image file |
|
format, the image2 muxer is automatically selected, so the previous |
|
command can be written as: |
|
|
|
ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg' |
|
|
|
|
|
Note also that the pattern must not necessarily contain "%d" or |
|
"%0I<N>d", for example to create a single image file |
|
F<img.jpeg> from the start of the input video you can employ the command: |
|
|
|
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg |
|
|
|
|
|
The B<strftime> option allows you to expand the filename with |
|
date and time information. Check the documentation of |
|
the C<strftime()> function for the syntax. |
|
|
|
For example to generate image files from the C<strftime()> |
|
"%Y-%m-%d_%H-%M-%S" pattern, the following B<ffmpeg> command |
|
can be used: |
|
|
|
ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg" |
|
|
|
|
|
You can set the file name with current frame's PTS: |
|
|
|
ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg |
|
|
|
|
|
A more complex example is to publish contents of your desktop directly to a |
|
WebDAV server every second: |
|
|
|
ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg |
|
|
|
|
|
|
|
=head2 matroska |
|
|
|
|
|
Matroska container muxer. |
|
|
|
This muxer implements the matroska and webm container specs. |
|
|
|
|
|
=head3 Metadata |
|
|
|
|
|
The recognized metadata settings in this muxer are: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<title> |
|
|
|
Set title name provided to a single track. This gets mapped to |
|
the FileDescription element for a stream written as attachment. |
|
|
|
|
|
=item B<language> |
|
|
|
Specify the language of the track in the Matroska languages form. |
|
|
|
The language can be either the 3 letters bibliographic ISO-639-2 (ISO |
|
639-2/B) form (like "fre" for French), or a language code mixed with a |
|
country code for specialities in languages (like "fre-ca" for Canadian |
|
French). |
|
|
|
|
|
=item B<stereo_mode> |
|
|
|
Set stereo 3D video layout of two views in a single video track. |
|
|
|
The following values are recognized: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<mono> |
|
|
|
video is not stereo |
|
|
|
=item B<left_right> |
|
|
|
Both views are arranged side by side, Left-eye view is on the left |
|
|
|
=item B<bottom_top> |
|
|
|
Both views are arranged in top-bottom orientation, Left-eye view is at bottom |
|
|
|
=item B<top_bottom> |
|
|
|
Both views are arranged in top-bottom orientation, Left-eye view is on top |
|
|
|
=item B<checkerboard_rl> |
|
|
|
Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first |
|
|
|
=item B<checkerboard_lr> |
|
|
|
Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first |
|
|
|
=item B<row_interleaved_rl> |
|
|
|
Each view is constituted by a row based interleaving, Right-eye view is first row |
|
|
|
=item B<row_interleaved_lr> |
|
|
|
Each view is constituted by a row based interleaving, Left-eye view is first row |
|
|
|
=item B<col_interleaved_rl> |
|
|
|
Both views are arranged in a column based interleaving manner, Right-eye view is first column |
|
|
|
=item B<col_interleaved_lr> |
|
|
|
Both views are arranged in a column based interleaving manner, Left-eye view is first column |
|
|
|
=item B<anaglyph_cyan_red> |
|
|
|
All frames are in anaglyph format viewable through red-cyan filters |
|
|
|
=item B<right_left> |
|
|
|
Both views are arranged side by side, Right-eye view is on the left |
|
|
|
=item B<anaglyph_green_magenta> |
|
|
|
All frames are in anaglyph format viewable through green-magenta filters |
|
|
|
=item B<block_lr> |
|
|
|
Both eyes laced in one Block, Left-eye view is first |
|
|
|
=item B<block_rl> |
|
|
|
Both eyes laced in one Block, Right-eye view is first |
|
|
|
=back |
|
|
|
|
|
=back |
|
|
|
|
|
For example a 3D WebM clip can be created using the following command line: |
|
|
|
ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm |
|
|
|
|
|
|
|
=head3 Options |
|
|
|
|
|
This muxer supports the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<reserve_index_space> |
|
|
|
By default, this muxer writes the index for seeking (called cues in Matroska |
|
terms) at the end of the file, because it cannot know in advance how much space |
|
to leave for the index at the beginning of the file. However for some use cases |
|
-- e.g. streaming where seeking is possible but slow -- it is useful to put the |
|
index at the beginning of the file. |
|
|
|
If this option is set to a non-zero value, the muxer will reserve a given amount |
|
of space in the file header and then try to write the cues there when the muxing |
|
finishes. If the reserved space does not suffice, no Cues will be written, the |
|
file will be finalized and writing the trailer will return an error. |
|
A safe size for most use cases should be about 50kB per hour of video. |
|
|
|
Note that cues are only written if the output is seekable and this option will |
|
have no effect if it is not. |
|
|
|
|
|
=item B<cues_to_front> |
|
|
|
If set, the muxer will write the index at the beginning of the file |
|
by shifting the main data if necessary. This can be combined with |
|
reserve_index_space in which case the data is only shifted if |
|
the initially reserved space turns out to be insufficient. |
|
|
|
This option is ignored if the output is unseekable. |
|
|
|
|
|
=item B<default_mode> |
|
|
|
This option controls how the FlagDefault of the output tracks will be set. |
|
It influences which tracks players should play by default. The default mode |
|
is B<passthrough>. |
|
|
|
=over 4 |
|
|
|
|
|
=item B<infer> |
|
|
|
Every track with disposition default will have the FlagDefault set. |
|
Additionally, for each type of track (audio, video or subtitle), if no track |
|
with disposition default of this type exists, then the first track of this type |
|
will be marked as default (if existing). This ensures that the default flag |
|
is set in a sensible way even if the input originated from containers that |
|
lack the concept of default tracks. |
|
|
|
=item B<infer_no_subs> |
|
|
|
This mode is the same as infer except that if no subtitle track with |
|
disposition default exists, no subtitle track will be marked as default. |
|
|
|
=item B<passthrough> |
|
|
|
In this mode the FlagDefault is set if and only if the AV_DISPOSITION_DEFAULT |
|
flag is set in the disposition of the corresponding stream. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<flipped_raw_rgb> |
|
|
|
If set to true, store positive height for raw RGB bitmaps, which indicates |
|
bitmap is stored bottom-up. Note that this option does not flip the bitmap |
|
which has to be done manually beforehand, e.g. by using the vflip filter. |
|
Default is I<false> and indicates bitmap is stored top down. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 md5 |
|
|
|
|
|
MD5 testing format. |
|
|
|
This is a variant of the B<hash> muxer. Unlike that muxer, it |
|
defaults to using the MD5 hash function. |
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
To compute the MD5 hash of the input converted to raw |
|
audio and video, and store it in the file F<out.md5>: |
|
|
|
ffmpeg -i INPUT -f md5 out.md5 |
|
|
|
|
|
You can print the MD5 to stdout with the command: |
|
|
|
ffmpeg -i INPUT -f md5 - |
|
|
|
|
|
See also the B<hash> and B<framemd5> muxers. |
|
|
|
|
|
=head2 mov, mp4, ismv |
|
|
|
|
|
MOV/MP4/ISMV (Smooth Streaming) muxer. |
|
|
|
The mov/mp4/ismv muxer supports fragmentation. Normally, a MOV/MP4 |
|
file has all the metadata about all packets stored in one location |
|
(written at the end of the file, it can be moved to the start for |
|
better playback by adding C<+faststart> to the C<-movflags>, or |
|
using the B<qt-faststart> tool). |
|
|
|
A fragmented |
|
file consists of a number of fragments, where packets and metadata |
|
about these packets are stored together. Writing a fragmented |
|
file has the advantage that the file is decodable even if the |
|
writing is interrupted (while a normal MOV/MP4 is undecodable if |
|
it is not properly finished), and it requires less memory when writing |
|
very long files (since writing normal MOV/MP4 files stores info about |
|
every single packet in memory until the file is closed). The downside |
|
is that it is less compatible with other applications. |
|
|
|
Fragmentation is enabled by setting one of the options that define |
|
how to cut the file into fragments: C<-frag_duration>, C<-frag_size>, |
|
C<-min_frag_duration>, C<-movflags +frag_keyframe> and |
|
C<-movflags +frag_custom>. If more than one condition is specified, |
|
fragments are cut when one of the specified conditions is fulfilled. The |
|
exception to this is C<-min_frag_duration>, which has to be fulfilled for |
|
any of the other conditions to apply. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<frag_duration> I<duration> |
|
|
|
Create fragments that are I<duration> microseconds long. |
|
|
|
=item B<frag_size> I<size> |
|
|
|
Create fragments that contain up to I<size> bytes of payload data. |
|
|
|
=item B<min_frag_duration> I<duration> |
|
|
|
Don't create fragments that are shorter than I<duration> microseconds long. |
|
|
|
=item B<movflags> I<flags> |
|
|
|
Set various muxing switches. The following flags can be used: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<frag_keyframe> |
|
|
|
Start a new fragment at each video keyframe. |
|
|
|
=item B<frag_custom> |
|
|
|
Allow the caller to manually choose when to cut fragments, by |
|
calling C<av_write_frame(ctx, NULL)> to write a fragment with |
|
the packets written so far. (This is only useful with other |
|
applications integrating libavformat, not from B<ffmpeg>.) |
|
|
|
=item B<empty_moov> |
|
|
|
Write an initial moov atom directly at the start of the file, without |
|
describing any samples in it. Generally, an mdat/moov pair is written |
|
at the start of the file, as a normal MOV/MP4 file, containing only |
|
a short portion of the file. With this option set, there is no initial |
|
mdat atom, and the moov atom only describes the tracks but has |
|
a zero duration. |
|
|
|
This option is implicitly set when writing ismv (Smooth Streaming) files. |
|
|
|
=item B<separate_moof> |
|
|
|
Write a separate moof (movie fragment) atom for each track. Normally, |
|
packets for all tracks are written in a moof atom (which is slightly |
|
more efficient), but with this option set, the muxer writes one moof/mdat |
|
pair for each track, making it easier to separate tracks. |
|
|
|
This option is implicitly set when writing ismv (Smooth Streaming) files. |
|
|
|
=item B<skip_sidx> |
|
|
|
Skip writing of sidx atom. When bitrate overhead due to sidx atom is high, |
|
this option could be used for cases where sidx atom is not mandatory. |
|
When global_sidx flag is enabled, this option will be ignored. |
|
|
|
=item B<faststart> |
|
|
|
Run a second pass moving the index (moov atom) to the beginning of the file. |
|
This operation can take a while, and will not work in various situations such |
|
as fragmented output, thus it is not enabled by default. |
|
|
|
=item B<rtphint> |
|
|
|
Add RTP hinting tracks to the output file. |
|
|
|
=item B<disable_chpl> |
|
|
|
Disable Nero chapter markers (chpl atom). Normally, both Nero chapters |
|
and a QuickTime chapter track are written to the file. With this option |
|
set, only the QuickTime chapter track will be written. Nero chapters can |
|
cause failures when the file is reprocessed with certain tagging programs, like |
|
mp3Tag 2.61a and iTunes 11.3, most likely other versions are affected as well. |
|
|
|
=item B<omit_tfhd_offset> |
|
|
|
Do not write any absolute base_data_offset in tfhd atoms. This avoids |
|
tying fragments to absolute byte positions in the file/streams. |
|
|
|
=item B<default_base_moof> |
|
|
|
Similarly to the omit_tfhd_offset, this flag avoids writing the |
|
absolute base_data_offset field in tfhd atoms, but does so by using |
|
the new default-base-is-moof flag instead. This flag is new from |
|
14496-12:2012. This may make the fragments easier to parse in certain |
|
circumstances (avoiding basing track fragment location calculations |
|
on the implicit end of the previous track fragment). |
|
|
|
=item B<negative_cts_offsets> |
|
|
|
Enables utilization of version 1 of the CTTS box, in which the CTS offsets can |
|
be negative. This enables the initial sample to have DTS/CTS of zero, and |
|
reduces the need for edit lists for some cases such as video tracks with |
|
B-frames. Additionally, eases conformance with the DASH-IF interoperability |
|
guidelines. |
|
|
|
This option is implicitly set when writing ismv (Smooth Streaming) files. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<moov_size> I<bytes> |
|
|
|
Reserves space for the moov atom at the beginning of the file instead of placing the |
|
moov atom at the end. If the space reserved is insufficient, muxing will fail. |
|
|
|
|
|
=item B<write_tmcd> |
|
|
|
Specify C<on> to force writing a timecode track, C<off> to disable it |
|
and C<auto> to write a timecode track only for mov and mp4 output (default). |
|
|
|
|
|
=item B<write_btrt> I<bool> |
|
|
|
Force or disable writing bitrate box inside stsd box of a track. |
|
The box contains decoding buffer size (in bytes), maximum bitrate and |
|
average bitrate for the track. The box will be skipped if none of these values |
|
can be computed. |
|
Default is C<-1> or C<auto>, which will write the box only in MP4 mode. |
|
|
|
|
|
=item B<write_prft> |
|
|
|
Write producer time reference box (PRFT) with a specified time source for the |
|
NTP field in the PRFT box. Set value as B<wallclock> to specify timesource |
|
as wallclock time and B<pts> to specify timesource as input packets' PTS |
|
values. |
|
|
|
Setting value to B<pts> is applicable only for a live encoding use case, |
|
where PTS values are set as as wallclock time at the source. For example, an |
|
encoding use case with decklink capture source where B<video_pts> and |
|
B<audio_pts> are set to B<abs_wallclock>. |
|
|
|
|
|
=item B<empty_hdlr_name> I<bool> |
|
|
|
Enable to skip writing the name inside a C<hdlr> box. |
|
Default is C<false>. |
|
|
|
|
|
=item B<movie_timescale> I<scale> |
|
|
|
Set the timescale written in the movie header box (C<mvhd>). |
|
Range is 1 to INT_MAX. Default is 1000. |
|
|
|
|
|
=item B<video_track_timescale> I<scale> |
|
|
|
Set the timescale used for video tracks. Range is 0 to INT_MAX. |
|
If set to C<0>, the timescale is automatically set based on |
|
the native stream time base. Default is 0. |
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Example |
|
|
|
|
|
Smooth Streaming content can be pushed in real time to a publishing |
|
point on IIS with this muxer. Example: |
|
|
|
ffmpeg -re <<normal input/transcoding options>> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1) |
|
|
|
|
|
|
|
=head2 mp3 |
|
|
|
|
|
The MP3 muxer writes a raw MP3 stream with the following optional features: |
|
|
|
=over 4 |
|
|
|
|
|
=item * |
|
|
|
An ID3v2 metadata header at the beginning (enabled by default). Versions 2.3 and |
|
2.4 are supported, the C<id3v2_version> private option controls which one is |
|
used (3 or 4). Setting C<id3v2_version> to 0 disables the ID3v2 header |
|
completely. |
|
|
|
The muxer supports writing attached pictures (APIC frames) to the ID3v2 header. |
|
The pictures are supplied to the muxer in form of a video stream with a single |
|
packet. There can be any number of those streams, each will correspond to a |
|
single APIC frame. The stream metadata tags I<title> and I<comment> map |
|
to APIC I<description> and I<picture type> respectively. See |
|
E<lt>B<http://id3.org/id3v2.4.0-frames>E<gt> for allowed picture types. |
|
|
|
Note that the APIC frames must be written at the beginning, so the muxer will |
|
buffer the audio frames until it gets all the pictures. It is therefore advised |
|
to provide the pictures as soon as possible to avoid excessive buffering. |
|
|
|
|
|
=item * |
|
|
|
A Xing/LAME frame right after the ID3v2 header (if present). It is enabled by |
|
default, but will be written only if the output is seekable. The |
|
C<write_xing> private option can be used to disable it. The frame contains |
|
various information that may be useful to the decoder, like the audio duration |
|
or encoder delay. |
|
|
|
|
|
=item * |
|
|
|
A legacy ID3v1 tag at the end of the file (disabled by default). It may be |
|
enabled with the C<write_id3v1> private option, but as its capabilities are |
|
very limited, its usage is not recommended. |
|
|
|
=back |
|
|
|
|
|
Examples: |
|
|
|
Write an mp3 with an ID3v2.3 header and an ID3v1 footer: |
|
|
|
ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3 |
|
|
|
|
|
To attach a picture to an mp3 file select both the audio and the picture stream |
|
with C<map>: |
|
|
|
ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1 |
|
-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3 |
|
|
|
|
|
Write a "clean" MP3 without any extra features: |
|
|
|
ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3 |
|
|
|
|
|
|
|
=head2 mpegts |
|
|
|
|
|
MPEG transport stream muxer. |
|
|
|
This muxer implements ISO 13818-1 and part of ETSI EN 300 468. |
|
|
|
The recognized metadata settings in mpegts muxer are C<service_provider> |
|
and C<service_name>. If they are not set the default for |
|
C<service_provider> is B<FFmpeg> and the default for |
|
C<service_name> is B<Service01>. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
The muxer options are: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<mpegts_transport_stream_id> I<integer> |
|
|
|
Set the B<transport_stream_id>. This identifies a transponder in DVB. |
|
Default is C<0x0001>. |
|
|
|
|
|
=item B<mpegts_original_network_id> I<integer> |
|
|
|
Set the B<original_network_id>. This is unique identifier of a |
|
network in DVB. Its main use is in the unique identification of a service |
|
through the path B<Original_Network_ID, Transport_Stream_ID>. Default |
|
is C<0x0001>. |
|
|
|
|
|
=item B<mpegts_service_id> I<integer> |
|
|
|
Set the B<service_id>, also known as program in DVB. Default is |
|
C<0x0001>. |
|
|
|
|
|
=item B<mpegts_service_type> I<integer> |
|
|
|
Set the program B<service_type>. Default is C<digital_tv>. |
|
Accepts the following options: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<hex_value> |
|
|
|
Any hexadecimal value between C<0x01> and C<0xff> as defined in |
|
ETSI 300 468. |
|
|
|
=item B<digital_tv> |
|
|
|
Digital TV service. |
|
|
|
=item B<digital_radio> |
|
|
|
Digital Radio service. |
|
|
|
=item B<teletext> |
|
|
|
Teletext service. |
|
|
|
=item B<advanced_codec_digital_radio> |
|
|
|
Advanced Codec Digital Radio service. |
|
|
|
=item B<mpeg2_digital_hdtv> |
|
|
|
MPEG2 Digital HDTV service. |
|
|
|
=item B<advanced_codec_digital_sdtv> |
|
|
|
Advanced Codec Digital SDTV service. |
|
|
|
=item B<advanced_codec_digital_hdtv> |
|
|
|
Advanced Codec Digital HDTV service. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<mpegts_pmt_start_pid> I<integer> |
|
|
|
Set the first PID for PMTs. Default is C<0x1000>, minimum is C<0x0020>, |
|
maximum is C<0x1ffa>. This option has no effect in m2ts mode where the PMT |
|
PID is fixed C<0x0100>. |
|
|
|
|
|
=item B<mpegts_start_pid> I<integer> |
|
|
|
Set the first PID for elementary streams. Default is C<0x0100>, minimum is |
|
C<0x0020>, maximum is C<0x1ffa>. This option has no effect in m2ts mode |
|
where the elementary stream PIDs are fixed. |
|
|
|
|
|
=item B<mpegts_m2ts_mode> I<boolean> |
|
|
|
Enable m2ts mode if set to C<1>. Default value is C<-1> which |
|
disables m2ts mode. |
|
|
|
|
|
=item B<muxrate> I<integer> |
|
|
|
Set a constant muxrate. Default is VBR. |
|
|
|
|
|
=item B<pes_payload_size> I<integer> |
|
|
|
Set minimum PES packet payload in bytes. Default is C<2930>. |
|
|
|
|
|
=item B<mpegts_flags> I<flags> |
|
|
|
Set mpegts flags. Accepts the following options: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<resend_headers> |
|
|
|
Reemit PAT/PMT before writing the next packet. |
|
|
|
=item B<latm> |
|
|
|
Use LATM packetization for AAC. |
|
|
|
=item B<pat_pmt_at_frames> |
|
|
|
Reemit PAT and PMT at each video frame. |
|
|
|
=item B<system_b> |
|
|
|
Conform to System B (DVB) instead of System A (ATSC). |
|
|
|
=item B<initial_discontinuity> |
|
|
|
Mark the initial packet of each stream as discontinuity. |
|
|
|
=item B<nit> |
|
|
|
Emit NIT table. |
|
|
|
=item B<omit_rai> |
|
|
|
Disable writing of random access indicator. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<mpegts_copyts> I<boolean> |
|
|
|
Preserve original timestamps, if value is set to C<1>. Default value |
|
is C<-1>, which results in shifting timestamps so that they start from 0. |
|
|
|
|
|
=item B<omit_video_pes_length> I<boolean> |
|
|
|
Omit the PES packet length for video packets. Default is C<1> (true). |
|
|
|
|
|
=item B<pcr_period> I<integer> |
|
|
|
Override the default PCR retransmission time in milliseconds. Default is |
|
C<-1> which means that the PCR interval will be determined automatically: |
|
20 ms is used for CBR streams, the highest multiple of the frame duration which |
|
is less than 100 ms is used for VBR streams. |
|
|
|
|
|
=item B<pat_period> I<duration> |
|
|
|
Maximum time in seconds between PAT/PMT tables. Default is C<0.1>. |
|
|
|
|
|
=item B<sdt_period> I<duration> |
|
|
|
Maximum time in seconds between SDT tables. Default is C<0.5>. |
|
|
|
|
|
=item B<nit_period> I<duration> |
|
|
|
Maximum time in seconds between NIT tables. Default is C<0.5>. |
|
|
|
|
|
=item B<tables_version> I<integer> |
|
|
|
Set PAT, PMT, SDT and NIT version (default C<0>, valid values are from 0 to 31, inclusively). |
|
This option allows updating stream structure so that standard consumer may |
|
detect the change. To do so, reopen output C<AVFormatContext> (in case of API |
|
usage) or restart B<ffmpeg> instance, cyclically changing |
|
B<tables_version> value: |
|
|
|
|
|
ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 |
|
ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 |
|
... |
|
ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111 |
|
ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 |
|
ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 |
|
... |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Example |
|
|
|
|
|
|
|
ffmpeg -i file.mpg -c copy \ |
|
-mpegts_original_network_id 0x1122 \ |
|
-mpegts_transport_stream_id 0x3344 \ |
|
-mpegts_service_id 0x5566 \ |
|
-mpegts_pmt_start_pid 0x1500 \ |
|
-mpegts_start_pid 0x150 \ |
|
-metadata service_provider="Some provider" \ |
|
-metadata service_name="Some Channel" \ |
|
out.ts |
|
|
|
|
|
|
|
=head2 mxf, mxf_d10, mxf_opatom |
|
|
|
|
|
MXF muxer. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
The muxer options are: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<store_user_comments> I<bool> |
|
|
|
Set if user comments should be stored if available or never. |
|
IRT D-10 does not allow user comments. The default is thus to write them for |
|
mxf and mxf_opatom but not for mxf_d10 |
|
|
|
=back |
|
|
|
|
|
|
|
=head2 null |
|
|
|
|
|
Null muxer. |
|
|
|
This muxer does not generate any output file, it is mainly useful for |
|
testing or benchmarking purposes. |
|
|
|
For example to benchmark decoding with B<ffmpeg> you can use the |
|
command: |
|
|
|
ffmpeg -benchmark -i INPUT -f null out.null |
|
|
|
|
|
Note that the above command does not read or write the F<out.null> |
|
file, but specifying the output file is required by the B<ffmpeg> |
|
syntax. |
|
|
|
Alternatively you can write the command as: |
|
|
|
ffmpeg -benchmark -i INPUT -f null - |
|
|
|
|
|
|
|
=head2 nut |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<-syncpoints> I<flags> |
|
|
|
Change the syncpoint usage in nut: |
|
|
|
=over 4 |
|
|
|
|
|
=item I<default> B<use the normal low-overhead seeking aids.> |
|
|
|
|
|
=item I<none> B<do not use the syncpoints at all, reducing the overhead but making the stream non-seekable;> |
|
|
|
Use of this option is not recommended, as the resulting files are very damage |
|
sensitive and seeking is not possible. Also in general the overhead from |
|
syncpoints is negligible. Note, -C<write_index> 0 can be used to disable |
|
all growing data tables, allowing to mux endless streams with limited memory |
|
and without these disadvantages. |
|
|
|
=item I<timestamped> B<extend the syncpoint with a wallclock field.> |
|
|
|
|
|
=back |
|
|
|
The I<none> and I<timestamped> flags are experimental. |
|
|
|
=item B<-write_index> I<bool> |
|
|
|
Write index at the end, the default is to write an index. |
|
|
|
=back |
|
|
|
|
|
|
|
ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor |
|
|
|
|
|
|
|
=head2 ogg |
|
|
|
|
|
Ogg container muxer. |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<-page_duration> I<duration> |
|
|
|
Preferred page duration, in microseconds. The muxer will attempt to create |
|
pages that are approximately I<duration> microseconds long. This allows the |
|
user to compromise between seek granularity and container overhead. The default |
|
is 1 second. A value of 0 will fill all segments, making pages as large as |
|
possible. A value of 1 will effectively use 1 packet-per-page in most |
|
situations, giving a small seek granularity at the cost of additional container |
|
overhead. |
|
|
|
=item B<-serial_offset> I<value> |
|
|
|
Serial value from which to set the streams serial number. |
|
Setting it to different and sufficiently large values ensures that the produced |
|
ogg files can be safely chained. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 raw muxers |
|
|
|
|
|
Raw muxers accept a single stream matching the designated codec. They do not store timestamps or metadata. |
|
The recognized extension is the same as the muxer name unless indicated otherwise. |
|
|
|
|
|
=head3 ac3 |
|
|
|
|
|
Dolby Digital, also known as AC-3, audio. |
|
|
|
|
|
=head3 adx |
|
|
|
|
|
CRI Middleware ADX audio. |
|
|
|
This muxer will write out the total sample count near the start of the first packet |
|
when the output is seekable and the count can be stored in 32 bits. |
|
|
|
|
|
=head3 aptx |
|
|
|
|
|
aptX (Audio Processing Technology for Bluetooth) audio. |
|
|
|
|
|
=head3 aptx_hd |
|
|
|
|
|
aptX HD (Audio Processing Technology for Bluetooth) audio. |
|
|
|
Extensions: aptxhd |
|
|
|
|
|
=head3 avs2 |
|
|
|
|
|
AVS2-P2/IEEE1857.4 video. |
|
|
|
Extensions: avs, avs2 |
|
|
|
|
|
=head3 cavsvideo |
|
|
|
|
|
Chinese AVS (Audio Video Standard) video. |
|
|
|
Extensions: cavs |
|
|
|
|
|
=head3 codec2raw |
|
|
|
|
|
Codec 2 audio. |
|
|
|
No extension is registered so format name has to be supplied e.g. with the ffmpeg CLI tool C<-f codec2raw>. |
|
|
|
|
|
=head3 data |
|
|
|
|
|
Data muxer accepts a single stream with any codec of any type. |
|
The input stream has to be selected using the C<-map> option with the ffmpeg CLI tool. |
|
|
|
No extension is registered so format name has to be supplied e.g. with the ffmpeg CLI tool C<-f data>. |
|
|
|
|
|
=head3 dirac |
|
|
|
|
|
BBC Dirac video. The Dirac Pro codec is a subset and is standardized as SMPTE VC-2. |
|
|
|
Extensions: drc, vc2 |
|
|
|
|
|
=head3 dnxhd |
|
|
|
|
|
Avid DNxHD video. It is standardized as SMPTE VC-3. Accepts DNxHR streams. |
|
|
|
Extensions: dnxhd, dnxhr |
|
|
|
|
|
=head3 dts |
|
|
|
|
|
DTS Coherent Acoustics (DCA) audio. |
|
|
|
|
|
=head3 eac3 |
|
|
|
|
|
Dolby Digital Plus, also known as Enhanced AC-3, audio. |
|
|
|
|
|
=head3 evc |
|
|
|
|
|
MPEG-5 Essential Video Coding (EVC) / EVC / MPEG-5 Part 1 EVC video. |
|
|
|
Extensions: evc |
|
|
|
|
|
=head3 g722 |
|
|
|
|
|
ITU-T G.722 audio. |
|
|
|
|
|
=head3 g723_1 |
|
|
|
|
|
ITU-T G.723.1 audio. |
|
|
|
Extensions: tco, rco |
|
|
|
|
|
=head3 g726 |
|
|
|
|
|
ITU-T G.726 big-endian ("left-justified") audio. |
|
|
|
No extension is registered so format name has to be supplied e.g. with the ffmpeg CLI tool C<-f g726>. |
|
|
|
|
|
=head3 g726le |
|
|
|
|
|
ITU-T G.726 little-endian ("right-justified") audio. |
|
|
|
No extension is registered so format name has to be supplied e.g. with the ffmpeg CLI tool C<-f g726le>. |
|
|
|
|
|
=head3 gsm |
|
|
|
|
|
Global System for Mobile Communications audio. |
|
|
|
|
|
=head3 h261 |
|
|
|
|
|
ITU-T H.261 video. |
|
|
|
|
|
=head3 h263 |
|
|
|
|
|
ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 video. |
|
|
|
|
|
=head3 h264 |
|
|
|
|
|
ITU-T H.264 / MPEG-4 Part 10 AVC video. Bitstream shall be converted to Annex B syntax if it's in length-prefixed mode. |
|
|
|
Extensions: h264, 264 |
|
|
|
|
|
=head3 hevc |
|
|
|
|
|
ITU-T H.265 / MPEG-H Part 2 HEVC video. Bitstream shall be converted to Annex B syntax if it's in length-prefixed mode. |
|
|
|
Extensions: hevc, h265, 265 |
|
|
|
|
|
=head3 m4v |
|
|
|
|
|
MPEG-4 Part 2 video. |
|
|
|
|
|
=head3 mjpeg |
|
|
|
|
|
Motion JPEG video. |
|
|
|
Extensions: mjpg, mjpeg |
|
|
|
|
|
=head3 mlp |
|
|
|
|
|
Meridian Lossless Packing, also known as Packed PCM, audio. |
|
|
|
|
|
=head3 mp2 |
|
|
|
|
|
MPEG-1 Audio Layer II audio. |
|
|
|
Extensions: mp2, m2a, mpa |
|
|
|
|
|
=head3 mpeg1video |
|
|
|
|
|
MPEG-1 Part 2 video. |
|
|
|
Extensions: mpg, mpeg, m1v |
|
|
|
|
|
=head3 mpeg2video |
|
|
|
|
|
ITU-T H.262 / MPEG-2 Part 2 video. |
|
|
|
Extensions: m2v |
|
|
|
|
|
=head3 obu |
|
|
|
|
|
AV1 low overhead Open Bitstream Units muxer. Temporal delimiter OBUs will be inserted in all temporal units of the stream. |
|
|
|
|
|
=head3 rawvideo |
|
|
|
|
|
Raw uncompressed video. |
|
|
|
Extensions: yuv, rgb |
|
|
|
|
|
=head3 sbc |
|
|
|
|
|
Bluetooth SIG low-complexity subband codec audio. |
|
|
|
Extensions: sbc, msbc |
|
|
|
|
|
=head3 truehd |
|
|
|
|
|
Dolby TrueHD audio. |
|
|
|
Extensions: thd |
|
|
|
|
|
=head3 vc1 |
|
|
|
|
|
SMPTE 421M / VC-1 video. |
|
|
|
|
|
|
|
=head2 segment, stream_segment, ssegment |
|
|
|
|
|
Basic stream segmenter. |
|
|
|
This muxer outputs streams to a number of separate files of nearly |
|
fixed duration. Output filename pattern can be set in a fashion |
|
similar to B<image2>, or by using a C<strftime> template if |
|
the B<strftime> option is enabled. |
|
|
|
C<stream_segment> is a variant of the muxer used to write to |
|
streaming output formats, i.e. which do not require global headers, |
|
and is recommended for outputting e.g. to MPEG transport stream segments. |
|
C<ssegment> is a shorter alias for C<stream_segment>. |
|
|
|
Every segment starts with a keyframe of the selected reference stream, |
|
which is set through the B<reference_stream> option. |
|
|
|
Note that if you want accurate splitting for a video file, you need to |
|
make the input key frames correspond to the exact splitting times |
|
expected by the segmenter, or the segment muxer will start the new |
|
segment with the key frame found next after the specified start |
|
time. |
|
|
|
The segment muxer works best with a single constant frame rate video. |
|
|
|
Optionally it can generate a list of the created segments, by setting |
|
the option I<segment_list>. The list type is specified by the |
|
I<segment_list_type> option. The entry filenames in the segment |
|
list are set by default to the basename of the corresponding segment |
|
files. |
|
|
|
See also the B<hls> muxer, which provides a more specific |
|
implementation for HLS segmentation. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
The segment muxer supports the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<increment_tc> I<1|0> |
|
|
|
if set to C<1>, increment timecode between each segment |
|
If this is selected, the input need to have |
|
a timecode in the first video stream. Default value is |
|
C<0>. |
|
|
|
|
|
=item B<reference_stream> I<specifier> |
|
|
|
Set the reference stream, as specified by the string I<specifier>. |
|
If I<specifier> is set to C<auto>, the reference is chosen |
|
automatically. Otherwise it must be a stream specifier (see the ``Stream |
|
specifiers'' chapter in the ffmpeg manual) which specifies the |
|
reference stream. The default value is C<auto>. |
|
|
|
|
|
=item B<segment_format> I<format> |
|
|
|
Override the inner container format, by default it is guessed by the filename |
|
extension. |
|
|
|
|
|
=item B<segment_format_options> I<options_list> |
|
|
|
Set output format options using a :-separated list of key=value |
|
parameters. Values containing the C<:> special character must be |
|
escaped. |
|
|
|
|
|
=item B<segment_list> I<name> |
|
|
|
Generate also a listfile named I<name>. If not specified no |
|
listfile is generated. |
|
|
|
|
|
=item B<segment_list_flags> I<flags> |
|
|
|
Set flags affecting the segment list generation. |
|
|
|
It currently supports the following flags: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<cache> |
|
|
|
Allow caching (only affects M3U8 list files). |
|
|
|
|
|
=item B<live> |
|
|
|
Allow live-friendly file generation. |
|
|
|
=back |
|
|
|
|
|
|
|
=item B<segment_list_size> I<size> |
|
|
|
Update the list file so that it contains at most I<size> |
|
segments. If 0 the list file will contain all the segments. Default |
|
value is 0. |
|
|
|
|
|
=item B<segment_list_entry_prefix> I<prefix> |
|
|
|
Prepend I<prefix> to each entry. Useful to generate absolute paths. |
|
By default no prefix is applied. |
|
|
|
|
|
=item B<segment_list_type> I<type> |
|
|
|
Select the listing format. |
|
|
|
The following values are recognized: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<flat> |
|
|
|
Generate a flat list for the created segments, one segment per line. |
|
|
|
|
|
=item B<csv, ext> |
|
|
|
Generate a list for the created segments, one segment per line, |
|
each line matching the format (comma-separated values): |
|
|
|
<segment_filename>,<segment_start_time>,<segment_end_time> |
|
|
|
|
|
I<segment_filename> is the name of the output file generated by the |
|
muxer according to the provided pattern. CSV escaping (according to |
|
RFC4180) is applied if required. |
|
|
|
I<segment_start_time> and I<segment_end_time> specify |
|
the segment start and end time expressed in seconds. |
|
|
|
A list file with the suffix C<".csv"> or C<".ext"> will |
|
auto-select this format. |
|
|
|
B<ext> is deprecated in favor or B<csv>. |
|
|
|
|
|
=item B<ffconcat> |
|
|
|
Generate an ffconcat file for the created segments. The resulting file |
|
can be read using the FFmpeg B<concat> demuxer. |
|
|
|
A list file with the suffix C<".ffcat"> or C<".ffconcat"> will |
|
auto-select this format. |
|
|
|
|
|
=item B<m3u8> |
|
|
|
Generate an extended M3U8 file, version 3, compliant with |
|
E<lt>B<http://tools.ietf.org/id/draft-pantos-http-live-streaming>E<gt>. |
|
|
|
A list file with the suffix C<".m3u8"> will auto-select this format. |
|
|
|
=back |
|
|
|
|
|
If not specified the type is guessed from the list file name suffix. |
|
|
|
|
|
=item B<segment_time> I<time> |
|
|
|
Set segment duration to I<time>, the value must be a duration |
|
specification. Default value is "2". See also the |
|
B<segment_times> option. |
|
|
|
Note that splitting may not be accurate, unless you force the |
|
reference stream key-frames at the given time. See the introductory |
|
notice and the examples below. |
|
|
|
|
|
=item B<min_seg_duration> I<time> |
|
|
|
Set minimum segment duration to I<time>, the value must be a duration |
|
specification. This prevents the muxer ending segments at a duration below |
|
this value. Only effective with C<segment_time>. Default value is "0". |
|
|
|
|
|
=item B<segment_atclocktime> I<1|0> |
|
|
|
If set to "1" split at regular clock time intervals starting from 00:00 |
|
o'clock. The I<time> value specified in B<segment_time> is |
|
used for setting the length of the splitting interval. |
|
|
|
For example with B<segment_time> set to "900" this makes it possible |
|
to create files at 12:00 o'clock, 12:15, 12:30, etc. |
|
|
|
Default value is "0". |
|
|
|
|
|
=item B<segment_clocktime_offset> I<duration> |
|
|
|
Delay the segment splitting times with the specified duration when using |
|
B<segment_atclocktime>. |
|
|
|
For example with B<segment_time> set to "900" and |
|
B<segment_clocktime_offset> set to "300" this makes it possible to |
|
create files at 12:05, 12:20, 12:35, etc. |
|
|
|
Default value is "0". |
|
|
|
|
|
=item B<segment_clocktime_wrap_duration> I<duration> |
|
|
|
Force the segmenter to only start a new segment if a packet reaches the muxer |
|
within the specified duration after the segmenting clock time. This way you |
|
can make the segmenter more resilient to backward local time jumps, such as |
|
leap seconds or transition to standard time from daylight savings time. |
|
|
|
Default is the maximum possible duration which means starting a new segment |
|
regardless of the elapsed time since the last clock time. |
|
|
|
|
|
=item B<segment_time_delta> I<delta> |
|
|
|
Specify the accuracy time when selecting the start time for a |
|
segment, expressed as a duration specification. Default value is "0". |
|
|
|
When delta is specified a key-frame will start a new segment if its |
|
PTS satisfies the relation: |
|
|
|
PTS >= start_time - time_delta |
|
|
|
|
|
This option is useful when splitting video content, which is always |
|
split at GOP boundaries, in case a key frame is found just before the |
|
specified split time. |
|
|
|
In particular may be used in combination with the F<ffmpeg> option |
|
I<force_key_frames>. The key frame times specified by |
|
I<force_key_frames> may not be set accurately because of rounding |
|
issues, with the consequence that a key frame time may result set just |
|
before the specified time. For constant frame rate videos a value of |
|
1/(2*I<frame_rate>) should address the worst case mismatch between |
|
the specified time and the time set by I<force_key_frames>. |
|
|
|
|
|
=item B<segment_times> I<times> |
|
|
|
Specify a list of split points. I<times> contains a list of comma |
|
separated duration specifications, in increasing order. See also |
|
the B<segment_time> option. |
|
|
|
|
|
=item B<segment_frames> I<frames> |
|
|
|
Specify a list of split video frame numbers. I<frames> contains a |
|
list of comma separated integer numbers, in increasing order. |
|
|
|
This option specifies to start a new segment whenever a reference |
|
stream key frame is found and the sequential number (starting from 0) |
|
of the frame is greater or equal to the next value in the list. |
|
|
|
|
|
=item B<segment_wrap> I<limit> |
|
|
|
Wrap around segment index once it reaches I<limit>. |
|
|
|
|
|
=item B<segment_start_number> I<number> |
|
|
|
Set the sequence number of the first segment. Defaults to C<0>. |
|
|
|
|
|
=item B<strftime> I<1|0> |
|
|
|
Use the C<strftime> function to define the name of the new |
|
segments to write. If this is selected, the output segment name must |
|
contain a C<strftime> function template. Default value is |
|
C<0>. |
|
|
|
|
|
=item B<break_non_keyframes> I<1|0> |
|
|
|
If enabled, allow segments to start on frames other than keyframes. This |
|
improves behavior on some players when the time between keyframes is |
|
inconsistent, but may make things worse on others, and can cause some oddities |
|
during seeking. Defaults to C<0>. |
|
|
|
|
|
=item B<reset_timestamps> I<1|0> |
|
|
|
Reset timestamps at the beginning of each segment, so that each segment |
|
will start with near-zero timestamps. It is meant to ease the playback |
|
of the generated segments. May not work with some combinations of |
|
muxers/codecs. It is set to C<0> by default. |
|
|
|
|
|
=item B<initial_offset> I<offset> |
|
|
|
Specify timestamp offset to apply to the output packet timestamps. The |
|
argument must be a time duration specification, and defaults to 0. |
|
|
|
|
|
=item B<write_empty_segments> I<1|0> |
|
|
|
If enabled, write an empty segment if there are no packets during the period a |
|
segment would usually span. Otherwise, the segment will be filled with the next |
|
packet written. Defaults to C<0>. |
|
|
|
=back |
|
|
|
|
|
Make sure to require a closed GOP when encoding and to set the GOP |
|
size to fit your segment time constraint. |
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item * |
|
|
|
Remux the content of file F<in.mkv> to a list of segments |
|
F<out-000.nut>, F<out-001.nut>, etc., and write the list of |
|
generated segments to F<out.list>: |
|
|
|
ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut |
|
|
|
|
|
|
|
=item * |
|
|
|
Segment input and set output format options for the output segments: |
|
|
|
ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4 |
|
|
|
|
|
|
|
=item * |
|
|
|
Segment the input file according to the split points specified by the |
|
I<segment_times> option: |
|
|
|
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 |
|
|
|
|
|
|
|
=item * |
|
|
|
Use the B<ffmpeg> B<force_key_frames> |
|
option to force key frames in the input at the specified location, together |
|
with the segment option B<segment_time_delta> to account for |
|
possible roundings operated when setting key frame times. |
|
|
|
ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \ |
|
-f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut |
|
|
|
In order to force key frames on the input file, transcoding is |
|
required. |
|
|
|
|
|
=item * |
|
|
|
Segment the input file by splitting the input file according to the |
|
frame numbers sequence specified with the B<segment_frames> option: |
|
|
|
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut |
|
|
|
|
|
|
|
=item * |
|
|
|
Convert the F<in.mkv> to TS segments using the C<libx264> |
|
and C<aac> encoders: |
|
|
|
ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts |
|
|
|
|
|
|
|
=item * |
|
|
|
Segment the input file, and create an M3U8 live playlist (can be used |
|
as live HLS source): |
|
|
|
ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \ |
|
-segment_list_flags +live -segment_time 10 out%03d.mkv |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 smoothstreaming |
|
|
|
|
|
Smooth Streaming muxer generates a set of files (Manifest, chunks) suitable for serving with conventional web server. |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<window_size> |
|
|
|
Specify the number of fragments kept in the manifest. Default 0 (keep all). |
|
|
|
|
|
=item B<extra_window_size> |
|
|
|
Specify the number of fragments kept outside of the manifest before removing from disk. Default 5. |
|
|
|
|
|
=item B<lookahead_count> |
|
|
|
Specify the number of lookahead fragments. Default 2. |
|
|
|
|
|
=item B<min_frag_duration> |
|
|
|
Specify the minimum fragment duration (in microseconds). Default 5000000. |
|
|
|
|
|
=item B<remove_at_exit> |
|
|
|
Specify whether to remove all fragments when finished. Default 0 (do not remove). |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
|
|
=head2 streamhash |
|
|
|
|
|
Per stream hash testing format. |
|
|
|
This muxer computes and prints a cryptographic hash of all the input frames, |
|
on a per-stream basis. This can be used for equality checks without having |
|
to do a complete binary comparison. |
|
|
|
By default audio frames are converted to signed 16-bit raw audio and |
|
video frames to raw video before computing the hash, but the output |
|
of explicit conversions to other codecs can also be used. Timestamps |
|
are ignored. It uses the SHA-256 cryptographic hash function by default, |
|
but supports several other algorithms. |
|
|
|
The output of the muxer consists of one line per stream of the form: |
|
I<streamindex>,I<streamtype>,I<algo>=I<hash>, where |
|
I<streamindex> is the index of the mapped stream, I<streamtype> is a |
|
single character indicating the type of stream, I<algo> is a short string |
|
representing the hash function used, and I<hash> is a hexadecimal number |
|
representing the computed hash. |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<hash> I<algorithm> |
|
|
|
Use the cryptographic hash function specified by the string I<algorithm>. |
|
Supported values include C<MD5>, C<murmur3>, C<RIPEMD128>, |
|
C<RIPEMD160>, C<RIPEMD256>, C<RIPEMD320>, C<SHA160>, |
|
C<SHA224>, C<SHA256> (default), C<SHA512/224>, C<SHA512/256>, |
|
C<SHA384>, C<SHA512>, C<CRC32> and C<adler32>. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
To compute the SHA-256 hash of the input converted to raw audio and |
|
video, and store it in the file F<out.sha256>: |
|
|
|
ffmpeg -i INPUT -f streamhash out.sha256 |
|
|
|
|
|
To print an MD5 hash to stdout use the command: |
|
|
|
ffmpeg -i INPUT -f streamhash -hash md5 - |
|
|
|
|
|
See also the B<hash> and B<framehash> muxers. |
|
|
|
|
|
|
|
=head2 tee |
|
|
|
|
|
The tee muxer can be used to write the same data to several outputs, such as files or streams. |
|
It can be used, for example, to stream a video over a network and save it to disk at the same time. |
|
|
|
It is different from specifying several outputs to the B<ffmpeg> |
|
command-line tool. With the tee muxer, the audio and video data will be encoded only once. |
|
With conventional multiple outputs, multiple encoding operations in parallel are initiated, |
|
which can be a very expensive process. The tee muxer is not useful when using the libavformat API |
|
directly because it is then possible to feed the same packets to several muxers directly. |
|
|
|
Since the tee muxer does not represent any particular output format, ffmpeg cannot auto-select |
|
output streams. So all streams intended for output must be specified using C<-map>. See |
|
the examples below. |
|
|
|
Some encoders may need different options depending on the output format; |
|
the auto-detection of this can not work with the tee muxer, so they need to be explicitly specified. |
|
The main example is the B<global_header> flag. |
|
|
|
The slave outputs are specified in the file name given to the muxer, |
|
separated by '|'. If any of the slave name contains the '|' separator, |
|
leading or trailing spaces or any special character, those must be |
|
escaped (see B<the "Quoting and escaping" |
|
section in the ffmpeg-utils(1) manual>). |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item B<use_fifo> I<bool> |
|
|
|
If set to 1, slave outputs will be processed in separate threads using the B<fifo> |
|
muxer. This allows to compensate for different speed/latency/reliability of |
|
outputs and setup transparent recovery. By default this feature is turned off. |
|
|
|
|
|
=item B<fifo_options> |
|
|
|
Options to pass to fifo pseudo-muxer instances. See B<fifo>. |
|
|
|
|
|
=back |
|
|
|
|
|
Muxer options can be specified for each slave by prepending them as a list of |
|
I<key>=I<value> pairs separated by ':', between square brackets. If |
|
the options values contain a special character or the ':' separator, they |
|
must be escaped; note that this is a second level escaping. |
|
|
|
The following special options are also recognized: |
|
|
|
=over 4 |
|
|
|
|
|
=item B<f> |
|
|
|
Specify the format name. Required if it cannot be guessed from the |
|
output URL. |
|
|
|
|
|
=item B<bsfs[/>I<spec>B<]> |
|
|
|
Specify a list of bitstream filters to apply to the specified |
|
output. |
|
|
|
It is possible to specify to which streams a given bitstream filter |
|
applies, by appending a stream specifier to the option separated by |
|
C</>. I<spec> must be a stream specifier (see B<Format |
|
stream specifiers>). |
|
|
|
If the stream specifier is not specified, the bitstream filters will be |
|
applied to all streams in the output. This will cause that output operation |
|
to fail if the output contains streams to which the bitstream filter cannot |
|
be applied e.g. C<h264_mp4toannexb> being applied to an output containing an audio stream. |
|
|
|
Options for a bitstream filter must be specified in the form of C<opt=value>. |
|
|
|
Several bitstream filters can be specified, separated by ",". |
|
|
|
|
|
=item B<use_fifo> I<bool> |
|
|
|
This allows to override tee muxer use_fifo option for individual slave muxer. |
|
|
|
|
|
=item B<fifo_options> |
|
|
|
This allows to override tee muxer fifo_options for individual slave muxer. |
|
See B<fifo>. |
|
|
|
|
|
=item B<select> |
|
|
|
Select the streams that should be mapped to the slave output, |
|
specified by a stream specifier. If not specified, this defaults to |
|
all the mapped streams. This will cause that output operation to fail |
|
if the output format does not accept all mapped streams. |
|
|
|
You may use multiple stream specifiers separated by commas (C<,>) e.g.: C<a:0,v> |
|
|
|
|
|
=item B<onfail> |
|
|
|
Specify behaviour on output failure. This can be set to either C<abort> (which is |
|
default) or C<ignore>. C<abort> will cause whole process to fail in case of failure |
|
on this slave output. C<ignore> will ignore failure on this output, so other outputs |
|
will continue without being affected. |
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Examples |
|
|
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item * |
|
|
|
Encode something and both archive it in a WebM file and stream it |
|
as MPEG-TS over UDP: |
|
|
|
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a |
|
"archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" |
|
|
|
|
|
|
|
=item * |
|
|
|
As above, but continue streaming even if output to local file fails |
|
(for example local drive fills up): |
|
|
|
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a |
|
"[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" |
|
|
|
|
|
|
|
=item * |
|
|
|
Use B<ffmpeg> to encode the input, and send the output |
|
to three different destinations. The C<dump_extra> bitstream |
|
filter is used to add extradata information to all the output video |
|
keyframes packets, as requested by the MPEG-TS format. The select |
|
option is applied to F<out.aac> in order to make it contain only |
|
audio packets. |
|
|
|
ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac |
|
-f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac" |
|
|
|
|
|
|
|
=item * |
|
|
|
As above, but select only stream C<a:1> for the audio output. Note |
|
that a second level escaping must be performed, as ":" is a special |
|
character used to separate options. |
|
|
|
ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac |
|
-f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac" |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head2 webm_chunk |
|
|
|
|
|
WebM Live Chunk Muxer. |
|
|
|
This muxer writes out WebM headers and chunks as separate files which can be |
|
consumed by clients that support WebM Live streams via DASH. |
|
|
|
|
|
=head3 Options |
|
|
|
|
|
This muxer supports the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<chunk_start_index> |
|
|
|
Index of the first chunk (defaults to 0). |
|
|
|
|
|
=item B<header> |
|
|
|
Filename of the header where the initialization data will be written. |
|
|
|
|
|
=item B<audio_chunk_duration> |
|
|
|
Duration of each audio chunk in milliseconds (defaults to 5000). |
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Example |
|
|
|
|
|
ffmpeg -f v4l2 -i /dev/video0 \ |
|
-f alsa -i hw:0 \ |
|
-map 0:0 \ |
|
-c:v libvpx-vp9 \ |
|
-s 640x360 -keyint_min 30 -g 30 \ |
|
-f webm_chunk \ |
|
-header webm_live_video_360.hdr \ |
|
-chunk_start_index 1 \ |
|
webm_live_video_360_%d.chk \ |
|
-map 1:0 \ |
|
-c:a libvorbis \ |
|
-b:a 128k \ |
|
-f webm_chunk \ |
|
-header webm_live_audio_128.hdr \ |
|
-chunk_start_index 1 \ |
|
-audio_chunk_duration 1000 \ |
|
webm_live_audio_128_%d.chk |
|
|
|
|
|
|
|
=head2 webm_dash_manifest |
|
|
|
|
|
WebM DASH Manifest muxer. |
|
|
|
This muxer implements the WebM DASH Manifest specification to generate the DASH |
|
manifest XML. It also supports manifest generation for DASH live streams. |
|
|
|
For more information see: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item * |
|
|
|
WebM DASH Specification: E<lt>B<https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification>E<gt> |
|
|
|
=item * |
|
|
|
ISO DASH Specification: E<lt>B<http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip>E<gt> |
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Options |
|
|
|
|
|
This muxer supports the following options: |
|
|
|
|
|
=over 4 |
|
|
|
|
|
=item B<adaptation_sets> |
|
|
|
This option has the following syntax: "id=x,streams=a,b,c id=y,streams=d,e" where x and y are the |
|
unique identifiers of the adaptation sets and a,b,c,d and e are the indices of the corresponding |
|
audio and video streams. Any number of adaptation sets can be added using this option. |
|
|
|
|
|
=item B<live> |
|
|
|
Set this to 1 to create a live stream DASH Manifest. Default: 0. |
|
|
|
|
|
=item B<chunk_start_index> |
|
|
|
Start index of the first chunk. This will go in the B<startNumber> attribute |
|
of the B<SegmentTemplate> element in the manifest. Default: 0. |
|
|
|
|
|
=item B<chunk_duration_ms> |
|
|
|
Duration of each chunk in milliseconds. This will go in the B<duration> |
|
attribute of the B<SegmentTemplate> element in the manifest. Default: 1000. |
|
|
|
|
|
=item B<utc_timing_url> |
|
|
|
URL of the page that will return the UTC timestamp in ISO format. This will go |
|
in the B<value> attribute of the B<UTCTiming> element in the manifest. |
|
Default: None. |
|
|
|
|
|
=item B<time_shift_buffer_depth> |
|
|
|
Smallest time (in seconds) shifting buffer for which any Representation is |
|
guaranteed to be available. This will go in the B<timeShiftBufferDepth> |
|
attribute of the B<MPD> element. Default: 60. |
|
|
|
|
|
=item B<minimum_update_period> |
|
|
|
Minimum update period (in seconds) of the manifest. This will go in the |
|
B<minimumUpdatePeriod> attribute of the B<MPD> element. Default: 0. |
|
|
|
|
|
=back |
|
|
|
|
|
|
|
=head3 Example |
|
|
|
|
|
ffmpeg -f webm_dash_manifest -i video1.webm \ |
|
-f webm_dash_manifest -i video2.webm \ |
|
-f webm_dash_manifest -i audio1.webm \ |
|
-f webm_dash_manifest -i audio2.webm \ |
|
-map 0 -map 1 -map 2 -map 3 \ |
|
-c copy \ |
|
-f webm_dash_manifest \ |
|
-adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \ |
|
manifest.xml |
|
|
|
|
|
|
|
=head1 METADATA |
|
|
|
|
|
FFmpeg is able to dump metadata from media files into a simple UTF-8-encoded |
|
INI-like text file and then load it back using the metadata muxer/demuxer. |
|
|
|
The file format is as follows: |
|
|
|
=over 4 |
|
|
|
|
|
|
|
=item 1. |
|
|
|
A file consists of a header and a number of metadata tags divided into sections, |
|
each on its own line. |
|
|
|
|
|
=item 2. |
|
|
|
The header is a B<;FFMETADATA> string, followed by a version number (now 1). |
|
|
|
|
|
=item 3. |
|
|
|
Metadata tags are of the form B<key=value> |
|
|
|
|
|
=item 4. |
|
|
|
Immediately after header follows global metadata |
|
|
|
|
|
=item 5. |
|
|
|
After global metadata there may be sections with per-stream/per-chapter |
|
metadata. |
|
|
|
|
|
=item 6. |
|
|
|
A section starts with the section name in uppercase (i.e. STREAM or CHAPTER) in |
|
brackets (B<[>, B<]>) and ends with next section or end of file. |
|
|
|
|
|
=item 7. |
|
|
|
At the beginning of a chapter section there may be an optional timebase to be |
|
used for start/end values. It must be in form |
|
B<TIMEBASE=>I<num>B</>I<den>, where I<num> and I<den> are |
|
integers. If the timebase is missing then start/end times are assumed to |
|
be in nanoseconds. |
|
|
|
Next a chapter section must contain chapter start and end times in form |
|
B<START=>I<num>, B<END=>I<num>, where I<num> is a positive |
|
integer. |
|
|
|
|
|
=item 8. |
|
|
|
Empty lines and lines starting with B<;> or B<#> are ignored. |
|
|
|
|
|
=item 9. |
|
|
|
Metadata keys or values containing special characters (B<=>, B<;>, |
|
B<#>, B<\> and a newline) must be escaped with a backslash B<\>. |
|
|
|
|
|
=item 10. |
|
|
|
Note that whitespace in metadata (e.g. B<foo = bar>) is considered to be |
|
a part of the tag (in the example above key is B<foo> , value is |
|
B<bar>). |
|
|
|
=back |
|
|
|
|
|
A ffmetadata file might look like this: |
|
|
|
;FFMETADATA1 |
|
title=bike\\shed |
|
;this is a comment |
|
artist=FFmpeg troll team |
|
|
|
[CHAPTER] |
|
TIMEBASE=1/1000 |
|
START=0 |
|
#chapter ends at 0:01:00 |
|
END=60000 |
|
title=chapter \#1 |
|
[STREAM] |
|
title=multi\ |
|
line |
|
|
|
|
|
By using the ffmetadata muxer and demuxer it is possible to extract |
|
metadata from an input file to an ffmetadata file, and then transcode |
|
the file into an output file with the edited ffmetadata file. |
|
|
|
Extracting an ffmetadata file with F<ffmpeg> goes as follows: |
|
|
|
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE |
|
|
|
|
|
Reinserting edited metadata information from the FFMETADATAFILE file can |
|
be done as: |
|
|
|
ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT |
|
|
|
|
|
|
|
|
|
=head1 SEE ALSO |
|
|
|
|
|
|
|
ffmpeg(1), ffplay(1), ffprobe(1), libavformat(3) |
|
|
|
|
|
=head1 AUTHORS |
|
|
|
|
|
The FFmpeg developers. |
|
|
|
For details about the authorship, see the Git history of the project |
|
(https://git.ffmpeg.org/ffmpeg), e.g. by typing the command |
|
B<git log> in the FFmpeg source directory, or browsing the |
|
online repository at E<lt>B<https://git.ffmpeg.org/ffmpeg>E<gt>. |
|
|
|
Maintainers for the specific components are listed in the file |
|
F<MAINTAINERS> in the source code tree. |
|
|
|
|
|
|
|
|