Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6147 | serge | 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 | |||
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. |
||
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 mpeg4_unpack_bframes |
||
143 | |||
144 | Unpack DivX-style packed B-frames. |
||
145 | |||
146 | DivX-style packed B-frames are not valid MPEG-4 and were only a |
||
147 | workaround for the broken Video for Windows subsystem. |
||
148 | They use more space, can cause minor AV sync issues, require more |
||
149 | CPU power to decode (unless the player has some decoded picture queue |
||
150 | to compensate the 2,0,2,0 frame per packet style) and cause |
||
151 | trouble if copied into a standard container like mp4 or mpeg-ps/ts, |
||
152 | because MPEG-4 decoders may not be able to decode them, since they are |
||
153 | not valid MPEG-4. |
||
154 | |||
155 | For example to fix an AVI file containing an MPEG-4 stream with |
||
156 | DivX-style packed B-frames using @command{ffmpeg}, you can use the command: |
||
157 | |||
158 | @example |
||
159 | ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi |
||
160 | @end example |
||
161 | |||
162 | @section noise |
||
163 | |||
164 | Damages the contents of packets without damaging the container. Can be |
||
165 | used for fuzzing or testing error resilience/concealment. |
||
166 | |||
167 | Parameters: |
||
168 | A numeral string, whose value is related to how often output bytes will |
||
169 | be modified. Therefore, values below or equal to 0 are forbidden, and |
||
170 | the lower the more frequent bytes will be modified, with 1 meaning |
||
171 | every byte is modified. |
||
172 | |||
173 | @example |
||
174 | ffmpeg -i INPUT -c copy -bsf noise[=1] output.mkv |
||
175 | @end example |
||
176 | applies the modification to every byte. |
||
177 | |||
178 | @section remove_extra |
||
179 | |||
180 | @c man end BITSTREAM FILTERS |