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
|
|
|
|
2018-10-05 01:09:47 +02:00
|
|
|
@section av1_metadata
|
|
|
|
|
|
|
|
Modify metadata embedded in an AV1 stream.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item td
|
|
|
|
Insert or remove temporal delimiter OBUs in all temporal units of the
|
|
|
|
stream.
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item insert
|
|
|
|
Insert a TD at the beginning of every TU which does not already have one.
|
|
|
|
@item remove
|
|
|
|
Remove the TD from the beginning of every TU which has one.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@item color_primaries
|
|
|
|
@item transfer_characteristics
|
|
|
|
@item matrix_coefficients
|
|
|
|
Set the color description fields in the stream (see AV1 section 6.4.2).
|
|
|
|
|
|
|
|
@item color_range
|
|
|
|
Set the color range in the stream (see AV1 section 6.4.2; note that
|
|
|
|
this cannot be set for streams using BT.709 primaries, sRGB transfer
|
|
|
|
characteristic and identity (RGB) matrix coefficients).
|
|
|
|
@table @samp
|
|
|
|
@item tv
|
|
|
|
Limited range.
|
|
|
|
@item pc
|
|
|
|
Full range.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@item chroma_sample_position
|
|
|
|
Set the chroma sample location in the stream (see AV1 section 6.4.2).
|
|
|
|
This can only be set for 4:2:0 streams.
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item vertical
|
|
|
|
Left position (matching the default in MPEG-2 and H.264).
|
|
|
|
@item colocated
|
|
|
|
Top-left position.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@item tick_rate
|
2021-08-27 09:13:42 +02:00
|
|
|
Set the tick rate (@emph{time_scale / num_units_in_display_tick}) in
|
2018-10-05 01:09:47 +02:00
|
|
|
the timing info in the sequence header.
|
|
|
|
@item num_ticks_per_picture
|
|
|
|
Set the number of ticks in each picture, to indicate that the stream
|
|
|
|
has a fixed framerate. Ignored if @option{tick_rate} is not also set.
|
|
|
|
|
2019-03-25 05:27:23 +02:00
|
|
|
@item delete_padding
|
|
|
|
Deletes Padding OBUs.
|
|
|
|
|
2018-10-05 01:09:47 +02:00
|
|
|
@end table
|
|
|
|
|
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
|
|
|
|
2019-07-13 04:55:50 +02:00
|
|
|
Add extradata to the beginning of the filtered packets except when
|
|
|
|
said packets already exactly begin with the extradata that is intended
|
|
|
|
to be added.
|
2013-07-16 16:34:02 +03:00
|
|
|
|
2018-02-23 07:53:05 +02:00
|
|
|
@table @option
|
|
|
|
@item freq
|
2013-07-16 16:34:02 +03:00
|
|
|
The additional argument specifies which packets should be filtered.
|
|
|
|
It accepts the values:
|
|
|
|
@table @samp
|
|
|
|
@item k
|
2018-02-23 07:53:05 +02:00
|
|
|
@item keyframe
|
2013-07-16 16:34:02 +03:00
|
|
|
add extradata to all key packets
|
|
|
|
|
|
|
|
@item e
|
2018-02-23 07:53:05 +02:00
|
|
|
@item all
|
2013-07-16 16:34:02 +03:00
|
|
|
add extradata to all packets
|
|
|
|
@end table
|
2018-02-23 07:53:05 +02:00
|
|
|
@end table
|
2013-07-16 16:34:02 +03:00
|
|
|
|
2019-06-04 15:41:05 +02:00
|
|
|
If not specified it is assumed @samp{k}.
|
2013-07-16 16:34:02 +03:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2022-02-22 23:50:42 +02:00
|
|
|
@section dv_error_marker
|
|
|
|
|
|
|
|
Blocks in DV which are marked as damaged are replaced by blocks of the specified color.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item color
|
|
|
|
The color to replace damaged blocks by
|
|
|
|
@item sta
|
|
|
|
A 16 bit mask which specifies which of the 16 possible error status values are
|
|
|
|
to be replaced by colored blocks. 0xFFFE is the default which replaces all non 0
|
|
|
|
error status values.
|
|
|
|
@table @samp
|
|
|
|
@item ok
|
|
|
|
No error, no concealment
|
|
|
|
@item err
|
|
|
|
Error, No concealment
|
|
|
|
@item res
|
|
|
|
Reserved
|
|
|
|
@item notok
|
|
|
|
Error or concealment
|
|
|
|
@item notres
|
|
|
|
Not reserved
|
|
|
|
@item Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru
|
|
|
|
The specific error status code
|
|
|
|
@end table
|
|
|
|
see page 44-46 or section 5.5 of
|
|
|
|
@url{http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf}
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
2018-03-27 16:47:24 +02:00
|
|
|
@section eac3_core
|
|
|
|
|
|
|
|
Extract the core from a E-AC-3 stream, dropping extra channels.
|
|
|
|
|
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
|
|
|
|
|
2018-03-06 20:49:27 +02:00
|
|
|
@section filter_units
|
|
|
|
|
|
|
|
Remove units with types in or not in a given set from the stream.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item pass_types
|
|
|
|
List of unit types or ranges of unit types to pass through while removing
|
|
|
|
all others. This is specified as a '|'-separated list of unit type values
|
|
|
|
or ranges of values with '-'.
|
|
|
|
|
|
|
|
@item remove_types
|
|
|
|
Identical to @option{pass_types}, except the units in the given set
|
|
|
|
removed and all others passed through.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
Extradata is unchanged by this transformation, but note that if the stream
|
|
|
|
contains inline parameter sets then the output may be unusable if they are
|
|
|
|
removed.
|
|
|
|
|
|
|
|
For example, to remove all non-VCL NAL units from an H.264 stream:
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
|
|
|
|
@end example
|
|
|
|
|
|
|
|
To remove all AUDs, SEI and filler from an H.265 stream:
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
|
|
|
|
@end example
|
|
|
|
|
2018-03-11 20:16:09 +02:00
|
|
|
@section hapqa_extract
|
|
|
|
|
|
|
|
Extract Rgb or Alpha part of an HAPQA file, without recompression, in order to create an HAPQ or an HAPAlphaOnly file.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item texture
|
|
|
|
Specifies the texture to keep.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item color
|
|
|
|
@item alpha
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
|
|
|
Convert HAPQA to HAPQ
|
|
|
|
@example
|
|
|
|
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov
|
|
|
|
@end example
|
|
|
|
|
|
|
|
Convert HAPQA to HAPAlphaOnly
|
|
|
|
@example
|
|
|
|
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov
|
|
|
|
@end example
|
|
|
|
|
2017-05-05 00:09:02 +02:00
|
|
|
@section h264_metadata
|
|
|
|
|
|
|
|
Modify metadata embedded in an H.264 stream.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item aud
|
|
|
|
Insert or remove AUD NAL units in all access units of the stream.
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item insert
|
|
|
|
@item remove
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@item sample_aspect_ratio
|
|
|
|
Set the sample aspect ratio of the stream in the VUI parameters.
|
|
|
|
|
2019-07-28 20:23:16 +02:00
|
|
|
@item overscan_appropriate_flag
|
|
|
|
Set whether the stream is suitable for display using overscan
|
|
|
|
or not (see H.264 section E.2.1).
|
|
|
|
|
2017-05-05 00:09:02 +02:00
|
|
|
@item video_format
|
|
|
|
@item video_full_range_flag
|
|
|
|
Set the video format in the stream (see H.264 section E.2.1 and
|
|
|
|
table E-2).
|
|
|
|
|
|
|
|
@item colour_primaries
|
|
|
|
@item transfer_characteristics
|
|
|
|
@item matrix_coefficients
|
|
|
|
Set the colour description in the stream (see H.264 section E.2.1
|
|
|
|
and tables E-3, E-4 and E-5).
|
|
|
|
|
|
|
|
@item chroma_sample_loc_type
|
|
|
|
Set the chroma sample location in the stream (see H.264 section
|
|
|
|
E.2.1 and figure E-1).
|
|
|
|
|
|
|
|
@item tick_rate
|
2021-08-27 09:13:42 +02:00
|
|
|
Set the tick rate (time_scale / num_units_in_tick) in the VUI
|
2017-05-05 00:09:02 +02:00
|
|
|
parameters. This is the smallest time unit representable in the
|
|
|
|
stream, and in many cases represents the field rate of the stream
|
|
|
|
(double the frame rate).
|
|
|
|
@item fixed_frame_rate_flag
|
|
|
|
Set whether the stream has fixed framerate - typically this indicates
|
|
|
|
that the framerate is exactly half the tick rate, but the exact
|
|
|
|
meaning is dependent on interlacing and the picture structure (see
|
|
|
|
H.264 section E.2.1 and table E-6).
|
2021-06-23 18:12:43 +02:00
|
|
|
@item zero_new_constraint_set_flags
|
|
|
|
Zero constraint_set4_flag and constraint_set5_flag in the SPS. These
|
|
|
|
bits were reserved in a previous version of the H.264 spec, and thus
|
|
|
|
some hardware decoders require these to be zero. The result of zeroing
|
|
|
|
this is still a valid bitstream.
|
2017-05-05 00:09:02 +02:00
|
|
|
|
|
|
|
@item crop_left
|
|
|
|
@item crop_right
|
|
|
|
@item crop_top
|
|
|
|
@item crop_bottom
|
|
|
|
Set the frame cropping offsets in the SPS. These values will replace
|
|
|
|
the current ones if the stream is already cropped.
|
|
|
|
|
|
|
|
These fields are set in pixels. Note that some sizes may not be
|
|
|
|
representable if the chroma is subsampled or the stream is interlaced
|
|
|
|
(see H.264 section 7.4.2.1.1).
|
|
|
|
|
|
|
|
@item sei_user_data
|
|
|
|
Insert a string as SEI unregistered user data. The argument must
|
|
|
|
be of the form @emph{UUID+string}, where the UUID is as hex digits
|
|
|
|
possibly separated by hyphens, and the string can be anything.
|
|
|
|
|
|
|
|
For example, @samp{086f3693-b7b3-4f2c-9653-21492feee5b8+hello} will
|
|
|
|
insert the string ``hello'' associated with the given UUID.
|
|
|
|
|
2018-02-23 09:02:29 +02:00
|
|
|
@item delete_filler
|
|
|
|
Deletes both filler NAL units and filler SEI messages.
|
|
|
|
|
2018-09-19 00:30:59 +02:00
|
|
|
@item level
|
|
|
|
Set the level in the SPS. Refer to H.264 section A.3 and tables A-1
|
|
|
|
to A-5.
|
|
|
|
|
|
|
|
The argument must be the name of a level (for example, @samp{4.2}), a
|
|
|
|
level_idc value (for example, @samp{42}), or the special name @samp{auto}
|
|
|
|
indicating that the filter should attempt to guess the level from the
|
|
|
|
input stream properties.
|
|
|
|
|
2017-05-05 00:09:02 +02:00
|
|
|
@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.
|
|
|
|
|
2017-05-05 00:10:19 +02:00
|
|
|
@section h264_redundant_pps
|
|
|
|
|
|
|
|
This applies a specific fixup to some Blu-ray streams which contain
|
|
|
|
redundant PPSs modifying irrelevant parameters of the stream which
|
|
|
|
confuse other transformations which require correct extradata.
|
|
|
|
|
|
|
|
A new single global PPS is created, and all of the redundant PPSs
|
|
|
|
within the stream are removed.
|
|
|
|
|
2017-07-23 17:23:51 +02:00
|
|
|
@section hevc_metadata
|
|
|
|
|
|
|
|
Modify metadata embedded in an HEVC stream.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item aud
|
|
|
|
Insert or remove AUD NAL units in all access units of the stream.
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item insert
|
|
|
|
@item remove
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@item sample_aspect_ratio
|
|
|
|
Set the sample aspect ratio in the stream in the VUI parameters.
|
|
|
|
|
|
|
|
@item video_format
|
|
|
|
@item video_full_range_flag
|
|
|
|
Set the video format in the stream (see H.265 section E.3.1 and
|
|
|
|
table E.2).
|
|
|
|
|
|
|
|
@item colour_primaries
|
|
|
|
@item transfer_characteristics
|
|
|
|
@item matrix_coefficients
|
|
|
|
Set the colour description in the stream (see H.265 section E.3.1
|
|
|
|
and tables E.3, E.4 and E.5).
|
|
|
|
|
|
|
|
@item chroma_sample_loc_type
|
|
|
|
Set the chroma sample location in the stream (see H.265 section
|
|
|
|
E.3.1 and figure E.1).
|
|
|
|
|
|
|
|
@item tick_rate
|
2021-08-27 09:13:42 +02:00
|
|
|
Set the tick rate in the VPS and VUI parameters (time_scale /
|
|
|
|
num_units_in_tick). Combined with @option{num_ticks_poc_diff_one}, this can
|
2017-07-23 17:23:51 +02:00
|
|
|
set a constant framerate in the stream. Note that it is likely to be
|
|
|
|
overridden by container parameters when the stream is in a container.
|
|
|
|
|
|
|
|
@item num_ticks_poc_diff_one
|
|
|
|
Set poc_proportional_to_timing_flag in VPS and VUI and use this value
|
|
|
|
to set num_ticks_poc_diff_one_minus1 (see H.265 sections 7.4.3.1 and
|
|
|
|
E.3.1). Ignored if @option{tick_rate} is not also set.
|
|
|
|
|
|
|
|
@item crop_left
|
|
|
|
@item crop_right
|
|
|
|
@item crop_top
|
|
|
|
@item crop_bottom
|
|
|
|
Set the conformance window cropping offsets in the SPS. These values
|
|
|
|
will replace the current ones if the stream is already cropped.
|
|
|
|
|
|
|
|
These fields are set in pixels. Note that some sizes may not be
|
|
|
|
representable if the chroma is subsampled (H.265 section 7.4.3.2.1).
|
|
|
|
|
2019-05-06 23:02:21 +02:00
|
|
|
@item level
|
|
|
|
Set the level in the VPS and SPS. See H.265 section A.4 and tables
|
|
|
|
A.6 and A.7.
|
|
|
|
|
|
|
|
The argument must be the name of a level (for example, @samp{5.1}), a
|
|
|
|
@emph{general_level_idc} value (for example, @samp{153} for level 5.1),
|
|
|
|
or the special name @samp{auto} indicating that the filter should
|
|
|
|
attempt to guess the level from the input stream properties.
|
|
|
|
|
2017-07-23 17:23:51 +02:00
|
|
|
@end table
|
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
@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
|
|
|
|
2017-08-01 16:35:14 +02:00
|
|
|
@section mpeg2_metadata
|
|
|
|
|
|
|
|
Modify metadata embedded in an MPEG-2 stream.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item display_aspect_ratio
|
|
|
|
Set the display aspect ratio in the stream.
|
|
|
|
|
|
|
|
The following fixed values are supported:
|
|
|
|
@table @option
|
|
|
|
@item 4/3
|
|
|
|
@item 16/9
|
|
|
|
@item 221/100
|
|
|
|
@end table
|
|
|
|
Any other value will result in square pixels being signalled instead
|
|
|
|
(see H.262 section 6.3.3 and table 6-3).
|
|
|
|
|
|
|
|
@item frame_rate
|
|
|
|
Set the frame rate in the stream. This is constructed from a table
|
|
|
|
of known values combined with a small multiplier and divisor - if
|
|
|
|
the supplied value is not exactly representable, the nearest
|
|
|
|
representable value will be used instead (see H.262 section 6.3.3
|
|
|
|
and table 6-4).
|
|
|
|
|
|
|
|
@item video_format
|
|
|
|
Set the video format in the stream (see H.262 section 6.3.6 and
|
|
|
|
table 6-6).
|
|
|
|
|
|
|
|
@item colour_primaries
|
|
|
|
@item transfer_characteristics
|
|
|
|
@item matrix_coefficients
|
|
|
|
Set the colour description in the stream (see H.262 section 6.3.6
|
|
|
|
and tables 6-7, 6-8 and 6-9).
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
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
|
2021-07-25 12:01:54 +02:00
|
|
|
Accepts an expression whose evaluation per-packet determines how often bytes in that
|
|
|
|
packet will be modified. A value below 0 will result in a variable frequency.
|
|
|
|
Default is 0 which results in no modification. However, if neither amount nor drop is specified,
|
|
|
|
amount will be set to @var{-1}. See below for accepted variables.
|
2021-07-30 13:38:53 +02:00
|
|
|
@item drop
|
2021-07-25 12:01:54 +02:00
|
|
|
Accepts an expression evaluated per-packet whose value determines whether that packet is dropped.
|
|
|
|
Evaluation to a positive value results in the packet being dropped. Evaluation to a negative
|
|
|
|
value results in a variable chance of it being dropped, roughly inverse in proportion to the magnitude
|
|
|
|
of the value. Default is 0 which results in no drops. See below for accepted variables.
|
2021-07-30 13:38:53 +02:00
|
|
|
@item dropamount
|
|
|
|
Accepts a non-negative integer, which assigns a variable chance of it being dropped, roughly inverse
|
|
|
|
in proportion to the value. Default is 0 which results in no drops. This option is kept for backwards
|
|
|
|
compatibility and is equivalent to setting drop to a negative value with the same magnitude
|
|
|
|
i.e. @code{dropamount=4} is the same as @code{drop=-4}. Ignored if drop is also specified.
|
2017-07-08 12:37:59 +02:00
|
|
|
@end table
|
2014-11-30 12:59:22 +02:00
|
|
|
|
2021-07-25 12:01:54 +02:00
|
|
|
Both @code{amount} and @code{drop} accept expressions containing the following variables:
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item n
|
|
|
|
The index of the packet, starting from zero.
|
|
|
|
@item tb
|
|
|
|
The timebase for packet timestamps.
|
|
|
|
@item pts
|
|
|
|
Packet presentation timestamp.
|
|
|
|
@item dts
|
|
|
|
Packet decoding timestamp.
|
|
|
|
@item nopts
|
|
|
|
Constant representing AV_NOPTS_VALUE.
|
|
|
|
@item startpts
|
|
|
|
First non-AV_NOPTS_VALUE PTS seen in the stream.
|
|
|
|
@item startdts
|
|
|
|
First non-AV_NOPTS_VALUE DTS seen in the stream.
|
|
|
|
@item duration
|
|
|
|
@itemx d
|
|
|
|
Packet duration, in timebase units.
|
|
|
|
@item pos
|
|
|
|
Packet position in input; may be -1 when unknown or not set.
|
|
|
|
@item size
|
|
|
|
Packet size, in bytes.
|
|
|
|
@item key
|
|
|
|
Whether packet is marked as a keyframe.
|
|
|
|
@item state
|
|
|
|
A pseudo random integer, primarily derived from the content of packet payload.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@subsection Examples
|
|
|
|
Apply modification to every byte but don't drop any packets.
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
|
|
|
|
@end example
|
|
|
|
|
|
|
|
Drop every video packet not marked as a keyframe after timestamp 30s but do not
|
|
|
|
modify any of the remaining packets.
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' output.mkv
|
|
|
|
@end example
|
|
|
|
|
|
|
|
Drop one second of audio every 10 seconds and add some random noise to the rest.
|
2014-06-03 02:17:24 +03:00
|
|
|
@example
|
2021-07-25 12:01:54 +02:00
|
|
|
ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' 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.
|
|
|
|
|
2020-03-25 00:24:22 +02:00
|
|
|
@section pcm_rechunk
|
|
|
|
|
|
|
|
Repacketize PCM audio to a fixed number of samples per packet or a fixed packet
|
|
|
|
rate per second. This is similar to the @ref{asetnsamples,,asetnsamples audio
|
|
|
|
filter,ffmpeg-filters} but works on audio packets instead of audio frames.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item nb_out_samples, n
|
|
|
|
Set the number of samples per each output audio packet. The number is intended
|
|
|
|
as the number of samples @emph{per each channel}. Default value is 1024.
|
|
|
|
|
|
|
|
@item pad, p
|
|
|
|
If set to 1, the filter will pad the last audio packet with silence, so that it
|
|
|
|
will contain the same number of samples (or roughly the same number of samples,
|
|
|
|
see @option{frame_rate}) as the previous ones. Default value is 1.
|
|
|
|
|
|
|
|
@item frame_rate, r
|
|
|
|
This option makes the filter output a fixed number of packets per second instead
|
|
|
|
of a fixed number of samples per packet. If the audio sample rate is not
|
|
|
|
divisible by the frame rate then the number of samples will not be constant but
|
|
|
|
will vary slightly so that each packet will start as close to the frame
|
|
|
|
boundary as possible. Using this option has precedence over @option{nb_out_samples}.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
You can generate the well known 1602-1601-1602-1601-1602 pattern of 48kHz audio
|
|
|
|
for NTSC frame rate using the @option{frame_rate} option.
|
|
|
|
@example
|
|
|
|
ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -
|
|
|
|
@end example
|
|
|
|
|
2018-10-28 13:53:25 +02:00
|
|
|
@section prores_metadata
|
|
|
|
|
|
|
|
Modify color property metadata embedded in prores stream.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item color_primaries
|
|
|
|
Set the color primaries.
|
|
|
|
Available values are:
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item auto
|
|
|
|
Keep the same color primaries property (default).
|
|
|
|
|
|
|
|
@item unknown
|
|
|
|
@item bt709
|
|
|
|
@item bt470bg
|
|
|
|
BT601 625
|
|
|
|
|
|
|
|
@item smpte170m
|
|
|
|
BT601 525
|
|
|
|
|
|
|
|
@item bt2020
|
|
|
|
@item smpte431
|
|
|
|
DCI P3
|
|
|
|
|
|
|
|
@item smpte432
|
|
|
|
P3 D65
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@item transfer_characteristics
|
2019-02-10 13:10:20 +02:00
|
|
|
Set the color transfer.
|
2018-10-28 13:53:25 +02:00
|
|
|
Available values are:
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item auto
|
|
|
|
Keep the same transfer characteristics property (default).
|
|
|
|
|
|
|
|
@item unknown
|
|
|
|
@item bt709
|
|
|
|
BT 601, BT 709, BT 2020
|
2019-11-04 13:10:00 +02:00
|
|
|
@item smpte2084
|
|
|
|
SMPTE ST 2084
|
2019-11-04 13:10:01 +02:00
|
|
|
@item arib-std-b67
|
|
|
|
ARIB STD-B67
|
2018-10-28 13:53:25 +02:00
|
|
|
@end table
|
|
|
|
|
|
|
|
|
|
|
|
@item matrix_coefficients
|
|
|
|
Set the matrix coefficient.
|
|
|
|
Available values are:
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item auto
|
2019-11-04 13:09:59 +02:00
|
|
|
Keep the same colorspace property (default).
|
2018-10-28 13:53:25 +02:00
|
|
|
|
|
|
|
@item unknown
|
|
|
|
@item bt709
|
|
|
|
@item smpte170m
|
|
|
|
BT 601
|
|
|
|
|
|
|
|
@item bt2020nc
|
|
|
|
@end table
|
|
|
|
@end table
|
|
|
|
|
|
|
|
Set Rec709 colorspace for each frame of the file
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
|
2019-11-04 13:10:01 +02:00
|
|
|
@end example
|
|
|
|
|
|
|
|
Set Hybrid Log-Gamma parameters for each frame of the file
|
|
|
|
@example
|
|
|
|
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov
|
2018-10-28 13:53:25 +02:00
|
|
|
@end example
|
|
|
|
|
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
|
|
|
|
|
2021-02-09 14:26:16 +02:00
|
|
|
@section setts
|
|
|
|
Set PTS and DTS in packets.
|
|
|
|
|
|
|
|
It accepts the following parameters:
|
|
|
|
@table @option
|
|
|
|
@item ts
|
|
|
|
@item pts
|
|
|
|
@item dts
|
|
|
|
Set expressions for PTS, DTS or both.
|
2022-02-28 17:36:45 +02:00
|
|
|
@item duration
|
|
|
|
Set expression for duration.
|
2022-03-01 23:24:03 +02:00
|
|
|
@item time_base
|
|
|
|
Set output time base.
|
2021-02-09 14:26:16 +02:00
|
|
|
@end table
|
|
|
|
|
|
|
|
The expressions are evaluated through the eval API and can contain the following
|
|
|
|
constants:
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item N
|
|
|
|
The count of the input packet. Starting from 0.
|
|
|
|
|
|
|
|
@item TS
|
|
|
|
The demux timestamp in input in case of @code{ts} or @code{dts} option or presentation
|
|
|
|
timestamp in case of @code{pts} option.
|
|
|
|
|
|
|
|
@item POS
|
|
|
|
The original position in the file of the packet, or undefined if undefined
|
|
|
|
for the current packet
|
|
|
|
|
|
|
|
@item DTS
|
|
|
|
The demux timestamp in input.
|
|
|
|
|
|
|
|
@item PTS
|
|
|
|
The presentation timestamp in input.
|
|
|
|
|
2022-02-14 16:28:13 +02:00
|
|
|
@item DURATION
|
|
|
|
The duration in input.
|
|
|
|
|
2021-02-09 14:26:16 +02:00
|
|
|
@item STARTDTS
|
|
|
|
The DTS of the first packet.
|
|
|
|
|
|
|
|
@item STARTPTS
|
|
|
|
The PTS of the first packet.
|
|
|
|
|
|
|
|
@item PREV_INDTS
|
|
|
|
The previous input DTS.
|
|
|
|
|
|
|
|
@item PREV_INPTS
|
|
|
|
The previous input PTS.
|
|
|
|
|
2022-02-14 16:28:13 +02:00
|
|
|
@item PREV_INDURATION
|
|
|
|
The previous input duration.
|
|
|
|
|
2021-02-09 14:26:16 +02:00
|
|
|
@item PREV_OUTDTS
|
|
|
|
The previous output DTS.
|
|
|
|
|
|
|
|
@item PREV_OUTPTS
|
|
|
|
The previous output PTS.
|
|
|
|
|
2022-02-14 16:28:13 +02:00
|
|
|
@item PREV_OUTDURATION
|
|
|
|
The previous output duration.
|
|
|
|
|
2022-02-14 16:09:17 +02:00
|
|
|
@item NEXT_DTS
|
|
|
|
The next input DTS.
|
|
|
|
|
|
|
|
@item NEXT_PTS
|
|
|
|
The next input PTS.
|
|
|
|
|
2022-02-14 16:28:13 +02:00
|
|
|
@item NEXT_DURATION
|
|
|
|
The next input duration.
|
|
|
|
|
2021-02-09 14:26:16 +02:00
|
|
|
@item TB
|
|
|
|
The timebase of stream packet belongs.
|
2021-02-15 21:51:21 +02:00
|
|
|
|
2022-02-28 17:35:27 +02:00
|
|
|
@item TB_OUT
|
|
|
|
The output timebase.
|
|
|
|
|
2021-02-15 21:51:21 +02:00
|
|
|
@item SR
|
|
|
|
The sample rate of stream packet belongs.
|
2021-07-03 21:24:59 +02:00
|
|
|
|
|
|
|
@item NOPTS
|
|
|
|
The AV_NOPTS_VALUE constant.
|
2021-02-09 14:26:16 +02:00
|
|
|
@end table
|
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
@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.
|
|
|
|
|
2017-05-05 00:06:20 +02:00
|
|
|
@section trace_headers
|
|
|
|
|
|
|
|
Log trace output containing all syntax elements in the coded stream
|
|
|
|
headers (everything above the level of individual coded blocks).
|
|
|
|
This can be useful for debugging low-level stream issues.
|
|
|
|
|
2018-12-01 09:52:55 +02:00
|
|
|
Supports AV1, H.264, H.265, (M)JPEG, MPEG-2 and VP9, but depending
|
|
|
|
on the build only a subset of these may be available.
|
2017-05-05 00:06:20 +02:00
|
|
|
|
2018-11-19 23:52:45 +02:00
|
|
|
@section truehd_core
|
|
|
|
|
|
|
|
Extract the core from a TrueHD stream, dropping ATMOS data.
|
|
|
|
|
2018-04-02 03:38:03 +02:00
|
|
|
@section vp9_metadata
|
|
|
|
|
|
|
|
Modify metadata embedded in a VP9 stream.
|
|
|
|
|
|
|
|
@table @option
|
|
|
|
@item color_space
|
2019-07-09 03:10:45 +02:00
|
|
|
Set the color space value in the frame header. Note that any frame
|
|
|
|
set to RGB will be implicitly set to PC range and that RGB is
|
|
|
|
incompatible with profiles 0 and 2.
|
2018-04-02 03:38:03 +02:00
|
|
|
@table @samp
|
|
|
|
@item unknown
|
|
|
|
@item bt601
|
|
|
|
@item bt709
|
|
|
|
@item smpte170
|
|
|
|
@item smpte240
|
|
|
|
@item bt2020
|
|
|
|
@item rgb
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@item color_range
|
2019-07-09 03:10:45 +02:00
|
|
|
Set the color range value in the frame header. Note that any value
|
|
|
|
imposed by the color space will take precedence over this value.
|
2018-04-02 03:38:03 +02:00
|
|
|
@table @samp
|
|
|
|
@item tv
|
|
|
|
@item pc
|
|
|
|
@end table
|
|
|
|
@end table
|
|
|
|
|
2016-11-16 00:15:27 +02:00
|
|
|
@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
|