mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 20:42:49 +08:00 
			
		
		
		
	 fdeab95a82
			
		
	
	fdeab95a82
	
	
	
		
			
			* commit '03a80925effc2698d21dc0b00290eecf42dd9e68': lavc: add a bitstream filter for splitting VP9 superframes Merged-by: James Almer <jamrial@gmail.com>
		
			
				
	
	
		
			281 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| @chapter Bitstream Filters
 | |
| @c man begin BITSTREAM FILTERS
 | |
| 
 | |
| When you configure your FFmpeg 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 ff* tools will display the list of
 | |
| all the supported bitstream filters included in your build.
 | |
| 
 | |
| 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
 | |
| ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
 | |
| @end example
 | |
| 
 | |
| Below is a description of the currently available bitstream filters,
 | |
| with their parameters, if any.
 | |
| 
 | |
| @section aac_adtstoasc
 | |
| 
 | |
| Convert MPEG-2/4 AAC ADTS to an MPEG-4 Audio Specific Configuration
 | |
| bitstream.
 | |
| 
 | |
| This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
 | |
| ADTS header and removes the ADTS header.
 | |
| 
 | |
| 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.
 | |
| 
 | |
| @section chomp
 | |
| 
 | |
| Remove zero padding at the end of a packet.
 | |
| 
 | |
| @section dca_core
 | |
| 
 | |
| Extract the core from a DCA/DTS stream, dropping extensions such as
 | |
| DTS-HD.
 | |
| 
 | |
| @section dump_extra
 | |
| 
 | |
| 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
 | |
| 
 | |
| @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 FFmpeg 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_mp4toannexb
 | |
| 
 | |
| 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
 | |
| transport stream format (muxer @code{mpegts}).
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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.
 | |
| 
 | |
| @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
 | |
| 
 | |
| @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
 | |
| ffmpeg -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
 | |
| ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
 | |
| exiftran -i -9 frame*.jpg
 | |
| ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
 | |
| @end example
 | |
| 
 | |
| @section mjpegadump
 | |
| 
 | |
| Add an MJPEG A header to the bitstream, to enable decoding by
 | |
| Quicktime.
 | |
| 
 | |
| @anchor{mov2textsub}
 | |
| @section mov2textsub
 | |
| 
 | |
| 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.
 | |
| 
 | |
| @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
 | |
| 
 | |
| @section noise
 | |
| 
 | |
| Damages the contents of packets without damaging the container. Can be
 | |
| used for fuzzing or testing error resilience/concealment.
 | |
| 
 | |
| Parameters:
 | |
| 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.
 | |
| 
 | |
| @example
 | |
| ffmpeg -i INPUT -c copy -bsf noise[=1] output.mkv
 | |
| @end example
 | |
| applies the modification to every byte.
 | |
| 
 | |
| @section null
 | |
| This bitstream filter passes the packets through unchanged.
 | |
| 
 | |
| @section remove_extra
 | |
| 
 | |
| 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.
 | |
| 
 | |
| @section vp9_superframe_split
 | |
| 
 | |
| Split VP9 superframes into single frames.
 | |
| 
 | |
| @c man end BITSTREAM FILTERS
 |