Commit | Line | Data |
---|---|---|
9181577c FB |
1 | \input texinfo @c -*- texinfo -*- |
2 | ||
3 | @settitle FFmpeg Documentation | |
4 | @titlepage | |
5 | @sp 7 | |
6 | @center @titlefont{FFmpeg Documentation} | |
7 | @sp 3 | |
8 | @end titlepage | |
9 | ||
10 | ||
11 | @chapter Introduction | |
12 | ||
13 | FFmpeg is a very fast video and audio converter. It can also grab from | |
14 | a live audio/video source. | |
115329f1 | 15 | |
9181577c | 16 | The command line interface is designed to be intuitive, in the sense |
4c5f7207 DB |
17 | that FFmpeg tries to figure out all parameters that can possibly be |
18 | derived automatically. You usually only have to specify the target | |
19 | bitrate you want. | |
9181577c FB |
20 | |
21 | FFmpeg can also convert from any sample rate to any other, and resize | |
22 | video on the fly with a high quality polyphase filter. | |
23 | ||
24 | @chapter Quick Start | |
25 | ||
e99c4e10 | 26 | @c man begin EXAMPLES |
9181577c FB |
27 | @section Video and Audio grabbing |
28 | ||
cc58300e RP |
29 | FFmpeg can grab video and audio from devices given that you specify the input |
30 | format and device. | |
e99c4e10 | 31 | |
9181577c | 32 | @example |
cc58300e | 33 | ffmpeg -f audio_device -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg |
9181577c FB |
34 | @end example |
35 | ||
e99c4e10 | 36 | Note that you must activate the right video source and channel before |
4c5f7207 DB |
37 | launching FFmpeg with any TV viewer such as xawtv |
38 | (@url{http://bytesex.org/xawtv/}) by Gerd Knorr. You also | |
39 | have to set the audio recording levels correctly with a | |
e99c4e10 | 40 | standard mixer. |
9181577c | 41 | |
76d2efda BC |
42 | @section X11 grabbing |
43 | ||
913e4081 | 44 | FFmpeg can grab the X11 display. |
76d2efda BC |
45 | |
46 | @example | |
9e0ab666 | 47 | ffmpeg -f x11grab -s cif -i :0.0 /tmp/out.mpg |
76d2efda BC |
48 | @end example |
49 | ||
913e4081 DB |
50 | 0.0 is display.screen number of your X11 server, same as |
51 | the DISPLAY environment variable. | |
76d2efda | 52 | |
0cd4faf9 | 53 | @example |
9e0ab666 | 54 | ffmpeg -f x11grab -s cif -i :0.0+10,20 /tmp/out.mpg |
0cd4faf9 PI |
55 | @end example |
56 | ||
57 | 0.0 is display.screen number of your X11 server, same as the DISPLAY environment | |
58 | variable. 10 is the x-offset and 20 the y-offset for the grabbing. | |
59 | ||
6bf40f39 | 60 | @section Video and Audio file format conversion |
9181577c | 61 | |
4c5f7207 | 62 | * FFmpeg can use any supported file format and protocol as input: |
9181577c FB |
63 | |
64 | Examples: | |
65 | ||
4c5f7207 | 66 | * You can use YUV files as input: |
9181577c FB |
67 | |
68 | @example | |
115329f1 | 69 | ffmpeg -i /tmp/test%d.Y /tmp/out.mpg |
9181577c FB |
70 | @end example |
71 | ||
115329f1 | 72 | It will use the files: |
9181577c | 73 | @example |
e99c4e10 FB |
74 | /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V, |
75 | /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc... | |
9181577c FB |
76 | @end example |
77 | ||
e99c4e10 FB |
78 | The Y files use twice the resolution of the U and V files. They are |
79 | raw files, without header. They can be generated by all decent video | |
80 | decoders. You must specify the size of the image with the @option{-s} option | |
4c5f7207 | 81 | if FFmpeg cannot guess it. |
9181577c | 82 | |
4c5f7207 | 83 | * You can input from a raw YUV420P file: |
9181577c FB |
84 | |
85 | @example | |
e99c4e10 | 86 | ffmpeg -i /tmp/test.yuv /tmp/out.avi |
9181577c FB |
87 | @end example |
88 | ||
4c5f7207 DB |
89 | test.yuv is a file containing raw YUV planar data. Each frame is composed |
90 | of the Y plane followed by the U and V planes at half vertical and | |
e99c4e10 | 91 | horizontal resolution. |
9181577c | 92 | |
4c5f7207 | 93 | * You can output to a raw YUV420P file: |
9181577c FB |
94 | |
95 | @example | |
f926cbe7 | 96 | ffmpeg -i mydivx.avi hugefile.yuv |
9181577c FB |
97 | @end example |
98 | ||
99 | * You can set several input files and output files: | |
100 | ||
101 | @example | |
e99c4e10 | 102 | ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg |
9181577c FB |
103 | @end example |
104 | ||
4c5f7207 DB |
105 | Converts the audio file a.wav and the raw YUV video file a.yuv |
106 | to MPEG file a.mpg. | |
9181577c | 107 | |
6bf40f39 | 108 | * You can also do audio and video conversions at the same time: |
9181577c FB |
109 | |
110 | @example | |
e99c4e10 | 111 | ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2 |
9181577c FB |
112 | @end example |
113 | ||
4c5f7207 | 114 | Converts a.wav to MPEG audio at 22050Hz sample rate. |
9181577c FB |
115 | |
116 | * You can encode to several formats at the same time and define a | |
e99c4e10 | 117 | mapping from input stream to output streams: |
9181577c FB |
118 | |
119 | @example | |
5438308f | 120 | ffmpeg -i /tmp/a.wav -ab 64k /tmp/a.mp2 -ab 128k /tmp/b.mp2 -map 0:0 -map 0:0 |
9181577c FB |
121 | @end example |
122 | ||
4c5f7207 DB |
123 | Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. '-map |
124 | file:index' specifies which input stream is used for each output | |
e99c4e10 | 125 | stream, in the order of the definition of output streams. |
9181577c FB |
126 | |
127 | * You can transcode decrypted VOBs | |
128 | ||
129 | @example | |
5438308f | 130 | ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec mp3 -ab 128k snatch.avi |
9181577c FB |
131 | @end example |
132 | ||
4c5f7207 DB |
133 | This is a typical DVD ripping example; the input is a VOB file, the |
134 | output an AVI file with MPEG-4 video and MP3 audio. Note that in this | |
135 | command we use B-frames so the MPEG-4 stream is DivX5 compatible, and | |
136 | GOP size is 300 which means one intra frame every 10 seconds for 29.97fps | |
137 | input video. Furthermore, the audio stream is MP3-encoded so you need | |
138 | to enable LAME support by passing @code{--enable-mp3lame} to configure. | |
139 | The mapping is particularly useful for DVD transcoding | |
e99c4e10 | 140 | to get the desired audio language. |
9181577c | 141 | |
4c5f7207 | 142 | NOTE: To see the supported input formats, use @code{ffmpeg -formats}. |
e99c4e10 | 143 | @c man end |
9181577c FB |
144 | |
145 | @chapter Invocation | |
146 | ||
147 | @section Syntax | |
148 | ||
e99c4e10 | 149 | The generic syntax is: |
9181577c | 150 | |
115329f1 | 151 | @example |
e99c4e10 | 152 | @c man begin SYNOPSIS |
28f88dc8 | 153 | ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{outfile}@}... |
e99c4e10 | 154 | @c man end |
9181577c | 155 | @end example |
e99c4e10 | 156 | @c man begin DESCRIPTION |
e99c4e10 | 157 | As a general rule, options are applied to the next specified |
699e77b1 | 158 | file. Therefore, order is important, and you can have the same |
8cc62264 | 159 | option on the command line multiple times. Each occurrence is |
699e77b1 VP |
160 | then applied to the next input or output file. |
161 | ||
eb10acec | 162 | * To set the video bitrate of the output file to 64kbit/s: |
699e77b1 VP |
163 | @example |
164 | ffmpeg -i input.avi -b 64k output.avi | |
165 | @end example | |
166 | ||
167 | * To force the frame rate of the input and output file to 24 fps: | |
168 | @example | |
169 | ffmpeg -r 24 -i input.avi output.avi | |
170 | @end example | |
171 | ||
172 | * To force the frame rate of the output file to 24 fps: | |
173 | @example | |
174 | ffmpeg -i input.avi -r 24 output.avi | |
175 | @end example | |
176 | ||
177 | * To force the frame rate of input file to 1 fps and the output file to 24 fps: | |
178 | @example | |
179 | ffmpeg -r 1 -i input.avi -r 24 output.avi | |
180 | @end example | |
181 | ||
182 | The format option may be needed for raw input files. | |
9181577c | 183 | |
4c5f7207 DB |
184 | By default, FFmpeg tries to convert as losslessly as possible: It |
185 | uses the same audio and video parameters for the outputs as the one | |
e99c4e10 FB |
186 | specified for the inputs. |
187 | @c man end | |
9181577c | 188 | |
e99c4e10 | 189 | @c man begin OPTIONS |
9181577c FB |
190 | @section Main options |
191 | ||
e99c4e10 | 192 | @table @option |
9181577c | 193 | @item -L |
4c5f7207 | 194 | Show license. |
18bff752 | 195 | |
9181577c | 196 | @item -h |
4c5f7207 | 197 | Show help. |
18bff752 | 198 | |
4386f941 DB |
199 | @item -version |
200 | Show version. | |
201 | ||
e99c4e10 | 202 | @item -formats |
4c5f7207 | 203 | Show available formats, codecs, protocols, ... |
18bff752 | 204 | |
115329f1 | 205 | @item -f fmt |
4c5f7207 | 206 | Force format. |
18bff752 | 207 | |
115329f1 | 208 | @item -i filename |
4c5f7207 | 209 | input filename |
9181577c | 210 | |
115329f1 | 211 | @item -y |
4c5f7207 | 212 | Overwrite output files. |
9181577c | 213 | |
115329f1 | 214 | @item -t duration |
4c5f7207 DB |
215 | Set the recording time in seconds. |
216 | @code{hh:mm:ss[.xxx]} syntax is also supported. | |
9181577c | 217 | |
4386f941 DB |
218 | @item -fs limit_size |
219 | Set the file size limit. | |
220 | ||
e83a84ac | 221 | @item -ss position |
4c5f7207 DB |
222 | Seek to given time position in seconds. |
223 | @code{hh:mm:ss[.xxx]} syntax is also supported. | |
e83a84ac | 224 | |
4386f941 DB |
225 | @item -itsoffset offset |
226 | Set the input time offset in seconds. | |
227 | @code{[-]hh:mm:ss[.xxx]} syntax is also supported. | |
228 | This option affects all the input files that follow it. | |
229 | The offset is added to the timestamps of the input files. | |
230 | Specifying a positive offset means that the corresponding | |
231 | streams are delayed by 'offset' seconds. | |
232 | ||
115329f1 | 233 | @item -title string |
4c5f7207 | 234 | Set the title. |
9181577c | 235 | |
4386f941 DB |
236 | @item -timestamp time |
237 | Set the timestamp. | |
238 | ||
115329f1 | 239 | @item -author string |
4c5f7207 | 240 | Set the author. |
9181577c | 241 | |
115329f1 | 242 | @item -copyright string |
4c5f7207 | 243 | Set the copyright. |
9181577c | 244 | |
115329f1 | 245 | @item -comment string |
4c5f7207 | 246 | Set the comment. |
9181577c | 247 | |
4386f941 DB |
248 | @item -album string |
249 | Set the album. | |
250 | ||
ec1b10f4 PI |
251 | @item -track number |
252 | Set the track. | |
253 | ||
254 | @item -year number | |
255 | Set the year. | |
256 | ||
4386f941 DB |
257 | @item -v verbose |
258 | Control amount of logging. | |
259 | ||
99db6420 | 260 | @item -target type |
4386f941 | 261 | Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", |
4c5f7207 DB |
262 | "ntsc-svcd", ... ). All the format options (bitrate, codecs, |
263 | buffer sizes) are then set automatically. You can just type: | |
99db6420 FB |
264 | |
265 | @example | |
266 | ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg | |
267 | @end example | |
268 | ||
4c5f7207 DB |
269 | Nevertheless you can specify additional options as long as you know |
270 | they do not conflict with the standard, as in: | |
791d8d1d MB |
271 | |
272 | @example | |
273 | ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg | |
274 | @end example | |
275 | ||
4386f941 DB |
276 | @item -dframes number |
277 | Set the number of data frames to record. | |
278 | ||
279 | @item -scodec codec | |
280 | Force subtitle codec ('copy' to copy stream). | |
281 | ||
282 | @item -newsubtitle | |
283 | Add a new subtitle stream to the current output stream. | |
284 | ||
285 | @item -slang code | |
286 | Set the ISO 639 language code (3 letters) of the current subtitle stream. | |
401fbdde | 287 | |
9181577c FB |
288 | @end table |
289 | ||
290 | @section Video Options | |
291 | ||
e99c4e10 | 292 | @table @option |
9181577c | 293 | @item -b bitrate |
3c0ba870 | 294 | Set the video bitrate in bit/s (default = 200 kb/s). |
4386f941 DB |
295 | @item -vframes number |
296 | Set the number of video frames to record. | |
115329f1 | 297 | @item -r fps |
4386f941 | 298 | Set frame rate (Hz value, fraction or abbreviation), (default = 25). |
115329f1 | 299 | @item -s size |
67053c30 | 300 | Set frame size. The format is @samp{wxh} (ffserver default = 160x128, ffmpeg default = same as source). |
4c5f7207 | 301 | The following abbreviations are recognized: |
5ee03c86 | 302 | @table @samp |
18bff752 FB |
303 | @item sqcif |
304 | 128x96 | |
305 | @item qcif | |
306 | 176x144 | |
307 | @item cif | |
308 | 352x288 | |
309 | @item 4cif | |
310 | 704x576 | |
7d88b5ca BF |
311 | @item qqvga |
312 | 160x120 | |
313 | @item qvga | |
314 | 320x240 | |
315 | @item vga | |
316 | 640x480 | |
317 | @item svga | |
318 | 800x600 | |
319 | @item xga | |
320 | 1024x768 | |
321 | @item uxga | |
322 | 1600x1200 | |
323 | @item qxga | |
324 | 2048x1536 | |
325 | @item sxga | |
326 | 1280x1024 | |
327 | @item qsxga | |
328 | 2560x2048 | |
329 | @item hsxga | |
330 | 5120x4096 | |
331 | @item wvga | |
332 | 852x480 | |
333 | @item wxga | |
334 | 1366x768 | |
335 | @item wsxga | |
336 | 1600x1024 | |
337 | @item wuxga | |
338 | 1920x1200 | |
339 | @item woxga | |
340 | 2560x1600 | |
341 | @item wqsxga | |
342 | 3200x2048 | |
343 | @item wquxga | |
344 | 3840x2400 | |
345 | @item whsxga | |
346 | 6400x4096 | |
347 | @item whuxga | |
348 | 7680x4800 | |
349 | @item cga | |
350 | 320x200 | |
351 | @item ega | |
352 | 640x350 | |
353 | @item hd480 | |
354 | 852x480 | |
355 | @item hd720 | |
356 | 1280x720 | |
357 | @item hd1080 | |
358 | 1920x1080 | |
18bff752 FB |
359 | @end table |
360 | ||
361 | @item -aspect aspect | |
4c5f7207 | 362 | Set aspect ratio (4:3, 16:9 or 1.3333, 1.7777). |
18bff752 | 363 | @item -croptop size |
4c5f7207 | 364 | Set top crop band size (in pixels). |
18bff752 | 365 | @item -cropbottom size |
4c5f7207 | 366 | Set bottom crop band size (in pixels). |
18bff752 | 367 | @item -cropleft size |
4c5f7207 | 368 | Set left crop band size (in pixels). |
18bff752 | 369 | @item -cropright size |
4c5f7207 | 370 | Set right crop band size (in pixels). |
1ff93ffc | 371 | @item -padtop size |
4c5f7207 | 372 | Set top pad band size (in pixels). |
1ff93ffc | 373 | @item -padbottom size |
4c5f7207 | 374 | Set bottom pad band size (in pixels). |
1ff93ffc | 375 | @item -padleft size |
4c5f7207 | 376 | Set left pad band size (in pixels). |
1ff93ffc | 377 | @item -padright size |
4c5f7207 | 378 | Set right pad band size (in pixels). |
5b79a73e | 379 | @item -padcolor (hex color) |
4c5f7207 DB |
380 | Set color of padded bands. The value for padcolor is expressed |
381 | as a six digit hexadecimal number where the first two digits | |
382 | represent red, the middle two digits green and last two digits | |
383 | blue (default = 000000 (black)). | |
9181577c | 384 | @item -vn |
4c5f7207 | 385 | Disable video recording. |
115329f1 | 386 | @item -bt tolerance |
dc5ee8bc | 387 | Set video bitrate tolerance (in bit/s). |
18bff752 | 388 | @item -maxrate bitrate |
a5515106 | 389 | Set max video bitrate tolerance (in bit/s). |
18bff752 | 390 | @item -minrate bitrate |
a5515106 | 391 | Set min video bitrate tolerance (in bit/s). |
18bff752 | 392 | @item -bufsize size |
81d0618f | 393 | Set rate control buffer size (in bits). |
115329f1 | 394 | @item -vcodec codec |
4c5f7207 | 395 | Force video codec to @var{codec}. Use the @code{copy} special value to |
5ee03c86 | 396 | tell that the raw codec data must be copied as is. |
18bff752 | 397 | @item -sameq |
4c5f7207 | 398 | Use same video quality as source (implies VBR). |
9181577c | 399 | |
115329f1 | 400 | @item -pass n |
4c5f7207 DB |
401 | Select the pass number (1 or 2). It is useful to do two pass |
402 | encoding. The statistics of the video are recorded in the first | |
403 | pass and the video is generated at the exact requested bitrate | |
404 | in the second pass. | |
9181577c | 405 | |
115329f1 | 406 | @item -passlogfile file |
4c5f7207 | 407 | Set two pass logfile name to @var{file}. |
9181577c | 408 | |
4386f941 DB |
409 | @item -newvideo |
410 | Add a new video stream to the current output stream. | |
411 | ||
9181577c FB |
412 | @end table |
413 | ||
18bff752 | 414 | @section Advanced Video Options |
9181577c | 415 | |
e99c4e10 | 416 | @table @option |
4386f941 DB |
417 | @item -pix_fmt format |
418 | Set pixel format. | |
115329f1 | 419 | @item -g gop_size |
4c5f7207 | 420 | Set the group of pictures size. |
115329f1 | 421 | @item -intra |
4c5f7207 | 422 | Use only intra frames. |
4386f941 DB |
423 | @item -vdt n |
424 | Discard threshold. | |
115329f1 | 425 | @item -qscale q |
4bef236b | 426 | Use fixed video quantizer scale (VBR). |
115329f1 | 427 | @item -qmin q |
4bef236b | 428 | minimum video quantizer scale (VBR) |
115329f1 | 429 | @item -qmax q |
4bef236b | 430 | maximum video quantizer scale (VBR) |
115329f1 | 431 | @item -qdiff q |
4bef236b | 432 | maximum difference between the quantizer scales (VBR) |
115329f1 | 433 | @item -qblur blur |
4bef236b | 434 | video quantizer scale blur (VBR) |
115329f1 | 435 | @item -qcomp compression |
4bef236b | 436 | video quantizer scale compression (VBR) |
18bff752 | 437 | |
9ae711e1 VP |
438 | @item -lmin lambda |
439 | minimum video lagrange factor (VBR) | |
440 | @item -lmax lambda | |
441 | max video lagrange factor (VBR) | |
442 | @item -mblmin lambda | |
443 | minimum macroblock quantizer scale (VBR) | |
444 | @item -mblmax lambda | |
445 | maximum macroblock quantizer scale (VBR) | |
446 | ||
447 | These four options (lmin, lmax, mblmin, mblmax) use 'lambda' units, | |
448 | but you may use the QP2LAMBDA constant to easily convert from 'q' units: | |
449 | @example | |
450 | ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext | |
451 | @end example | |
452 | ||
18bff752 | 453 | @item -rc_init_cplx complexity |
4c5f7207 | 454 | initial complexity for single pass encoding |
18bff752 | 455 | @item -b_qfactor factor |
4c5f7207 | 456 | qp factor between P- and B-frames |
18bff752 | 457 | @item -i_qfactor factor |
4c5f7207 | 458 | qp factor between P- and I-frames |
18bff752 | 459 | @item -b_qoffset offset |
4c5f7207 | 460 | qp offset between P- and B-frames |
18bff752 | 461 | @item -i_qoffset offset |
4c5f7207 | 462 | qp offset between P- and I-frames |
18bff752 | 463 | @item -rc_eq equation |
4c5f7207 DB |
464 | Set rate control equation (@pxref{FFmpeg formula |
465 | evaluator}) (default = @code{tex^qComp}). | |
5ee03c86 FB |
466 | @item -rc_override override |
467 | rate control override for specific intervals | |
18bff752 | 468 | @item -me method |
4c5f7207 DB |
469 | Set motion estimation method to @var{method}. |
470 | Available methods are (from lowest to best quality): | |
18bff752 FB |
471 | @table @samp |
472 | @item zero | |
5ee03c86 | 473 | Try just the (0, 0) vector. |
18bff752 FB |
474 | @item phods |
475 | @item log | |
476 | @item x1 | |
477 | @item epzs | |
478 | (default method) | |
479 | @item full | |
480 | exhaustive search (slow and marginally better than epzs) | |
481 | @end table | |
482 | ||
483 | @item -dct_algo algo | |
4c5f7207 | 484 | Set DCT algorithm to @var{algo}. Available values are: |
18bff752 FB |
485 | @table @samp |
486 | @item 0 | |
487 | FF_DCT_AUTO (default) | |
488 | @item 1 | |
489 | FF_DCT_FASTINT | |
490 | @item 2 | |
491 | FF_DCT_INT | |
492 | @item 3 | |
493 | FF_DCT_MMX | |
494 | @item 4 | |
495 | FF_DCT_MLIB | |
496 | @item 5 | |
497 | FF_DCT_ALTIVEC | |
498 | @end table | |
499 | ||
500 | @item -idct_algo algo | |
4c5f7207 | 501 | Set IDCT algorithm to @var{algo}. Available values are: |
18bff752 FB |
502 | @table @samp |
503 | @item 0 | |
504 | FF_IDCT_AUTO (default) | |
505 | @item 1 | |
115329f1 | 506 | FF_IDCT_INT |
18bff752 | 507 | @item 2 |
115329f1 | 508 | FF_IDCT_SIMPLE |
18bff752 | 509 | @item 3 |
115329f1 | 510 | FF_IDCT_SIMPLEMMX |
18bff752 | 511 | @item 4 |
115329f1 | 512 | FF_IDCT_LIBMPEG2MMX |
18bff752 | 513 | @item 5 |
115329f1 | 514 | FF_IDCT_PS2 |
18bff752 | 515 | @item 6 |
115329f1 | 516 | FF_IDCT_MLIB |
18bff752 | 517 | @item 7 |
115329f1 | 518 | FF_IDCT_ARM |
18bff752 | 519 | @item 8 |
115329f1 | 520 | FF_IDCT_ALTIVEC |
18bff752 | 521 | @item 9 |
115329f1 | 522 | FF_IDCT_SH4 |
18bff752 | 523 | @item 10 |
115329f1 | 524 | FF_IDCT_SIMPLEARM |
18bff752 FB |
525 | @end table |
526 | ||
527 | @item -er n | |
4c5f7207 | 528 | Set error resilience to @var{n}. |
18bff752 | 529 | @table @samp |
115329f1 | 530 | @item 1 |
1471c6c2 | 531 | FF_ER_CAREFUL (default) |
18bff752 | 532 | @item 2 |
5ee03c86 | 533 | FF_ER_COMPLIANT |
18bff752 FB |
534 | @item 3 |
535 | FF_ER_AGGRESSIVE | |
536 | @item 4 | |
537 | FF_ER_VERY_AGGRESSIVE | |
538 | @end table | |
539 | ||
5ee03c86 | 540 | @item -ec bit_mask |
4c5f7207 | 541 | Set error concealment to @var{bit_mask}. @var{bit_mask} is a bit mask of |
5ee03c86 | 542 | the following values: |
18bff752 FB |
543 | @table @samp |
544 | @item 1 | |
4c5f7207 | 545 | FF_EC_GUESS_MVS (default = enabled) |
18bff752 | 546 | @item 2 |
4c5f7207 | 547 | FF_EC_DEBLOCK (default = enabled) |
18bff752 FB |
548 | @end table |
549 | ||
550 | @item -bf frames | |
4c5f7207 | 551 | Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4). |
18bff752 FB |
552 | @item -mbd mode |
553 | macroblock decision | |
554 | @table @samp | |
555 | @item 0 | |
4c5f7207 | 556 | FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in FFmpeg). |
18bff752 | 557 | @item 1 |
4c5f7207 | 558 | FF_MB_DECISION_BITS: Choose the one which needs the fewest bits. |
18bff752 | 559 | @item 2 |
019c8838 | 560 | FF_MB_DECISION_RD: rate distortion |
18bff752 FB |
561 | @end table |
562 | ||
563 | @item -4mv | |
4c5f7207 | 564 | Use four motion vector by macroblock (MPEG-4 only). |
18bff752 | 565 | @item -part |
4c5f7207 | 566 | Use data partitioning (MPEG-4 only). |
18bff752 | 567 | @item -bug param |
4c5f7207 | 568 | Work around encoder bugs that are not auto-detected. |
18bff752 | 569 | @item -strict strictness |
4c5f7207 | 570 | How strictly to follow the standards. |
5ee03c86 | 571 | @item -aic |
4c5f7207 | 572 | Enable Advanced intra coding (h263+). |
5ee03c86 | 573 | @item -umv |
4c5f7207 | 574 | Enable Unlimited Motion Vector (h263+) |
18bff752 FB |
575 | |
576 | @item -deinterlace | |
4c5f7207 | 577 | Deinterlace pictures. |
3841e813 | 578 | @item -ilme |
4c5f7207 DB |
579 | Force interlacing support in encoder (MPEG-2 and MPEG-4 only). |
580 | Use this option if your input file is interlaced and you want | |
581 | to keep the interlaced format for minimum losses. | |
582 | The alternative is to deinterlace the input stream with | |
583 | @option{-deinterlace}, but deinterlacing introduces losses. | |
18bff752 | 584 | @item -psnr |
4c5f7207 | 585 | Calculate PSNR of compressed frames. |
18bff752 | 586 | @item -vstats |
4c5f7207 | 587 | Dump video coding statistics to @file{vstats_HHMMSS.log}. |
b60d1379 SS |
588 | @item -vstats_file file |
589 | Dump video coding statistics to @var{file}. | |
18bff752 | 590 | @item -vhook module |
4c5f7207 | 591 | Insert video processing @var{module}. @var{module} contains the module |
18bff752 | 592 | name and its parameters separated by spaces. |
4386f941 DB |
593 | @item -top n |
594 | top=1/bottom=0/auto=-1 field first | |
595 | @item -dc precision | |
596 | Intra_dc_precision. | |
597 | @item -vtag fourcc/tag | |
598 | Force video tag/fourcc. | |
599 | @item -qphist | |
600 | Show QP histogram. | |
601 | @item -vbsf bitstream filter | |
602 | Bitstream filters available are "dump_extra", "remove_extra", "noise". | |
18bff752 FB |
603 | @end table |
604 | ||
605 | @section Audio Options | |
606 | ||
607 | @table @option | |
4386f941 DB |
608 | @item -aframes number |
609 | Set the number of audio frames to record. | |
115329f1 | 610 | @item -ar freq |
4c5f7207 | 611 | Set the audio sampling frequency (default = 44100 Hz). |
115329f1 | 612 | @item -ab bitrate |
5438308f | 613 | Set the audio bitrate in bit/s (default = 64k). |
18bff752 | 614 | @item -ac channels |
4c5f7207 | 615 | Set the number of audio channels (default = 1). |
5ee03c86 | 616 | @item -an |
4c5f7207 | 617 | Disable audio recording. |
5ee03c86 | 618 | @item -acodec codec |
4c5f7207 DB |
619 | Force audio codec to @var{codec}. Use the @code{copy} special value to |
620 | specify that the raw codec data must be copied as is. | |
de62a89d | 621 | @item -newaudio |
18fd519f DB |
622 | Add a new audio track to the output file. If you want to specify parameters, |
623 | do so before @code{-newaudio} (@code{-acodec}, @code{-ab}, etc..). | |
de62a89d | 624 | |
18fd519f DB |
625 | Mapping will be done automatically, if the number of output streams is equal to |
626 | the number of input streams, else it will pick the first one that matches. You | |
de62a89d VP |
627 | can override the mapping using @code{-map} as usual. |
628 | ||
629 | Example: | |
630 | @example | |
5438308f | 631 | ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio |
de62a89d | 632 | @end example |
4386f941 DB |
633 | @item -alang code |
634 | Set the ISO 639 language code (3 letters) of the current audio stream. | |
635 | @end table | |
636 | ||
637 | @section Advanced Audio options: | |
638 | ||
639 | @table @option | |
640 | @item -atag fourcc/tag | |
641 | Force audio tag/fourcc. | |
642 | @item -absf bitstream filter | |
643 | Bitstream filters available are "dump_extra", "remove_extra", "noise", "mp3comp", "mp3decomp". | |
644 | @end table | |
645 | ||
646 | @section Subtitle options: | |
647 | ||
648 | @table @option | |
649 | @item -scodec codec | |
650 | Force subtitle codec ('copy' to copy stream). | |
651 | @item -newsubtitle | |
652 | Add a new subtitle stream to the current output stream. | |
653 | @item -slang code | |
654 | Set the ISO 639 language code (3 letters) of the current subtitle stream. | |
18bff752 FB |
655 | @end table |
656 | ||
657 | @section Audio/Video grab options | |
658 | ||
659 | @table @option | |
18bff752 | 660 | @item -vc channel |
4c5f7207 | 661 | Set video grab channel (DV1394 only). |
18bff752 | 662 | @item -tvstd standard |
4c5f7207 | 663 | Set television standard (NTSC, PAL (SECAM)). |
cc58300e RP |
664 | @item -isync |
665 | Synchronize read on input. | |
18bff752 FB |
666 | @end table |
667 | ||
668 | @section Advanced options | |
669 | ||
670 | @table @option | |
e645a733 BL |
671 | @item -map input stream id[:input stream id] |
672 | Set stream mapping from input streams to output streams. | |
673 | Just enumerate the input streams in the order you want them in the output. | |
674 | [input stream id] sets the (input) stream to sync against. | |
4386f941 DB |
675 | @item -map_meta_data outfile:infile |
676 | Set meta data information of outfile from infile. | |
18bff752 | 677 | @item -debug |
4c5f7207 | 678 | Print specific debug info. |
115329f1 | 679 | @item -benchmark |
4c5f7207 | 680 | Add timings for benchmarking. |
4386f941 | 681 | @item -dump |
4c5f7207 | 682 | Dump each input packet. |
4386f941 DB |
683 | @item -hex |
684 | When dumping packets, also dump the payload. | |
18bff752 | 685 | @item -bitexact |
4c5f7207 | 686 | Only use bit exact algorithms (for codec testing). |
18bff752 | 687 | @item -ps size |
4c5f7207 | 688 | Set packet size in bits. |
5ee03c86 | 689 | @item -re |
4c5f7207 | 690 | Read input at native frame rate. Mainly used to simulate a grab device. |
4386f941 | 691 | @item -loop_input |
4c5f7207 DB |
692 | Loop over the input stream. Currently it works only for image |
693 | streams. This option is used for automatic FFserver testing. | |
8108551a | 694 | @item -loop_output number_of_times |
019c8838 | 695 | Repeatedly loop output for formats that support looping such as animated GIF |
4c5f7207 | 696 | (0 will loop the output infinitely). |
4386f941 DB |
697 | @item -threads count |
698 | Thread count. | |
c52e13f1 | 699 | @item -vsync parameter |
29c9183c DB |
700 | Video sync method. Video will be stretched/squeezed to match the timestamps, |
701 | it is done by duplicating and dropping frames. With -map you can select from | |
702 | which stream the timestamps should be taken. You can leave either video or | |
c52e13f1 BL |
703 | audio unchanged and sync the remaining stream(s) to the unchanged one. |
704 | @item -async samples_per_second | |
29c9183c | 705 | Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps, |
c52e13f1 BL |
706 | the parameter is the maximum samples per second by which the audio is changed. |
707 | -async 1 is a special case where only the start of the audio stream is corrected | |
708 | without any later correction. | |
9181577c | 709 | @end table |
18bff752 FB |
710 | |
711 | @node FFmpeg formula evaluator | |
712 | @section FFmpeg formula evaluator | |
713 | ||
714 | When evaluating a rate control string, FFmpeg uses an internal formula | |
115329f1 | 715 | evaluator. |
18bff752 FB |
716 | |
717 | The following binary operators are available: @code{+}, @code{-}, | |
718 | @code{*}, @code{/}, @code{^}. | |
719 | ||
720 | The following unary operators are available: @code{+}, @code{-}, | |
721 | @code{(...)}. | |
722 | ||
723 | The following functions are available: | |
724 | @table @var | |
725 | @item sinh(x) | |
726 | @item cosh(x) | |
727 | @item tanh(x) | |
728 | @item sin(x) | |
729 | @item cos(x) | |
730 | @item tan(x) | |
731 | @item exp(x) | |
732 | @item log(x) | |
733 | @item squish(x) | |
734 | @item gauss(x) | |
735 | @item abs(x) | |
736 | @item max(x, y) | |
737 | @item min(x, y) | |
738 | @item gt(x, y) | |
739 | @item lt(x, y) | |
740 | @item eq(x, y) | |
741 | @item bits2qp(bits) | |
742 | @item qp2bits(qp) | |
743 | @end table | |
744 | ||
745 | The following constants are available: | |
746 | @table @var | |
747 | @item PI | |
748 | @item E | |
749 | @item iTex | |
750 | @item pTex | |
751 | @item tex | |
752 | @item mv | |
753 | @item fCode | |
754 | @item iCount | |
755 | @item mcVar | |
756 | @item var | |
757 | @item isI | |
758 | @item isP | |
759 | @item isB | |
760 | @item avgQP | |
761 | @item qComp | |
762 | @item avgIITex | |
763 | @item avgPITex | |
764 | @item avgPPTex | |
765 | @item avgBPTex | |
766 | @item avgTex | |
767 | @end table | |
768 | ||
e99c4e10 FB |
769 | @c man end |
770 | ||
771 | @ignore | |
772 | ||
773 | @setfilename ffmpeg | |
774 | @settitle FFmpeg video converter | |
775 | ||
776 | @c man begin SEEALSO | |
019c8838 | 777 | ffserver(1), ffplay(1) and the HTML documentation of @file{ffmpeg}. |
e99c4e10 FB |
778 | @c man end |
779 | ||
780 | @c man begin AUTHOR | |
781 | Fabrice Bellard | |
782 | @c man end | |
783 | ||
784 | @end ignore | |
9181577c FB |
785 | |
786 | @section Protocols | |
787 | ||
4c5f7207 DB |
788 | The filename can be @file{-} to read from standard input or to write |
789 | to standard output. | |
9181577c | 790 | |
4c5f7207 | 791 | FFmpeg also handles many protocols specified with an URL syntax. |
9181577c | 792 | |
4c5f7207 | 793 | Use 'ffmpeg -formats' to see a list of the supported protocols. |
9181577c | 794 | |
e99c4e10 | 795 | The protocol @code{http:} is currently used only to communicate with |
4c5f7207 | 796 | FFserver (see the FFserver documentation). When FFmpeg will be a |
e99c4e10 | 797 | video player it will also be used for streaming :-) |
9181577c FB |
798 | |
799 | @chapter Tips | |
800 | ||
801 | @itemize | |
4c5f7207 DB |
802 | @item For streaming at very low bitrate application, use a low frame rate |
803 | and a small GOP size. This is especially true for RealVideo where | |
e99c4e10 FB |
804 | the Linux player does not seem to be very fast, so it can miss |
805 | frames. An example is: | |
9181577c FB |
806 | |
807 | @example | |
3c0ba870 | 808 | ffmpeg -g 3 -r 3 -t 10 -b 50k -s qcif -f rv10 /tmp/b.rm |
9181577c FB |
809 | @end example |
810 | ||
811 | @item The parameter 'q' which is displayed while encoding is the current | |
4c5f7207 DB |
812 | quantizer. The value 1 indicates that a very good quality could |
813 | be achieved. The value 31 indicates the worst quality. If q=31 appears | |
e99c4e10 | 814 | too often, it means that the encoder cannot compress enough to meet |
4c5f7207 | 815 | your bitrate. You must either increase the bitrate, decrease the |
e99c4e10 | 816 | frame rate or decrease the frame size. |
9181577c FB |
817 | |
818 | @item If your computer is not fast enough, you can speed up the | |
e99c4e10 FB |
819 | compression at the expense of the compression ratio. You can use |
820 | '-me zero' to speed up motion estimation, and '-intra' to disable | |
4c5f7207 | 821 | motion estimation completely (you have only I-frames, which means it |
e99c4e10 | 822 | is about as good as JPEG compression). |
9181577c | 823 | |
4c5f7207 | 824 | @item To have very low audio bitrates, reduce the sampling frequency |
019c8838 | 825 | (down to 22050 kHz for MPEG audio, 22050 or 11025 for AC3). |
9181577c FB |
826 | |
827 | @item To have a constant quality (but a variable bitrate), use the option | |
e99c4e10 FB |
828 | '-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst |
829 | quality). | |
9181577c FB |
830 | |
831 | @item When converting video files, you can use the '-sameq' option which | |
4c5f7207 DB |
832 | uses the same quality factor in the encoder as in the decoder. |
833 | It allows almost lossless encoding. | |
9181577c FB |
834 | |
835 | @end itemize | |
836 | ||
47404f9f DB |
837 | |
838 | @chapter external libraries | |
839 | ||
840 | FFmpeg can be hooked up with a number of external libraries to add support | |
7bb93206 DB |
841 | for more formats. None of them are used by default, their use has to be |
842 | explicitly requested by passing the appropriate flags to @file{./configure}. | |
47404f9f DB |
843 | |
844 | @section AMR | |
845 | ||
846 | AMR comes in two different flavors, WB and NB. FFmpeg can make use of the | |
73508bc6 DB |
847 | AMR WB (floating-point mode) and the AMR NB (floating-point mode) reference |
848 | decoders and encoders. | |
47404f9f | 849 | |
73508bc6 DB |
850 | Go to @url{http://www.penguin.cz/~utx/amr} and follow the instructions for |
851 | installing the libraries. Then pass @code{--enable-amr-nb} and/or | |
852 | @code{--enable-amr-wb} to configure to enable the libraries. | |
47404f9f DB |
853 | |
854 | ||
9181577c FB |
855 | @chapter Supported File Formats and Codecs |
856 | ||
857 | You can use the @code{-formats} option to have an exhaustive list. | |
858 | ||
859 | @section File Formats | |
860 | ||
6bf40f39 | 861 | FFmpeg supports the following file formats through the @code{libavformat} |
0699d2fe | 862 | library: |
9181577c | 863 | |
3fc9e78f | 864 | @multitable @columnfractions .4 .1 .1 .4 |
9181577c FB |
865 | @item Supported File Format @tab Encoding @tab Decoding @tab Comments |
866 | @item MPEG audio @tab X @tab X | |
4c5f7207 | 867 | @item MPEG-1 systems @tab X @tab X |
9181577c | 868 | @tab muxed audio and video |
4c5f7207 | 869 | @item MPEG-2 PS @tab X @tab X |
9181577c | 870 | @tab also known as @code{VOB} file |
4c5f7207 | 871 | @item MPEG-2 TS @tab @tab X |
9181577c | 872 | @tab also known as DVB Transport Stream |
115329f1 DB |
873 | @item ASF@tab X @tab X |
874 | @item AVI@tab X @tab X | |
875 | @item WAV@tab X @tab X | |
9181577c | 876 | @item Macromedia Flash@tab X @tab X |
4c5f7207 | 877 | @tab Only embedded audio is decoded. |
2eb5d024 FB |
878 | @item FLV @tab X @tab X |
879 | @tab Macromedia Flash video files | |
115329f1 DB |
880 | @item Real Audio and Video @tab X @tab X |
881 | @item Raw AC3 @tab X @tab X | |
882 | @item Raw MJPEG @tab X @tab X | |
883 | @item Raw MPEG video @tab X @tab X | |
884 | @item Raw PCM8/16 bits, mulaw/Alaw@tab X @tab X | |
885 | @item Raw CRI ADX audio @tab X @tab X | |
886 | @item Raw Shorten audio @tab @tab X | |
887 | @item SUN AU format @tab X @tab X | |
7fe4c823 | 888 | @item NUT @tab X @tab X @tab NUT Open Container Format |
115329f1 | 889 | @item QuickTime @tab X @tab X |
4c5f7207 DB |
890 | @item MPEG-4 @tab X @tab X |
891 | @tab MPEG-4 is a variant of QuickTime. | |
115329f1 | 892 | @item Raw MPEG4 video @tab X @tab X |
4fa1c4fa | 893 | @item DV @tab X @tab X |
701b603d | 894 | @item 4xm @tab @tab X |
4c5f7207 | 895 | @tab 4X Technologies format, used in some games. |
4d3b1f8d | 896 | @item Playstation STR @tab @tab X |
13dec857 | 897 | @item Id RoQ @tab X @tab X |
4c5f7207 | 898 | @tab Used in Quake III, Jedi Knight 2, other computer games. |
4d3b1f8d | 899 | @item Interplay MVE @tab @tab X |
4c5f7207 | 900 | @tab Format used in various Interplay computer games. |
b17e9c99 | 901 | @item WC3 Movie @tab @tab X |
4c5f7207 | 902 | @tab Multimedia format used in Origin's Wing Commander III computer game. |
2fdf638b | 903 | @item Sega FILM/CPK @tab @tab X |
4c5f7207 | 904 | @tab Used in many Sega Saturn console games. |
2fdf638b | 905 | @item Westwood Studios VQA/AUD @tab @tab X |
4c5f7207 | 906 | @tab Multimedia formats used in Westwood Studios games. |
4120a53a | 907 | @item Id Cinematic (.cin) @tab @tab X |
4c5f7207 | 908 | @tab Used in Quake II. |
42cad81a MM |
909 | @item FLIC format @tab @tab X |
910 | @tab .fli/.flc files | |
da00f30e | 911 | @item Sierra VMD @tab @tab X |
4c5f7207 | 912 | @tab Used in Sierra CD-ROM games. |
d08d7142 | 913 | @item Sierra Online @tab @tab X |
4c5f7207 | 914 | @tab .sol files used in Sierra Online games. |
38088adf | 915 | @item Matroska @tab @tab X |
ad81a9fe | 916 | @item Electronic Arts Multimedia @tab @tab X |
4c5f7207 | 917 | @tab Used in various EA games; files have extensions like WVE and UV2. |
353147ed | 918 | @item Nullsoft Video (NSV) format @tab @tab X |
4accd1fd | 919 | @item ADTS AAC audio @tab X @tab X |
ea395e8c | 920 | @item Creative VOC @tab X @tab X @tab Created for the Sound Blaster Pro. |
4e114829 MM |
921 | @item American Laser Games MM @tab @tab X |
922 | @tab Multimedia format used in games like Mad Dog McCree | |
26376701 MM |
923 | @item AVS @tab @tab X |
924 | @tab Multimedia format used by the Creature Shock game. | |
348efc18 KS |
925 | @item Smacker @tab @tab X |
926 | @tab Multimedia format used by many games. | |
d7a3a783 BC |
927 | @item GXF @tab X @tab X |
928 | @tab General eXchange Format SMPTE 360M, used by Thomson Grass Valley playout servers. | |
dc56e0de BC |
929 | @item CIN @tab @tab X |
930 | @tab Multimedia format used by Delphine Software games. | |
f3239539 BC |
931 | @item MXF @tab @tab X |
932 | @tab Material eXchange Format SMPTE 377M, used by D-Cinema, broadcast industry. | |
29f86228 BC |
933 | @item SEQ @tab @tab X |
934 | @tab Tiertex .seq files used in the DOS CDROM version of the game Flashback. | |
33a0dd37 KS |
935 | @item DXA @tab @tab X |
936 | @tab This format is used in non-Windows version of Feeble Files game and | |
937 | different game cutscenes repacked for use with ScummVM. | |
efb0c399 | 938 | @item THP @tab @tab X |
d1e0d21f | 939 | @tab Used on the Nintendo GameCube. |
9a0ddd09 AH |
940 | @item C93 @tab @tab X |
941 | @tab Used in the game Cyberia from Interplay. | |
1e6c6759 NT |
942 | @item Bethsoft VID @tab @tab X |
943 | @tab Used in some games from Bethesda Softworks. | |
8e952e4d AH |
944 | @item CRYO APC @tab @tab X |
945 | @tab Audio format used in some games by CRYO Interactive Entertainment. | |
353147ed | 946 | @end multitable |
9181577c | 947 | |
4c5f7207 | 948 | @code{X} means that encoding (resp. decoding) is supported. |
9181577c | 949 | |
0699d2fe FB |
950 | @section Image Formats |
951 | ||
952 | FFmpeg can read and write images for each frame of a video sequence. The | |
953 | following image formats are supported: | |
954 | ||
3fc9e78f | 955 | @multitable @columnfractions .4 .1 .1 .4 |
0699d2fe | 956 | @item Supported Image Format @tab Encoding @tab Decoding @tab Comments |
115329f1 | 957 | @item PGM, PPM @tab X @tab X |
4c5f7207 | 958 | @item PAM @tab X @tab X @tab PAM is a PNM extension with alpha support. |
2eb5d024 | 959 | @item PGMYUV @tab X @tab X @tab PGM with U and V components in YUV 4:2:0 |
4c5f7207 DB |
960 | @item JPEG @tab X @tab X @tab Progressive JPEG is not supported. |
961 | @item .Y.U.V @tab X @tab X @tab one raw file per component | |
962 | @item animated GIF @tab X @tab X @tab Only uncompressed GIFs are generated. | |
963 | @item PNG @tab X @tab X @tab 2 bit and 4 bit/pixel not supported yet. | |
3689cf16 | 964 | @item Targa @tab @tab X @tab Targa (.TGA) image format. |
716222db | 965 | @item TIFF @tab X @tab X @tab YUV, JPEG and some extension is not supported yet. |
6a91ec51 | 966 | @item SGI @tab X @tab X @tab SGI RGB image format |
d58bbf81 | 967 | @item PTX @tab @tab X @tab V.Flash PTX format |
0699d2fe FB |
968 | @end multitable |
969 | ||
4c5f7207 | 970 | @code{X} means that encoding (resp. decoding) is supported. |
0699d2fe | 971 | |
9181577c FB |
972 | @section Video Codecs |
973 | ||
3fc9e78f | 974 | @multitable @columnfractions .4 .1 .1 .4 |
9181577c | 975 | @item Supported Codec @tab Encoding @tab Decoding @tab Comments |
4c5f7207 DB |
976 | @item MPEG-1 video @tab X @tab X |
977 | @item MPEG-2 video @tab X @tab X | |
2bc5da7b | 978 | @item MPEG-4 @tab X @tab X |
9181577c FB |
979 | @item MSMPEG4 V1 @tab X @tab X |
980 | @item MSMPEG4 V2 @tab X @tab X | |
2bc5da7b | 981 | @item MSMPEG4 V3 @tab X @tab X |
9181577c | 982 | @item WMV7 @tab X @tab X |
4c5f7207 | 983 | @item WMV8 @tab X @tab X @tab not completely working |
17a21f3c DB |
984 | @item WMV9 @tab @tab X @tab not completely working |
985 | @item VC1 @tab @tab X | |
b06b45c4 | 986 | @item H.261 @tab X @tab X |
4c5f7207 | 987 | @item H.263(+) @tab X @tab X @tab also known as RealVideo 1.0 |
b06b45c4 | 988 | @item H.264 @tab @tab X |
e839a994 DB |
989 | @item RealVideo 1.0 @tab X @tab X |
990 | @item RealVideo 2.0 @tab X @tab X | |
115329f1 | 991 | @item MJPEG @tab X @tab X |
4c5f7207 | 992 | @item lossless MJPEG @tab X @tab X |
26d6d032 | 993 | @item JPEG-LS @tab X @tab X @tab fourcc: MJLS, lossless and near-lossless is supported |
d6896c49 AB |
994 | @item Apple MJPEG-B @tab @tab X |
995 | @item Sunplus MJPEG @tab @tab X @tab fourcc: SP5X | |
115329f1 | 996 | @item DV @tab X @tab X |
4c5f7207 DB |
997 | @item HuffYUV @tab X @tab X |
998 | @item FFmpeg Video 1 @tab X @tab X @tab experimental lossless codec (fourcc: FFV1) | |
999 | @item FFmpeg Snow @tab X @tab X @tab experimental wavelet codec (fourcc: SNOW) | |
701b603d | 1000 | @item Asus v1 @tab X @tab X @tab fourcc: ASV1 |
4d3b1f8d | 1001 | @item Asus v2 @tab X @tab X @tab fourcc: ASV2 |
701b603d | 1002 | @item Creative YUV @tab @tab X @tab fourcc: CYUV |
d2bfadc0 | 1003 | @item Sorenson Video 1 @tab X @tab X @tab fourcc: SVQ1 |
701b603d MM |
1004 | @item Sorenson Video 3 @tab @tab X @tab fourcc: SVQ3 |
1005 | @item On2 VP3 @tab @tab X @tab still experimental | |
5ce117c3 | 1006 | @item On2 VP5 @tab @tab X @tab fourcc: VP50 |
9110a0e3 | 1007 | @item On2 VP6 @tab @tab X @tab fourcc: VP60,VP61,VP62 |
150d2772 | 1008 | @item Theora @tab X @tab X @tab still experimental |
cdb2c1ca | 1009 | @item Intel Indeo 3 @tab @tab X |
9303d49c | 1010 | @item FLV @tab X @tab X @tab Sorenson H.263 used in Flash |
15419468 | 1011 | @item Flash Screen Video @tab X @tab X @tab fourcc: FSV1 |
4d3b1f8d | 1012 | @item ATI VCR1 @tab @tab X @tab fourcc: VCR1 |
7fe4c823 | 1013 | @item ATI VCR2 @tab @tab X @tab fourcc: VCR2 |
4d3b1f8d | 1014 | @item Cirrus Logic AccuPak @tab @tab X @tab fourcc: CLJR |
4c5f7207 | 1015 | @item 4X Video @tab @tab X @tab Used in certain computer games. |
115329f1 | 1016 | @item Sony Playstation MDEC @tab @tab X |
4c5f7207 DB |
1017 | @item Id RoQ @tab @tab X @tab Used in Quake III, Jedi Knight 2, other computer games. |
1018 | @item Xan/WC3 @tab @tab X @tab Used in Wing Commander III .MVE files. | |
1019 | @item Interplay Video @tab @tab X @tab Used in Interplay .MVE files. | |
070ed1bc | 1020 | @item Apple Animation @tab @tab X @tab fourcc: 'rle ' |
42cad81a | 1021 | @item Apple Graphics @tab @tab X @tab fourcc: 'smc ' |
2fdf638b | 1022 | @item Apple Video @tab @tab X @tab fourcc: rpza |
d08d7142 | 1023 | @item Apple QuickDraw @tab @tab X @tab fourcc: qdrw |
2fdf638b MM |
1024 | @item Cinepak @tab @tab X |
1025 | @item Microsoft RLE @tab @tab X | |
1026 | @item Microsoft Video-1 @tab @tab X | |
4120a53a | 1027 | @item Westwood VQA @tab @tab X |
4c5f7207 | 1028 | @item Id Cinematic Video @tab @tab X @tab Used in Quake II. |
1dc1ed99 | 1029 | @item Planar RGB @tab @tab X @tab fourcc: 8BPS |
42cad81a | 1030 | @item FLIC video @tab @tab X |
9a4117d5 | 1031 | @item Duck TrueMotion v1 @tab @tab X @tab fourcc: DUCK |
dce76c20 | 1032 | @item Duck TrueMotion v2 @tab @tab X @tab fourcc: TM20 |
4c5f7207 | 1033 | @item VMD Video @tab @tab X @tab Used in Sierra VMD files. |
a273bbfb RT |
1034 | @item MSZH @tab @tab X @tab Part of LCL |
1035 | @item ZLIB @tab X @tab X @tab Part of LCL, encoder experimental | |
9d53d58e | 1036 | @item TechSmith Camtasia @tab @tab X @tab fourcc: TSCC |
d0a0bbd2 | 1037 | @item IBM Ultimotion @tab @tab X @tab fourcc: ULTI |
ab711b3c | 1038 | @item Miro VideoXL @tab @tab X @tab fourcc: VIXL |
acfd8f0f | 1039 | @item QPEG @tab @tab X @tab fourccs: QPEG, Q1.0, Q1.1 |
115329f1 DB |
1040 | @item LOCO @tab @tab X @tab |
1041 | @item Winnov WNV1 @tab @tab X @tab | |
589f8220 | 1042 | @item Autodesk Animator Studio Codec @tab @tab X @tab fourcc: AASC |
115329f1 | 1043 | @item Fraps FPS1 @tab @tab X @tab |
2b6c1d80 | 1044 | @item CamStudio @tab @tab X @tab fourcc: CSCD |
4e114829 | 1045 | @item American Laser Games Video @tab @tab X @tab Used in games like Mad Dog McCree |
f48d6e1b | 1046 | @item ZMBV @tab X @tab X @tab Encoder works only on PAL8 |
26376701 | 1047 | @item AVS Video @tab @tab X @tab Video encoding used by the Creature Shock game. |
348efc18 | 1048 | @item Smacker Video @tab @tab X @tab Video encoding used in Smacker. |
dfca23e3 | 1049 | @item RTjpeg @tab @tab X @tab Video encoding used in NuppelVideo files. |
fd7b1991 | 1050 | @item KMVC @tab @tab X @tab Codec used in Worms games. |
eb57c889 | 1051 | @item VMware Video @tab @tab X @tab Codec used in videos captured by VMware. |
dc56e0de | 1052 | @item Cin Video @tab @tab X @tab Codec used in Delphine Software games. |
29f86228 | 1053 | @item Tiertex Seq Video @tab @tab X @tab Codec used in DOS CDROM FlashBack game. |
33a0dd37 | 1054 | @item DXA Video @tab @tab X @tab Codec originally used in Feeble Files game. |
52b6bad2 | 1055 | @item AVID DNxHD @tab @tab X @tab aka SMPTE VC3 |
9a0ddd09 | 1056 | @item C93 Video @tab @tab X @tab Codec used in Cyberia game. |
8845202e | 1057 | @item THP @tab @tab X @tab Used on the Nintendo GameCube. |
1e6c6759 | 1058 | @item Bethsoft VID @tab @tab X @tab Used in some games from Bethesda Softworks. |
12b6d7c0 | 1059 | @item Renderware TXD @tab @tab X @tab Texture dictionaries used by the Renderware Engine. |
9181577c FB |
1060 | @end multitable |
1061 | ||
4c5f7207 | 1062 | @code{X} means that encoding (resp. decoding) is supported. |
9181577c FB |
1063 | |
1064 | @section Audio Codecs | |
1065 | ||
1066 | @multitable @columnfractions .4 .1 .1 .1 .7 | |
1067 | @item Supported Codec @tab Encoding @tab Decoding @tab Comments | |
115329f1 | 1068 | @item MPEG audio layer 2 @tab IX @tab IX |
9181577c | 1069 | @item MPEG audio layer 1/3 @tab IX @tab IX |
4c5f7207 | 1070 | @tab MP3 encoding is supported through the external library LAME. |
37776c3b | 1071 | @item AC3 @tab IX @tab IX |
4c5f7207 | 1072 | @tab liba52 is used internally for decoding. |
34d7008d | 1073 | @item Vorbis @tab X @tab X |
74882049 | 1074 | @item WMA V1/V2 @tab X @tab X |
f6fa7a6c | 1075 | @item AAC @tab X @tab X |
4c5f7207 | 1076 | @tab Supported through the external library libfaac/libfaad. |
d4c3c5a6 | 1077 | @item Microsoft ADPCM @tab X @tab X |
4d3b1f8d MM |
1078 | @item MS IMA ADPCM @tab X @tab X |
1079 | @item QT IMA ADPCM @tab @tab X | |
1080 | @item 4X IMA ADPCM @tab @tab X | |
d4e437df | 1081 | @item G.726 ADPCM @tab X @tab X |
b17e9c99 | 1082 | @item Duck DK3 IMA ADPCM @tab @tab X |
4c5f7207 | 1083 | @tab Used in some Sega Saturn console games. |
b17e9c99 | 1084 | @item Duck DK4 IMA ADPCM @tab @tab X |
4c5f7207 | 1085 | @tab Used in some Sega Saturn console games. |
2fdf638b | 1086 | @item Westwood Studios IMA ADPCM @tab @tab X |
4c5f7207 | 1087 | @tab Used in Westwood Studios games like Command and Conquer. |
7d8379f2 | 1088 | @item SMJPEG IMA ADPCM @tab @tab X |
4c5f7207 | 1089 | @tab Used in certain Loki game ports. |
42cad81a MM |
1090 | @item CD-ROM XA ADPCM @tab @tab X |
1091 | @item CRI ADX ADPCM @tab X @tab X | |
4c5f7207 | 1092 | @tab Used in Sega Dreamcast games. |
7d8379f2 | 1093 | @item Electronic Arts ADPCM @tab @tab X |
4c5f7207 | 1094 | @tab Used in various EA titles. |
b3bfb299 | 1095 | @item Creative ADPCM @tab @tab X |
2433f24f | 1096 | @tab 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2 |
8845202e DB |
1097 | @item THP ADPCM @tab @tab X |
1098 | @tab Used on the Nintendo GameCube. | |
2eb5d024 FB |
1099 | @item RA144 @tab @tab X |
1100 | @tab Real 14400 bit/s codec | |
1101 | @item RA288 @tab @tab X | |
1102 | @tab Real 28800 bit/s codec | |
37776c3b | 1103 | @item RADnet @tab X @tab IX |
4c5f7207 | 1104 | @tab Real low bitrate AC3 codec, liba52 is used for decoding. |
2eb5d024 | 1105 | @item AMR-NB @tab X @tab X |
4c5f7207 | 1106 | @tab Supported through an external library. |
d663a1fd | 1107 | @item AMR-WB @tab X @tab X |
4c5f7207 | 1108 | @tab Supported through an external library. |
2eb5d024 | 1109 | @item DV audio @tab @tab X |
b09432ad | 1110 | @item Id RoQ DPCM @tab X @tab X |
4c5f7207 | 1111 | @tab Used in Quake III, Jedi Knight 2, other computer games. |
4d3b1f8d | 1112 | @item Interplay MVE DPCM @tab @tab X |
4c5f7207 | 1113 | @tab Used in various Interplay computer games. |
b17e9c99 | 1114 | @item Xan DPCM @tab @tab X |
4c5f7207 | 1115 | @tab Used in Origin's Wing Commander IV AVI files. |
d08d7142 | 1116 | @item Sierra Online DPCM @tab @tab X |
4c5f7207 | 1117 | @tab Used in Sierra Online game audio files. |
d6896c49 AB |
1118 | @item Apple MACE 3 @tab @tab X |
1119 | @item Apple MACE 6 @tab @tab X | |
bfd9a00f | 1120 | @item FLAC lossless audio @tab X @tab X |
13dfd2b9 | 1121 | @item Shorten lossless audio @tab @tab X |
f770ee03 MM |
1122 | @item Apple lossless audio @tab @tab X |
1123 | @tab QuickTime fourcc 'alac' | |
33a4d8b1 | 1124 | @item FFmpeg Sonic @tab X @tab X |
4c5f7207 | 1125 | @tab experimental lossy/lossless codec |
d9b1c197 RT |
1126 | @item Qdesign QDM2 @tab @tab X |
1127 | @tab there are still some distortions | |
440e7988 RT |
1128 | @item Real COOK @tab @tab X |
1129 | @tab All versions except 5.1 are supported | |
e839a994 | 1130 | @item DSP Group TrueSpeech @tab @tab X |
3dc411c0 | 1131 | @item True Audio (TTA) @tab @tab X |
348efc18 | 1132 | @item Smacker Audio @tab @tab X |
730581f3 | 1133 | @item WavPack Audio @tab @tab X |
dc56e0de BC |
1134 | @item Cin Audio @tab @tab X |
1135 | @tab Codec used in Delphine Software games. | |
84ed36da | 1136 | @item Intel Music Coder @tab @tab X |
185c7b6b KS |
1137 | @item Musepack @tab @tab X |
1138 | @tab Only SV7 is supported | |
01ca9ac3 | 1139 | @item DT$ Coherent Audio @tab @tab X |
10e26bc7 | 1140 | @item ATRAC 3 @tab @tab X |
9181577c FB |
1141 | @end multitable |
1142 | ||
4c5f7207 | 1143 | @code{X} means that encoding (resp. decoding) is supported. |
9181577c | 1144 | |
4c5f7207 DB |
1145 | @code{I} means that an integer-only version is available, too (ensures high |
1146 | performance on systems without hardware floating point support). | |
9181577c | 1147 | |
47d944d2 FB |
1148 | @chapter Platform Specific information |
1149 | ||
47d944d2 FB |
1150 | @section BSD |
1151 | ||
21d1cb12 DB |
1152 | BSD make will not build FFmpeg, you need to install and use GNU Make |
1153 | (@file{gmake}). | |
1154 | ||
47d944d2 FB |
1155 | @section Windows |
1156 | ||
e2ef53fc DB |
1157 | To get help and instructions for using FFmpeg under Windows, check out |
1158 | the FFmpeg Windows Help Forum at | |
1159 | @url{http://arrozcru.no-ip.org/ffmpeg/}. | |
1160 | ||
b030b284 FB |
1161 | @subsection Native Windows compilation |
1162 | ||
1163 | @itemize | |
1164 | @item Install the current versions of MSYS and MinGW from | |
1165 | @url{http://www.mingw.org/}. You can find detailed installation | |
1166 | instructions in the download section and the FAQ. | |
1167 | ||
f2d64c19 AB |
1168 | NOTE: Use at least bash 3.1. Older versions are known to be failing on the |
1169 | configure script. | |
1170 | ||
4c5f7207 | 1171 | @item If you want to test the FFplay, also download |
50f52fcd FB |
1172 | the MinGW development library of SDL 1.2.x |
1173 | (@file{SDL-devel-1.2.x-mingw32.tar.gz}) from | |
4c5f7207 | 1174 | @url{http://www.libsdl.org}. Unpack it in a temporary directory, and |
50f52fcd | 1175 | unpack the archive @file{i386-mingw32msvc.tar.gz} in the MinGW tool |
988a9f9e FB |
1176 | directory. Edit the @file{sdl-config} script so that it gives the |
1177 | correct SDL directory when invoked. | |
50f52fcd | 1178 | |
e926e391 | 1179 | @item Extract the current version of FFmpeg. |
115329f1 | 1180 | |
b030b284 FB |
1181 | @item Start the MSYS shell (file @file{msys.bat}). |
1182 | ||
4c5f7207 DB |
1183 | @item Change to the FFmpeg directory and follow |
1184 | the instructions of how to compile FFmpeg (file | |
50f52fcd FB |
1185 | @file{INSTALL}). Usually, launching @file{./configure} and @file{make} |
1186 | suffices. If you have problems using SDL, verify that | |
1187 | @file{sdl-config} can be launched from the MSYS command line. | |
1188 | ||
4c5f7207 | 1189 | @item You can install FFmpeg in @file{Program Files/FFmpeg} by typing |
ce10ff8e | 1190 | @file{make install}. Do not forget to copy @file{SDL.dll} to the place |
4c5f7207 | 1191 | you launch @file{ffplay} from. |
50f52fcd | 1192 | |
b030b284 FB |
1193 | @end itemize |
1194 | ||
115329f1 | 1195 | Notes: |
988a9f9e | 1196 | @itemize |
50f52fcd | 1197 | |
988a9f9e FB |
1198 | @item The target @file{make wininstaller} can be used to create a |
1199 | Nullsoft based Windows installer for FFmpeg and FFplay. @file{SDL.dll} | |
4c5f7207 | 1200 | must be copied to the FFmpeg directory in order to build the |
988a9f9e FB |
1201 | installer. |
1202 | ||
4c5f7207 | 1203 | @item By using @code{./configure --enable-shared} when configuring FFmpeg, |
988a9f9e FB |
1204 | you can build @file{avcodec.dll} and @file{avformat.dll}. With |
1205 | @code{make install} you install the FFmpeg DLLs and the associated | |
115329f1 | 1206 | headers in @file{Program Files/FFmpeg}. |
988a9f9e | 1207 | |
4c5f7207 DB |
1208 | @item Visual C++ compatibility: If you used @code{./configure --enable-shared} |
1209 | when configuring FFmpeg, FFmpeg tries to use the Microsoft Visual | |
988a9f9e | 1210 | C++ @code{lib} tool to build @code{avcodec.lib} and |
4c5f7207 | 1211 | @code{avformat.lib}. With these libraries you can link your Visual C++ |
be0efc0c | 1212 | code directly with the FFmpeg DLLs (see below). |
988a9f9e FB |
1213 | |
1214 | @end itemize | |
b030b284 | 1215 | |
be0efc0c MB |
1216 | @subsection Visual C++ compatibility |
1217 | ||
1218 | FFmpeg will not compile under Visual C++ -- and it has too many | |
1219 | dependencies on the GCC compiler to make a port viable. However, | |
1220 | if you want to use the FFmpeg libraries in your own applications, | |
1221 | you can still compile those applications using Visual C++. An | |
1222 | important restriction to this is that you have to use the | |
1223 | dynamically linked versions of the FFmpeg libraries (i.e. the | |
1224 | DLLs), and you have to make sure that Visual-C++-compatible | |
1225 | import libraries are created during the FFmpeg build process. | |
1226 | ||
1227 | This description of how to use the FFmpeg libraries with Visual C++ is | |
1228 | based on Visual C++ 2005 Express Edition Beta 2. If you have a different | |
1229 | version, you might have to modify the procedures slightly. | |
1230 | ||
1231 | Here are the step-by-step instructions for building the FFmpeg libraries | |
1232 | so they can be used with Visual C++: | |
1233 | ||
1234 | @enumerate | |
1235 | ||
ce10ff8e | 1236 | @item Install Visual C++ (if you have not done so already). |
be0efc0c MB |
1237 | |
1238 | @item Install MinGW and MSYS as described above. | |
1239 | ||
1240 | @item Add a call to @file{vcvars32.bat} (which sets up the environment | |
1241 | variables for the Visual C++ tools) as the first line of | |
1242 | @file{msys.bat}. The standard location for @file{vcvars32.bat} is | |
1243 | @file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat}, | |
1244 | and the standard location for @file{msys.bat} is | |
1245 | @file{C:\msys\1.0\msys.bat}. If this corresponds to your setup, add the | |
1246 | following line as the first line of @file{msys.bat}: | |
1247 | ||
1248 | @code{call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"} | |
1249 | ||
1250 | @item Start the MSYS shell (file @file{msys.bat}) and type @code{link.exe}. | |
1251 | If you get a help message with the command line options of @code{link.exe}, | |
1252 | this means your environment variables are set up correctly, the | |
1253 | Microsoft linker is on the path and will be used by FFmpeg to | |
1254 | create Visual-C++-compatible import libraries. | |
1255 | ||
e926e391 | 1256 | @item Extract the current version of FFmpeg and change to the FFmpeg directory. |
be0efc0c MB |
1257 | |
1258 | @item Type the command | |
51d8321d | 1259 | @code{./configure --enable-shared --disable-static --enable-memalign-hack} |
ce10ff8e | 1260 | to configure and, if that did not produce any errors, |
51d8321d | 1261 | type @code{make} to build FFmpeg. |
be0efc0c MB |
1262 | |
1263 | @item The subdirectories @file{libavformat}, @file{libavcodec}, and | |
1264 | @file{libavutil} should now contain the files @file{avformat.dll}, | |
1265 | @file{avformat.lib}, @file{avcodec.dll}, @file{avcodec.lib}, | |
1266 | @file{avutil.dll}, and @file{avutil.lib}, respectively. Copy the three | |
1267 | DLLs to your System32 directory (typically @file{C:\Windows\System32}). | |
1268 | ||
1269 | @end enumerate | |
1270 | ||
1271 | And here is how to use these libraries with Visual C++: | |
1272 | ||
1273 | @enumerate | |
1274 | ||
1275 | @item Create a new console application ("File / New / Project") and then | |
1276 | select "Win32 Console Application". On the appropriate page of the | |
1277 | Application Wizard, uncheck the "Precompiled headers" option. | |
1278 | ||
1279 | @item Write the source code for your application, or, for testing, just | |
1280 | copy the code from an existing sample application into the source file | |
1281 | that Visual C++ has already created for you. (Note that your source | |
ce10ff8e DB |
1282 | filehas to have a @code{.cpp} extension; otherwise, Visual C++ will not |
1283 | compile the FFmpeg headers correctly because in C mode, it does not | |
be0efc0c MB |
1284 | recognize the @code{inline} keyword.) For example, you can copy |
1285 | @file{output_example.c} from the FFmpeg distribution (but you will | |
1286 | have to make minor modifications so the code will compile under | |
1287 | C++, see below). | |
1288 | ||
1289 | @item Open the "Project / Properties" dialog box. In the "Configuration" | |
1290 | combo box, select "All Configurations" so that the changes you make will | |
1291 | affect both debug and release builds. In the tree view on the left hand | |
1292 | side, select "C/C++ / General", then edit the "Additional Include | |
1293 | Directories" setting to contain the complete paths to the | |
1294 | @file{libavformat}, @file{libavcodec}, and @file{libavutil} | |
1295 | subdirectories of your FFmpeg directory. Note that the directories have | |
1296 | to be separated using semicolons. Now select "Linker / General" from the | |
1297 | tree view and edit the "Additional Library Directories" setting to | |
1298 | contain the same three directories. | |
1299 | ||
1300 | @item Still in the "Project / Properties" dialog box, select "Linker / Input" | |
1301 | from the tree view, then add the files @file{avformat.lib}, | |
1302 | @file{avcodec.lib}, and @file{avutil.lib} to the end of the "Additional | |
1303 | Dependencies". Note that the names of the libraries have to be separated | |
1304 | using spaces. | |
1305 | ||
765c3440 | 1306 | @item Now, select "C/C++ / Code Generation" from the tree view. Select |
be0efc0c MB |
1307 | "Debug" in the "Configuration" combo box. Make sure that "Runtime |
1308 | Library" is set to "Multi-threaded Debug DLL". Then, select "Release" in | |
1309 | the "Configuration" combo box and make sure that "Runtime Library" is | |
1310 | set to "Multi-threaded DLL". | |
1311 | ||
1312 | @item Click "OK" to close the "Project / Properties" dialog box and build | |
1313 | the application. Hopefully, it should compile and run cleanly. If you | |
1314 | used @file{output_example.c} as your sample application, you will get a | |
1315 | few compiler errors, but they are easy to fix. The first type of error | |
ce10ff8e | 1316 | occurs because Visual C++ does not allow an @code{int} to be converted to |
be0efc0c MB |
1317 | an @code{enum} without a cast. To solve the problem, insert the required |
1318 | casts (this error occurs once for a @code{CodecID} and once for a | |
1319 | @code{CodecType}). The second type of error occurs because C++ requires | |
1320 | the return value of @code{malloc} to be cast to the exact type of the | |
1321 | pointer it is being assigned to. Visual C++ will complain that, for | |
1322 | example, @code{(void *)} is being assigned to @code{(uint8_t *)} without | |
1323 | an explicit cast. So insert an explicit cast in these places to silence | |
1324 | the compiler. The third type of error occurs because the @code{snprintf} | |
1325 | library function is called @code{_snprintf} under Visual C++. So just | |
1326 | add an underscore to fix the problem. With these changes, | |
1327 | @file{output_example.c} should compile under Visual C++, and the | |
1328 | resulting executable should produce valid video files. | |
1329 | ||
1330 | @end enumerate | |
1331 | ||
b030b284 FB |
1332 | @subsection Cross compilation for Windows with Linux |
1333 | ||
1334 | You must use the MinGW cross compilation tools available at | |
1335 | @url{http://www.mingw.org/}. | |
1336 | ||
4c5f7207 | 1337 | Then configure FFmpeg with the following options: |
b030b284 | 1338 | @example |
6b74787b | 1339 | ./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc- |
b030b284 | 1340 | @end example |
019c8838 | 1341 | (you can change the cross-prefix according to the prefix chosen for the |
b030b284 FB |
1342 | MinGW tools). |
1343 | ||
4c5f7207 | 1344 | Then you can easily test FFmpeg with Wine |
b030b284 FB |
1345 | (@url{http://www.winehq.com/}). |
1346 | ||
30aee296 DB |
1347 | @subsection Compilation under Cygwin |
1348 | ||
1349 | Cygwin works very much like Unix. | |
1350 | ||
1351 | Just install your Cygwin with all the "Base" packages, plus the | |
1352 | following "Devel" ones: | |
1353 | @example | |
1354 | binutils, gcc-core, make, subversion | |
1355 | @end example | |
1356 | ||
1357 | Do not install binutils-20060709-1 (they are buggy on shared builds); | |
1358 | use binutils-20050610-1 instead. | |
1359 | ||
1360 | Then run | |
1361 | ||
1362 | @example | |
1363 | ./configure --enable-static --disable-shared | |
1364 | @end example | |
1365 | ||
1366 | to make a static build or | |
1367 | ||
1368 | @example | |
1369 | ./configure --enable-shared --disable-static | |
1370 | @end example | |
1371 | ||
1372 | to build shared libraries. | |
1373 | ||
1374 | If you want to build FFmpeg with additional libraries, download Cygwin | |
1375 | "Devel" packages for Ogg and Vorbis from any Cygwin packages repository | |
1376 | and/or SDL, xvid, faac, faad2 packages from Cygwin Ports, | |
1377 | (@url{http://cygwinports.dotsrc.org/}). | |
1378 | ||
1379 | @subsection Crosscompilation for Windows under Cygwin | |
1380 | ||
ce10ff8e | 1381 | With Cygwin you can create Windows binaries that do not need the cygwin1.dll. |
30aee296 DB |
1382 | |
1383 | Just install your Cygwin as explained before, plus these additional | |
1384 | "Devel" packages: | |
1385 | @example | |
1386 | gcc-mingw-core, mingw-runtime, mingw-zlib | |
1387 | @end example | |
1388 | ||
1389 | and add some special flags to your configure invocation. | |
1390 | ||
1391 | For a static build run | |
1392 | @example | |
6b74787b | 1393 | ./configure --target-os=mingw32 --enable-memalign-hack --enable-static --disable-shared --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin |
30aee296 DB |
1394 | @end example |
1395 | ||
1396 | and for a build with shared libraries | |
1397 | @example | |
6b74787b | 1398 | ./configure --target-os=mingw32 --enable-memalign-hack --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin |
30aee296 DB |
1399 | @end example |
1400 | ||
47d944d2 FB |
1401 | @section BeOS |
1402 | ||
1403 | The configure script should guess the configuration itself. | |
1404 | Networking support is currently not finished. | |
1405 | errno issues fixed by Andrew Bachmann. | |
1406 | ||
1407 | Old stuff: | |
1408 | ||
7dd611c9 | 1409 | François Revol - revol at free dot fr - April 2002 |
47d944d2 | 1410 | |
115329f1 | 1411 | The configure script should guess the configuration itself, |
ce10ff8e | 1412 | however I still did not test building on the net_server version of BeOS. |
47d944d2 | 1413 | |
4c5f7207 | 1414 | FFserver is broken (needs poll() implementation). |
47d944d2 | 1415 | |
4c5f7207 | 1416 | There are still issues with errno codes, which are negative in BeOS, and |
115329f1 | 1417 | that FFmpeg negates when returning. This ends up turning errors into |
47d944d2 FB |
1418 | valid results, then crashes. |
1419 | (To be fixed) | |
1420 | ||
34d7008d | 1421 | @chapter Developers Guide |
9181577c FB |
1422 | |
1423 | @section API | |
a0b72f90 | 1424 | @itemize @bullet |
9181577c | 1425 | @item libavcodec is the library containing the codecs (both encoding and |
4c5f7207 | 1426 | decoding). Look at @file{libavcodec/apiexample.c} to see how to use it. |
9181577c | 1427 | |
4c5f7207 DB |
1428 | @item libavformat is the library containing the file format handling (mux and |
1429 | demux code for several formats). Look at @file{ffplay.c} to use it in a | |
a93b9dba FB |
1430 | player. See @file{output_example.c} to use it to generate audio or video |
1431 | streams. | |
1432 | ||
9181577c FB |
1433 | @end itemize |
1434 | ||
1435 | @section Integrating libavcodec or libavformat in your program | |
1436 | ||
1437 | You can integrate all the source code of the libraries to link them | |
1438 | statically to avoid any version problem. All you need is to provide a | |
1439 | 'config.mak' and a 'config.h' in the parent directory. See the defines | |
1440 | generated by ./configure to understand what is needed. | |
1441 | ||
1442 | You can use libavcodec or libavformat in your commercial program, but | |
1443 | @emph{any patch you make must be published}. The best way to proceed is | |
4c5f7207 | 1444 | to send your patches to the FFmpeg mailing list. |
9181577c | 1445 | |
80d1c272 | 1446 | @node Coding Rules |
9181577c FB |
1447 | @section Coding Rules |
1448 | ||
4c5f7207 | 1449 | FFmpeg is programmed in the ISO C90 language with a few additional |
cb6e87c1 FH |
1450 | features from ISO C99, namely: |
1451 | @itemize @bullet | |
1452 | @item | |
1453 | the @samp{inline} keyword; | |
1454 | @item | |
1455 | @samp{//} comments; | |
1456 | @item | |
1457 | designated struct initializers (@samp{struct s x = @{ .i = 17 @};}) | |
1458 | @item | |
114afa9c | 1459 | compound literals (@samp{x = (struct s) @{ 17, 23 @};}) |
cb6e87c1 FH |
1460 | @end itemize |
1461 | ||
ce10ff8e DB |
1462 | These features are supported by all compilers we care about, so we will not |
1463 | accept patches to remove their use unless they absolutely do not impair | |
cb6e87c1 FH |
1464 | clarity and performance. |
1465 | ||
4c5f7207 | 1466 | All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also |
cb6e87c1 FH |
1467 | compiles with several other compilers, such as the Compaq ccc compiler |
1468 | or Sun Studio 9, and we would like to keep it that way unless it would | |
ce10ff8e | 1469 | be exceedingly involved. To ensure compatibility, please do not use any |
4c5f7207 | 1470 | additional C99 features or GCC extensions. Especially watch out for: |
cb6e87c1 FH |
1471 | @itemize @bullet |
1472 | @item | |
1473 | mixing statements and declarations; | |
1474 | @item | |
1475 | @samp{long long} (use @samp{int64_t} instead); | |
1476 | @item | |
1477 | @samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar; | |
1478 | @item | |
019c8838 | 1479 | GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}). |
cb6e87c1 | 1480 | @end itemize |
9181577c | 1481 | |
53862e0f | 1482 | Indent size is 4. |
b86e38a0 | 1483 | The presentation is the one specified by 'indent -i4 -kr -nut'. |
53862e0f DB |
1484 | The TAB character is forbidden outside of Makefiles as is any |
1485 | form of trailing whitespace. Commits containing either will be | |
1c1b5a40 | 1486 | rejected by the Subversion repository. |
9181577c | 1487 | |
4c5f7207 | 1488 | Main priority in FFmpeg is simplicity and small code size (=less |
9181577c FB |
1489 | bugs). |
1490 | ||
4c5f7207 DB |
1491 | Comments: Use the JavaDoc/Doxygen |
1492 | format (see examples below) so that code documentation | |
1493 | can be generated automatically. All nontrivial functions should have a comment | |
ce10ff8e | 1494 | above them explaining what the function does, even if it is just one sentence. |
4c5f7207 | 1495 | All structures and their member variables should be documented, too. |
f4888b83 MN |
1496 | @example |
1497 | /** | |
2185824b MR |
1498 | * @@file mpeg.c |
1499 | * MPEG codec. | |
1500 | * @@author ... | |
1501 | */ | |
f4888b83 MN |
1502 | |
1503 | /** | |
2185824b MR |
1504 | * Summary sentence. |
1505 | * more text ... | |
1506 | * ... | |
1507 | */ | |
114afa9c | 1508 | typedef struct Foobar@{ |
2185824b MR |
1509 | int var1; /**< var1 description */ |
1510 | int var2; ///< var2 description | |
1511 | /** var3 description */ | |
1512 | int var3; | |
114afa9c | 1513 | @} Foobar; |
f4888b83 MN |
1514 | |
1515 | /** | |
2185824b MR |
1516 | * Summary sentence. |
1517 | * more text ... | |
1518 | * ... | |
1519 | * @@param my_parameter description of my_parameter | |
1520 | * @@return return value description | |
1521 | */ | |
f4888b83 MN |
1522 | int myfunc(int my_parameter) |
1523 | ... | |
1524 | @end example | |
9181577c | 1525 | |
115329f1 | 1526 | fprintf and printf are forbidden in libavformat and libavcodec, |
36d9b4e8 MN |
1527 | please use av_log() instead. |
1528 | ||
1c1b5a40 | 1529 | @section Development Policy |
7a57b90c MN |
1530 | |
1531 | @enumerate | |
115329f1 | 1532 | @item |
7a57b90c | 1533 | You must not commit code which breaks FFmpeg! (Meaning unfinished but |
4c5f7207 | 1534 | enabled code which breaks compilation or compiles but does not work or |
7a57b90c MN |
1535 | breaks the regression tests) |
1536 | You can commit unfinished stuff (for testing etc), but it must be disabled | |
1537 | (#ifdef etc) by default so it does not interfere with other developers' | |
1538 | work. | |
115329f1 | 1539 | @item |
ce10ff8e | 1540 | You do not have to over-test things. If it works for you, and you think it |
4c5f7207 DB |
1541 | should work for others, then commit. If your code has problems |
1542 | (portability, triggers compiler bugs, unusual environment etc) they will be | |
7a57b90c | 1543 | reported and eventually fixed. |
115329f1 | 1544 | @item |
7a57b90c | 1545 | Do not commit unrelated changes together, split them into self-contained |
ce10ff8e DB |
1546 | pieces. Also do not forget that if part B depends on part A, but A does not |
1547 | depend on B, then A can and should be committed first and separate from B. | |
1548 | Keeping changes well split into self-contained parts makes reviewing and | |
1549 | understanding them on the commit log mailing list easier. This also helps | |
1550 | in case of debugging later on. | |
1551 | Also if you have doubts about splitting or not splitting, do not hesitate to | |
442d1598 | 1552 | ask/discuss it on the developer mailing list. |
7a57b90c MN |
1553 | @item |
1554 | Do not change behavior of the program (renaming options etc) without | |
019c8838 | 1555 | first discussing it on the ffmpeg-devel mailing list. Do not remove |
7a57b90c | 1556 | functionality from the code. Just improve! |
115329f1 | 1557 | |
4c5f7207 | 1558 | Note: Redundant code can be removed. |
7a57b90c MN |
1559 | @item |
1560 | Do not commit changes to the build system (Makefiles, configure script) | |
019c8838 | 1561 | which change behavior, defaults etc, without asking first. The same |
7a57b90c MN |
1562 | applies to compiler warning fixes, trivial looking fixes and to code |
1563 | maintained by other developers. We usually have a reason for doing things | |
019c8838 | 1564 | the way we do. Send your changes as patches to the ffmpeg-devel mailing |
7a57b90c MN |
1565 | list, and if the code maintainers say OK, you may commit. This does not |
1566 | apply to files you wrote and/or maintain. | |
1567 | @item | |
1568 | We refuse source indentation and other cosmetic changes if they are mixed | |
1569 | with functional changes, such commits will be rejected and removed. Every | |
1570 | developer has his own indentation style, you should not change it. Of course | |
1571 | if you (re)write something, you can use your own style, even though we would | |
4c5f7207 | 1572 | prefer if the indentation throughout FFmpeg was consistent (Many projects |
ce10ff8e | 1573 | force a given indentation style - we do not.). If you really need to make |
7a57b90c MN |
1574 | indentation changes (try to avoid this), separate them strictly from real |
1575 | changes. | |
1576 | ||
114afa9c | 1577 | NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code, |
ce10ff8e | 1578 | then either do NOT change the indentation of the inner part within (do not |
019c8838 | 1579 | move it to the right)! or do so in a separate commit |
7a57b90c MN |
1580 | @item |
1581 | Always fill out the commit log message. Describe in a few lines what you | |
1582 | changed and why. You can refer to mailing list postings if you fix a | |
1583 | particular bug. Comments such as "fixed!" or "Changed it." are unacceptable. | |
1584 | @item | |
1585 | If you apply a patch by someone else, include the name and email address in | |
1c1b5a40 | 1586 | the log message. Since the ffmpeg-cvslog mailing list is publicly |
019c8838 DB |
1587 | archived you should add some SPAM protection to the email address. Send an |
1588 | answer to ffmpeg-devel (or wherever you got the patch from) saying that | |
7a57b90c MN |
1589 | you applied the patch. |
1590 | @item | |
b092d033 BF |
1591 | When applying patches that have been discussed (at length) on the mailing |
1592 | list, reference the thread in the log message. | |
1593 | @item | |
5ab0f204 DB |
1594 | Do NOT commit to code actively maintained by others without permission. |
1595 | Send a patch to ffmpeg-devel instead. If noone answers within a reasonable | |
1596 | timeframe (12h for build failures and security fixes, 3 days small changes, | |
ce10ff8e | 1597 | 1 week for big patches) then commit your patch if you think it is OK. |
5ab0f204 | 1598 | Also note, the maintainer can simply ask for more time to review! |
7a57b90c | 1599 | @item |
1c1b5a40 | 1600 | Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits |
7a57b90c MN |
1601 | are sent there and reviewed by all the other developers. Bugs and possible |
1602 | improvements or general questions regarding commits are discussed there. We | |
1603 | expect you to react if problems with your code are uncovered. | |
1604 | @item | |
1605 | Update the documentation if you change behavior or add features. If you are | |
019c8838 | 1606 | unsure how best to do this, send a patch to ffmpeg-devel, the documentation |
7a57b90c MN |
1607 | maintainer(s) will review and commit your stuff. |
1608 | @item | |
0541f2c4 MN |
1609 | Try to keep important discussions and requests (also) on the public |
1610 | developer mailing list, so that all developers can benefit from them. | |
1611 | @item | |
4c5f7207 DB |
1612 | Never write to unallocated memory, never write over the end of arrays, |
1613 | always check values read from some untrusted source before using them | |
1614 | as array index or other risky things. | |
76bec1d8 AS |
1615 | @item |
1616 | Remember to check if you need to bump versions for the specific libav | |
f0efbde7 | 1617 | parts (libavutil, libavcodec, libavformat) you are changing. You need |
76bec1d8 AS |
1618 | to change the version integer and the version string. |
1619 | Incrementing the first component means no backward compatibility to | |
a940b428 | 1620 | previous versions (e.g. removal of a function from the public API). |
76bec1d8 | 1621 | Incrementing the second component means backward compatible change |
a940b428 | 1622 | (e.g. addition of a function to the public API). |
76bec1d8 AS |
1623 | Incrementing the third component means a noteworthy binary compatible |
1624 | change (e.g. encoder bug fix that matters for the decoder). | |
ebd32fd7 | 1625 | @item |
3f1965c4 DB |
1626 | If you add a new codec, remember to update the changelog, add it to |
1627 | the supported codecs table in the documentation and bump the second | |
1628 | component of the @file{libavcodec} version number appropriately. If | |
1629 | it has a fourcc, add it to @file{libavformat/avienc.c}, even if it | |
1630 | is only a decoder. | |
65d0bea8 | 1631 | @item |
ce10ff8e DB |
1632 | Do not change code to hide warnings without ensuring that the underlying |
1633 | logic is correct and thus the warning was inappropriate. | |
bca098f5 DB |
1634 | @item |
1635 | If you add a new file, give it a proper license header. Do not copy and | |
1636 | paste it from a random place, use an existing file as template. | |
114afa9c | 1637 | @end enumerate |
7a57b90c MN |
1638 | |
1639 | We think our rules are not too hard. If you have comments, contact us. | |
1640 | ||
1641 | Note, these rules are mostly borrowed from the MPlayer project. | |
1642 | ||
9181577c FB |
1643 | @section Submitting patches |
1644 | ||
ce10ff8e | 1645 | First, (@pxref{Coding Rules}) above if you did not yet. |
80d1c272 | 1646 | |
6a6810b1 | 1647 | When you submit your patch, try to send a unified diff (diff '-up' |
9181577c FB |
1648 | option). I cannot read other diffs :-) |
1649 | ||
6e5c1877 | 1650 | Also please do not submit patches which contain several unrelated changes. |
115329f1 | 1651 | Split them into individual self-contained patches; this makes reviewing |
7885603a MN |
1652 | them much easier. |
1653 | ||
9181577c | 1654 | Run the regression tests before submitting a patch so that you can |
6bf40f39 | 1655 | verify that there are no big problems. |
9181577c | 1656 | |
9181577c | 1657 | Patches should be posted as base64 encoded attachments (or any other |
ce10ff8e | 1658 | encoding which ensures that the patch will not be trashed during |
115329f1 | 1659 | transmission) to the ffmpeg-devel mailing list, see |
2b165e29 | 1660 | @url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel} |
9181577c | 1661 | |
54fcf429 | 1662 | It also helps quite a bit if you tell us what the patch does (for example |
4c5f7207 | 1663 | 'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant |
54fcf429 MN |
1664 | and has no lrint()') |
1665 | ||
442d1598 RD |
1666 | Also please if you send several patches, send each patch as separate mail, |
1667 | do not attach several unrelated patches to the same mail. | |
a15bcf70 | 1668 | |
dd597cd7 MN |
1669 | @section patch submission checklist |
1670 | ||
1671 | @enumerate | |
1672 | @item | |
1673 | Do the regression tests pass with the patch applied? | |
1674 | @item | |
1675 | Is the patch a unified diff? | |
1676 | @item | |
4a7a0908 | 1677 | Is the patch against latest FFmpeg SVN? |
dd597cd7 MN |
1678 | @item |
1679 | Are you subscribed to ffmpeg-dev? | |
1680 | (the list is subscribers only due to spam) | |
1681 | @item | |
1682 | Have you checked that the changes are minimal, so that the same cannot be | |
442d1598 | 1683 | achieved with a smaller patch and/or simpler final code? |
dd597cd7 | 1684 | @item |
4a7a0908 | 1685 | If the change is to speed critical code, did you benchmark it? |
dd597cd7 | 1686 | @item |
b0fee7c5 DB |
1687 | If you did any benchmarks, did you provide them in the mail? |
1688 | @item | |
442d1598 | 1689 | Have you checked that the patch does not introduce buffer overflows or |
dd597cd7 MN |
1690 | other security issues? |
1691 | @item | |
4a7a0908 DB |
1692 | Is the patch created from the root of the source tree, so it can be |
1693 | applied with @code{patch -p0}? | |
dd597cd7 MN |
1694 | @item |
1695 | Does the patch not mix functional and cosmetic changes? | |
1696 | @item | |
e300ab4e DB |
1697 | Did you add tabs or trailing whitespace to the code? Both are forbidden. |
1698 | @item | |
dd597cd7 MN |
1699 | Is the patch attached to the email you send? |
1700 | @item | |
4a7a0908 DB |
1701 | Is the mime type of the patch correct? It should be text/x-diff or |
1702 | text/x-patch or at least text/plain and not application/octet-stream. | |
dd597cd7 | 1703 | @item |
4a7a0908 | 1704 | If the patch fixes a bug, did you provide a verbose analysis of the bug? |
dd597cd7 | 1705 | @item |
4a7a0908 | 1706 | If the patch fixes a bug, did you provide enough information, including |
dd597cd7 MN |
1707 | a sample, so the bug can be reproduced and the fix can be verified? |
1708 | @item | |
1709 | Did you provide a verbose summary about what the patch does change? | |
1710 | @item | |
1711 | Did you provide a verbose explanation why it changes things like it does? | |
1712 | @item | |
442d1598 | 1713 | Did you provide a verbose summary of the user visible advantages and |
dd597cd7 MN |
1714 | disadvantages if the patch is applied? |
1715 | @item | |
1716 | Did you provide an example so we can verify the new feature added by the | |
1717 | patch easily? | |
1718 | @item | |
bbe94afb | 1719 | If you added a new file, did you insert a license header? It should be |
6baa2943 | 1720 | taken from FFmpeg, not randomly copied and pasted from somewhere else. |
6e4bc6ee | 1721 | @item |
d9a3c855 MN |
1722 | You should maintain alphabetical order in alphabetically ordered lists as |
1723 | long as doing so does not break API/ABI compatibility. | |
2f954ef2 MN |
1724 | @item |
1725 | Did you provide a suggestion for a clear commit log message? | |
dd597cd7 MN |
1726 | @end enumerate |
1727 | ||
f5f11d71 MN |
1728 | @section Patch review process |
1729 | ||
1730 | All patches posted to ffmpeg-devel will be reviewed, unless they contain a | |
1731 | clear note that the patch is not for SVN. | |
1732 | Reviews and comments will be posted as replies to the patch on the | |
ce10ff8e | 1733 | mailing list. The patch submitter then has to take care of every comment, |
442d1598 | 1734 | that can be by resubmitting a changed patch or by discussion. Resubmitted |
ce10ff8e | 1735 | patches will themselves be reviewed like any other patch. If at some point |
f5f11d71 | 1736 | a patch passes review with no comments then it is approved, that can for |
ce10ff8e | 1737 | simple and small patches happen immediately while large patches will generally |
f5f11d71 | 1738 | have to be changed and reviewed many times before they are approved. |
ce10ff8e | 1739 | After a patch is approved it will be committed to the repository. |
f5f11d71 MN |
1740 | |
1741 | We will review all submitted patches, but sometimes we are quite busy so | |
1742 | especially for large patches this can take several weeks. | |
1743 | ||
1744 | When resubmitting patches, please do not make any significant changes | |
ce10ff8e DB |
1745 | not related to the comments received during review. Such patches will |
1746 | be rejected. Instead, submit significant changes or new features as | |
1747 | separate patches. | |
cf7f2b16 | 1748 | |
9181577c FB |
1749 | @section Regression tests |
1750 | ||
1c1b5a40 | 1751 | Before submitting a patch (or committing to the repository), you should at least |
9181577c FB |
1752 | test that you did not break anything. |
1753 | ||
4c5f7207 DB |
1754 | The regression tests build a synthetic video stream and a synthetic |
1755 | audio stream. These are then encoded and decoded with all codecs or | |
9181577c | 1756 | formats. The CRC (or MD5) of each generated file is recorded in a |
4c5f7207 | 1757 | result file. A 'diff' is launched to compare the reference results and |
9181577c FB |
1758 | the result file. |
1759 | ||
4c5f7207 | 1760 | The regression tests then go on to test the FFserver code with a |
6bf40f39 PG |
1761 | limited set of streams. It is important that this step runs correctly |
1762 | as well. | |
1763 | ||
36d9b4e8 | 1764 | Run 'make test' to test all the codecs and formats. |
9181577c | 1765 | |
4c5f7207 | 1766 | Run 'make fulltest' to test all the codecs, formats and FFserver. |
9181577c | 1767 | |
4c5f7207 DB |
1768 | [Of course, some patches may change the results of the regression tests. In |
1769 | this case, the reference results of the regression tests shall be modified | |
9181577c FB |
1770 | accordingly]. |
1771 | ||
1772 | @bye |