2010-11-08 16:27:16 +02:00
|
|
|
@chapter Bitstream Filters
|
|
|
|
@c man begin BITSTREAM FILTERS
|
|
|
|
|
2011-03-17 17:55:58 +02:00
|
|
|
When you configure your FFmpeg build, all the supported bitstream
|
2010-11-08 16:27:16 +02:00
|
|
|
filters are enabled by default. You can list all available ones using
|
|
|
|
the configure option @code{--list-bsfs}.
|
|
|
|
|
|
|
|
You can disable all the bitstream filters using the configure option
|
|
|
|
@code{--disable-bsfs}, and selectively enable any bitstream filter using
|
|
|
|
the option @code{--enable-bsf=BSF}, or you can disable a particular
|
|
|
|
bitstream filter using the option @code{--disable-bsf=BSF}.
|
|
|
|
|
|
|
|
The option @code{-bsfs} of the ff* tools will display the list of
|
|
|
|
all the supported bitstream filters included in your build.
|
|
|
|
|
2014-11-29 20:15:02 +02:00
|
|
|
The ff* tools have a -bsf option applied per stream, taking a
|
|
|
|
comma-separated list of filters, whose parameters follow the filter
|
|
|
|
name after a '='.
|
|
|
|
|
|
|
|
@example
|
2016-07-28 18:18:12 +02:00
|
|
|
ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
|
2014-11-29 20:15:02 +02:00
|
|
|
@end example
|
|
|
|
|
2014-11-30 12:59:22 +02:00
|
|
|
Below is a description of the currently available bitstream filters,
|
|
|
|
with their parameters, if any.
|
2010-11-08 16:27:16 +02:00
|
|
|
|
|
|
|
@section aac_adtstoasc
|
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
Convert MPEG-2/4 AAC ADTS to an MPEG-4 Audio Specific Configuration
|
|
|
|
bitstream.
|
2013-06-26 19:07:17 +03:00
|
|
|
|
|
|
|
This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
|
|
|
|
ADTS header and removes the ADTS header.
|
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
This filter is required for example when copying an AAC stream from a
|
|
|
|
raw ADTS AAC or an MPEG-TS container to MP4A-LATM, to an FLV file, or
|
|
|
|
to MOV/MP4 files and related formats such as 3GP or M4A. Please note
|
|
|
|
that it is auto-inserted for MP4A-LATM and MOV/MP4 and related formats.
|
2013-06-26 19:07:17 +03:00
|
|
|
|
2010-11-08 16:27:16 +02:00
|
|
|
@section chomp
|
|
|
|
|
2013-06-26 19:58:55 +03:00
|
|
|
Remove zero padding at the end of a packet.
|
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
@section dca_core
|
|
|
|
|
|
|
|
Extract the core from a DCA/DTS stream, dropping extensions such as
|
|
|
|
DTS-HD.
|
|
|
|
|
2013-07-13 18:12:41 +03:00
|
|
|
@section dump_extra
|
2010-11-08 16:27:16 +02:00
|
|
|
|
2013-07-16 16:34:02 +03:00
|
|
|
Add extradata to the beginning of the filtered packets.
|
|
|
|
|
|
|
|
The additional argument specifies which packets should be filtered.
|
|
|
|
It accepts the values:
|
|
|
|
@table @samp
|
|
|
|
@item a
|
|
|
|
add extradata to all key packets, but only if @var{local_header} is
|
|
|
|
set in the @option{flags2} codec context field
|
|
|
|
|
|
|
|
@item k
|
|
|
|
add extradata to all key packets
|
|
|
|
|
|
|
|
@item e
|
|
|
|
add extradata to all packets
|
|
|
|
@end table
|
|
|
|
|
|
|
|
If not specified it is assumed @samp{k}.
|
|
|
|
|
|
|
|
For example the following @command{ffmpeg} command forces a global
|
|
|
|
header (thus disabling individual packet headers) in the H.264 packets
|
|
|
|
generated by the @code{libx264} encoder, but corrects them by adding
|
|
|
|
the header stored in extradata to the key packets:
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
|
|
|
|
@end example
|
|
|
|
|
2016-08-21 17:08:34 +02:00
|
|
|
@section extract_extradata
|
|
|
|
|
|
|
|
Extract the in-band extradata.
|
|
|
|
|
|
|
|
Certain codecs allow the long-term headers (e.g. MPEG-2 sequence headers,
|
|
|
|
or H.264/HEVC (VPS/)SPS/PPS) to be transmitted either "in-band" (i.e. as a part
|
|
|
|
of the bitstream containing the coded frames) or "out of band" (e.g. on the
|
2017-03-26 02:15:04 +02:00
|
|
|
container level). This latter form is called "extradata" in FFmpeg terminology.
|
2016-08-21 17:08:34 +02:00
|
|
|
|
|
|
|
This bitstream filter detects the in-band headers and makes them available as
|
|
|
|
extradata.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item remove
|
|
|
|
When this option is enabled, the long-term headers are removed from the
|
|
|
|
bitstream after extraction.
|
|
|
|
@end table
|
|
|
|
|
2010-11-08 16:27:16 +02:00
|
|
|
@section h264_mp4toannexb
|
|
|
|
|
2012-01-13 01:39:03 +03:00
|
|
|
Convert an H.264 bitstream from length prefixed mode to start code
|
|
|
|
prefixed mode (as defined in the Annex B of the ITU-T H.264
|
|
|
|
specification).
|
|
|
|
|
|
|
|
This is required by some streaming formats, typically the MPEG-2
|
2016-11-16 00:15:27 +02:00
|
|
|
transport stream format (muxer @code{mpegts}).
|
2012-01-13 01:39:03 +03:00
|
|
|
|
|
|
|
For example to remux an MP4 file containing an H.264 stream to mpegts
|
|
|
|
format with @command{ffmpeg}, you can use the command:
|
|
|
|
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
|
|
|
|
@end example
|
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
Please note that this filter is auto-inserted for MPEG-TS (muxer
|
|
|
|
@code{mpegts}) and raw H.264 (muxer @code{h264}) output formats.
|
|
|
|
|
|
|
|
@section hevc_mp4toannexb
|
|
|
|
|
|
|
|
Convert an HEVC/H.265 bitstream from length prefixed mode to start code
|
|
|
|
prefixed mode (as defined in the Annex B of the ITU-T H.265
|
|
|
|
specification).
|
|
|
|
|
|
|
|
This is required by some streaming formats, typically the MPEG-2
|
|
|
|
transport stream format (muxer @code{mpegts}).
|
|
|
|
|
|
|
|
For example to remux an MP4 file containing an HEVC stream to mpegts
|
|
|
|
format with @command{ffmpeg}, you can use the command:
|
|
|
|
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
|
|
|
|
@end example
|
|
|
|
|
|
|
|
Please note that this filter is auto-inserted for MPEG-TS (muxer
|
|
|
|
@code{mpegts}) and raw HEVC/H.265 (muxer @code{h265} or
|
|
|
|
@code{hevc}) output formats.
|
|
|
|
|
2014-06-09 23:19:02 +03:00
|
|
|
@section imxdump
|
|
|
|
|
|
|
|
Modifies the bitstream to fit in MOV and to be usable by the Final Cut
|
|
|
|
Pro decoder. This filter only applies to the mpeg2video codec, and is
|
|
|
|
likely not needed for Final Cut Pro 7 and newer with the appropriate
|
|
|
|
@option{-tag:v}.
|
|
|
|
|
|
|
|
For example, to remux 30 MB/sec NTSC IMX to MOV:
|
|
|
|
|
|
|
|
@example
|
|
|
|
ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
|
|
|
|
@end example
|
2010-11-08 16:27:16 +02:00
|
|
|
|
2010-11-11 17:24:11 +02:00
|
|
|
@section mjpeg2jpeg
|
|
|
|
|
|
|
|
Convert MJPEG/AVI1 packets to full JPEG/JFIF packets.
|
|
|
|
|
|
|
|
MJPEG is a video codec wherein each video frame is essentially a
|
|
|
|
JPEG image. The individual frames can be extracted without loss,
|
|
|
|
e.g. by
|
|
|
|
|
|
|
|
@example
|
2011-12-10 03:25:15 +03:00
|
|
|
ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
|
2010-11-11 17:24:11 +02:00
|
|
|
@end example
|
|
|
|
|
|
|
|
Unfortunately, these chunks are incomplete JPEG images, because
|
|
|
|
they lack the DHT segment required for decoding. Quoting from
|
|
|
|
@url{http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml}:
|
|
|
|
|
|
|
|
Avery Lee, writing in the rec.video.desktop newsgroup in 2001,
|
|
|
|
commented that "MJPEG, or at least the MJPEG in AVIs having the
|
|
|
|
MJPG fourcc, is restricted JPEG with a fixed -- and *omitted* --
|
|
|
|
Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2,
|
|
|
|
and it must use basic Huffman encoding, not arithmetic or
|
|
|
|
progressive. . . . You can indeed extract the MJPEG frames and
|
|
|
|
decode them with a regular JPEG decoder, but you have to prepend
|
|
|
|
the DHT segment to them, or else the decoder won't have any idea
|
|
|
|
how to decompress the data. The exact table necessary is given in
|
|
|
|
the OpenDML spec."
|
|
|
|
|
|
|
|
This bitstream filter patches the header of frames extracted from an MJPEG
|
|
|
|
stream (carrying the AVI1 header ID and lacking a DHT segment) to
|
|
|
|
produce fully qualified JPEG images.
|
|
|
|
|
|
|
|
@example
|
2012-02-25 06:00:43 +03:00
|
|
|
ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
|
2010-11-11 17:24:11 +02:00
|
|
|
exiftran -i -9 frame*.jpg
|
2011-12-10 03:25:15 +03:00
|
|
|
ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
|
2010-11-11 17:24:11 +02:00
|
|
|
@end example
|
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
@section mjpegadump
|
|
|
|
|
|
|
|
Add an MJPEG A header to the bitstream, to enable decoding by
|
|
|
|
Quicktime.
|
2010-11-08 16:27:16 +02:00
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
@anchor{mov2textsub}
|
|
|
|
@section mov2textsub
|
2010-11-08 16:27:16 +02:00
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
Extract a representable text file from MOV subtitles, stripping the
|
|
|
|
metadata header from each subtitle packet.
|
|
|
|
|
|
|
|
See also the @ref{text2movsub} filter.
|
|
|
|
|
|
|
|
@section mp3decomp
|
|
|
|
|
|
|
|
Decompress non-standard compressed MP3 audio headers.
|
2010-11-08 16:27:16 +02:00
|
|
|
|
2015-04-03 18:19:53 +02:00
|
|
|
@section mpeg4_unpack_bframes
|
|
|
|
|
|
|
|
Unpack DivX-style packed B-frames.
|
|
|
|
|
|
|
|
DivX-style packed B-frames are not valid MPEG-4 and were only a
|
|
|
|
workaround for the broken Video for Windows subsystem.
|
|
|
|
They use more space, can cause minor AV sync issues, require more
|
|
|
|
CPU power to decode (unless the player has some decoded picture queue
|
|
|
|
to compensate the 2,0,2,0 frame per packet style) and cause
|
|
|
|
trouble if copied into a standard container like mp4 or mpeg-ps/ts,
|
|
|
|
because MPEG-4 decoders may not be able to decode them, since they are
|
|
|
|
not valid MPEG-4.
|
|
|
|
|
|
|
|
For example to fix an AVI file containing an MPEG-4 stream with
|
|
|
|
DivX-style packed B-frames using @command{ffmpeg}, you can use the command:
|
|
|
|
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
|
|
|
|
@end example
|
|
|
|
|
2010-11-08 16:27:16 +02:00
|
|
|
@section noise
|
|
|
|
|
2017-07-08 12:37:59 +02:00
|
|
|
Damages the contents of packets or simply drops them without damaging the
|
|
|
|
container. Can be used for fuzzing or testing error resilience/concealment.
|
2014-06-03 02:17:24 +03:00
|
|
|
|
2014-11-30 12:59:22 +02:00
|
|
|
Parameters:
|
2017-07-08 12:37:59 +02:00
|
|
|
@table @option
|
|
|
|
@item amount
|
2014-11-30 12:59:22 +02:00
|
|
|
A numeral string, whose value is related to how often output bytes will
|
|
|
|
be modified. Therefore, values below or equal to 0 are forbidden, and
|
|
|
|
the lower the more frequent bytes will be modified, with 1 meaning
|
|
|
|
every byte is modified.
|
2017-07-08 12:37:59 +02:00
|
|
|
@item dropamount
|
|
|
|
A numeral string, whose value is related to how often packets will be dropped.
|
|
|
|
Therefore, values below or equal to 0 are forbidden, and the lower the more
|
|
|
|
frequent packets will be dropped, with 1 meaning every packet is dropped.
|
|
|
|
@end table
|
2014-11-30 12:59:22 +02:00
|
|
|
|
2017-07-08 12:37:59 +02:00
|
|
|
The following example applies the modification to every byte but does not drop
|
|
|
|
any packets.
|
2014-06-03 02:17:24 +03:00
|
|
|
@example
|
2014-11-30 12:59:22 +02:00
|
|
|
ffmpeg -i INPUT -c copy -bsf noise[=1] output.mkv
|
2014-06-03 02:17:24 +03:00
|
|
|
@end example
|
|
|
|
|
2016-05-24 15:09:29 +02:00
|
|
|
@section null
|
|
|
|
This bitstream filter passes the packets through unchanged.
|
|
|
|
|
2013-07-13 18:12:41 +03:00
|
|
|
@section remove_extra
|
2010-11-08 16:27:16 +02:00
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
Remove extradata from packets.
|
|
|
|
|
|
|
|
It accepts the following parameter:
|
|
|
|
@table @option
|
|
|
|
@item freq
|
|
|
|
Set which frame types to remove extradata from.
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item k
|
|
|
|
Remove extradata from non-keyframes only.
|
|
|
|
|
|
|
|
@item keyframe
|
|
|
|
Remove extradata from keyframes only.
|
|
|
|
|
|
|
|
@item e, all
|
|
|
|
Remove extradata from all frames.
|
|
|
|
|
|
|
|
@end table
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@anchor{text2movsub}
|
|
|
|
@section text2movsub
|
|
|
|
|
|
|
|
Convert text subtitles to MOV subtitles (as used by the @code{mov_text}
|
|
|
|
codec) with metadata headers.
|
|
|
|
|
|
|
|
See also the @ref{mov2textsub} filter.
|
|
|
|
|
|
|
|
@section vp9_superframe
|
|
|
|
|
|
|
|
Merge VP9 invisible (alt-ref) frames back into VP9 superframes. This
|
|
|
|
fixes merging of split/segmented VP9 streams where the alt-ref frame
|
|
|
|
was split from its visible counterpart.
|
|
|
|
|
2016-11-13 12:00:02 +02:00
|
|
|
@section vp9_superframe_split
|
|
|
|
|
|
|
|
Split VP9 superframes into single frames.
|
|
|
|
|
2017-01-10 01:08:49 +02:00
|
|
|
@section vp9_raw_reorder
|
|
|
|
|
|
|
|
Given a VP9 stream with correct timestamps but possibly out of order,
|
|
|
|
insert additional show-existing-frame packets to correct the ordering.
|
|
|
|
|
2010-11-08 16:27:16 +02:00
|
|
|
@c man end BITSTREAM FILTERS
|