mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
282 lines
8.3 KiB
Plaintext
282 lines
8.3 KiB
Plaintext
@chapter Bitstream Filters
|
|
@c man begin BITSTREAM FILTERS
|
|
|
|
When you configure your Libav build, all the supported bitstream
|
|
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 av* tools will display the list of
|
|
all the supported bitstream filters included in your build.
|
|
|
|
Below is a description of the currently available bitstream filters.
|
|
|
|
@section aac_adtstoasc
|
|
|
|
@section chomp
|
|
|
|
@section dump_extradata
|
|
|
|
@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
|
|
container level). This latter form is called "extradata" in Libav terminology.
|
|
|
|
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
|
|
|
|
@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.
|
|
|
|
@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
|
|
Set the tick rate (num_units_in_tick / time_scale) in the VUI
|
|
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).
|
|
|
|
@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.
|
|
|
|
@end table
|
|
|
|
@section h264_mp4toannexb
|
|
|
|
@section h264_redundant_pps
|
|
|
|
This applies a specific fixup to some Bluray 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.
|
|
|
|
@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
|
|
Set the tick rate in the VPS and VUI parameters (num_units_in_tick /
|
|
time_scale). Combined with @option{num_ticks_poc_diff_one}, this can
|
|
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).
|
|
|
|
@end table
|
|
|
|
@section imx_dump_header
|
|
|
|
@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
|
|
avconv -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
|
|
@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
|
|
avconv -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
|
|
exiftran -i -9 frame*.jpg
|
|
avconv -i frame_%d.jpg -c:v copy rotated.avi
|
|
@end example
|
|
|
|
@section mjpega_dump_header
|
|
|
|
@section movsub
|
|
|
|
@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
|
|
|
|
@section mp3_header_compress
|
|
|
|
@section mp3_header_decompress
|
|
|
|
@section noise
|
|
|
|
@section null
|
|
This bitstream filter passes the packets through unchanged.
|
|
|
|
@section remove_extradata
|
|
|
|
@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.
|
|
|
|
Supports H.264, H.265 and MPEG-2.
|
|
|
|
@section vp9_superframe
|
|
|
|
Combine VP9 frames into superframes.
|
|
|
|
@section vp9_superframe_split
|
|
|
|
Split VP9 superframes into single frames.
|
|
|
|
@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.
|
|
|
|
@c man end BITSTREAM FILTERS
|