| @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. |
| |
| Below is a description of the currently available bitstream filters. |
| |
| @section aac_adtstoasc |
| |
| Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration |
| bitstream filter. |
| |
| This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4 |
| ADTS header and removes the ADTS header. |
| |
| This is required for example when copying an AAC stream from a raw |
| ADTS AAC container to a FLV or a MOV/MP4 file. |
| |
| @section chomp |
| |
| Remove zero padding at the end of a packet. |
| |
| @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 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 ("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 |
| |
| @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 |
| 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 mjpega_dump_header |
| |
| @section movsub |
| |
| @section mp3_header_decompress |
| |
| @section noise |
| |
| @section remove_extra |
| |
| @c man end BITSTREAM FILTERS |