Commit | Line | Data |
---|---|---|
2ba45a60 DM |
1 | @chapter Bitstream Filters |
2 | @c man begin BITSTREAM FILTERS | |
3 | ||
4 | When you configure your FFmpeg build, all the supported bitstream | |
5 | filters are enabled by default. You can list all available ones using | |
6 | the configure option @code{--list-bsfs}. | |
7 | ||
8 | You can disable all the bitstream filters using the configure option | |
9 | @code{--disable-bsfs}, and selectively enable any bitstream filter using | |
10 | the option @code{--enable-bsf=BSF}, or you can disable a particular | |
11 | bitstream filter using the option @code{--disable-bsf=BSF}. | |
12 | ||
13 | The option @code{-bsfs} of the ff* tools will display the list of | |
14 | all the supported bitstream filters included in your build. | |
15 | ||
f6fa7814 DM |
16 | The ff* tools have a -bsf option applied per stream, taking a |
17 | comma-separated list of filters, whose parameters follow the filter | |
18 | name after a '='. | |
19 | ||
20 | @example | |
21 | ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1/opt2=str2][,filter2] OUTPUT | |
22 | @end example | |
23 | ||
24 | Below is a description of the currently available bitstream filters, | |
25 | with their parameters, if any. | |
2ba45a60 DM |
26 | |
27 | @section aac_adtstoasc | |
28 | ||
29 | Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration | |
30 | bitstream filter. | |
31 | ||
32 | This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4 | |
33 | ADTS header and removes the ADTS header. | |
34 | ||
35 | This is required for example when copying an AAC stream from a raw | |
36 | ADTS AAC container to a FLV or a MOV/MP4 file. | |
37 | ||
38 | @section chomp | |
39 | ||
40 | Remove zero padding at the end of a packet. | |
41 | ||
42 | @section dump_extra | |
43 | ||
44 | Add extradata to the beginning of the filtered packets. | |
45 | ||
46 | The additional argument specifies which packets should be filtered. | |
47 | It accepts the values: | |
48 | @table @samp | |
49 | @item a | |
50 | add extradata to all key packets, but only if @var{local_header} is | |
51 | set in the @option{flags2} codec context field | |
52 | ||
53 | @item k | |
54 | add extradata to all key packets | |
55 | ||
56 | @item e | |
57 | add extradata to all packets | |
58 | @end table | |
59 | ||
60 | If not specified it is assumed @samp{k}. | |
61 | ||
62 | For example the following @command{ffmpeg} command forces a global | |
63 | header (thus disabling individual packet headers) in the H.264 packets | |
64 | generated by the @code{libx264} encoder, but corrects them by adding | |
65 | the header stored in extradata to the key packets: | |
66 | @example | |
67 | ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts | |
68 | @end example | |
69 | ||
70 | @section h264_mp4toannexb | |
71 | ||
72 | Convert an H.264 bitstream from length prefixed mode to start code | |
73 | prefixed mode (as defined in the Annex B of the ITU-T H.264 | |
74 | specification). | |
75 | ||
76 | This is required by some streaming formats, typically the MPEG-2 | |
77 | transport stream format ("mpegts"). | |
78 | ||
79 | For example to remux an MP4 file containing an H.264 stream to mpegts | |
80 | format with @command{ffmpeg}, you can use the command: | |
81 | ||
82 | @example | |
83 | ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts | |
84 | @end example | |
85 | ||
86 | @section imxdump | |
87 | ||
88 | Modifies the bitstream to fit in MOV and to be usable by the Final Cut | |
89 | Pro decoder. This filter only applies to the mpeg2video codec, and is | |
90 | likely not needed for Final Cut Pro 7 and newer with the appropriate | |
91 | @option{-tag:v}. | |
92 | ||
93 | For example, to remux 30 MB/sec NTSC IMX to MOV: | |
94 | ||
95 | @example | |
96 | ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov | |
97 | @end example | |
98 | ||
99 | @section mjpeg2jpeg | |
100 | ||
101 | Convert MJPEG/AVI1 packets to full JPEG/JFIF packets. | |
102 | ||
103 | MJPEG is a video codec wherein each video frame is essentially a | |
104 | JPEG image. The individual frames can be extracted without loss, | |
105 | e.g. by | |
106 | ||
107 | @example | |
108 | ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg | |
109 | @end example | |
110 | ||
111 | Unfortunately, these chunks are incomplete JPEG images, because | |
112 | they lack the DHT segment required for decoding. Quoting from | |
113 | @url{http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml}: | |
114 | ||
115 | Avery Lee, writing in the rec.video.desktop newsgroup in 2001, | |
116 | commented that "MJPEG, or at least the MJPEG in AVIs having the | |
117 | MJPG fourcc, is restricted JPEG with a fixed -- and *omitted* -- | |
118 | Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2, | |
119 | and it must use basic Huffman encoding, not arithmetic or | |
120 | progressive. . . . You can indeed extract the MJPEG frames and | |
121 | decode them with a regular JPEG decoder, but you have to prepend | |
122 | the DHT segment to them, or else the decoder won't have any idea | |
123 | how to decompress the data. The exact table necessary is given in | |
124 | the OpenDML spec." | |
125 | ||
126 | This bitstream filter patches the header of frames extracted from an MJPEG | |
127 | stream (carrying the AVI1 header ID and lacking a DHT segment) to | |
128 | produce fully qualified JPEG images. | |
129 | ||
130 | @example | |
131 | ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg | |
132 | exiftran -i -9 frame*.jpg | |
133 | ffmpeg -i frame_%d.jpg -c:v copy rotated.avi | |
134 | @end example | |
135 | ||
136 | @section mjpega_dump_header | |
137 | ||
138 | @section movsub | |
139 | ||
140 | @section mp3_header_decompress | |
141 | ||
142 | @section noise | |
143 | ||
144 | Damages the contents of packets without damaging the container. Can be | |
145 | used for fuzzing or testing error resilience/concealment. | |
146 | ||
f6fa7814 DM |
147 | Parameters: |
148 | A numeral string, whose value is related to how often output bytes will | |
149 | be modified. Therefore, values below or equal to 0 are forbidden, and | |
150 | the lower the more frequent bytes will be modified, with 1 meaning | |
151 | every byte is modified. | |
152 | ||
2ba45a60 | 153 | @example |
f6fa7814 | 154 | ffmpeg -i INPUT -c copy -bsf noise[=1] output.mkv |
2ba45a60 | 155 | @end example |
f6fa7814 | 156 | applies the modification to every byte. |
2ba45a60 DM |
157 | |
158 | @section remove_extra | |
159 | ||
160 | @c man end BITSTREAM FILTERS |