|
FFMPEG-FORMATS(1) FFMPEG-FORMATS(1) |
|
|
|
NAME |
|
ffmpeg-formats - FFmpeg formats |
|
|
|
DESCRIPTION |
|
This document describes the supported formats (muxers and demuxers) |
|
provided by the libavformat library. |
|
|
|
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 -option value in the FFmpeg tools, or |
|
by setting the value explicitly in the "AVFormatContext" options or |
|
using the libavutil/opt.h API for programmatic use. |
|
|
|
The list of supported options follows: |
|
|
|
avioflags flags (input/output) |
|
Possible values: |
|
|
|
direct |
|
Reduce buffering. |
|
|
|
probesize integer (input) |
|
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. |
|
|
|
max_probe_packets integer (input) |
|
Set the maximum number of buffered packets when probing a codec. |
|
Default is 2500 packets. |
|
|
|
packetsize integer (output) |
|
Set packet size. |
|
|
|
fflags flags |
|
Set format flags. Some are implemented for a limited number of |
|
formats. |
|
|
|
Possible values for input files: |
|
|
|
discardcorrupt |
|
Discard corrupted packets. |
|
|
|
fastseek |
|
Enable fast, but inaccurate seeks for some formats. |
|
|
|
genpts |
|
Generate missing PTS if DTS is present. |
|
|
|
igndts |
|
Ignore DTS if PTS is also set. In case the PTS is set, the DTS |
|
value is set to NOPTS. This is ignored when the "nofillin" flag |
|
is set. |
|
|
|
ignidx |
|
Ignore index. |
|
|
|
nobuffer |
|
Reduce the latency introduced by buffering during initial input |
|
streams analysis. |
|
|
|
nofillin |
|
Do not fill in missing values in packet fields that can be |
|
exactly calculated. |
|
|
|
noparse |
|
Disable AVParsers, this needs "+nofillin" too. |
|
|
|
sortdts |
|
Try to interleave output packets by DTS. At present, available |
|
only for AVIs with an index. |
|
|
|
Possible values for output files: |
|
|
|
autobsf |
|
Automatically apply bitstream filters as required by the output |
|
format. Enabled by default. |
|
|
|
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. |
|
|
|
flush_packets |
|
Write out packets immediately. |
|
|
|
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. |
|
|
|
seek2any integer (input) |
|
Allow seeking to non-keyframes on demuxer level when supported if |
|
set to 1. Default is 0. |
|
|
|
analyzeduration integer (input) |
|
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. |
|
|
|
cryptokey hexadecimal string (input) |
|
Set decryption key. |
|
|
|
indexmem integer (input) |
|
Set max memory used for timestamp index (per stream). |
|
|
|
rtbufsize integer (input) |
|
Set max memory used for buffering real-time frames. |
|
|
|
fdebug flags (input/output) |
|
Print specific debug info. |
|
|
|
Possible values: |
|
|
|
ts |
|
max_delay integer (input/output) |
|
Set maximum muxing or demuxing delay in microseconds. |
|
|
|
fpsprobesize integer (input) |
|
Set number of frames used to probe fps. |
|
|
|
audio_preload integer (output) |
|
Set microseconds by which audio packets should be interleaved |
|
earlier. |
|
|
|
chunk_duration integer (output) |
|
Set microseconds for each chunk. |
|
|
|
chunk_size integer (output) |
|
Set size in bytes for each chunk. |
|
|
|
err_detect, f_err_detect flags (input) |
|
Set error detection flags. "f_err_detect" is deprecated and should |
|
be used only via the ffmpeg tool. |
|
|
|
Possible values: |
|
|
|
crccheck |
|
Verify embedded CRCs. |
|
|
|
bitstream |
|
Detect bitstream specification deviations. |
|
|
|
buffer |
|
Detect improper bitstream length. |
|
|
|
explode |
|
Abort decoding on minor error detection. |
|
|
|
careful |
|
Consider things that violate the spec and have not been seen in |
|
the wild as errors. |
|
|
|
compliant |
|
Consider all spec non compliancies as errors. |
|
|
|
aggressive |
|
Consider things that a sane encoder should not do as an error. |
|
|
|
max_interleave_delta integer (output) |
|
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. |
|
|
|
use_wallclock_as_timestamps integer (input) |
|
Use wallclock as timestamps if set to 1. Default is 0. |
|
|
|
avoid_negative_ts integer (output) |
|
Possible values: |
|
|
|
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. |
|
|
|
make_zero |
|
Shift timestamps so that the first timestamp is 0. |
|
|
|
auto (default) |
|
Enables shifting when required by the target format. |
|
|
|
disabled |
|
Disables shifting of timestamp. |
|
|
|
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. |
|
|
|
skip_initial_bytes integer (input) |
|
Set number of bytes to skip before reading header and frames if set |
|
to 1. Default is 0. |
|
|
|
correct_ts_overflow integer (input) |
|
Correct single timestamp overflows if set to 1. Default is 1. |
|
|
|
flush_packets integer (output) |
|
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. |
|
|
|
output_ts_offset offset (output) |
|
Set the output time offset. |
|
|
|
offset must be a time duration specification, see 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 offset. Default value |
|
is 0 (meaning that no offset is applied). |
|
|
|
format_whitelist list (input) |
|
"," separated list of allowed demuxers. By default all are allowed. |
|
|
|
dump_separator string (input) |
|
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 |
|
|
|
max_streams integer (input) |
|
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. |
|
|
|
skip_estimate_duration_from_pts bool (input) |
|
Skip estimation of input duration when calculated using PTS. At |
|
present, applicable for MPEG-PS and MPEG-TS. |
|
|
|
strict, f_strict integer (input/output) |
|
Specify how strictly to follow the standards. "f_strict" is |
|
deprecated and should be used only via the ffmpeg tool. |
|
|
|
Possible values: |
|
|
|
very |
|
strictly conform to an older more strict version of the spec or |
|
reference software |
|
|
|
strict |
|
strictly conform to all the things in the spec no matter what |
|
consequences |
|
|
|
normal |
|
unofficial |
|
allow unofficial extensions |
|
|
|
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. |
|
|
|
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 |
|
"avformat_match_stream_specifier()" function declared in the |
|
libavformat/avformat.h header and documented in the Stream specifiers |
|
section in the ffmpeg(1) manual. |
|
|
|
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 "--list-demuxers". |
|
|
|
You can disable all the demuxers using the configure option |
|
"--disable-demuxers", and selectively enable a single demuxer with the |
|
option "--enable-demuxer=DEMUXER", or disable it with the option |
|
"--disable-demuxer=DEMUXER". |
|
|
|
The option "-demuxers" of the ff* tools will display the list of |
|
enabled demuxers. Use "-formats" to view a combined list of enabled |
|
demuxers and muxers. |
|
|
|
The description of some of the currently available demuxers follows. |
|
|
|
aa |
|
Audible Format 2, 3, and 4 demuxer. |
|
|
|
This demuxer is used to demux Audible Format 2, 3, and 4 (.aa) files. |
|
|
|
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. |
|
|
|
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. |
|
|
|
-ignore_loop bool |
|
Ignore the loop variable in the file if set. Default is enabled. |
|
|
|
-max_fps int |
|
Maximum framerate in frames per second. Default of 0 imposes no |
|
limit. |
|
|
|
-default_fps int |
|
Default framerate in frames per second when none is specified in |
|
the file (0 meaning as fast as possible). Default is 15. |
|
|
|
asf |
|
Advanced Systems Format demuxer. |
|
|
|
This demuxer is used to demux ASF files and MMS network streams. |
|
|
|
-no_resync_search bool |
|
Do not try to resynchronize by looking for a certain optional start |
|
code. |
|
|
|
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 "duration" directive can be used to override the |
|
duration stored in each file. |
|
|
|
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: |
|
|
|
"file 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. |
|
|
|
"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. |
|
|
|
"duration 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. |
|
|
|
"inpoint 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 "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. |
|
|
|
"outpoint 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 "duration" |
|
directive) will be reduced based on their specified Out point. |
|
|
|
"file_packet_metadata 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 "file_packet_meta" instead. |
|
|
|
"file_packet_meta 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. |
|
|
|
"option key value" |
|
Option to access, open and probe the file. Can be present multiple |
|
times. |
|
|
|
"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. |
|
|
|
"exact_stream_id 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. |
|
|
|
"stream_meta key value" |
|
Metadata for the stream. Can be present multiple times. |
|
|
|
"stream_codec value" |
|
Codec for the stream. |
|
|
|
"stream_extradata hex_string" |
|
Extradata for the string, encoded in hexadecimal. |
|
|
|
"chapter id start end" |
|
Add a chapter. id is an unique identifier, possibly small and |
|
consecutive. |
|
|
|
Options |
|
|
|
This demuxer accepts the following option: |
|
|
|
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. |
|
|
|
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. |
|
|
|
segment_time_metadata |
|
If set to 1, every packet will contain the lavf.concat.start_time |
|
and the 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. |
|
|
|
Examples |
|
|
|
o 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' |
|
|
|
o 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 |
|
|
|
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 "id" and "bandwidth" |
|
properties from the "<Representation>" as metadata keys named "id" and |
|
"variant_bitrate" respectively. |
|
|
|
Options |
|
|
|
This demuxer accepts the following option: |
|
|
|
cenc_decryption_key |
|
16-byte key, in hex, to decrypt files encrypted using ISO Common |
|
Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). |
|
|
|
dvdvideo |
|
DVD-Video demuxer, powered by libdvdnav and libdvdread. |
|
|
|
Can directly ingest DVD titles, specifically sequential PGCs, into a |
|
conversion pipeline. Menu assets, such as background video or audio, |
|
can also be demuxed given the menu's coordinates (at best effort). |
|
Seeking is not supported at this time. |
|
|
|
Block devices (DVD drives), ISO files, and directory structures are |
|
accepted. Activate with "-f dvdvideo" in front of one of these inputs. |
|
|
|
This demuxer does NOT have decryption code of any kind. You are on your |
|
own working with encrypted DVDs, and should not expect support on the |
|
matter. |
|
|
|
Underlying playback is handled by libdvdnav, and structure parsing by |
|
libdvdread. FFmpeg must be built with GPL library support available as |
|
well as the configure switches "--enable-libdvdnav" and |
|
"--enable-libdvdread". |
|
|
|
You will need to provide either the desired "title number" or exact |
|
PGC/PG coordinates. Many open-source DVD players and tools can aid in |
|
providing this information. If not specified, the demuxer will default |
|
to title 1 which works for many discs. However, due to the flexibility |
|
of the format, it is recommended to check manually. There are many |
|
discs that are authored strangely or with invalid headers. |
|
|
|
If the input is a real DVD drive, please note that there are some |
|
drives which may silently fail on reading bad sectors from the disc, |
|
returning random bits instead which is effectively corrupt data. This |
|
is especially prominent on aging or rotting discs. A second pass and |
|
integrity checks would be needed to detect the corruption. This is not |
|
an FFmpeg issue. |
|
|
|
Background |
|
|
|
DVD-Video is not a directly accessible, linear container format in the |
|
traditional sense. Instead, it allows for complex and programmatic |
|
playback of carefully muxed MPEG-PS streams that are stored in |
|
headerless VOB files. To the end-user, these streams are known simply |
|
as "titles", but the actual logical playback sequence is defined by one |
|
or more "PGCs", or Program Group Chains, within the title. The PGC is |
|
in turn comprised of multiple "PGs", or Programs", which are the actual |
|
video segments (and for a typical video feature, sequentially ordered). |
|
The PGC structure, along with stream layout and metadata, are stored in |
|
IFO files that need to be parsed. PGCs can be thought of as playlists |
|
in easier terms. |
|
|
|
An actual DVD player relies on user GUI interaction via menus and an |
|
internal VM to drive the direction of demuxing. Generally, the user |
|
would either navigate (via menus) or automatically be redirected to the |
|
PGC of their choice. During this process and the subsequent playback, |
|
the DVD player's internal VM also maintains a state and executes |
|
instructions that can create jumps to different sectors during |
|
playback. This is why libdvdnav is involved, as a linear read of the |
|
MPEG-PS blobs on the disc (VOBs) is not enough to produce the right |
|
sequence in many cases. |
|
|
|
There are many other DVD structures (a long subject) that will not be |
|
discussed here. NAV packets, in particular, are handled by this |
|
demuxer to build accurate timing but not emitted as a stream. For a |
|
good high-level understanding, refer to: |
|
<https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures> |
|
|
|
Options |
|
|
|
This demuxer accepts the following options: |
|
|
|
title int |
|
The title number to play. Must be set if pgc and pg are not set. |
|
Not applicable to menus. Default is 0 (auto), which currently only |
|
selects the first available title (title 1) and notifies the user |
|
about the implications. |
|
|
|
chapter_start int |
|
The chapter, or PTT (part-of-title), number to start at. Not |
|
applicable to menus. Default is 1. |
|
|
|
chapter_end int |
|
The chapter, or PTT (part-of-title), number to end at. Not |
|
applicable to menus. Default is 0, which is a special value to |
|
signal end at the last possible chapter. |
|
|
|
angle int |
|
The video angle number, referring to what is essentially an |
|
additional video stream that is composed from alternate frames |
|
interleaved in the VOBs. Not applicable to menus. Default is 1. |
|
|
|
region int |
|
The region code to use for playback. Some discs may use this to |
|
default playback at a particular angle in different regions. This |
|
option will not affect the region code of a real DVD drive, if used |
|
as an input. Not applicable to menus. Default is 0, "world". |
|
|
|
menu bool |
|
Demux menu assets instead of navigating a title. Requires exact |
|
coordinates of the menu (menu_lu, menu_vts, pgc, pg). Default is |
|
false. |
|
|
|
menu_lu int |
|
The menu language to demux. In DVD, menus are grouped by language. |
|
Default is 0, the first language unit. |
|
|
|
menu_vts int |
|
The VTS where the menu lives, or 0 if it is a VMG menu (root- |
|
level). Default is 0, VMG menu. |
|
|
|
pgc int |
|
The entry PGC to start playback, in conjunction with pg. |
|
Alternative to setting title. Chapter markers are not supported at |
|
this time. Must be explicitly set for menus. Default is 0, |
|
automatically resolve from value of title. |
|
|
|
pg int |
|
The entry PG to start playback, in conjunction with pgc. |
|
Alternative to setting title. Chapter markers are not supported at |
|
this time. Default is 0, automatically resolve from value of |
|
title, or start from the beginning (PG 1) of the menu. |
|
|
|
preindex bool |
|
Enable this to have accurate chapter (PTT) markers and duration |
|
measurement, which requires a slow second pass read in order to |
|
index the chapter marker timestamps from NAV packets. This is non- |
|
ideal extra work for real optical drives. It is recommended and |
|
faster to use this option with a backup of the DVD structure stored |
|
on a hard drive. Not compatible with pgc and pg. Not applicable to |
|
menus. Default is 0, false. |
|
|
|
trim bool |
|
Skip padding cells (i.e. cells shorter than 1 second) from the |
|
beginning. There exist many discs with filler segments at the |
|
beginning of the PGC, often with junk data intended for controlling |
|
a real DVD player's buffering speed and with no other material data |
|
value. Not applicable to menus. Default is 1, true. |
|
|
|
Examples |
|
|
|
o Open title 3 from a given DVD structure: |
|
|
|
ffmpeg -f dvdvideo -title 3 -i <path to DVD> ... |
|
|
|
o Open chapters 3-6 from title 1 from a given DVD structure: |
|
|
|
ffmpeg -f dvdvideo -chapter_start 3 -chapter_end 6 -title 1 -i <path to DVD> ... |
|
|
|
o Open only chapter 5 from title 1 from a given DVD structure: |
|
|
|
ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i <path to DVD> ... |
|
|
|
o Demux menu with language 1 from VTS 1, PGC 1, starting at PG 1: |
|
|
|
ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ... |
|
|
|
ea |
|
Electronic Arts Multimedia format demuxer. |
|
|
|
This format is used by various Electronic Arts games. |
|
|
|
Options |
|
|
|
merge_alpha 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. |
|
|
|
imf |
|
Interoperable Master Format demuxer. |
|
|
|
This demuxer presents audio and video streams found in an IMF |
|
Composition, as specified in |
|
<https://doi.org/10.5594/SMPTE.ST2067-2.2020>. |
|
|
|
ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ... |
|
|
|
If "-assetmaps" is not specified, the demuxer looks for a file called |
|
ASSETMAP.xml in the same directory as the CPL. |
|
|
|
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 .... |
|
|
|
-flv_metadata bool |
|
Allocate the streams according to the onMetaData array content. |
|
|
|
-flv_ignore_prevtag bool |
|
Ignore the size of previous tag value. |
|
|
|
-flv_full_metadata bool |
|
Output all context of the onMetadata. |
|
|
|
gif |
|
Animated GIF demuxer. |
|
|
|
It accepts the following options: |
|
|
|
min_delay |
|
Set the minimum valid delay between frames in hundredths of |
|
seconds. Range is 0 to 6000. Default value is 2. |
|
|
|
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. |
|
|
|
default_delay |
|
Set the default delay between frames in hundredths of seconds. |
|
Range is 0 to 6000. Default value is 10. |
|
|
|
ignore_loop |
|
GIF files can contain information to loop a certain number of times |
|
(or infinitely). If 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. |
|
|
|
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 input.mp4 as the GIF in this example loops |
|
infinitely. |
|
|
|
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: |
|
|
|
live_start_index |
|
segment index to start live streams at (negative values are from |
|
the end). |
|
|
|
prefer_x_start |
|
prefer to use #EXT-X-START if it's in playlist instead of |
|
live_start_index. |
|
|
|
allowed_extensions |
|
',' separated list of file extensions that hls is allowed to |
|
access. |
|
|
|
max_reload |
|
Maximum number of times a insufficient list is attempted to be |
|
reloaded. Default value is 1000. |
|
|
|
m3u8_hold_counters |
|
The maximum number of times to load m3u8 when it refreshes without |
|
new segments. Default value is 1000. |
|
|
|
http_persistent |
|
Use persistent HTTP connections. Applicable only for HTTP streams. |
|
Enabled by default. |
|
|
|
http_multiple |
|
Use multiple HTTP connections for downloading HTTP segments. |
|
Enabled by default for HTTP/1.1 servers. |
|
|
|
http_seekable |
|
Use HTTP partial requests for downloading HTTP segments. 0 = |
|
disable, 1 = enable, -1 = auto, Default is auto. |
|
|
|
seg_format_options |
|
Set options for the demuxer of media segments using a list of |
|
key=value pairs separated by ":". |
|
|
|
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. |
|
|
|
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 |
|
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: |
|
|
|
framerate |
|
Set the frame rate for the video stream. It defaults to 25. |
|
|
|
loop |
|
If set to 1, loop over the input. Default value is 0. |
|
|
|
pattern_type |
|
Select the pattern type used to interpret the provided filename. |
|
|
|
pattern_type accepts one of the following values. |
|
|
|
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. |
|
|
|
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 "%0Nd", which |
|
specifies the position of the characters representing a |
|
sequential number in each filename matched by the pattern. If |
|
the form "%d0Nd" is used, the string representing the number in |
|
each filename is 0-padded and 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 "%0Nd", the first |
|
filename of the file list specified by the pattern must contain |
|
a number inclusively contained between start_number and |
|
start_number+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 img-001.bmp, img-002.bmp, ..., |
|
img-010.bmp, etc.; the pattern "i%%m%%g-%d.jpg" will match a |
|
sequence of filenames of the form i%m%g-1.jpg, i%m%g-2.jpg, |
|
..., i%m%g-10.jpg, etc. |
|
|
|
Note that the pattern must not necessarily contain "%d" or |
|
"%0Nd", for example to convert a single image file img.jpeg you |
|
can employ the command: |
|
|
|
ffmpeg -i img.jpeg img.png |
|
|
|
glob |
|
Select a glob wildcard pattern type. |
|
|
|
The pattern is interpreted like a "glob()" pattern. This is |
|
only selectable if libavformat was compiled with globbing |
|
support. |
|
|
|
glob_sequence (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 "%*?[]{}" that is preceded by an unescaped |
|
"%", the pattern is interpreted like a "glob()" pattern, |
|
otherwise it is interpreted like a sequence pattern. |
|
|
|
All glob special characters "%*?[]{}" must be prefixed with |
|
"%". To escape a literal "%" you shall use "%%". |
|
|
|
For example the pattern "foo-%*.jpeg" will match all the |
|
filenames prefixed by "foo-" and terminating with ".jpeg", and |
|
"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 glob and sequence. |
|
|
|
Default value is glob_sequence. |
|
|
|
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. |
|
|
|
start_number |
|
Set the index of the file matched by the image file pattern to |
|
start to read from. Default value is 0. |
|
|
|
start_number_range |
|
Set the index interval range to check when looking for the first |
|
image file in the sequence, starting from start_number. Default |
|
value is 5. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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 drawtext |
|
filter for examples). Default value is 0. The extra fields are |
|
described below: |
|
|
|
lavf.image2dec.source_path |
|
Corresponds to the full path to the input file being read. |
|
|
|
lavf.image2dec.source_basename |
|
Corresponds to the name of the file being read. |
|
|
|
Examples |
|
|
|
o Use ffmpeg for creating a video from the images in the file |
|
sequence img-001.jpeg, img-002.jpeg, ..., assuming an input frame |
|
rate of 10 frames per second: |
|
|
|
ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv |
|
|
|
o 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 |
|
|
|
o 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 |
|
|
|
libgme |
|
The Game Music Emu library is a collection of video game music file |
|
emulators. |
|
|
|
See <https://bitbucket.org/mpyne/game-music-emu/overview> for more |
|
information. |
|
|
|
It accepts the following options: |
|
|
|
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 tracks metadata entry. |
|
|
|
sample_rate |
|
Set the sampling rate of the exported track. Range is 1000 to |
|
999999. Default is 44100. |
|
|
|
max_size (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. |
|
|
|
libmodplug |
|
ModPlug based module demuxer |
|
|
|
See <https://github.com/Konstanty/libmodplug> |
|
|
|
It will export one 2-channel 16-bit 44.1 kHz audio stream. Optionally, |
|
a "pal8" 16-color video stream can be exported with or without printed |
|
metadata. |
|
|
|
It accepts the following options: |
|
|
|
noise_reduction |
|
Apply a simple low-pass filter. Can be 1 (on) or 0 (off). Default |
|
is 0. |
|
|
|
reverb_depth |
|
Set amount of reverb. Range 0-100. Default is 0. |
|
|
|
reverb_delay |
|
Set delay in ms, clamped to 40-250 ms. Default is 0. |
|
|
|
bass_amount |
|
Apply bass expansion a.k.a. XBass or megabass. Range is 0 (quiet) |
|
to 100 (loud). Default is 0. |
|
|
|
bass_range |
|
Set cutoff i.e. upper-bound for bass frequencies. Range is 10-100 |
|
Hz. Default is 0. |
|
|
|
surround_depth |
|
Apply a Dolby Pro-Logic surround effect. Range is 0 (quiet) to 100 |
|
(heavy). Default is 0. |
|
|
|
surround_delay |
|
Set surround delay in ms, clamped to 5-40 ms. Default is 0. |
|
|
|
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. |
|
|
|
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 "x", |
|
"y", "w", "h", "t", "speed", "tempo", "order", "pattern" and "row". |
|
|
|
video_stream |
|
Generate video stream. Can be 1 (on) or 0 (off). Default is 0. |
|
|
|
video_stream_w |
|
Set video frame width in 'chars' where one char indicates 8 pixels. |
|
Range is 20-512. Default is 30. |
|
|
|
video_stream_h |
|
Set video frame height in 'chars' where one char indicates 8 |
|
pixels. Range is 20-512. Default is 30. |
|
|
|
video_stream_ptxt |
|
Print metadata on video stream. Includes "speed", "tempo", "order", |
|
"pattern", "row" and "ts" (time in ms). Can be 1 (on) or 0 (off). |
|
Default is 1. |
|
|
|
libopenmpt |
|
libopenmpt based module demuxer |
|
|
|
See <https://lib.openmpt.org/libopenmpt/> for more information. |
|
|
|
Some files have multiple subsongs (tracks) this can be set with the |
|
subsong option. |
|
|
|
It accepts the following options: |
|
|
|
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. |
|
|
|
layout |
|
Set the channel layout. Valid values are 1, 2, and 4 channel |
|
layouts. The default value is STEREO. |
|
|
|
sample_rate |
|
Set the sample rate for libopenmpt to output. Range is from 1000 |
|
to INT_MAX. The value default is 48000. |
|
|
|
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 |
|
|
|
Options |
|
|
|
This demuxer accepts the following options: |
|
|
|
enable_drefs |
|
Enable loading of external tracks, disabled by default. Enabling |
|
this can theoretically leak information in some use cases. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
advanced_editlist |
|
Modify the stream index to reflect the timeline described by the |
|
edit list. "ignore_editlist" must be set to false for this option |
|
to be effective. If both "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. |
|
|
|
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. |
|
|
|
use_mfra_for |
|
For seekable fragmented input, set fragment's starting timestamp |
|
from media fragment random access box, if present. |
|
|
|
Following options are available: |
|
|
|
auto |
|
Auto-detect whether to set mfra timestamps as PTS or DTS |
|
(default) |
|
|
|
dts Set mfra timestamps as DTS |
|
|
|
pts Set mfra timestamps as PTS |
|
|
|
0 Don't use mfra box to set timestamps |
|
|
|
use_tfdt |
|
For fragmented input, set fragment's starting timestamp to |
|
"baseMediaDecodeTime" from the "tfdt" box. Default is enabled, |
|
which will prefer to use the "tfdt" box to set DTS. Disable to use |
|
the "earliest_presentation_time" from the "sidx" box. In either |
|
case, the timestamp from the "mfra" box will be used if it's |
|
available and "use_mfra_for" is set to pts or dts. |
|
|
|
export_all |
|
Export unrecognized boxes within the udta box as metadata entries. |
|
The first four characters of the box type are set as the key. |
|
Default is false. |
|
|
|
export_xmp |
|
Export entire contents of XMP_ box and uuid box as a string with |
|
key "xmp". Note that if "export_all" is set and this option isn't, |
|
the contents of XMP_ box are still exported but with key "XMP_". |
|
Default is false. |
|
|
|
activation_bytes |
|
4-byte key required to decrypt Audible AAX and AAX+ files. See |
|
Audible AAX subsection below. |
|
|
|
audible_fixed_key |
|
Fixed key used for handling Audible AAX/AAX+ files. It has been |
|
pre-set so should not be necessary to specify. |
|
|
|
decryption_key |
|
16-byte key, in hex, to decrypt files encrypted using ISO Common |
|
Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). |
|
|
|
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 |
|
"UINT_MAX - 48000*10" which allows up to a 10 second dts correction |
|
for 48 kHz audio streams while accommodating 99.9% of "uint32" |
|
range. |
|
|
|
interleaved_read |
|
Interleave packets from multiple tracks at demuxer level. For badly |
|
interleaved files, this prevents playback issues caused by large |
|
gaps between packets in different tracks, as MOV/MP4 do not have |
|
packet placement requirements. However, this can cause excessive |
|
seeking on very badly interleaved files, due to seeking between |
|
tracks, so disabling it may prevent I/O issues, at the expense of |
|
playback. |
|
|
|
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 |
|
|
|
mpegts |
|
MPEG-2 transport stream demuxer. |
|
|
|
This demuxer accepts the following options: |
|
|
|
resync_size |
|
Set size limit for looking up a new synchronization. Default value |
|
is 65536. |
|
|
|
skip_unknown_pmt |
|
Skip PMTs for programs not defined in the PAT. Default value is 0. |
|
|
|
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. |
|
|
|
ts_packetsize |
|
Output option carrying the raw packet size in bytes. Show the |
|
detected raw packet size, cannot be set by the user. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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: |
|
|
|
framerate |
|
Set input video frame rate. Default value is 25. |
|
|
|
pixel_format |
|
Set the input video pixel format. Default value is "yuv420p". |
|
|
|
video_size |
|
Set the input video size. This value must be specified explicitly. |
|
|
|
For example to read a rawvideo file input.raw with ffplay, assuming a |
|
pixel format of "rgb24", a video size of "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 |
|
|
|
sbg |
|
SBaGen script demuxer. |
|
|
|
This demuxer reads the script language used by SBaGen |
|
<http://uazu.net/sbagen/> 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 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. |
|
|
|
tedcaptions |
|
JSON captions used for <http://www.ted.com/>. |
|
|
|
TED does not provide links to the captions, but they can be guessed |
|
from the page. The file tools/bookmarklets.html from the FFmpeg source |
|
tree contains a bookmarklet to expose them. |
|
|
|
This demuxer accepts the following option: |
|
|
|
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. |
|
|
|
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 |
|
|
|
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 "-f |
|
vapoursynth" before the input "-i yourscript.vpy". |
|
|
|
This demuxer accepts the following option: |
|
|
|
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. |
|
|
|
w64 |
|
Sony Wave64 Audio demuxer. |
|
|
|
This demuxer accepts the following options: |
|
|
|
max_size |
|
See the same option for the wav demuxer. |
|
|
|
wav |
|
RIFF Wave Audio demuxer. |
|
|
|
This demuxer accepts the following options: |
|
|
|
max_size |
|
Specify the maximum packet size in bytes for the demuxed packets. |
|
By default this is set to 0, which means that a sensible value is |
|
chosen based on the input format. |
|
|
|
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 "--list-muxers". |
|
|
|
You can disable all the muxers with the configure option |
|
"--disable-muxers" and selectively enable / disable single muxers with |
|
the options "--enable-muxer=MUXER" / "--disable-muxer=MUXER". |
|
|
|
The option "-muxers" of the ff* tools will display the list of enabled |
|
muxers. Use "-formats" to view a combined list of enabled demuxers and |
|
muxers. |
|
|
|
A description of some of the currently available muxers follows. |
|
|
|
Raw muxers |
|
This section covers raw muxers. They 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. |
|
|
|
It comprises the following muxers. The media type and the eventual |
|
extensions used to automatically selects the muxer from the output |
|
extensions are also shown. |
|
|
|
ac3 audio |
|
Dolby Digital, also known as AC-3. |
|
|
|
adx audio |
|
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. |
|
|
|
aptx audio |
|
aptX (Audio Processing Technology for Bluetooth) |
|
|
|
aptx_hd audio (aptxdh) |
|
aptX HD (Audio Processing Technology for Bluetooth) audio |
|
|
|
avs2 video (avs, avs2) |
|
AVS2-P2 (Audio Video Standard - Second generation - Part 2) / IEEE |
|
1857.4 video |
|
|
|
avs3 video (avs3) |
|
AVS3-P2 (Audio Video Standard - Third generation - Part 2) / IEEE |
|
1857.10 video |
|
|
|
cavsvideo video (cavs) |
|
Chinese AVS (Audio Video Standard - First generation) |
|
|
|
codec2raw audio |
|
Codec 2 audio. |
|
|
|
No extension is registered so format name has to be supplied e.g. |
|
with the ffmpeg CLI tool "-f codec2raw". |
|
|
|
data any |
|
Generic data muxer. |
|
|
|
This muxer accepts a single stream with any codec of any type. The |
|
input stream has to be selected using the "-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 "-f data". |
|
|
|
dfpwm audio (dfpwm) |
|
Raw DFPWM1a (Dynamic Filter Pulse With Modulation) audio muxer. |
|
|
|
dirac video (drc, vc2) |
|
BBC Dirac video. |
|
|
|
The Dirac Pro codec is a subset and is standardized as SMPTE VC-2. |
|
|
|
dnxhd video (dnxhd, dnxhr) |
|
Avid DNxHD video. |
|
|
|
It is standardized as SMPTE VC-3. Accepts DNxHR streams. |
|
|
|
dts audio |
|
DTS Coherent Acoustics (DCA) audio |
|
|
|
eac3 audio |
|
Dolby Digital Plus, also known as Enhanced AC-3 |
|
|
|
evc video (evc) |
|
MPEG-5 Essential Video Coding (EVC) / EVC / MPEG-5 Part 1 EVC video |
|
|
|
g722 audio |
|
ITU-T G.722 audio |
|
|
|
g723_1 audio (tco, rco) |
|
ITU-T G.723.1 audio |
|
|
|
g726 audio |
|
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 "-f g726". |
|
|
|
g726le audio |
|
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 "-f g726le". |
|
|
|
gsm audio |
|
Global System for Mobile Communications audio |
|
|
|
h261 video |
|
ITU-T H.261 video |
|
|
|
h263 video |
|
ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 |
|
video |
|
|
|
h264 video (h264, 264) |
|
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. |
|
|
|
hevc video (hevc, h265, 265) |
|
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. |
|
|
|
m4v video |
|
MPEG-4 Part 2 video |
|
|
|
mjpeg video (mjpg, mjpeg) |
|
Motion JPEG video |
|
|
|
mlp audio |
|
Meridian Lossless Packing, also known as Packed PCM |
|
|
|
mp2 audio (mp2, m2a, mpa) |
|
MPEG-1 Audio Layer II audio |
|
|
|
mpeg1video video (mpg, mpeg, m1v) |
|
MPEG-1 Part 2 video. |
|
|
|
mpeg2video video (m2v) |
|
ITU-T H.262 / MPEG-2 Part 2 video |
|
|
|
obu video |
|
AV1 low overhead Open Bitstream Units muxer. |
|
|
|
Temporal delimiter OBUs will be inserted in all temporal units of |
|
the stream. |
|
|
|
rawvideo video (yuv, rgb) |
|
Raw uncompressed video. |
|
|
|
sbc audio (sbc, msbc) |
|
Bluetooth SIG low-complexity subband codec audio |
|
|
|
truehd audio (thd) |
|
Dolby TrueHD audio |
|
|
|
vc1 video |
|
SMPTE 421M / VC-1 video |
|
|
|
Examples |
|
|
|
o Store raw video frames with the rawvideo muxer using ffmpeg: |
|
|
|
ffmpeg -f lavfi -i testsrc -t 10 -s hd1080p testsrc.yuv |
|
|
|
Since the rawvideo muxer do not store the information related to |
|
size and format, this information must be provided when demuxing |
|
the file: |
|
|
|
ffplay -video_size 1920x1080 -pixel_format rgb24 -f rawvideo testsrc.rgb |
|
|
|
Raw PCM muxers |
|
This section covers raw PCM (Pulse-Code Modulation) audio muxers. |
|
|
|
They 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. |
|
|
|
It comprises the following muxers. The optional additional extension |
|
used to automatically select the muxer from the output extension is |
|
also shown in parentheses. |
|
|
|
alaw (al) |
|
PCM A-law |
|
|
|
f32be |
|
PCM 32-bit floating-point big-endian |
|
|
|
f32le |
|
PCM 32-bit floating-point little-endian |
|
|
|
f64be |
|
PCM 64-bit floating-point big-endian |
|
|
|
f64le |
|
PCM 64-bit floating-point little-endian |
|
|
|
mulaw (ul) |
|
PCM mu-law |
|
|
|
s16be |
|
PCM signed 16-bit big-endian |
|
|
|
s16le |
|
PCM signed 16-bit little-endian |
|
|
|
s24be |
|
PCM signed 24-bit big-endian |
|
|
|
s24le |
|
PCM signed 24-bit little-endian |
|
|
|
s32be |
|
PCM signed 32-bit big-endian |
|
|
|
s32le |
|
PCM signed 32-bit little-endian |
|
|
|
s8 (sb) |
|
PCM signed 8-bit |
|
|
|
u16be |
|
PCM unsigned 16-bit big-endian |
|
|
|
u16le |
|
PCM unsigned 16-bit little-endian |
|
|
|
u24be |
|
PCM unsigned 24-bit big-endian |
|
|
|
u24le |
|
PCM unsigned 24-bit little-endian |
|
|
|
u32be |
|
PCM unsigned 32-bit big-endian |
|
|
|
u32le |
|
PCM unsigned 32-bit little-endian |
|
|
|
u8 (ub) |
|
PCM unsigned 8-bit |
|
|
|
vidc |
|
PCM Archimedes VIDC |
|
|
|
MPEG-1/MPEG-2 program stream muxers |
|
This section covers formats belonging to the MPEG-1 and MPEG-2 Systems |
|
family. |
|
|
|
The MPEG-1 Systems format (also known as ISO/IEEC 11172-1 or MPEG-1 |
|
program stream) has been adopted for the format of media track stored |
|
in VCD (Video Compact Disc). |
|
|
|
The MPEG-2 Systems standard (also known as ISO/IEEC 13818-1) covers two |
|
containers formats, one known as transport stream and one known as |
|
program stream; only the latter is covered here. |
|
|
|
The MPEG-2 program stream format (also known as VOB due to the |
|
corresponding file extension) is an extension of MPEG-1 program stream: |
|
in addition to support different codecs for the audio and video |
|
streams, it also stores subtitles and navigation metadata. MPEG-2 |
|
program stream has been adopted for storing media streams in SVCD and |
|
DVD storage devices. |
|
|
|
This section comprises the following muxers. |
|
|
|
mpeg (mpg,mpeg) |
|
MPEG-1 Systems / MPEG-1 program stream muxer. |
|
|
|
vcd MPEG-1 Systems / MPEG-1 program stream (VCD) muxer. |
|
|
|
This muxer can be used to generate tracks in the format accepted by |
|
the VCD (Video Compact Disc) storage devices. |
|
|
|
It is the same as the mpeg muxer with a few differences. |
|
|
|
vob MPEG-2 program stream (VOB) muxer. |
|
|
|
dvd MPEG-2 program stream (DVD VOB) muxer. |
|
|
|
This muxer can be used to generate tracks in the format accepted by |
|
the DVD (Digital Versatile Disc) storage devices. |
|
|
|
This is the same as the vob muxer with a few differences. |
|
|
|
svcd (vob) |
|
MPEG-2 program stream (SVCD VOB) muxer. |
|
|
|
This muxer can be used to generate tracks in the format accepted by |
|
the SVCD (Super Video Compact Disc) storage devices. |
|
|
|
This is the same as the vob muxer with a few differences. |
|
|
|
Options |
|
|
|
muxrate rate |
|
Set user-defined mux rate expressed as a number of bits/s. If not |
|
specied the automatically computed mux rate is employed. Default |
|
value is 0. |
|
|
|
preload delay |
|
Set initial demux-decode delay in microseconds. Default value is |
|
500000. |
|
|
|
MOV/MPEG-4/ISOMBFF muxers |
|
This section covers formats belonging to the QuickTime / MOV family, |
|
including the MPEG-4 Part 14 format and ISO base media file format |
|
(ISOBMFF). These formats share a common structure based on the ISO base |
|
media file format (ISOBMFF). |
|
|
|
The MOV format was originally developed for use with Apple QuickTime. |
|
It was later used as the basis for the MPEG-4 Part 1 (later Part 14) |
|
format, also known as ISO/IEC 14496-1. That format was then generalized |
|
into ISOBMFF, also named MPEG-4 Part 12 format, ISO/IEC 14496-12, or |
|
ISO/IEC 15444-12. |
|
|
|
It comprises the following muxers. |
|
|
|
3gp Third Generation Partnership Project (3GPP) format for 3G UMTS |
|
multimedia services |
|
|
|
3g2 Third Generation Partnership Project 2 (3GP2 or 3GPP2) format for |
|
3G CDMA2000 multimedia services, similar to 3gp with extensions and |
|
limitations |
|
|
|
f4v Adobe Flash Video format |
|
|
|
ipod |
|
MPEG-4 audio file format, as MOV/MP4 but limited to contain only |
|
audio streams, typically played with the Apple ipod device |
|
|
|
ismv |
|
Microsoft IIS (Internet Information Services) Smooth Streaming |
|
Audio/Video (ISMV or ISMA) format. This is based on MPEG-4 Part 14 |
|
format with a few incompatible variants, used to stream media files |
|
for the Microsoft IIS server. |
|
|
|
mov QuickTime player format identified by the ".mov" extension |
|
|
|
mp4 MP4 or MPEG-4 Part 14 format |
|
|
|
psp PlayStation Portable MP4/MPEG-4 Part 14 format variant. This is |
|
based on MPEG-4 Part 14 format with a few incompatible variants, |
|
used to play files on PlayStation devices. |
|
|
|
Fragmentation |
|
|
|
The mov, mp4, and ismv muxers support fragmentation. Normally, a |
|
MOV/MP4 file has all the metadata about all packets stored in one |
|
location. |
|
|
|
This data is usually written at the end of the file, but it can be |
|
moved to the start for better playback by adding "+faststart" to the |
|
"-movflags", or using the 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: |
|
|
|
frag_duration |
|
frag_size |
|
min_frag_duration |
|
movflags +frag_keyframe |
|
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 the |
|
option min_frag_duration, which has to be fulfilled for any of the |
|
other conditions to apply. |
|
|
|
Options |
|
|
|
brand brand_string |
|
Override major brand. |
|
|
|
empty_hdlr_name bool |
|
Enable to skip writing the name inside a "hdlr" box. Default is |
|
"false". |
|
|
|
encryption_key key |
|
set the media encryption key in hexadecimal format |
|
|
|
encryption_kid kid |
|
set the media encryption key identifier in hexadecimal format |
|
|
|
encryption_scheme scheme |
|
configure the encryption scheme, allowed values are none, and cenc- |
|
aes-ctr |
|
|
|
frag_duration duration |
|
Create fragments that are duration microseconds long. |
|
|
|
frag_interleave number |
|
Interleave samples within fragments (max number of consecutive |
|
samples, lower is tighter interleaving, but with more overhead. It |
|
is set to 0 by default. |
|
|
|
frag_size size |
|
create fragments that contain up to size bytes of payload data |
|
|
|
iods_audio_profile profile |
|
specify iods number for the audio profile atom (from -1 to 255), |
|
default is "-1" |
|
|
|
iods_video_profile profile |
|
specify iods number for the video profile atom (from -1 to 255), |
|
default is "-1" |
|
|
|
ism_lookahead num_entries |
|
specify number of lookahead entries for ISM files (from 0 to 255), |
|
default is 0 |
|
|
|
min_frag_duration duration |
|
do not create fragments that are shorter than duration microseconds |
|
long |
|
|
|
moov_size 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. |
|
|
|
mov_gamma gamma |
|
specify gamma value for gama atom (as a decimal number from 0 to |
|
10), default is 0.0, must be set together with "+ movflags" |
|
|
|
movflags flags |
|
Set various muxing switches. The following flags can be used: |
|
|
|
cmaf |
|
write CMAF (Common Media Application Format) compatible |
|
fragmented MP4 output |
|
|
|
dash |
|
write DASH (Dynamic Adaptive Streaming over HTTP) compatible |
|
fragmented MP4 output |
|
|
|
default_base_moof |
|
Similarly to the omit_tfhd_offset flag, 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). |
|
|
|
delay_moov |
|
delay writing the initial moov until the first fragment is cut, |
|
or until the first fragment flush |
|
|
|
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. |
|
|
|
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. |
|
|
|
frag_custom |
|
Allow the caller to manually choose when to cut fragments, by |
|
calling "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 ffmpeg.) |
|
|
|
frag_discont |
|
signal that the next fragment is discontinuous from earlier |
|
ones |
|
|
|
frag_every_frame |
|
fragment at every frame |
|
|
|
frag_keyframe |
|
start a new fragment at each video keyframe |
|
|
|
global_sidx |
|
write a global sidx index at the start of the file |
|
|
|
isml |
|
create a live smooth streaming feed (for pushing to a |
|
publishing point) |
|
|
|
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. |
|
|
|
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. |
|
|
|
prefer_icc |
|
If writing colr atom prioritise usage of ICC profile if it |
|
exists in stream packet side data. |
|
|
|
rtphint |
|
add RTP hinting tracks to the output file |
|
|
|
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. |
|
|
|
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 the global_sidx flag is enabled, |
|
this option is ignored. |
|
|
|
skip_trailer |
|
skip writing the mfra/tfra/mfro trailer for fragmented files |
|
|
|
use_metadata_tags |
|
use mdta atom for metadata |
|
|
|
write_colr |
|
write colr atom even if the color info is unspecified. This |
|
flag is experimental, may be renamed or changed, do not use |
|
from scripts. |
|
|
|
write_gama |
|
write deprecated gama atom |
|
|
|
movie_timescale scale |
|
Set the timescale written in the movie header box ("mvhd"). Range |
|
is 1 to INT_MAX. Default is 1000. |
|
|
|
rtpflags flags |
|
Add RTP hinting tracks to the output file. |
|
|
|
The following flags can be used: |
|
|
|
h264_mode0 |
|
use mode 0 for H.264 in RTP |
|
|
|
latm |
|
use MP4A-LATM packetization instead of MPEG4-GENERIC for AAC |
|
|
|
rfc2190 |
|
use RFC 2190 packetization instead of RFC 4629 for H.263 |
|
|
|
send_bye |
|
send RTCP BYE packets when finishing |
|
|
|
skip_rtcp |
|
do not send RTCP sender reports |
|
|
|
skip_iods bool |
|
skip writing iods atom (default value is "true") |
|
|
|
use_editlist bool |
|
use edit list (default value is "auto") |
|
|
|
use_stream_ids_as_track_ids bool |
|
use stream ids as track ids (default value is "false") |
|
|
|
video_track_timescale scale |
|
Set the timescale used for video tracks. Range is 0 to INT_MAX. If |
|
set to 0, the timescale is automatically set based on the native |
|
stream time base. Default is 0. |
|
|
|
write_btrt 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 "-1" or "auto", which |
|
will write the box only in MP4 mode. |
|
|
|
write_prft option |
|
Write producer time reference box (PRFT) with a specified time |
|
source for the NTP field in the PRFT box. Set value as wallclock to |
|
specify timesource as wallclock time and pts to specify timesource |
|
as input packets' PTS values. |
|
|
|
write_tmcd bool |
|
Specify "on" to force writing a timecode track, "off" to disable it |
|
and "auto" to write a timecode track only for mov and mp4 output |
|
(default). |
|
|
|
Setting value to 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 video_pts and audio_pts are set to abs_wallclock. |
|
|
|
Examples |
|
|
|
o Push Smooth Streaming content in real time to a publishing point on |
|
IIS with the ismv muxer using ffmpeg: |
|
|
|
ffmpeg -re <<normal input/transcoding options>> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1) |
|
|
|
a64 |
|
A64 Commodore 64 video muxer. |
|
|
|
This muxer accepts a single "a64_multi" or "a64_multi5" codec video |
|
stream. |
|
|
|
ac4 |
|
Raw AC-4 audio muxer. |
|
|
|
This muxer accepts a single "ac4" audio stream. |
|
|
|
Options |
|
|
|
write_crc bool |
|
when enabled, write a CRC checksum for each packet to the output, |
|
default is "false" |
|
|
|
adts |
|
Audio Data Transport Stream muxer. |
|
|
|
It accepts a single AAC stream. |
|
|
|
Options |
|
|
|
write_id3v2 bool |
|
Enable to write ID3v2.4 tags at the start of the stream. Default is |
|
disabled. |
|
|
|
write_apetag bool |
|
Enable to write APE tags at the end of the stream. Default is |
|
disabled. |
|
|
|
write_mpeg2 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. |
|
|
|
aea |
|
MD STUDIO audio muxer. |
|
|
|
This muxer accepts a single ATRAC1 audio stream with either one or two |
|
channels and a sample rate of 44100Hz. |
|
|
|
As AEA supports storing the track title, this muxer will also write the |
|
title from stream's metadata to the container. |
|
|
|
aiff |
|
Audio Interchange File Format muxer. |
|
|
|
Options |
|
|
|
write_id3v2 bool |
|
Enable ID3v2 tags writing when set to 1. Default is 0 (disabled). |
|
|
|
id3v2_version bool |
|
Select ID3v2 version to write. Currently only version 3 and 4 (aka. |
|
ID3v2.3 and ID3v2.4) are supported. The default is version 4. |
|
|
|
alp |
|
High Voltage Software's Lego Racers game audio muxer. |
|
|
|
It accepts a single ADPCM_IMA_ALP stream with no more than 2 channels |
|
and a sample rate not greater than 44100 Hz. |
|
|
|
Extensions: "tun", "pcm" |
|
|
|
Options |
|
|
|
type type |
|
Set file type. |
|
|
|
type accepts the following values: |
|
|
|
tun Set file type as music. Must have a sample rate of 22050 Hz. |
|
|
|
pcm Set file type as sfx. |
|
|
|
auto |
|
Set file type as per output file extension. ".pcm" results in |
|
type "pcm" else type "tun" is set. (default) |
|
|
|
amr |
|
3GPP AMR (Adaptive Multi-Rate) audio muxer. |
|
|
|
It accepts a single audio stream containing an AMR NB stream. |
|
|
|
amv |
|
AMV (Actions Media Video) format muxer. |
|
|
|
apm |
|
Ubisoft Rayman 2 APM audio muxer. |
|
|
|
It accepts a single ADPCM IMA APM audio stream. |
|
|
|
apng |
|
Animated Portable Network Graphics muxer. |
|
|
|
It accepts a single APNG video stream. |
|
|
|
Options |
|
|
|
final_delay delay |
|
Force a delay expressed in seconds after the last frame of each |
|
repetition. Default value is 0.0. |
|
|
|
plays repetitions |
|
specify how many times to play the content, 0 causes an infinte |
|
loop, with 1 there is no loop |
|
|
|
Examples |
|
|
|
o Use ffmpeg to generate an APNG output with 2 repetitions, and with |
|
a delay of half a second after the first repetition: |
|
|
|
ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng |
|
|
|
argo_asf |
|
Argonaut Games ASF audio muxer. |
|
|
|
It accepts a single ADPCM audio stream. |
|
|
|
Options |
|
|
|
version_major version |
|
override file major version, specified as an integer, default value |
|
is 2 |
|
|
|
version_minor version |
|
override file minor version, specified as an integer, default value |
|
is 1 |
|
|
|
name name |
|
Embed file name into file, if not specified use the output file |
|
name. The name is truncated to 8 characters. |
|
|
|
argo_cvg |
|
Argonaut Games CVG audio muxer. |
|
|
|
It accepts a single one-channel ADPCM 22050Hz audio stream. |
|
|
|
The loop and reverb options set the corresponding flags in the header |
|
which can be later retrieved to process the audio stream accordingly. |
|
|
|
Options |
|
|
|
skip_rate_check bool |
|
skip sample rate check (default is "false") |
|
|
|
loop bool |
|
set loop flag (default is "false") |
|
|
|
reverb boolean |
|
set reverb flag (default is "true") |
|
|
|
asf, asf_stream |
|
Advanced / Active Systems (or Streaming) Format audio muxer. |
|
|
|
The asf_stream variant should be selected for streaming. |
|
|
|
Note that Windows Media Audio (wma) and Windows Media Video (wmv) use |
|
this muxer too. |
|
|
|
Options |
|
|
|
packet_size size |
|
Set the muxer packet size as a number of bytes. 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 "64Ki". |
|
|
|
ass |
|
ASS/SSA (SubStation Alpha) subtitles muxer. |
|
|
|
It accepts a single ASS subtitles stream. |
|
|
|
Options |
|
|
|
ignore_readorder bool |
|
Write dialogue events immediately, even if they are out-of-order, |
|
default is "false", otherwise they are cached until the expected |
|
time event is found. |
|
|
|
ast |
|
AST (Audio Stream) muxer. |
|
|
|
This format is used to play audio on some Nintendo Wii games. |
|
|
|
It accepts a single audio stream. |
|
|
|
The loopstart and loopend options can be used to define a section of |
|
the file to loop for players honoring such options. |
|
|
|
Options |
|
|
|
loopstart start |
|
Specify loop start position expressesd in milliseconds, from "-1" |
|
to "INT_MAX", in case "-1" is set then no loop is specified |
|
(default -1) and the loopend value is ignored. |
|
|
|
loopend end |
|
Specify loop end position expressed in milliseconds, from 0 to |
|
"INT_MAX", default is 0, in case 0 is set it assumes the total |
|
stream duration. |
|
|
|
au |
|
SUN AU audio muxer. |
|
|
|
It accepts a single audio stream. |
|
|
|
avi |
|
Audio Video Interleaved muxer. |
|
|
|
AVI is a proprietary format developed by Microsoft, and later formally |
|
specified through the Open DML specification. |
|
|
|
Because of differences in players implementations, it might be required |
|
to set some options to make sure that the generated output can be |
|
correctly played by the target player. |
|
|
|
Options |
|
|
|
flipped_raw_rgb bool |
|
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 "false" and indicates bitmap |
|
is stored top down. |
|
|
|
reserve_index_space size |
|
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. |
|
|
|
Default value is 0. |
|
|
|
write_channel_mask bool |
|
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 the "amerge" section in the |
|
ffmpeg-filters manual). |
|
|
|
avif |
|
AV1 (Alliance for Open Media Video codec 1) image format muxer. |
|
|
|
This muxers stores images encoded using the AV1 codec. |
|
|
|
It accepts one or two video streams. In case two video streams are |
|
provided, the second one shall contain a single plane storing the alpha |
|
mask. |
|
|
|
In case more than one image is provided, the generated output is |
|
considered an animated AVIF and the number of loops can be specified |
|
with the loop option. |
|
|
|
This is based on the specification by Alliance for Open Media at url |
|
<https://aomediacodec.github.io/av1-avif>. |
|
|
|
Options |
|
|
|
loop count |
|
number of times to loop an animated AVIF, 0 specify an infinite |
|
loop, default is 0 |
|
|
|
movie_timescale timescale |
|
Set the timescale written in the movie header box ("mvhd"). Range |
|
is 1 to INT_MAX. Default is 1000. |
|
|
|
avm2 |
|
ShockWave Flash (SWF) / ActionScript Virtual Machine 2 (AVM2) format |
|
muxer. |
|
|
|
It accepts one audio stream, one video stream, or both. |
|
|
|
bit |
|
G.729 (.bit) file format muxer. |
|
|
|
It accepts a single G.729 audio stream. |
|
|
|
caf |
|
Apple CAF (Core Audio Format) muxer. |
|
|
|
It accepts a single audio stream. |
|
|
|
codec2 |
|
Codec2 audio audio muxer. |
|
|
|
It accepts a single codec2 audio stream. |
|
|
|
chromaprint |
|
Chromaprint fingerprinter muxers. |
|
|
|
To enable compilation of this filter you need to configure FFmpeg with |
|
"--enable-chromaprint". |
|
|
|
This muxer feeds audio data to the Chromaprint library, which generates |
|
a fingerprint for the provided audio data. See: |
|
<https://acoustid.org/chromaprint> |
|
|
|
It takes a single signed native-endian 16-bit raw audio stream of at |
|
most 2 channels. |
|
|
|
Options |
|
|
|
algorithm version |
|
Select version of algorithm to fingerprint with. Range is 0 to 4. |
|
Version 3 enables silence detection. Default is 1. |
|
|
|
fp_format format |
|
Format to output the fingerprint as. Accepts the following options: |
|
|
|
base64 |
|
Base64 compressed fingerprint (default) |
|
|
|
compressed |
|
Binary compressed fingerprint |
|
|
|
raw Binary raw fingerprint |
|
|
|
silence_threshold 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". |
|
|
|
crc |
|
CRC (Cyclic Redundancy Check) muxer. |
|
|
|
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=0xCRC, where CRC is a hexadecimal number 0-padded to 8 digits |
|
containing the CRC for all the decoded input frames. |
|
|
|
See also the framecrc muxer. |
|
|
|
Examples |
|
|
|
o Use ffmpeg to compute the CRC of the input, and store it in the |
|
file out.crc: |
|
|
|
ffmpeg -i INPUT -f crc out.crc |
|
|
|
o Use ffmpeg to print the CRC to stdout with the command: |
|
|
|
ffmpeg -i INPUT -f crc - |
|
|
|
o You can select the output format of each frame with 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 - |
|
|
|
dash |
|
Dynamic Adaptive Streaming over HTTP (DASH) muxer. |
|
|
|
This muxer creates segments and manifest files according to the MPEG- |
|
DASH standard ISO/IEC 23009-1:2014 and following standard updates. |
|
|
|
For more information see: |
|
|
|
o ISO DASH Specification: |
|
<http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip> |
|
|
|
o WebM DASH Specification: |
|
<https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification> |
|
|
|
This muxer creates an MPD (Media Presentation Description) manifest |
|
file and segment files for each stream. Segment files are placed in the |
|
same directory of the MPD manifest file. |
|
|
|
The segment filename might contain pre-defined identifiers used in the |
|
manifest "SegmentTemplate" section 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. |
|
|
|
Options |
|
|
|
adaptation_sets adaptation_sets |
|
Assign streams to adaptation sets, specified in the MPD manifest |
|
"AdaptationSets" section. |
|
|
|
An adaptation set contains a set of one or more streams accessed as |
|
a single subset, e.g. corresponding streams encoded at different |
|
size selectable by the user depending on the available bandwidth, |
|
or to different audio streams with a different language. |
|
|
|
Each adaptation set is specified with the syntax: |
|
|
|
id=<index>,streams=<streams> |
|
|
|
where index must be a numerical index, and streams is a sequence of |
|
","-separated stream indices. Multiple adaptation sets can be |
|
specified, separated by spaces. |
|
|
|
To map all video (or audio) streams to an adaptation set, "v" (or |
|
"a") can be used as stream identifier instead of IDs. |
|
|
|
When no assignment is defined, this defaults to an adaptation set |
|
for each stream. |
|
|
|
The following optional fields can also be specified: |
|
|
|
descriptor |
|
Define the descriptor as defined by ISO/IEC |
|
23009-1:2014/Amd.2:2015. |
|
|
|
For example: |
|
|
|
<SupplementalProperty schemeIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/> |
|
|
|
The descriptor string should be a self-closing XML tag. |
|
|
|
frag_duration |
|
Override the global fragment duration specified with the |
|
frag_duration option. |
|
|
|
frag_type |
|
Override the global fragment type specified with the frag_type |
|
option. |
|
|
|
seg_duration |
|
Override the global segment duration specified with the |
|
seg_duration option. |
|
|
|
trick_id |
|
Mark an adaptation set as containing streams meant to be used |
|
for Trick Mode for the referenced adaptation set. |
|
|
|
A few examples of possible values for the adaptation_sets option |
|
follow: |
|
|
|
id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a |
|
|
|
id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1 |
|
|
|
dash_segment_type type |
|
Set DASH segment files type. |
|
|
|
Possible values: |
|
|
|
auto |
|
The dash segment files format will be selected based on the |
|
stream codec. This is the default mode. |
|
|
|
mp4 the dash segment files will be in ISOBMFF/MP4 format |
|
|
|
webm |
|
the dash segment files will be in WebM format |
|
|
|
extra_window_size size |
|
Set the maximum number of segments kept outside of the manifest |
|
before removing from disk. |
|
|
|
format_options options_list |
|
Set container format (mp4/webm) options using a ":"-separated list |
|
of key=value parameters. Values containing ":" special characters |
|
must be escaped. |
|
|
|
frag_duration duration |
|
Set the length in seconds of fragments within segments, fractional |
|
value can also be set. |
|
|
|
frag_type type |
|
Set the type of interval for fragmentation. |
|
|
|
Possible values: |
|
|
|
auto |
|
set one fragment per segment |
|
|
|
every_frame |
|
fragment at every frame |
|
|
|
duration |
|
fragment at specific time intervals |
|
|
|
pframes |
|
fragment at keyframes and following P-Frame reordering (Video |
|
only, experimental) |
|
|
|
global_sidx bool |
|
Write global "SIDX" atom. Applicable only for single file, mp4 |
|
output, non-streaming mode. |
|
|
|
hls_master_name file_name |
|
HLS master playlist name. Default is master.m3u8. |
|
|
|
hls_playlist bool |
|
Generate HLS playlist files. The master playlist is generated with |
|
filename specified by the hls_master_name option. One media |
|
playlist file is generated for each stream with filenames |
|
media_0.m3u8, media_1.m3u8, etc. |
|
|
|
http_opts http_opts |
|
Specify a list of ":"-separated key=value options to pass to the |
|
underlying HTTP protocol. Applicable only for HTTP output. |
|
|
|
http_persistent bool |
|
Use persistent HTTP connections. Applicable only for HTTP output. |
|
|
|
http_user_agent user_agent |
|
Override User-Agent field in HTTP header. Applicable only for HTTP |
|
output. |
|
|
|
ignore_io_errors bool |
|
Ignore IO errors during open and write. Useful for long-duration |
|
runs with network output. This is disabled by default. |
|
|
|
index_correction bool |
|
Enable or disable segment index correction logic. Applicable only |
|
when use_template is enabled and use_timeline is disabled. This is |
|
disabled by default. |
|
|
|
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. |
|
|
|
init_seg_name init_name |
|
DASH-templated name to use for the initialization segment. Default |
|
is "init-stream$RepresentationID$.$ext$". "$ext$" is replaced with |
|
the file name extension specific for the segment format. |
|
|
|
ldash bool |
|
Enable Low-latency Dash by constraining the presence and values of |
|
some elements. This is disabled by default. |
|
|
|
lhls bool |
|
Enable Low-latency HLS (LHLS). Add "#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 at |
|
<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 |
|
streaming and hls_playlist options automatically. This is an |
|
experimental feature. |
|
|
|
Note: This is not Apple's version LHLS. See |
|
<https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis> |
|
|
|
master_m3u8_publish_rate segment_intervals_count |
|
Publish master playlist repeatedly every after specified number of |
|
segment intervals. |
|
|
|
max_playback_rate 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. |
|
|
|
media_seg_name segment_name |
|
DASH-templated name to use 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. |
|
|
|
method method |
|
Use the given HTTP method to create output files. Generally set to |
|
"PUT" or "POST". |
|
|
|
min_playback_rate 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. |
|
|
|
mpd_profile flags |
|
Set one or more MPD manifest profiles. |
|
|
|
Possible values: |
|
|
|
dash |
|
MPEG-DASH ISO Base media file format live profile |
|
|
|
dvb_dash |
|
DVB-DASH profile |
|
|
|
Default value is "dash". |
|
|
|
remove_at_exit bool |
|
Enable or disable removal of all segments when finished. This is |
|
disabled by default. |
|
|
|
seg_duration duration |
|
Set the segment length in seconds (fractional value can be set). |
|
The value is treated as average segment duration when the |
|
use_template option is enabled and the use_timeline option is |
|
disabled and as minimum segment duration for all the other use |
|
cases. |
|
|
|
Default value is 5. |
|
|
|
single_file bool |
|
Enable or disable storing all segments in one file, accessed using |
|
byte ranges. This is disabled by default. |
|
|
|
The name of the single file can be specified with the |
|
single_file_name option, if not specified assume the basename of |
|
the manifest file with the output format extension. |
|
|
|
single_file_name file_name |
|
DASH-templated name to use for the manifest "baseURL" element. |
|
Imply that the single_file option is set to true. In the template, |
|
"$ext$" is replaced with the file name extension specific for the |
|
segment format. |
|
|
|
streaming bool |
|
Enable or disable chunk streaming mode of output. In chunk |
|
streaming mode, each frame will be a "moof" fragment which forms a |
|
chunk. This is disabled by default. |
|
|
|
target_latency target_latency |
|
Set an intended target latency in seconds for serving (fractional |
|
value can be set). Applicable only when the streaming and |
|
write_prft options are enabled. This is an informative fields |
|
clients can use to measure the latency of the service. |
|
|
|
timeout timeout |
|
Set timeout for socket I/O operations expressed in seconds |
|
(fractional value can be set). Applicable only for HTTP output. |
|
|
|
update_period period |
|
Set the MPD update period, for dynamic content. The unit is second. |
|
If set to 0, the period is automatically computed. |
|
|
|
Default value is 0. |
|
|
|
use_template bool |
|
Enable or disable use of "SegmentTemplate" instead of "SegmentList" |
|
in the manifest. This is enabled by default. |
|
|
|
use_timeline bool |
|
Enable or disable use of "SegmentTimeline" within the |
|
"SegmentTemplate" manifest section. This is enabled by default. |
|
|
|
utc_timing_url url |
|
URL of the page that will return the UTC timestamp in ISO format, |
|
for example "https://time.akamai.com/?iso" |
|
|
|
window_size size |
|
Set the maximum number of segments kept in the manifest, discard |
|
the oldest one. This is useful for live streaming. |
|
|
|
If the value is 0, all segments are kept in the manifest. Default |
|
value is 0. |
|
|
|
write_prft write_prft |
|
Write Producer Reference Time elements on supported streams. This |
|
also enables writing prft boxes in the underlying muxer. Applicable |
|
only when the utc_url option is enabled. It is set to auto by |
|
default, in which case the muxer will attempt to enable it only in |
|
modes that require it. |
|
|
|
Example |
|
|
|
Generate a DASH output reading from an input source in realtime using |
|
ffmpeg. |
|
|
|
Two multimedia streams are generated from the input file, both |
|
containing a video stream encoded through libx264, and an audio stream |
|
encoded with libfdk_aac. The first multimedia stream contains video |
|
with a bitrate of 800k and audio at the default rate, the second with |
|
video scaled to 320x170 pixels at 300k and audio resampled at 22005 Hz. |
|
|
|
The window_size option keeps only the latest 5 segments with the |
|
default duration of 5 seconds. |
|
|
|
ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \ |
|
-b:v:0 800k -profile:v:0 main \ |
|
-b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -ar:a:1 22050 \ |
|
-bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 \ |
|
-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 |
|
|
|
daud |
|
D-Cinema audio muxer. |
|
|
|
It accepts a single 6-channels audio stream resampled at 96000 Hz |
|
encoded with the pcm_24daud codec. |
|
|
|
Example |
|
|
|
Use ffmpeg to mux input audio to a 5.1 channel layout resampled at |
|
96000Hz: |
|
|
|
ffmpeg -i INPUT -af aresample=96000,pan=5.1 slow.302 |
|
|
|
For ffmpeg versions before 7.0 you might have to use the asetnsamples |
|
filter to limit the muxed packet size, because this format does not |
|
support muxing packets larger than 65535 bytes (3640 samples). For |
|
newer ffmpeg versions audio is automatically packetized to 36000 byte |
|
(2000 sample) packets. |
|
|
|
dv |
|
DV (Digital Video) muxer. |
|
|
|
It accepts exactly one dvvideo video stream and at most two pcm_s16 |
|
audio streams. More constraints are defined by the property of the |
|
video, which must correspond to a DV video supported profile, and on |
|
the framerate. |
|
|
|
Example |
|
|
|
Use ffmpeg to convert the input: |
|
|
|
ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv |
|
|
|
ffmetadata |
|
FFmpeg metadata muxer. |
|
|
|
This muxer writes the streams metadata in the ffmetadata format. |
|
|
|
See the Metadata chapter for information about the format. |
|
|
|
Example |
|
|
|
Use ffmpeg to extract metadata from an input file to a metadata.ffmeta |
|
file in ffmetadata format: |
|
|
|
ffmpeg -i INPUT -f ffmetadata metadata.ffmeta |
|
|
|
fifo |
|
FIFO (First-In First-Out) muxer. |
|
|
|
The fifo pseudo-muxer allows the separation of encoding and muxing by |
|
using a first-in-first-out queue and running the actual muxer in a |
|
separate thread. |
|
|
|
This is especially useful in combination with the tee muxer and can be |
|
used to send data to several destinations with different |
|
reliability/writing speed/latency. |
|
|
|
The target muxer is either selected from the output name or specified |
|
through the fifo_format option. |
|
|
|
The behavior of the fifo muxer if the queue fills up or if the output |
|
fails (e.g. if a packet cannot be written to the output) is selectable: |
|
|
|
o Output can be transparently restarted with configurable delay |
|
between retries based on real time or time of the processed stream. |
|
|
|
o Encoding can be blocked during temporary failure, or continue |
|
transparently dropping packets in case the FIFO queue fills up. |
|
|
|
API users should be aware that callback functions |
|
("interrupt_callback", "io_open" and "io_close") used within its |
|
"AVFormatContext" must be thread-safe. |
|
|
|
Options |
|
|
|
attempt_recovery 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 "false". |
|
|
|
drop_pkts_on_overflow bool |
|
If set to "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 |
|
"false", so in such cases the encoder will be blocked until the |
|
muxer processes some of the packets and none of them is lost. |
|
|
|
fifo_format format_name |
|
Specify the format name. Useful if it cannot be guessed from the |
|
output name suffix. |
|
|
|
format_opts options |
|
Specify format options for the underlying muxer. Muxer options can |
|
be specified as a list of key=value pairs separated by ':'. |
|
|
|
max_recovery_attempts count |
|
Set maximum number of successive unsuccessful recovery attempts |
|
after which the output fails permanently. By default this option is |
|
set to 0 (unlimited). |
|
|
|
queue_size size |
|
Specify size of the queue as a number of packets. Default value is |
|
60. |
|
|
|
recover_any_error bool |
|
If set to "true", recovery will be attempted regardless of type of |
|
the error causing the failure. By default this option is set to |
|
"false" and in case of certain (usually permanent) errors the |
|
recovery is not attempted even when the attempt_recovery option is |
|
set to "true". |
|
|
|
recovery_wait_streamtime bool |
|
If set to "false", the real time is used when waiting for the |
|
recovery attempt (i.e. the recovery will be attempted after the |
|
time specified by the recovery_wait_time option). |
|
|
|
If set to "true", the time of the processed stream is taken into |
|
account instead (i.e. the recovery will be attempted after |
|
discarding the packets corresponding to the recovery_wait_time |
|
option). |
|
|
|
By default this option is set to "false". |
|
|
|
recovery_wait_time duration |
|
Specify waiting time in seconds before the next recovery attempt |
|
after previous unsuccessful recovery attempt. Default value is 5. |
|
|
|
restart_with_keyframe bool |
|
Specify whether to wait for the keyframe after recovering from |
|
queue overflow or failure. This option is set to "false" by |
|
default. |
|
|
|
timeshift duration |
|
Buffer the specified amount of packets and delay writing the |
|
output. Note that the value of the queue_size option must be big |
|
enough to store the packets for timeshift. At the end of the input |
|
the fifo buffer is flushed at realtime speed. |
|
|
|
Example |
|
|
|
Use ffmpeg to stream to an 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 \ |
|
-drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 \ |
|
-map 0:v -map 0:a rtmp://example.com/live/stream_name |
|
|
|
film_cpk |
|
Sega film (.cpk) muxer. |
|
|
|
This format was used as internal format for several Sega games. |
|
|
|
For more information regarding the Sega film file format, visit |
|
<http://wiki.multimedia.cx/index.php?title=Sega_FILM>. |
|
|
|
It accepts at maximum one cinepak or raw video stream, and at maximum |
|
one audio stream. |
|
|
|
filmstrip |
|
Adobe Filmstrip muxer. |
|
|
|
This format is used by several Adobe tools to store a generated |
|
filmstrip export. It accepts a single raw video stream. |
|
|
|
fits |
|
Flexible Image Transport System (FITS) muxer. |
|
|
|
This image format is used to store astronomical data. |
|
|
|
For more information regarding the format, visit |
|
<https://fits.gsfc.nasa.gov>. |
|
|
|
flac |
|
Raw FLAC audio muxer. |
|
|
|
This muxer accepts exactly one FLAC audio stream. Additionally, it is |
|
possible to add images with disposition attached_pic. |
|
|
|
Options |
|
|
|
write_header bool |
|
write the file header if set to "true", default is "true" |
|
|
|
Example |
|
|
|
Use ffmpeg to store the audio stream from an input file, together with |
|
several pictures used with attached_pic disposition: |
|
|
|
ffmpeg -i INPUT -i pic1.png -i pic2.jpg -map 0:a -map 1 -map 2 -disposition:v attached_pic OUTPUT |
|
|
|
flv |
|
Adobe Flash Video Format muxer. |
|
|
|
Options |
|
|
|
flvflags flags |
|
Possible values: |
|
|
|
aac_seq_header_detect |
|
Place AAC sequence header based on audio stream data. |
|
|
|
no_sequence_end |
|
Disable sequence end tag. |
|
|
|
no_metadata |
|
Disable metadata tag. |
|
|
|
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). |
|
|
|
add_keyframe_index |
|
Used to facilitate seeking; particularly for HTTP pseudo |
|
streaming. |
|
|
|
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> |
|
|
|
CRC is a hexadecimal number 0-padded to 8 digits containing the CRC of |
|
the packet. |
|
|
|
Examples |
|
|
|
For example to compute the CRC of the audio and video frames in INPUT, |
|
converted to raw audio and video packets, and store it in the file |
|
out.crc: |
|
|
|
ffmpeg -i INPUT -f framecrc out.crc |
|
|
|
To print the information to stdout, use the command: |
|
|
|
ffmpeg -i INPUT -f framecrc - |
|
|
|
With 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 crc muxer. |
|
|
|
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> |
|
|
|
hash is a hexadecimal number representing the computed hash for the |
|
packet. |
|
|
|
hash algorithm |
|
Use the cryptographic hash function specified by the string |
|
algorithm. Supported values include "MD5", "murmur3", "RIPEMD128", |
|
"RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA160", "SHA224", "SHA256" |
|
(default), "SHA512/224", "SHA512/256", "SHA384", "SHA512", "CRC32" |
|
and "adler32". |
|
|
|
Examples |
|
|
|
To compute the SHA-256 hash of the audio and video frames in INPUT, |
|
converted to raw audio and video packets, and store it in the file |
|
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 hash muxer. |
|
|
|
framemd5 |
|
Per-packet MD5 testing format. |
|
|
|
This is a variant of the framehash muxer. Unlike that muxer, it |
|
defaults to using the MD5 hash function. |
|
|
|
Examples |
|
|
|
To compute the MD5 hash of the audio and video frames in INPUT, |
|
converted to raw audio and video packets, and store it in the file |
|
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 framehash and md5 muxers. |
|
|
|
gif |
|
Animated GIF muxer. |
|
|
|
Note that the GIF format has a very large time base: the delay between |
|
two frames can therefore not be smaller than one centi second. |
|
|
|
Options |
|
|
|
loop bool |
|
Set the number of times to loop the output. Use "-1" for no loop, 0 |
|
for looping indefinitely (default). |
|
|
|
final_delay delay |
|
Force the delay (expressed in centiseconds) after the last frame. |
|
Each frame ends with a delay until the next frame. The default is |
|
"-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. |
|
|
|
Example |
|
|
|
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 image2 muxer: |
|
|
|
ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif" |
|
|
|
gxf |
|
General eXchange Format (GXF) muxer. |
|
|
|
GXF was developed by Grass Valley Group, then standardized by SMPTE as |
|
SMPTE 360M and was extended in SMPTE RDD 14-2007 to include high- |
|
definition video resolutions. |
|
|
|
It accepts at most one video stream with codec mjpeg, or mpeg1video, or |
|
mpeg2video, or dvvideo with resolution 512x480 or 608x576, and several |
|
audio streams with rate 48000Hz and codec pcm16_le. |
|
|
|
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: |
|
algo=hash, where algo is a short string representing the hash function |
|
used, and hash is a hexadecimal number representing the computed hash. |
|
|
|
hash algorithm |
|
Use the cryptographic hash function specified by the string |
|
algorithm. Supported values include "MD5", "murmur3", "RIPEMD128", |
|
"RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA160", "SHA224", "SHA256" |
|
(default), "SHA512/224", "SHA512/256", "SHA384", "SHA512", "CRC32" |
|
and "adler32". |
|
|
|
Examples |
|
|
|
To compute the SHA-256 hash of the input converted to raw audio and |
|
video, and store it in the file 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 framehash muxer. |
|
|
|
hds |
|
HTTP Dynamic Streaming (HDS) muxer. |
|
|
|
HTTP dynamic streaming, or HDS, is an adaptive bitrate streaming method |
|
developed by Adobe. HDS delivers MP4 video content over HTTP |
|
connections. HDS can be used for on-demand streaming or live streaming. |
|
|
|
This muxer creates an .f4m (Adobe Flash Media Manifest File) manifest, |
|
an .abst (Adobe Bootstrap File) for each stream, and segment files in a |
|
directory specified as the output. |
|
|
|
These needs to be accessed by an HDS player throuhg HTTPS for it to be |
|
able to perform playback on the generated stream. |
|
|
|
Options |
|
|
|
extra_window_size int |
|
number of fragments kept outside of the manifest before removing |
|
from disk |
|
|
|
min_frag_duration microseconds |
|
minimum fragment duration (in microseconds), default value is 1 |
|
second (10000000) |
|
|
|
remove_at_exit bool |
|
remove all fragments when finished when set to "true" |
|
|
|
window_size int |
|
number of fragments kept in the manifest, if set to a value |
|
different from 0. By default all segments are kept in the output |
|
directory. |
|
|
|
Example |
|
|
|
Use ffmpeg to generate HDS files to the output.hds directory in real- |
|
time rate: |
|
|
|
ffmpeg -re -i INPUT -f hds -b:v 200k output.hds |
|
|
|
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 ffmpeg: |
|
|
|
ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8 |
|
|
|
This example will produce the playlist, out.m3u8, and segment files: |
|
out0.ts, out1.ts, out2.ts, etc. |
|
|
|
See also the segment muxer, which provides a more generic and flexible |
|
implementation of a segmenter, and can be used to perform HLS |
|
segmentation. |
|
|
|
Options |
|
|
|
This muxer supports the following options: |
|
|
|
hls_init_time duration |
|
Set the initial target segment length. Default value is 0. |
|
|
|
duration must be a time duration specification, see 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 ffmpeg will cut segments at duration equal to "hls_time" |
|
|
|
hls_time duration |
|
Set the target segment length. Default value is 2. |
|
|
|
duration must be a time duration specification, see the Time |
|
duration section in the ffmpeg-utils(1) manual. Segment will be |
|
cut on the next key frame after this time has passed. |
|
|
|
hls_list_size size |
|
Set the maximum number of playlist entries. If set to 0 the list |
|
file will contain all the segments. Default value is 5. |
|
|
|
hls_delete_threshold size |
|
Set the number of unreferenced segments to keep on disk before |
|
"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 "hls_list_size+1" will be deleted. |
|
|
|
hls_start_number_source |
|
Start the playlist sequence number ("#EXT-X-MEDIA-SEQUENCE") |
|
according to the specified source. Unless "hls_flags single_file" |
|
is set, it also specifies source of starting sequence numbers of |
|
segment and subtitle filenames. In any case, if "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: |
|
|
|
generic (default) |
|
Set the starting sequence numbers according to start_number |
|
option value. |
|
|
|
epoch |
|
The start number will be the seconds since epoch (1970-01-01 |
|
00:00:00) |
|
|
|
epoch_us |
|
The start number will be the microseconds since epoch |
|
(1970-01-01 00:00:00) |
|
|
|
datetime |
|
The start number will be based on the current date/time as |
|
YYYYmmddHHMMSS. e.g. 20161231235759. |
|
|
|
start_number number |
|
Start the playlist sequence number ("#EXT-X-MEDIA-SEQUENCE") from |
|
the specified number when hls_start_number_source value is generic. |
|
(This is the default case.) Unless "hls_flags single_file" is set, |
|
it also specifies starting sequence numbers of segment and subtitle |
|
filenames. Default value is 0. |
|
|
|
hls_allow_cache allowcache |
|
Explicitly set whether the client MAY (1) or MUST NOT (0) cache |
|
media segments. |
|
|
|
hls_base_url baseurl |
|
Append 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 wrap option |
|
is specified. |
|
|
|
hls_segment_filename filename |
|
Set the segment filename. Unless "hls_flags single_file" is set, |
|
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, out.m3u8, and segment |
|
files: file000.ts, file001.ts, file002.ts, etc. |
|
|
|
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 filename will be written into the m3u8 segment list. |
|
|
|
When "var_stream_map" is set with two or more variant streams, the |
|
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: |
|
file_0_000.ts, file_0_001.ts, file_0_002.ts, etc. and |
|
file_1_000.ts, file_1_001.ts, 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: |
|
vs0/file_000.ts, vs0/file_001.ts, vs0/file_002.ts, etc. and |
|
vs1/file_000.ts, vs1/file_001.ts, vs1/file_002.ts, etc. |
|
|
|
strftime |
|
Use strftime() on 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, out.m3u8, and segment |
|
files: file-20160215-1455569023.ts, file-20160215-1455569024.ts, |
|
etc. Note: On some systems/environments, the %s specifier is not |
|
available. See |
|
"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, out.m3u8, and segment |
|
files: file-20160215-0001.ts, file-20160215-0002.ts, etc. |
|
|
|
strftime_mkdir |
|
Used together with -strftime_mkdir, it will create all |
|
subdirectories which is expanded in 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, out.m3u8, and segment files: |
|
20160215/file-20160215-1455569023.ts, |
|
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, out.m3u8, and |
|
segment files: 2016/02/15/file-20160215-1455569023.ts, |
|
2016/02/15/file-20160215-1455569024.ts, etc. |
|
|
|
hls_segment_options options_list |
|
Set output format options using a :-separated list of key=value |
|
parameters. Values containing ":" special characters must be |
|
escaped. |
|
|
|
hls_key_info_file key_info_file |
|
Use the information in key_info_file for segment encryption. The |
|
first line of 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 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 "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 |
|
|
|
-hls_enc enc |
|
Enable (1) or disable (0) the AES128 encryption. When enabled |
|
every segment generated is encrypted and the encryption key is |
|
saved as playlist name.key. |
|
|
|
-hls_enc_key key |
|
16-octet key to encrypt the segments, by default it is randomly |
|
generated. |
|
|
|
-hls_enc_key_url keyurl |
|
If set, keyurl is prepended instead of baseurl to the key filename |
|
in the playlist. |
|
|
|
-hls_enc_iv iv |
|
16-octet initialization vector for every segment instead of the |
|
autogenerated ones. |
|
|
|
hls_segment_type flags |
|
Possible values: |
|
|
|
mpegts |
|
Output segment files in MPEG-2 Transport Stream format. This is |
|
compatible with all HLS versions. |
|
|
|
fmp4 |
|
Output segment files in fragmented MP4 format, similar to MPEG- |
|
DASH. fmp4 files may be used in HLS version 7 and above. |
|
|
|
hls_fmp4_init_filename filename |
|
Set filename to the fragment files header file, default filename is |
|
init.mp4. |
|
|
|
Use "-strftime 1" on 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 1602678741_init.mp4 |
|
|
|
hls_fmp4_init_resend |
|
Resend init file after m3u8 file refresh every time, default is 0. |
|
|
|
When "var_stream_map" is set with two or more variant streams, the |
|
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. |
|
|
|
hls_flags flags |
|
Possible values: |
|
|
|
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, out.m3u8, and a single segment file, |
|
out.ts. |
|
|
|
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. |
|
|
|
append_list |
|
Append new segments into the end of old segment list, and |
|
remove the "#EXT-X-ENDLIST" from the old segment list. |
|
|
|
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. |
|
|
|
discont_start |
|
Add the "#EXT-X-DISCONTINUITY" tag to the playlist, before the |
|
first segment's information. |
|
|
|
omit_endlist |
|
Do not append the "EXT-X-ENDLIST" tag at the end of the |
|
playlist. |
|
|
|
periodic_rekey |
|
The file specified by "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. |
|
|
|
independent_segments |
|
Add the "#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. |
|
|
|
iframes_only |
|
Add the "#EXT-X-I-FRAMES-ONLY" to playlists that has video |
|
segments and can play only I-frames in the "#EXT-X-BYTERANGE" |
|
mode. |
|
|
|
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 "hls_time" option. |
|
|
|
program_date_time |
|
Generate "EXT-X-PROGRAM-DATE-TIME" tags. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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: |
|
segment_20170102194334_0003_00122200_0000003000000.ts, |
|
segment_20170102194334_0004_00120072_0000003000000.ts etc. |
|
|
|
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 "file" |
|
protocol and with type ("hls_playlist_type") other than "vod" |
|
are always written into temporary file regardless of this flag. |
|
Master playlist files ("master_pl_name"), if any, with "file" |
|
protocol, are always written into temporary file regardless of |
|
this flag if "master_pl_publish_rate" value is other than zero. |
|
|
|
hls_playlist_type event |
|
Emit "#EXT-X-PLAYLIST-TYPE:EVENT" in the m3u8 header. Forces |
|
hls_list_size to 0; the playlist can only be appended to. |
|
|
|
hls_playlist_type vod |
|
Emit "#EXT-X-PLAYLIST-TYPE:VOD" in the m3u8 header. Forces |
|
hls_list_size to 0; the playlist must not change. |
|
|
|
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 |
|
"refresh" times using the same method. Note that the HTTP server |
|
must support the given method for uploading files. |
|
|
|
http_user_agent |
|
Override User-Agent field in HTTP header. Applicable only for HTTP |
|
output. |
|
|
|
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 |
|
http://example.com/live/vs_0/out.m3u8 and the second one at |
|
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 "#EXT-X-MEDIA" tag with "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. |
|
|
|
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:<group |
|
name>,instreamid:<INSTREAM-ID>,language:<language code> ....". |
|
'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 "var_stream_map" string. If |
|
"var_stream_map" is not set, then the first available ccgroup in |
|
"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 "#EXT-X-MEDIA" tag with "TYPE=CLOSED-CAPTIONS" in |
|
the master playlist with group name 'cc', language 'en' (english) |
|
and INSTREAM-ID 'CC1'. Also, it adds "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 "#EXT-X-MEDIA" tags with |
|
"TYPE=CLOSED-CAPTIONS" in the master playlist for the INSTREAM-IDs |
|
'CC1' and 'CC2'. Also, it adds "CLOSED-CAPTIONS" attribute with |
|
group name 'cc' for the two output variant streams. |
|
|
|
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/ |
|
|
|
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. |
|
|
|
http_persistent |
|
Use persistent HTTP connections. Applicable only for HTTP output. |
|
|
|
timeout |
|
Set timeout for socket I/O operations. Applicable only for HTTP |
|
output. |
|
|
|
ignore_io_errors |
|
Ignore IO errors during open, write and delete. Useful for long- |
|
duration runs with network output. |
|
|
|
headers |
|
Set custom HTTP headers, can override built in default headers. |
|
Applicable only for HTTP output. |
|
|
|
ico |
|
ICO file muxer. |
|
|
|
Microsoft's icon file format (ICO) has some strict limitations that |
|
should be noted: |
|
|
|
o Size cannot exceed 256 pixels in any dimension |
|
|
|
o Only BMP and PNG images can be stored |
|
|
|
o 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 |
|
|
|
o If a BMP image is used, it must use the BITMAPINFOHEADER DIB header |
|
|
|
o If a PNG image is used, it must use the rgba pixel format |
|
|
|
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 "%0Nd", this string specifies the position of the |
|
characters representing a numbering in the filenames. If the form |
|
"%0Nd" is used, the string representing the number in each filename is |
|
0-padded to N digits. The literal character '%' can be specified in the |
|
pattern with the string "%%". |
|
|
|
If the pattern contains "%d" or "%0Nd", 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 img-001.bmp, img-002.bmp, ..., img-010.bmp, etc. |
|
The pattern "img%%-%d.jpg" will specify a sequence of filenames of the |
|
form img%-1.jpg, img%-2.jpg, ..., img%-10.jpg, etc. |
|
|
|
The image muxer supports the .Y.U.V image file format. This format is |
|
special in 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. |
|
|
|
Options |
|
|
|
frame_pts |
|
If set to 1, expand the filename with pts from pkt->pts. Default |
|
value is 0. |
|
|
|
start_number |
|
Start the sequence from the specified number. Default value is 1. |
|
|
|
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. |
|
|
|
strftime |
|
If set to 1, expand the filename with date and time information |
|
from "strftime()". Default value is 0. |
|
|
|
atomic_writing |
|
Write output to a temporary file, which is renamed to target |
|
filename once writing is completed. Default is disabled. |
|
|
|
protocol_opts options_list |
|
Set protocol options as a :-separated list of key=value parameters. |
|
Values containing the ":" special character must be escaped. |
|
|
|
Examples |
|
|
|
The following example shows how to use ffmpeg for creating a sequence |
|
of files img-001.jpeg, 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 ffmpeg, if the format is not specified with the "-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 "%0Nd", |
|
for example to create a single image file 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 strftime option allows you to expand the filename with date and |
|
time information. Check the documentation of the "strftime()" function |
|
for the syntax. |
|
|
|
For example to generate image files from the "strftime()" |
|
"%Y-%m-%d_%H-%M-%S" pattern, the following 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 |
|
|
|
matroska |
|
Matroska container muxer. |
|
|
|
This muxer implements the matroska and webm container specs. |
|
|
|
Metadata |
|
|
|
The recognized metadata settings in this muxer are: |
|
|
|
title |
|
Set title name provided to a single track. This gets mapped to the |
|
FileDescription element for a stream written as attachment. |
|
|
|
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). |
|
|
|
stereo_mode |
|
Set stereo 3D video layout of two views in a single video track. |
|
|
|
The following values are recognized: |
|
|
|
mono |
|
video is not stereo |
|
|
|
left_right |
|
Both views are arranged side by side, Left-eye view is on the |
|
left |
|
|
|
bottom_top |
|
Both views are arranged in top-bottom orientation, Left-eye |
|
view is at bottom |
|
|
|
top_bottom |
|
Both views are arranged in top-bottom orientation, Left-eye |
|
view is on top |
|
|
|
checkerboard_rl |
|
Each view is arranged in a checkerboard interleaved pattern, |
|
Left-eye view being first |
|
|
|
checkerboard_lr |
|
Each view is arranged in a checkerboard interleaved pattern, |
|
Right-eye view being first |
|
|
|
row_interleaved_rl |
|
Each view is constituted by a row based interleaving, Right-eye |
|
view is first row |
|
|
|
row_interleaved_lr |
|
Each view is constituted by a row based interleaving, Left-eye |
|
view is first row |
|
|
|
col_interleaved_rl |
|
Both views are arranged in a column based interleaving manner, |
|
Right-eye view is first column |
|
|
|
col_interleaved_lr |
|
Both views are arranged in a column based interleaving manner, |
|
Left-eye view is first column |
|
|
|
anaglyph_cyan_red |
|
All frames are in anaglyph format viewable through red-cyan |
|
filters |
|
|
|
right_left |
|
Both views are arranged side by side, Right-eye view is on the |
|
left |
|
|
|
anaglyph_green_magenta |
|
All frames are in anaglyph format viewable through green- |
|
magenta filters |
|
|
|
block_lr |
|
Both eyes laced in one Block, Left-eye view is first |
|
|
|
block_rl |
|
Both eyes laced in one Block, Right-eye view is first |
|
|
|
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 |
|
|
|
Options |
|
|
|
This muxer supports the following options: |
|
|
|
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. |
|
|
|
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. |
|
|
|
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 passthrough. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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 false and indicates bitmap |
|
is stored top down. |
|
|
|
md5 |
|
MD5 testing format. |
|
|
|
This is a variant of the hash muxer. Unlike that muxer, it defaults to |
|
using the MD5 hash function. |
|
|
|
Examples |
|
|
|
To compute the MD5 hash of the input converted to raw audio and video, |
|
and store it in the file 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 hash and framemd5 muxers. |
|
|
|
mp3 |
|
The MP3 muxer writes a raw MP3 stream with the following optional |
|
features: |
|
|
|
o An ID3v2 metadata header at the beginning (enabled by default). |
|
Versions 2.3 and 2.4 are supported, the "id3v2_version" private |
|
option controls which one is used (3 or 4). Setting "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 title and comment map to APIC description and picture |
|
type respectively. See <http://id3.org/id3v2.4.0-frames> 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. |
|
|
|
o 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 "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. |
|
|
|
o A legacy ID3v1 tag at the end of the file (disabled by default). It |
|
may be enabled with the "write_id3v1" private option, but as its |
|
capabilities are very limited, its usage is not recommended. |
|
|
|
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 "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 |
|
|
|
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 "service_provider" |
|
and "service_name". If they are not set the default for |
|
"service_provider" is FFmpeg and the default for "service_name" is |
|
Service01. |
|
|
|
Options |
|
|
|
The muxer options are: |
|
|
|
mpegts_transport_stream_id integer |
|
Set the transport_stream_id. This identifies a transponder in DVB. |
|
Default is 0x0001. |
|
|
|
mpegts_original_network_id integer |
|
Set the 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 Original_Network_ID, Transport_Stream_ID. Default |
|
is 0x0001. |
|
|
|
mpegts_service_id integer |
|
Set the service_id, also known as program in DVB. Default is |
|
0x0001. |
|
|
|
mpegts_service_type integer |
|
Set the program service_type. Default is "digital_tv". Accepts the |
|
following options: |
|
|
|
hex_value |
|
Any hexadecimal value between 0x01 and 0xff as defined in ETSI |
|
300 468. |
|
|
|
digital_tv |
|
Digital TV service. |
|
|
|
digital_radio |
|
Digital Radio service. |
|
|
|
teletext |
|
Teletext service. |
|
|
|
advanced_codec_digital_radio |
|
Advanced Codec Digital Radio service. |
|
|
|
mpeg2_digital_hdtv |
|
MPEG2 Digital HDTV service. |
|
|
|
advanced_codec_digital_sdtv |
|
Advanced Codec Digital SDTV service. |
|
|
|
advanced_codec_digital_hdtv |
|
Advanced Codec Digital HDTV service. |
|
|
|
mpegts_pmt_start_pid integer |
|
Set the first PID for PMTs. Default is 0x1000, minimum is 0x0020, |
|
maximum is 0x1ffa. This option has no effect in m2ts mode where the |
|
PMT PID is fixed 0x0100. |
|
|
|
mpegts_start_pid integer |
|
Set the first PID for elementary streams. Default is 0x0100, |
|
minimum is 0x0020, maximum is 0x1ffa. This option has no effect in |
|
m2ts mode where the elementary stream PIDs are fixed. |
|
|
|
mpegts_m2ts_mode boolean |
|
Enable m2ts mode if set to 1. Default value is "-1" which disables |
|
m2ts mode. |
|
|
|
muxrate integer |
|
Set a constant muxrate. Default is VBR. |
|
|
|
pes_payload_size integer |
|
Set minimum PES packet payload in bytes. Default is 2930. |
|
|
|
mpegts_flags flags |
|
Set mpegts flags. Accepts the following options: |
|
|
|
resend_headers |
|
Reemit PAT/PMT before writing the next packet. |
|
|
|
latm |
|
Use LATM packetization for AAC. |
|
|
|
pat_pmt_at_frames |
|
Reemit PAT and PMT at each video frame. |
|
|
|
system_b |
|
Conform to System B (DVB) instead of System A (ATSC). |
|
|
|
initial_discontinuity |
|
Mark the initial packet of each stream as discontinuity. |
|
|
|
nit Emit NIT table. |
|
|
|
omit_rai |
|
Disable writing of random access indicator. |
|
|
|
mpegts_copyts boolean |
|
Preserve original timestamps, if value is set to 1. Default value |
|
is "-1", which results in shifting timestamps so that they start |
|
from 0. |
|
|
|
omit_video_pes_length boolean |
|
Omit the PES packet length for video packets. Default is 1 (true). |
|
|
|
pcr_period integer |
|
Override the default PCR retransmission time in milliseconds. |
|
Default is "-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. |
|
|
|
pat_period duration |
|
Maximum time in seconds between PAT/PMT tables. Default is 0.1. |
|
|
|
sdt_period duration |
|
Maximum time in seconds between SDT tables. Default is 0.5. |
|
|
|
nit_period duration |
|
Maximum time in seconds between NIT tables. Default is 0.5. |
|
|
|
tables_version integer |
|
Set PAT, PMT, SDT and NIT version (default 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 "AVFormatContext" (in case of API usage) or |
|
restart ffmpeg instance, cyclically changing 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 |
|
... |
|
|
|
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 |
|
|
|
mxf, mxf_d10, mxf_opatom |
|
MXF muxer. |
|
|
|
Options |
|
|
|
The muxer options are: |
|
|
|
store_user_comments 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 |
|
|
|
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 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 out.null file, |
|
but specifying the output file is required by the ffmpeg syntax. |
|
|
|
Alternatively you can write the command as: |
|
|
|
ffmpeg -benchmark -i INPUT -f null - |
|
|
|
nut |
|
-syncpoints flags |
|
Change the syncpoint usage in nut: |
|
|
|
default use the normal low-overhead seeking aids. |
|
none 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. |
|
|
|
timestamped extend the syncpoint with a wallclock field. |
|
|
|
The none and timestamped flags are experimental. |
|
|
|
-write_index bool |
|
Write index at the end, the default is to write an index. |
|
|
|
ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor |
|
|
|
ogg |
|
Ogg container muxer. |
|
|
|
-page_duration duration |
|
Preferred page duration, in microseconds. The muxer will attempt to |
|
create pages that are approximately 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. |
|
|
|
-serial_offset 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. |
|
|
|
rcwt |
|
Raw Captions With Time (RCWT) is a format native to ccextractor, a |
|
commonly used open source tool for processing 608/708 closed caption |
|
(CC) sources. It can be used to archive the original, raw CC bitstream |
|
and to produce a source file for later CC processing or conversion. As |
|
a result, it also allows for interopability with ccextractor for |
|
processing CC data extracted via ffmpeg. The format is simple to parse |
|
and can be used to retain all lines and variants of CC. |
|
|
|
This muxer implements the specification as of 2024-01-05, which has |
|
been stable and unchanged for 10 years as of this writing. |
|
|
|
This muxer will have some nuances from the way that ccextractor muxes |
|
RCWT. No compatibility issues when processing the output with |
|
ccextractor have been observed as a result of this so far, but mileage |
|
may vary and outputs will not be a bit-exact match. |
|
|
|
A free specification of RCWT can be found here: |
|
<https://github.com/CCExtractor/ccextractor/blob/master/docs/BINARY_FILE_FORMAT.TXT> |
|
|
|
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 image2, or by using a "strftime" template if the strftime option is |
|
enabled. |
|
|
|
"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. |
|
"ssegment" is a shorter alias for "stream_segment". |
|
|
|
Every segment starts with a keyframe of the selected reference stream, |
|
which is set through the 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 segment_list. The list type is specified by the |
|
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 hls muxer, which provides a more specific implementation |
|
for HLS segmentation. |
|
|
|
Options |
|
|
|
The segment muxer supports the following options: |
|
|
|
increment_tc 1|0 |
|
if set to 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 0. |
|
|
|
reference_stream specifier |
|
Set the reference stream, as specified by the string specifier. If |
|
specifier is set to "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 "auto". |
|
|
|
segment_format format |
|
Override the inner container format, by default it is guessed by |
|
the filename extension. |
|
|
|
segment_format_options options_list |
|
Set output format options using a :-separated list of key=value |
|
parameters. Values containing the ":" special character must be |
|
escaped. |
|
|
|
segment_list name |
|
Generate also a listfile named name. If not specified no listfile |
|
is generated. |
|
|
|
segment_list_flags flags |
|
Set flags affecting the segment list generation. |
|
|
|
It currently supports the following flags: |
|
|
|
cache |
|
Allow caching (only affects M3U8 list files). |
|
|
|
live |
|
Allow live-friendly file generation. |
|
|
|
segment_list_size size |
|
Update the list file so that it contains at most size segments. If |
|
0 the list file will contain all the segments. Default value is 0. |
|
|
|
segment_list_entry_prefix prefix |
|
Prepend prefix to each entry. Useful to generate absolute paths. |
|
By default no prefix is applied. |
|
|
|
segment_list_type type |
|
Select the listing format. |
|
|
|
The following values are recognized: |
|
|
|
flat |
|
Generate a flat list for the created segments, one segment per |
|
line. |
|
|
|
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> |
|
|
|
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. |
|
|
|
segment_start_time and segment_end_time specify the segment |
|
start and end time expressed in seconds. |
|
|
|
A list file with the suffix ".csv" or ".ext" will auto-select |
|
this format. |
|
|
|
ext is deprecated in favor or csv. |
|
|
|
ffconcat |
|
Generate an ffconcat file for the created segments. The |
|
resulting file can be read using the FFmpeg concat demuxer. |
|
|
|
A list file with the suffix ".ffcat" or ".ffconcat" will auto- |
|
select this format. |
|
|
|
m3u8 |
|
Generate an extended M3U8 file, version 3, compliant with |
|
<http://tools.ietf.org/id/draft-pantos-http-live-streaming>. |
|
|
|
A list file with the suffix ".m3u8" will auto-select this |
|
format. |
|
|
|
If not specified the type is guessed from the list file name |
|
suffix. |
|
|
|
segment_time time |
|
Set segment duration to time, the value must be a duration |
|
specification. Default value is "2". See also the 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. |
|
|
|
min_seg_duration time |
|
Set minimum segment duration to time, the value must be a duration |
|
specification. This prevents the muxer ending segments at a |
|
duration below this value. Only effective with "segment_time". |
|
Default value is "0". |
|
|
|
segment_atclocktime 1|0 |
|
If set to "1" split at regular clock time intervals starting from |
|
00:00 o'clock. The time value specified in segment_time is used for |
|
setting the length of the splitting interval. |
|
|
|
For example with 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". |
|
|
|
segment_clocktime_offset duration |
|
Delay the segment splitting times with the specified duration when |
|
using segment_atclocktime. |
|
|
|
For example with segment_time set to "900" and |
|
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". |
|
|
|
segment_clocktime_wrap_duration 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. |
|
|
|
segment_time_delta 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 ffmpeg option |
|
force_key_frames. The key frame times specified by 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*frame_rate) should address the worst case mismatch between the |
|
specified time and the time set by force_key_frames. |
|
|
|
segment_times times |
|
Specify a list of split points. times contains a list of comma |
|
separated duration specifications, in increasing order. See also |
|
the segment_time option. |
|
|
|
segment_frames frames |
|
Specify a list of split video frame numbers. 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. |
|
|
|
segment_wrap limit |
|
Wrap around segment index once it reaches limit. |
|
|
|
segment_start_number number |
|
Set the sequence number of the first segment. Defaults to 0. |
|
|
|
strftime 1|0 |
|
Use the "strftime" function to define the name of the new segments |
|
to write. If this is selected, the output segment name must contain |
|
a "strftime" function template. Default value is 0. |
|
|
|
break_non_keyframes 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 0. |
|
|
|
reset_timestamps 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 0 by default. |
|
|
|
initial_offset offset |
|
Specify timestamp offset to apply to the output packet timestamps. |
|
The argument must be a time duration specification, and defaults to |
|
0. |
|
|
|
write_empty_segments 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 0. |
|
|
|
Make sure to require a closed GOP when encoding and to set the GOP size |
|
to fit your segment time constraint. |
|
|
|
Examples |
|
|
|
o Remux the content of file in.mkv to a list of segments out-000.nut, |
|
out-001.nut, etc., and write the list of generated segments to |
|
out.list: |
|
|
|
ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut |
|
|
|
o 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 |
|
|
|
o Segment the input file according to the split points specified by |
|
the 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 |
|
|
|
o Use the ffmpeg force_key_frames option to force key frames in the |
|
input at the specified location, together with the segment option |
|
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. |
|
|
|
o Segment the input file by splitting the input file according to the |
|
frame numbers sequence specified with the 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 |
|
|
|
o Convert the in.mkv to TS segments using the "libx264" and "aac" |
|
encoders: |
|
|
|
ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts |
|
|
|
o 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 |
|
|
|
smoothstreaming |
|
Smooth Streaming muxer generates a set of files (Manifest, chunks) |
|
suitable for serving with conventional web server. |
|
|
|
window_size |
|
Specify the number of fragments kept in the manifest. Default 0 |
|
(keep all). |
|
|
|
extra_window_size |
|
Specify the number of fragments kept outside of the manifest before |
|
removing from disk. Default 5. |
|
|
|
lookahead_count |
|
Specify the number of lookahead fragments. Default 2. |
|
|
|
min_frag_duration |
|
Specify the minimum fragment duration (in microseconds). Default |
|
5000000. |
|
|
|
remove_at_exit |
|
Specify whether to remove all fragments when finished. Default 0 |
|
(do not remove). |
|
|
|
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: |
|
streamindex,streamtype,algo=hash, where streamindex is the index of the |
|
mapped stream, streamtype is a single character indicating the type of |
|
stream, algo is a short string representing the hash function used, and |
|
hash is a hexadecimal number representing the computed hash. |
|
|
|
hash algorithm |
|
Use the cryptographic hash function specified by the string |
|
algorithm. Supported values include "MD5", "murmur3", "RIPEMD128", |
|
"RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA160", "SHA224", "SHA256" |
|
(default), "SHA512/224", "SHA512/256", "SHA384", "SHA512", "CRC32" |
|
and "adler32". |
|
|
|
Examples |
|
|
|
To compute the SHA-256 hash of the input converted to raw audio and |
|
video, and store it in the file 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 hash and framehash muxers. |
|
|
|
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 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 "-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 |
|
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 the "Quoting and escaping" section in the ffmpeg-utils(1) |
|
manual). |
|
|
|
Options |
|
|
|
use_fifo bool |
|
If set to 1, slave outputs will be processed in separate threads |
|
using the fifo muxer. This allows to compensate for different |
|
speed/latency/reliability of outputs and setup transparent |
|
recovery. By default this feature is turned off. |
|
|
|
fifo_options |
|
Options to pass to fifo pseudo-muxer instances. See fifo. |
|
|
|
Muxer options can be specified for each slave by prepending them as a |
|
list of key=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: |
|
|
|
f Specify the format name. Required if it cannot be guessed from the |
|
output URL. |
|
|
|
bsfs[/spec] |
|
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 |
|
"/". spec must be a stream specifier (see 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. "h264_mp4toannexb" |
|
being applied to an output containing an audio stream. |
|
|
|
Options for a bitstream filter must be specified in the form of |
|
"opt=value". |
|
|
|
Several bitstream filters can be specified, separated by ",". |
|
|
|
use_fifo bool |
|
This allows to override tee muxer use_fifo option for individual |
|
slave muxer. |
|
|
|
fifo_options |
|
This allows to override tee muxer fifo_options for individual slave |
|
muxer. See fifo. |
|
|
|
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 (",") |
|
e.g.: "a:0,v" |
|
|
|
onfail |
|
Specify behaviour on output failure. This can be set to either |
|
"abort" (which is default) or "ignore". "abort" will cause whole |
|
process to fail in case of failure on this slave output. "ignore" |
|
will ignore failure on this output, so other outputs will continue |
|
without being affected. |
|
|
|
Examples |
|
|
|
o 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/" |
|
|
|
o 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/" |
|
|
|
o Use ffmpeg to encode the input, and send the output to three |
|
different destinations. The "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 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" |
|
|
|
o As above, but select only stream "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" |
|
|
|
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. |
|
|
|
Options |
|
|
|
This muxer supports the following options: |
|
|
|
chunk_start_index |
|
Index of the first chunk (defaults to 0). |
|
|
|
header |
|
Filename of the header where the initialization data will be |
|
written. |
|
|
|
audio_chunk_duration |
|
Duration of each audio chunk in milliseconds (defaults to 5000). |
|
|
|
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 |
|
|
|
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: |
|
|
|
o WebM DASH Specification: |
|
<https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification> |
|
|
|
o ISO DASH Specification: |
|
<http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip> |
|
|
|
Options |
|
|
|
This muxer supports the following options: |
|
|
|
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. |
|
|
|
live |
|
Set this to 1 to create a live stream DASH Manifest. Default: 0. |
|
|
|
chunk_start_index |
|
Start index of the first chunk. This will go in the startNumber |
|
attribute of the SegmentTemplate element in the manifest. Default: |
|
0. |
|
|
|
chunk_duration_ms |
|
Duration of each chunk in milliseconds. This will go in the |
|
duration attribute of the SegmentTemplate element in the manifest. |
|
Default: 1000. |
|
|
|
utc_timing_url |
|
URL of the page that will return the UTC timestamp in ISO format. |
|
This will go in the value attribute of the UTCTiming element in the |
|
manifest. Default: None. |
|
|
|
time_shift_buffer_depth |
|
Smallest time (in seconds) shifting buffer for which any |
|
Representation is guaranteed to be available. This will go in the |
|
timeShiftBufferDepth attribute of the MPD element. Default: 60. |
|
|
|
minimum_update_period |
|
Minimum update period (in seconds) of the manifest. This will go in |
|
the minimumUpdatePeriod attribute of the MPD element. Default: 0. |
|
|
|
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 |
|
|
|
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: |
|
|
|
1. A file consists of a header and a number of metadata tags divided |
|
into sections, each on its own line. |
|
|
|
2. The header is a ;FFMETADATA string, followed by a version number |
|
(now 1). |
|
|
|
3. Metadata tags are of the form key=value |
|
|
|
4. Immediately after header follows global metadata |
|
|
|
5. After global metadata there may be sections with |
|
per-stream/per-chapter metadata. |
|
|
|
6. A section starts with the section name in uppercase (i.e. STREAM or |
|
CHAPTER) in brackets ([, ]) and ends with next section or end of |
|
file. |
|
|
|
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 |
|
TIMEBASE=num/den, where num and 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 START=num, END=num, where num is a positive integer. |
|
|
|
8. Empty lines and lines starting with ; or # are ignored. |
|
|
|
9. Metadata keys or values containing special characters (=, ;, #, \ |
|
and a newline) must be escaped with a backslash \. |
|
|
|
10. Note that whitespace in metadata (e.g. foo = bar) is considered to |
|
be a part of the tag (in the example above key is foo , value is |
|
bar). |
|
|
|
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 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 |
|
|
|
SEE ALSO |
|
ffmpeg(1), ffplay(1), ffprobe(1), libavformat(3) |
|
|
|
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 git log in |
|
the FFmpeg source directory, or browsing the online repository at |
|
<https://git.ffmpeg.org/ffmpeg>. |
|
|
|
Maintainers for the specific components are listed in the file |
|
MAINTAINERS in the source code tree. |
|
|
|
FFMPEG-FORMATS(1) |
|
|