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.
|
---|
15 |
|
---|
16 | The command line interface is designed to be intuitive, in the sense
|
---|
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.
|
---|
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 |
|
---|
26 | @c man begin EXAMPLES
|
---|
27 | @section Video and Audio grabbing
|
---|
28 |
|
---|
29 | FFmpeg can use a video4linux compatible video source and any Open Sound
|
---|
30 | System audio source:
|
---|
31 |
|
---|
32 | @example
|
---|
33 | ffmpeg /tmp/out.mpg
|
---|
34 | @end example
|
---|
35 |
|
---|
36 | Note that you must activate the right video source and channel before
|
---|
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
|
---|
40 | standard mixer.
|
---|
41 |
|
---|
42 | @section Video and Audio file format conversion
|
---|
43 |
|
---|
44 | * FFmpeg can use any supported file format and protocol as input:
|
---|
45 |
|
---|
46 | Examples:
|
---|
47 |
|
---|
48 | * You can use YUV files as input:
|
---|
49 |
|
---|
50 | @example
|
---|
51 | ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
|
---|
52 | @end example
|
---|
53 |
|
---|
54 | It will use the files:
|
---|
55 | @example
|
---|
56 | /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
|
---|
57 | /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
|
---|
58 | @end example
|
---|
59 |
|
---|
60 | The Y files use twice the resolution of the U and V files. They are
|
---|
61 | raw files, without header. They can be generated by all decent video
|
---|
62 | decoders. You must specify the size of the image with the @option{-s} option
|
---|
63 | if FFmpeg cannot guess it.
|
---|
64 |
|
---|
65 | * You can input from a raw YUV420P file:
|
---|
66 |
|
---|
67 | @example
|
---|
68 | ffmpeg -i /tmp/test.yuv /tmp/out.avi
|
---|
69 | @end example
|
---|
70 |
|
---|
71 | test.yuv is a file containing raw YUV planar data. Each frame is composed
|
---|
72 | of the Y plane followed by the U and V planes at half vertical and
|
---|
73 | horizontal resolution.
|
---|
74 |
|
---|
75 | * You can output to a raw YUV420P file:
|
---|
76 |
|
---|
77 | @example
|
---|
78 | ffmpeg -i mydivx.avi hugefile.yuv
|
---|
79 | @end example
|
---|
80 |
|
---|
81 | * You can set several input files and output files:
|
---|
82 |
|
---|
83 | @example
|
---|
84 | ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
|
---|
85 | @end example
|
---|
86 |
|
---|
87 | Converts the audio file a.wav and the raw YUV video file a.yuv
|
---|
88 | to MPEG file a.mpg.
|
---|
89 |
|
---|
90 | * You can also do audio and video conversions at the same time:
|
---|
91 |
|
---|
92 | @example
|
---|
93 | ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
|
---|
94 | @end example
|
---|
95 |
|
---|
96 | Converts a.wav to MPEG audio at 22050Hz sample rate.
|
---|
97 |
|
---|
98 | * You can encode to several formats at the same time and define a
|
---|
99 | mapping from input stream to output streams:
|
---|
100 |
|
---|
101 | @example
|
---|
102 | ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0
|
---|
103 | @end example
|
---|
104 |
|
---|
105 | Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. '-map
|
---|
106 | file:index' specifies which input stream is used for each output
|
---|
107 | stream, in the order of the definition of output streams.
|
---|
108 |
|
---|
109 | * You can transcode decrypted VOBs
|
---|
110 |
|
---|
111 | @example
|
---|
112 | ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi
|
---|
113 | @end example
|
---|
114 |
|
---|
115 | This is a typical DVD ripping example; the input is a VOB file, the
|
---|
116 | output an AVI file with MPEG-4 video and MP3 audio. Note that in this
|
---|
117 | command we use B-frames so the MPEG-4 stream is DivX5 compatible, and
|
---|
118 | GOP size is 300 which means one intra frame every 10 seconds for 29.97fps
|
---|
119 | input video. Furthermore, the audio stream is MP3-encoded so you need
|
---|
120 | to enable LAME support by passing @code{--enable-mp3lame} to configure.
|
---|
121 | The mapping is particularly useful for DVD transcoding
|
---|
122 | to get the desired audio language.
|
---|
123 |
|
---|
124 | NOTE: To see the supported input formats, use @code{ffmpeg -formats}.
|
---|
125 | @c man end
|
---|
126 |
|
---|
127 | @chapter Invocation
|
---|
128 |
|
---|
129 | @section Syntax
|
---|
130 |
|
---|
131 | The generic syntax is:
|
---|
132 |
|
---|
133 | @example
|
---|
134 | @c man begin SYNOPSIS
|
---|
135 | ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{outfile}@}...
|
---|
136 | @c man end
|
---|
137 | @end example
|
---|
138 | @c man begin DESCRIPTION
|
---|
139 | If no input file is given, audio/video grabbing is done.
|
---|
140 |
|
---|
141 | As a general rule, options are applied to the next specified
|
---|
142 | file. For example, if you give the @option{-b 64} option, it sets the video
|
---|
143 | bitrate of the next file. The format option may be needed for raw input
|
---|
144 | files.
|
---|
145 |
|
---|
146 | By default, FFmpeg tries to convert as losslessly as possible: It
|
---|
147 | uses the same audio and video parameters for the outputs as the one
|
---|
148 | specified for the inputs.
|
---|
149 | @c man end
|
---|
150 |
|
---|
151 | @c man begin OPTIONS
|
---|
152 | @section Main options
|
---|
153 |
|
---|
154 | @table @option
|
---|
155 | @item -L
|
---|
156 | Show license.
|
---|
157 |
|
---|
158 | @item -h
|
---|
159 | Show help.
|
---|
160 |
|
---|
161 | @item -formats
|
---|
162 | Show available formats, codecs, protocols, ...
|
---|
163 |
|
---|
164 | @item -f fmt
|
---|
165 | Force format.
|
---|
166 |
|
---|
167 | @item -i filename
|
---|
168 | input filename
|
---|
169 |
|
---|
170 | @item -y
|
---|
171 | Overwrite output files.
|
---|
172 |
|
---|
173 | @item -t duration
|
---|
174 | Set the recording time in seconds.
|
---|
175 | @code{hh:mm:ss[.xxx]} syntax is also supported.
|
---|
176 |
|
---|
177 | @item -ss position
|
---|
178 | Seek to given time position in seconds.
|
---|
179 | @code{hh:mm:ss[.xxx]} syntax is also supported.
|
---|
180 |
|
---|
181 | @item -title string
|
---|
182 | Set the title.
|
---|
183 |
|
---|
184 | @item -author string
|
---|
185 | Set the author.
|
---|
186 |
|
---|
187 | @item -copyright string
|
---|
188 | Set the copyright.
|
---|
189 |
|
---|
190 | @item -comment string
|
---|
191 | Set the comment.
|
---|
192 |
|
---|
193 | @item -target type
|
---|
194 | Specify target file type ("vcd", "svcd", "dvd", "dv", "pal-vcd",
|
---|
195 | "ntsc-svcd", ... ). All the format options (bitrate, codecs,
|
---|
196 | buffer sizes) are then set automatically. You can just type:
|
---|
197 |
|
---|
198 | @example
|
---|
199 | ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
|
---|
200 | @end example
|
---|
201 |
|
---|
202 | Nevertheless you can specify additional options as long as you know
|
---|
203 | they do not conflict with the standard, as in:
|
---|
204 |
|
---|
205 | @example
|
---|
206 | ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
|
---|
207 | @end example
|
---|
208 |
|
---|
209 | @item -hq
|
---|
210 | Activate high quality settings.
|
---|
211 |
|
---|
212 | @item -itsoffset offset
|
---|
213 | Set the input time offset in seconds.
|
---|
214 | @code{[-]hh:mm:ss[.xxx]} syntax is also supported.
|
---|
215 | This option affects all the input files that follow it.
|
---|
216 | The offset is added to the timestamps of the input files.
|
---|
217 | Specifying a positive offset means that the corresponding
|
---|
218 | streams are delayed by 'offset' seconds.
|
---|
219 |
|
---|
220 | @end table
|
---|
221 |
|
---|
222 | @section Video Options
|
---|
223 |
|
---|
224 | @table @option
|
---|
225 | @item -b bitrate
|
---|
226 | Set the video bitrate in kbit/s (default = 200 kb/s).
|
---|
227 | @item -r fps
|
---|
228 | Set frame rate (default = 25).
|
---|
229 | @item -s size
|
---|
230 | Set frame size. The format is @samp{wxh} (default = 160x128).
|
---|
231 | The following abbreviations are recognized:
|
---|
232 | @table @samp
|
---|
233 | @item sqcif
|
---|
234 | 128x96
|
---|
235 | @item qcif
|
---|
236 | 176x144
|
---|
237 | @item cif
|
---|
238 | 352x288
|
---|
239 | @item 4cif
|
---|
240 | 704x576
|
---|
241 | @end table
|
---|
242 |
|
---|
243 | @item -aspect aspect
|
---|
244 | Set aspect ratio (4:3, 16:9 or 1.3333, 1.7777).
|
---|
245 | @item -croptop size
|
---|
246 | Set top crop band size (in pixels).
|
---|
247 | @item -cropbottom size
|
---|
248 | Set bottom crop band size (in pixels).
|
---|
249 | @item -cropleft size
|
---|
250 | Set left crop band size (in pixels).
|
---|
251 | @item -cropright size
|
---|
252 | Set right crop band size (in pixels).
|
---|
253 | @item -padtop size
|
---|
254 | Set top pad band size (in pixels).
|
---|
255 | @item -padbottom size
|
---|
256 | Set bottom pad band size (in pixels).
|
---|
257 | @item -padleft size
|
---|
258 | Set left pad band size (in pixels).
|
---|
259 | @item -padright size
|
---|
260 | Set right pad band size (in pixels).
|
---|
261 | @item -padcolor (hex color)
|
---|
262 | Set color of padded bands. The value for padcolor is expressed
|
---|
263 | as a six digit hexadecimal number where the first two digits
|
---|
264 | represent red, the middle two digits green and last two digits
|
---|
265 | blue (default = 000000 (black)).
|
---|
266 | @item -vn
|
---|
267 | Disable video recording.
|
---|
268 | @item -bt tolerance
|
---|
269 | Set video bitrate tolerance (in kbit/s).
|
---|
270 | @item -maxrate bitrate
|
---|
271 | Set max video bitrate tolerance (in kbit/s).
|
---|
272 | @item -minrate bitrate
|
---|
273 | Set min video bitrate tolerance (in kbit/s).
|
---|
274 | @item -bufsize size
|
---|
275 | Set rate control buffer size (in kbit).
|
---|
276 | @item -vcodec codec
|
---|
277 | Force video codec to @var{codec}. Use the @code{copy} special value to
|
---|
278 | tell that the raw codec data must be copied as is.
|
---|
279 | @item -sameq
|
---|
280 | Use same video quality as source (implies VBR).
|
---|
281 |
|
---|
282 | @item -pass n
|
---|
283 | Select the pass number (1 or 2). It is useful to do two pass
|
---|
284 | encoding. The statistics of the video are recorded in the first
|
---|
285 | pass and the video is generated at the exact requested bitrate
|
---|
286 | in the second pass.
|
---|
287 |
|
---|
288 | @item -passlogfile file
|
---|
289 | Set two pass logfile name to @var{file}.
|
---|
290 |
|
---|
291 | @end table
|
---|
292 |
|
---|
293 | @section Advanced Video Options
|
---|
294 |
|
---|
295 | @table @option
|
---|
296 | @item -g gop_size
|
---|
297 | Set the group of pictures size.
|
---|
298 | @item -intra
|
---|
299 | Use only intra frames.
|
---|
300 | @item -qscale q
|
---|
301 | Use fixed video quantiser scale (VBR).
|
---|
302 | @item -qmin q
|
---|
303 | minimum video quantiser scale (VBR)
|
---|
304 | @item -qmax q
|
---|
305 | maximum video quantiser scale (VBR)
|
---|
306 | @item -qdiff q
|
---|
307 | maximum difference between the quantiser scales (VBR)
|
---|
308 | @item -qblur blur
|
---|
309 | video quantiser scale blur (VBR)
|
---|
310 | @item -qcomp compression
|
---|
311 | video quantiser scale compression (VBR)
|
---|
312 |
|
---|
313 | @item -rc_init_cplx complexity
|
---|
314 | initial complexity for single pass encoding
|
---|
315 | @item -b_qfactor factor
|
---|
316 | qp factor between P- and B-frames
|
---|
317 | @item -i_qfactor factor
|
---|
318 | qp factor between P- and I-frames
|
---|
319 | @item -b_qoffset offset
|
---|
320 | qp offset between P- and B-frames
|
---|
321 | @item -i_qoffset offset
|
---|
322 | qp offset between P- and I-frames
|
---|
323 | @item -rc_eq equation
|
---|
324 | Set rate control equation (@pxref{FFmpeg formula
|
---|
325 | evaluator}) (default = @code{tex^qComp}).
|
---|
326 | @item -rc_override override
|
---|
327 | rate control override for specific intervals
|
---|
328 | @item -me method
|
---|
329 | Set motion estimation method to @var{method}.
|
---|
330 | Available methods are (from lowest to best quality):
|
---|
331 | @table @samp
|
---|
332 | @item zero
|
---|
333 | Try just the (0, 0) vector.
|
---|
334 | @item phods
|
---|
335 | @item log
|
---|
336 | @item x1
|
---|
337 | @item epzs
|
---|
338 | (default method)
|
---|
339 | @item full
|
---|
340 | exhaustive search (slow and marginally better than epzs)
|
---|
341 | @end table
|
---|
342 |
|
---|
343 | @item -dct_algo algo
|
---|
344 | Set DCT algorithm to @var{algo}. Available values are:
|
---|
345 | @table @samp
|
---|
346 | @item 0
|
---|
347 | FF_DCT_AUTO (default)
|
---|
348 | @item 1
|
---|
349 | FF_DCT_FASTINT
|
---|
350 | @item 2
|
---|
351 | FF_DCT_INT
|
---|
352 | @item 3
|
---|
353 | FF_DCT_MMX
|
---|
354 | @item 4
|
---|
355 | FF_DCT_MLIB
|
---|
356 | @item 5
|
---|
357 | FF_DCT_ALTIVEC
|
---|
358 | @end table
|
---|
359 |
|
---|
360 | @item -idct_algo algo
|
---|
361 | Set IDCT algorithm to @var{algo}. Available values are:
|
---|
362 | @table @samp
|
---|
363 | @item 0
|
---|
364 | FF_IDCT_AUTO (default)
|
---|
365 | @item 1
|
---|
366 | FF_IDCT_INT
|
---|
367 | @item 2
|
---|
368 | FF_IDCT_SIMPLE
|
---|
369 | @item 3
|
---|
370 | FF_IDCT_SIMPLEMMX
|
---|
371 | @item 4
|
---|
372 | FF_IDCT_LIBMPEG2MMX
|
---|
373 | @item 5
|
---|
374 | FF_IDCT_PS2
|
---|
375 | @item 6
|
---|
376 | FF_IDCT_MLIB
|
---|
377 | @item 7
|
---|
378 | FF_IDCT_ARM
|
---|
379 | @item 8
|
---|
380 | FF_IDCT_ALTIVEC
|
---|
381 | @item 9
|
---|
382 | FF_IDCT_SH4
|
---|
383 | @item 10
|
---|
384 | FF_IDCT_SIMPLEARM
|
---|
385 | @end table
|
---|
386 |
|
---|
387 | @item -er n
|
---|
388 | Set error resilience to @var{n}.
|
---|
389 | @table @samp
|
---|
390 | @item 1
|
---|
391 | FF_ER_CAREFUL (default)
|
---|
392 | @item 2
|
---|
393 | FF_ER_COMPLIANT
|
---|
394 | @item 3
|
---|
395 | FF_ER_AGGRESSIVE
|
---|
396 | @item 4
|
---|
397 | FF_ER_VERY_AGGRESSIVE
|
---|
398 | @end table
|
---|
399 |
|
---|
400 | @item -ec bit_mask
|
---|
401 | Set error concealment to @var{bit_mask}. @var{bit_mask} is a bit mask of
|
---|
402 | the following values:
|
---|
403 | @table @samp
|
---|
404 | @item 1
|
---|
405 | FF_EC_GUESS_MVS (default = enabled)
|
---|
406 | @item 2
|
---|
407 | FF_EC_DEBLOCK (default = enabled)
|
---|
408 | @end table
|
---|
409 |
|
---|
410 | @item -bf frames
|
---|
411 | Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4).
|
---|
412 | @item -mbd mode
|
---|
413 | macroblock decision
|
---|
414 | @table @samp
|
---|
415 | @item 0
|
---|
416 | FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in FFmpeg).
|
---|
417 | @item 1
|
---|
418 | FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
|
---|
419 | @item 2
|
---|
420 | FF_MB_DECISION_RD: rate distortion
|
---|
421 | @end table
|
---|
422 |
|
---|
423 | @item -4mv
|
---|
424 | Use four motion vector by macroblock (MPEG-4 only).
|
---|
425 | @item -part
|
---|
426 | Use data partitioning (MPEG-4 only).
|
---|
427 | @item -bug param
|
---|
428 | Work around encoder bugs that are not auto-detected.
|
---|
429 | @item -strict strictness
|
---|
430 | How strictly to follow the standards.
|
---|
431 | @item -aic
|
---|
432 | Enable Advanced intra coding (h263+).
|
---|
433 | @item -umv
|
---|
434 | Enable Unlimited Motion Vector (h263+)
|
---|
435 |
|
---|
436 | @item -deinterlace
|
---|
437 | Deinterlace pictures.
|
---|
438 | @item -interlace
|
---|
439 | Force interlacing support in encoder (MPEG-2 and MPEG-4 only).
|
---|
440 | Use this option if your input file is interlaced and you want
|
---|
441 | to keep the interlaced format for minimum losses.
|
---|
442 | The alternative is to deinterlace the input stream with
|
---|
443 | @option{-deinterlace}, but deinterlacing introduces losses.
|
---|
444 | @item -psnr
|
---|
445 | Calculate PSNR of compressed frames.
|
---|
446 | @item -vstats
|
---|
447 | Dump video coding statistics to @file{vstats_HHMMSS.log}.
|
---|
448 | @item -vhook module
|
---|
449 | Insert video processing @var{module}. @var{module} contains the module
|
---|
450 | name and its parameters separated by spaces.
|
---|
451 | @end table
|
---|
452 |
|
---|
453 | @section Audio Options
|
---|
454 |
|
---|
455 | @table @option
|
---|
456 | @item -ar freq
|
---|
457 | Set the audio sampling frequency (default = 44100 Hz).
|
---|
458 | @item -ab bitrate
|
---|
459 | Set the audio bitrate in kbit/s (default = 64).
|
---|
460 | @item -ac channels
|
---|
461 | Set the number of audio channels (default = 1).
|
---|
462 | @item -an
|
---|
463 | Disable audio recording.
|
---|
464 | @item -acodec codec
|
---|
465 | Force audio codec to @var{codec}. Use the @code{copy} special value to
|
---|
466 | specify that the raw codec data must be copied as is.
|
---|
467 | @end table
|
---|
468 |
|
---|
469 | @section Audio/Video grab options
|
---|
470 |
|
---|
471 | @table @option
|
---|
472 | @item -vd device
|
---|
473 | sEt video grab device (e.g. @file{/dev/video0}).
|
---|
474 | @item -vc channel
|
---|
475 | Set video grab channel (DV1394 only).
|
---|
476 | @item -tvstd standard
|
---|
477 | Set television standard (NTSC, PAL (SECAM)).
|
---|
478 | @item -dv1394
|
---|
479 | Set DV1394 grab.
|
---|
480 | @item -ad device
|
---|
481 | Set audio device (e.g. @file{/dev/dsp}).
|
---|
482 | @end table
|
---|
483 |
|
---|
484 | @section Advanced options
|
---|
485 |
|
---|
486 | @table @option
|
---|
487 | @item -map file:stream
|
---|
488 | Set input stream mapping.
|
---|
489 | @item -debug
|
---|
490 | Print specific debug info.
|
---|
491 | @item -benchmark
|
---|
492 | Add timings for benchmarking.
|
---|
493 | @item -hex
|
---|
494 | Dump each input packet.
|
---|
495 | @item -bitexact
|
---|
496 | Only use bit exact algorithms (for codec testing).
|
---|
497 | @item -ps size
|
---|
498 | Set packet size in bits.
|
---|
499 | @item -re
|
---|
500 | Read input at native frame rate. Mainly used to simulate a grab device.
|
---|
501 | @item -loop
|
---|
502 | Loop over the input stream. Currently it works only for image
|
---|
503 | streams. This option is used for automatic FFserver testing.
|
---|
504 | @item -loop_output number_of_times
|
---|
505 | Repeatedly loop output for formats that support looping such as animated GIF
|
---|
506 | (0 will loop the output infinitely).
|
---|
507 | @end table
|
---|
508 |
|
---|
509 | @node FFmpeg formula evaluator
|
---|
510 | @section FFmpeg formula evaluator
|
---|
511 |
|
---|
512 | When evaluating a rate control string, FFmpeg uses an internal formula
|
---|
513 | evaluator.
|
---|
514 |
|
---|
515 | The following binary operators are available: @code{+}, @code{-},
|
---|
516 | @code{*}, @code{/}, @code{^}.
|
---|
517 |
|
---|
518 | The following unary operators are available: @code{+}, @code{-},
|
---|
519 | @code{(...)}.
|
---|
520 |
|
---|
521 | The following functions are available:
|
---|
522 | @table @var
|
---|
523 | @item sinh(x)
|
---|
524 | @item cosh(x)
|
---|
525 | @item tanh(x)
|
---|
526 | @item sin(x)
|
---|
527 | @item cos(x)
|
---|
528 | @item tan(x)
|
---|
529 | @item exp(x)
|
---|
530 | @item log(x)
|
---|
531 | @item squish(x)
|
---|
532 | @item gauss(x)
|
---|
533 | @item abs(x)
|
---|
534 | @item max(x, y)
|
---|
535 | @item min(x, y)
|
---|
536 | @item gt(x, y)
|
---|
537 | @item lt(x, y)
|
---|
538 | @item eq(x, y)
|
---|
539 | @item bits2qp(bits)
|
---|
540 | @item qp2bits(qp)
|
---|
541 | @end table
|
---|
542 |
|
---|
543 | The following constants are available:
|
---|
544 | @table @var
|
---|
545 | @item PI
|
---|
546 | @item E
|
---|
547 | @item iTex
|
---|
548 | @item pTex
|
---|
549 | @item tex
|
---|
550 | @item mv
|
---|
551 | @item fCode
|
---|
552 | @item iCount
|
---|
553 | @item mcVar
|
---|
554 | @item var
|
---|
555 | @item isI
|
---|
556 | @item isP
|
---|
557 | @item isB
|
---|
558 | @item avgQP
|
---|
559 | @item qComp
|
---|
560 | @item avgIITex
|
---|
561 | @item avgPITex
|
---|
562 | @item avgPPTex
|
---|
563 | @item avgBPTex
|
---|
564 | @item avgTex
|
---|
565 | @end table
|
---|
566 |
|
---|
567 | @c man end
|
---|
568 |
|
---|
569 | @ignore
|
---|
570 |
|
---|
571 | @setfilename ffmpeg
|
---|
572 | @settitle FFmpeg video converter
|
---|
573 |
|
---|
574 | @c man begin SEEALSO
|
---|
575 | ffserver(1), ffplay(1) and the HTML documentation of @file{ffmpeg}.
|
---|
576 | @c man end
|
---|
577 |
|
---|
578 | @c man begin AUTHOR
|
---|
579 | Fabrice Bellard
|
---|
580 | @c man end
|
---|
581 |
|
---|
582 | @end ignore
|
---|
583 |
|
---|
584 | @section Protocols
|
---|
585 |
|
---|
586 | The filename can be @file{-} to read from standard input or to write
|
---|
587 | to standard output.
|
---|
588 |
|
---|
589 | FFmpeg also handles many protocols specified with an URL syntax.
|
---|
590 |
|
---|
591 | Use 'ffmpeg -formats' to see a list of the supported protocols.
|
---|
592 |
|
---|
593 | The protocol @code{http:} is currently used only to communicate with
|
---|
594 | FFserver (see the FFserver documentation). When FFmpeg will be a
|
---|
595 | video player it will also be used for streaming :-)
|
---|
596 |
|
---|
597 | @chapter Tips
|
---|
598 |
|
---|
599 | @itemize
|
---|
600 | @item For streaming at very low bitrate application, use a low frame rate
|
---|
601 | and a small GOP size. This is especially true for RealVideo where
|
---|
602 | the Linux player does not seem to be very fast, so it can miss
|
---|
603 | frames. An example is:
|
---|
604 |
|
---|
605 | @example
|
---|
606 | ffmpeg -g 3 -r 3 -t 10 -b 50 -s qcif -f rv10 /tmp/b.rm
|
---|
607 | @end example
|
---|
608 |
|
---|
609 | @item The parameter 'q' which is displayed while encoding is the current
|
---|
610 | quantizer. The value 1 indicates that a very good quality could
|
---|
611 | be achieved. The value 31 indicates the worst quality. If q=31 appears
|
---|
612 | too often, it means that the encoder cannot compress enough to meet
|
---|
613 | your bitrate. You must either increase the bitrate, decrease the
|
---|
614 | frame rate or decrease the frame size.
|
---|
615 |
|
---|
616 | @item If your computer is not fast enough, you can speed up the
|
---|
617 | compression at the expense of the compression ratio. You can use
|
---|
618 | '-me zero' to speed up motion estimation, and '-intra' to disable
|
---|
619 | motion estimation completely (you have only I-frames, which means it
|
---|
620 | is about as good as JPEG compression).
|
---|
621 |
|
---|
622 | @item To have very low audio bitrates, reduce the sampling frequency
|
---|
623 | (down to 22050 kHz for MPEG audio, 22050 or 11025 for AC3).
|
---|
624 |
|
---|
625 | @item To have a constant quality (but a variable bitrate), use the option
|
---|
626 | '-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
|
---|
627 | quality).
|
---|
628 |
|
---|
629 | @item When converting video files, you can use the '-sameq' option which
|
---|
630 | uses the same quality factor in the encoder as in the decoder.
|
---|
631 | It allows almost lossless encoding.
|
---|
632 |
|
---|
633 | @end itemize
|
---|
634 |
|
---|
635 | @chapter Supported File Formats and Codecs
|
---|
636 |
|
---|
637 | You can use the @code{-formats} option to have an exhaustive list.
|
---|
638 |
|
---|
639 | @section File Formats
|
---|
640 |
|
---|
641 | FFmpeg supports the following file formats through the @code{libavformat}
|
---|
642 | library:
|
---|
643 |
|
---|
644 | @multitable @columnfractions .4 .1 .1 .4
|
---|
645 | @item Supported File Format @tab Encoding @tab Decoding @tab Comments
|
---|
646 | @item MPEG audio @tab X @tab X
|
---|
647 | @item MPEG-1 systems @tab X @tab X
|
---|
648 | @tab muxed audio and video
|
---|
649 | @item MPEG-2 PS @tab X @tab X
|
---|
650 | @tab also known as @code{VOB} file
|
---|
651 | @item MPEG-2 TS @tab @tab X
|
---|
652 | @tab also known as DVB Transport Stream
|
---|
653 | @item ASF@tab X @tab X
|
---|
654 | @item AVI@tab X @tab X
|
---|
655 | @item WAV@tab X @tab X
|
---|
656 | @item Macromedia Flash@tab X @tab X
|
---|
657 | @tab Only embedded audio is decoded.
|
---|
658 | @item FLV @tab X @tab X
|
---|
659 | @tab Macromedia Flash video files
|
---|
660 | @item Real Audio and Video @tab X @tab X
|
---|
661 | @item Raw AC3 @tab X @tab X
|
---|
662 | @item Raw MJPEG @tab X @tab X
|
---|
663 | @item Raw MPEG video @tab X @tab X
|
---|
664 | @item Raw PCM8/16 bits, mulaw/Alaw@tab X @tab X
|
---|
665 | @item Raw CRI ADX audio @tab X @tab X
|
---|
666 | @item Raw Shorten audio @tab @tab X
|
---|
667 | @item SUN AU format @tab X @tab X
|
---|
668 | @item NUT @tab X @tab X @tab NUT Open Container Format
|
---|
669 | @item QuickTime @tab X @tab X
|
---|
670 | @item MPEG-4 @tab X @tab X
|
---|
671 | @tab MPEG-4 is a variant of QuickTime.
|
---|
672 | @item Raw MPEG4 video @tab X @tab X
|
---|
673 | @item DV @tab X @tab X
|
---|
674 | @item 4xm @tab @tab X
|
---|
675 | @tab 4X Technologies format, used in some games.
|
---|
676 | @item Playstation STR @tab @tab X
|
---|
677 | @item Id RoQ @tab @tab X
|
---|
678 | @tab Used in Quake III, Jedi Knight 2, other computer games.
|
---|
679 | @item Interplay MVE @tab @tab X
|
---|
680 | @tab Format used in various Interplay computer games.
|
---|
681 | @item WC3 Movie @tab @tab X
|
---|
682 | @tab Multimedia format used in Origin's Wing Commander III computer game.
|
---|
683 | @item Sega FILM/CPK @tab @tab X
|
---|
684 | @tab Used in many Sega Saturn console games.
|
---|
685 | @item Westwood Studios VQA/AUD @tab @tab X
|
---|
686 | @tab Multimedia formats used in Westwood Studios games.
|
---|
687 | @item Id Cinematic (.cin) @tab @tab X
|
---|
688 | @tab Used in Quake II.
|
---|
689 | @item FLIC format @tab @tab X
|
---|
690 | @tab .fli/.flc files
|
---|
691 | @item Sierra VMD @tab @tab X
|
---|
692 | @tab Used in Sierra CD-ROM games.
|
---|
693 | @item Sierra Online @tab @tab X
|
---|
694 | @tab .sol files used in Sierra Online games.
|
---|
695 | @item Matroska @tab @tab X
|
---|
696 | @item Electronic Arts Multimedia @tab @tab X
|
---|
697 | @tab Used in various EA games; files have extensions like WVE and UV2.
|
---|
698 | @item Nullsoft Video (NSV) format @tab @tab X
|
---|
699 | @item ADTS AAC audio @tab X @tab X
|
---|
700 | @item Creative VOC @tab X @tab X @tab Created for the Sound Blaster Pro.
|
---|
701 | @item American Laser Games MM @tab @tab X
|
---|
702 | @tab Multimedia format used in games like Mad Dog McCree
|
---|
703 | @item AVS @tab @tab X
|
---|
704 | @tab Multimedia format used by the Creature Shock game.
|
---|
705 | @item Smacker @tab @tab X
|
---|
706 | @tab Multimedia format used by many games.
|
---|
707 | @item GXF @tab @tab X
|
---|
708 | @end multitable
|
---|
709 |
|
---|
710 | @code{X} means that encoding (resp. decoding) is supported.
|
---|
711 |
|
---|
712 | @section Image Formats
|
---|
713 |
|
---|
714 | FFmpeg can read and write images for each frame of a video sequence. The
|
---|
715 | following image formats are supported:
|
---|
716 |
|
---|
717 | @multitable @columnfractions .4 .1 .1 .4
|
---|
718 | @item Supported Image Format @tab Encoding @tab Decoding @tab Comments
|
---|
719 | @item PGM, PPM @tab X @tab X
|
---|
720 | @item PAM @tab X @tab X @tab PAM is a PNM extension with alpha support.
|
---|
721 | @item PGMYUV @tab X @tab X @tab PGM with U and V components in YUV 4:2:0
|
---|
722 | @item JPEG @tab X @tab X @tab Progressive JPEG is not supported.
|
---|
723 | @item .Y.U.V @tab X @tab X @tab one raw file per component
|
---|
724 | @item animated GIF @tab X @tab X @tab Only uncompressed GIFs are generated.
|
---|
725 | @item PNG @tab X @tab X @tab 2 bit and 4 bit/pixel not supported yet.
|
---|
726 | @item SGI @tab X @tab X @tab SGI RGB image format
|
---|
727 | @end multitable
|
---|
728 |
|
---|
729 | @code{X} means that encoding (resp. decoding) is supported.
|
---|
730 |
|
---|
731 | @section Video Codecs
|
---|
732 |
|
---|
733 | @multitable @columnfractions .4 .1 .1 .4
|
---|
734 | @item Supported Codec @tab Encoding @tab Decoding @tab Comments
|
---|
735 | @item MPEG-1 video @tab X @tab X
|
---|
736 | @item MPEG-2 video @tab X @tab X
|
---|
737 | @item MPEG-4 @tab X @tab X @tab also known as DivX4/5
|
---|
738 | @item MSMPEG4 V1 @tab X @tab X
|
---|
739 | @item MSMPEG4 V2 @tab X @tab X
|
---|
740 | @item MSMPEG4 V3 @tab X @tab X @tab also known as DivX3
|
---|
741 | @item WMV7 @tab X @tab X
|
---|
742 | @item WMV8 @tab X @tab X @tab not completely working
|
---|
743 | @item H.261 @tab X @tab X
|
---|
744 | @item H.263(+) @tab X @tab X @tab also known as RealVideo 1.0
|
---|
745 | @item H.264 @tab @tab X
|
---|
746 | @item RealVideo 1.0 @tab X @tab X
|
---|
747 | @item RealVideo 2.0 @tab X @tab X
|
---|
748 | @item MJPEG @tab X @tab X
|
---|
749 | @item lossless MJPEG @tab X @tab X
|
---|
750 | @item JPEG-LS @tab X @tab X @tab fourcc: MJLS, lossless and near-lossless is supported
|
---|
751 | @item Apple MJPEG-B @tab @tab X
|
---|
752 | @item Sunplus MJPEG @tab @tab X @tab fourcc: SP5X
|
---|
753 | @item DV @tab X @tab X
|
---|
754 | @item HuffYUV @tab X @tab X
|
---|
755 | @item FFmpeg Video 1 @tab X @tab X @tab experimental lossless codec (fourcc: FFV1)
|
---|
756 | @item FFmpeg Snow @tab X @tab X @tab experimental wavelet codec (fourcc: SNOW)
|
---|
757 | @item Asus v1 @tab X @tab X @tab fourcc: ASV1
|
---|
758 | @item Asus v2 @tab X @tab X @tab fourcc: ASV2
|
---|
759 | @item Creative YUV @tab @tab X @tab fourcc: CYUV
|
---|
760 | @item Sorenson Video 1 @tab X @tab X @tab fourcc: SVQ1
|
---|
761 | @item Sorenson Video 3 @tab @tab X @tab fourcc: SVQ3
|
---|
762 | @item On2 VP3 @tab @tab X @tab still experimental
|
---|
763 | @item Theora @tab @tab X @tab still experimental
|
---|
764 | @item Intel Indeo 3 @tab @tab X
|
---|
765 | @item FLV @tab X @tab X @tab Sorenson H.263 used in Flash
|
---|
766 | @item Flash Screen Video @tab @tab X @tab fourcc: FSV1
|
---|
767 | @item ATI VCR1 @tab @tab X @tab fourcc: VCR1
|
---|
768 | @item ATI VCR2 @tab @tab X @tab fourcc: VCR2
|
---|
769 | @item Cirrus Logic AccuPak @tab @tab X @tab fourcc: CLJR
|
---|
770 | @item 4X Video @tab @tab X @tab Used in certain computer games.
|
---|
771 | @item Sony Playstation MDEC @tab @tab X
|
---|
772 | @item Id RoQ @tab @tab X @tab Used in Quake III, Jedi Knight 2, other computer games.
|
---|
773 | @item Xan/WC3 @tab @tab X @tab Used in Wing Commander III .MVE files.
|
---|
774 | @item Interplay Video @tab @tab X @tab Used in Interplay .MVE files.
|
---|
775 | @item Apple Animation @tab @tab X @tab fourcc: 'rle '
|
---|
776 | @item Apple Graphics @tab @tab X @tab fourcc: 'smc '
|
---|
777 | @item Apple Video @tab @tab X @tab fourcc: rpza
|
---|
778 | @item Apple QuickDraw @tab @tab X @tab fourcc: qdrw
|
---|
779 | @item Cinepak @tab @tab X
|
---|
780 | @item Microsoft RLE @tab @tab X
|
---|
781 | @item Microsoft Video-1 @tab @tab X
|
---|
782 | @item Westwood VQA @tab @tab X
|
---|
783 | @item Id Cinematic Video @tab @tab X @tab Used in Quake II.
|
---|
784 | @item Planar RGB @tab @tab X @tab fourcc: 8BPS
|
---|
785 | @item FLIC video @tab @tab X
|
---|
786 | @item Duck TrueMotion v1 @tab @tab X @tab fourcc: DUCK
|
---|
787 | @item Duck TrueMotion v2 @tab @tab X @tab fourcc: TM20
|
---|
788 | @item VMD Video @tab @tab X @tab Used in Sierra VMD files.
|
---|
789 | @item MSZH @tab @tab X @tab Part of LCL
|
---|
790 | @item ZLIB @tab X @tab X @tab Part of LCL, encoder experimental
|
---|
791 | @item TechSmith Camtasia @tab @tab X @tab fourcc: TSCC
|
---|
792 | @item IBM Ultimotion @tab @tab X @tab fourcc: ULTI
|
---|
793 | @item Miro VideoXL @tab @tab X @tab fourcc: VIXL
|
---|
794 | @item QPEG @tab @tab X @tab fourccs: QPEG, Q1.0, Q1.1
|
---|
795 | @item LOCO @tab @tab X @tab
|
---|
796 | @item Winnov WNV1 @tab @tab X @tab
|
---|
797 | @item Autodesk Animator Studio Codec @tab @tab X @tab fourcc: AASC
|
---|
798 | @item Fraps FPS1 @tab @tab X @tab
|
---|
799 | @item CamStudio @tab @tab X @tab fourcc: CSCD
|
---|
800 | @item American Laser Games Video @tab @tab X @tab Used in games like Mad Dog McCree
|
---|
801 | @item ZMBV @tab @tab X @tab
|
---|
802 | @item AVS Video @tab @tab X @tab Video encoding used by the Creature Shock game.
|
---|
803 | @item Smacker Video @tab @tab X @tab Video encoding used in Smacker.
|
---|
804 | @item RTjpeg @tab @tab X @tab Video encoding used in NuppelVideo files.
|
---|
805 | @item KMVC @tab @tab X @tab Codec used in Worms games.
|
---|
806 | @end multitable
|
---|
807 |
|
---|
808 | @code{X} means that encoding (resp. decoding) is supported.
|
---|
809 |
|
---|
810 | See @url{http://mplayerhq.hu/~michael/codec-features.html} to
|
---|
811 | get a precise comparison of the FFmpeg MPEG-4 codec compared to
|
---|
812 | other implementations.
|
---|
813 |
|
---|
814 | @section Audio Codecs
|
---|
815 |
|
---|
816 | @multitable @columnfractions .4 .1 .1 .1 .7
|
---|
817 | @item Supported Codec @tab Encoding @tab Decoding @tab Comments
|
---|
818 | @item MPEG audio layer 2 @tab IX @tab IX
|
---|
819 | @item MPEG audio layer 1/3 @tab IX @tab IX
|
---|
820 | @tab MP3 encoding is supported through the external library LAME.
|
---|
821 | @item AC3 @tab IX @tab IX
|
---|
822 | @tab liba52 is used internally for decoding.
|
---|
823 | @item Vorbis @tab X @tab X
|
---|
824 | @tab Supported through the external library libvorbis.
|
---|
825 | @item WMA V1/V2 @tab @tab X
|
---|
826 | @item AAC @tab X @tab X
|
---|
827 | @tab Supported through the external library libfaac/libfaad.
|
---|
828 | @item Microsoft ADPCM @tab X @tab X
|
---|
829 | @item MS IMA ADPCM @tab X @tab X
|
---|
830 | @item QT IMA ADPCM @tab @tab X
|
---|
831 | @item 4X IMA ADPCM @tab @tab X
|
---|
832 | @item G.726 ADPCM @tab X @tab X
|
---|
833 | @item Duck DK3 IMA ADPCM @tab @tab X
|
---|
834 | @tab Used in some Sega Saturn console games.
|
---|
835 | @item Duck DK4 IMA ADPCM @tab @tab X
|
---|
836 | @tab Used in some Sega Saturn console games.
|
---|
837 | @item Westwood Studios IMA ADPCM @tab @tab X
|
---|
838 | @tab Used in Westwood Studios games like Command and Conquer.
|
---|
839 | @item SMJPEG IMA ADPCM @tab @tab X
|
---|
840 | @tab Used in certain Loki game ports.
|
---|
841 | @item CD-ROM XA ADPCM @tab @tab X
|
---|
842 | @item CRI ADX ADPCM @tab X @tab X
|
---|
843 | @tab Used in Sega Dreamcast games.
|
---|
844 | @item Electronic Arts ADPCM @tab @tab X
|
---|
845 | @tab Used in various EA titles.
|
---|
846 | @item Creative ADPCM @tab @tab X
|
---|
847 | @tab 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
|
---|
848 | @item RA144 @tab @tab X
|
---|
849 | @tab Real 14400 bit/s codec
|
---|
850 | @item RA288 @tab @tab X
|
---|
851 | @tab Real 28800 bit/s codec
|
---|
852 | @item RADnet @tab X @tab IX
|
---|
853 | @tab Real low bitrate AC3 codec, liba52 is used for decoding.
|
---|
854 | @item AMR-NB @tab X @tab X
|
---|
855 | @tab Supported through an external library.
|
---|
856 | @item AMR-WB @tab X @tab X
|
---|
857 | @tab Supported through an external library.
|
---|
858 | @item DV audio @tab @tab X
|
---|
859 | @item Id RoQ DPCM @tab @tab X
|
---|
860 | @tab Used in Quake III, Jedi Knight 2, other computer games.
|
---|
861 | @item Interplay MVE DPCM @tab @tab X
|
---|
862 | @tab Used in various Interplay computer games.
|
---|
863 | @item Xan DPCM @tab @tab X
|
---|
864 | @tab Used in Origin's Wing Commander IV AVI files.
|
---|
865 | @item Sierra Online DPCM @tab @tab X
|
---|
866 | @tab Used in Sierra Online game audio files.
|
---|
867 | @item Apple MACE 3 @tab @tab X
|
---|
868 | @item Apple MACE 6 @tab @tab X
|
---|
869 | @item FLAC lossless audio @tab @tab X
|
---|
870 | @item Shorten lossless audio @tab @tab X
|
---|
871 | @item Apple lossless audio @tab @tab X
|
---|
872 | @tab QuickTime fourcc 'alac'
|
---|
873 | @item FFmpeg Sonic @tab X @tab X
|
---|
874 | @tab experimental lossy/lossless codec
|
---|
875 | @item Qdesign QDM2 @tab @tab X
|
---|
876 | @tab there are still some distortions
|
---|
877 | @item Real COOK @tab @tab X
|
---|
878 | @tab All versions except 5.1 are supported
|
---|
879 | @item DSP Group TrueSpeech @tab @tab X
|
---|
880 | @item True Audio (TTA) @tab @tab X
|
---|
881 | @item Smacker Audio @tab @tab X
|
---|
882 | @end multitable
|
---|
883 |
|
---|
884 | @code{X} means that encoding (resp. decoding) is supported.
|
---|
885 |
|
---|
886 | @code{I} means that an integer-only version is available, too (ensures high
|
---|
887 | performance on systems without hardware floating point support).
|
---|
888 |
|
---|
889 | @chapter Platform Specific information
|
---|
890 |
|
---|
891 | @section Linux
|
---|
892 |
|
---|
893 | FFmpeg should be compiled with at least GCC 2.95.3. GCC 3.2 is the
|
---|
894 | preferred compiler now for FFmpeg. All future optimizations will depend on
|
---|
895 | features only found in GCC 3.2.
|
---|
896 |
|
---|
897 | @section BSD
|
---|
898 |
|
---|
899 | BSD make will not build FFmpeg, you need to install and use GNU Make
|
---|
900 | (@file{gmake}).
|
---|
901 |
|
---|
902 | @section Windows
|
---|
903 |
|
---|
904 | @subsection Native Windows compilation
|
---|
905 |
|
---|
906 | @itemize
|
---|
907 | @item Install the current versions of MSYS and MinGW from
|
---|
908 | @url{http://www.mingw.org/}. You can find detailed installation
|
---|
909 | instructions in the download section and the FAQ.
|
---|
910 |
|
---|
911 | @item If you want to test the FFplay, also download
|
---|
912 | the MinGW development library of SDL 1.2.x
|
---|
913 | (@file{SDL-devel-1.2.x-mingw32.tar.gz}) from
|
---|
914 | @url{http://www.libsdl.org}. Unpack it in a temporary directory, and
|
---|
915 | unpack the archive @file{i386-mingw32msvc.tar.gz} in the MinGW tool
|
---|
916 | directory. Edit the @file{sdl-config} script so that it gives the
|
---|
917 | correct SDL directory when invoked.
|
---|
918 |
|
---|
919 | @item Extract the current version of FFmpeg.
|
---|
920 |
|
---|
921 | @item Start the MSYS shell (file @file{msys.bat}).
|
---|
922 |
|
---|
923 | @item Change to the FFmpeg directory and follow
|
---|
924 | the instructions of how to compile FFmpeg (file
|
---|
925 | @file{INSTALL}). Usually, launching @file{./configure} and @file{make}
|
---|
926 | suffices. If you have problems using SDL, verify that
|
---|
927 | @file{sdl-config} can be launched from the MSYS command line.
|
---|
928 |
|
---|
929 | @item You can install FFmpeg in @file{Program Files/FFmpeg} by typing
|
---|
930 | @file{make install}. Don't forget to copy @file{SDL.dll} to the place
|
---|
931 | you launch @file{ffplay} from.
|
---|
932 |
|
---|
933 | @end itemize
|
---|
934 |
|
---|
935 | Notes:
|
---|
936 | @itemize
|
---|
937 |
|
---|
938 | @item The target @file{make wininstaller} can be used to create a
|
---|
939 | Nullsoft based Windows installer for FFmpeg and FFplay. @file{SDL.dll}
|
---|
940 | must be copied to the FFmpeg directory in order to build the
|
---|
941 | installer.
|
---|
942 |
|
---|
943 | @item By using @code{./configure --enable-shared} when configuring FFmpeg,
|
---|
944 | you can build @file{avcodec.dll} and @file{avformat.dll}. With
|
---|
945 | @code{make install} you install the FFmpeg DLLs and the associated
|
---|
946 | headers in @file{Program Files/FFmpeg}.
|
---|
947 |
|
---|
948 | @item Visual C++ compatibility: If you used @code{./configure --enable-shared}
|
---|
949 | when configuring FFmpeg, FFmpeg tries to use the Microsoft Visual
|
---|
950 | C++ @code{lib} tool to build @code{avcodec.lib} and
|
---|
951 | @code{avformat.lib}. With these libraries you can link your Visual C++
|
---|
952 | code directly with the FFmpeg DLLs (see below).
|
---|
953 |
|
---|
954 | @end itemize
|
---|
955 |
|
---|
956 | @subsection Visual C++ compatibility
|
---|
957 |
|
---|
958 | FFmpeg will not compile under Visual C++ -- and it has too many
|
---|
959 | dependencies on the GCC compiler to make a port viable. However,
|
---|
960 | if you want to use the FFmpeg libraries in your own applications,
|
---|
961 | you can still compile those applications using Visual C++. An
|
---|
962 | important restriction to this is that you have to use the
|
---|
963 | dynamically linked versions of the FFmpeg libraries (i.e. the
|
---|
964 | DLLs), and you have to make sure that Visual-C++-compatible
|
---|
965 | import libraries are created during the FFmpeg build process.
|
---|
966 |
|
---|
967 | This description of how to use the FFmpeg libraries with Visual C++ is
|
---|
968 | based on Visual C++ 2005 Express Edition Beta 2. If you have a different
|
---|
969 | version, you might have to modify the procedures slightly.
|
---|
970 |
|
---|
971 | Here are the step-by-step instructions for building the FFmpeg libraries
|
---|
972 | so they can be used with Visual C++:
|
---|
973 |
|
---|
974 | @enumerate
|
---|
975 |
|
---|
976 | @item Install Visual C++ (if you haven't done so already).
|
---|
977 |
|
---|
978 | @item Install MinGW and MSYS as described above.
|
---|
979 |
|
---|
980 | @item Add a call to @file{vcvars32.bat} (which sets up the environment
|
---|
981 | variables for the Visual C++ tools) as the first line of
|
---|
982 | @file{msys.bat}. The standard location for @file{vcvars32.bat} is
|
---|
983 | @file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat},
|
---|
984 | and the standard location for @file{msys.bat} is
|
---|
985 | @file{C:\msys\1.0\msys.bat}. If this corresponds to your setup, add the
|
---|
986 | following line as the first line of @file{msys.bat}:
|
---|
987 |
|
---|
988 | @code{call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"}
|
---|
989 |
|
---|
990 | @item Start the MSYS shell (file @file{msys.bat}) and type @code{link.exe}.
|
---|
991 | If you get a help message with the command line options of @code{link.exe},
|
---|
992 | this means your environment variables are set up correctly, the
|
---|
993 | Microsoft linker is on the path and will be used by FFmpeg to
|
---|
994 | create Visual-C++-compatible import libraries.
|
---|
995 |
|
---|
996 | @item Extract the current version of FFmpeg and change to the FFmpeg directory.
|
---|
997 |
|
---|
998 | @item Type the command
|
---|
999 | @code{./configure --enable-shared --disable-static --enable-memalign-hack}
|
---|
1000 | to configure and, if that didn't produce any errors,
|
---|
1001 | type @code{make} to build FFmpeg.
|
---|
1002 |
|
---|
1003 | @item The subdirectories @file{libavformat}, @file{libavcodec}, and
|
---|
1004 | @file{libavutil} should now contain the files @file{avformat.dll},
|
---|
1005 | @file{avformat.lib}, @file{avcodec.dll}, @file{avcodec.lib},
|
---|
1006 | @file{avutil.dll}, and @file{avutil.lib}, respectively. Copy the three
|
---|
1007 | DLLs to your System32 directory (typically @file{C:\Windows\System32}).
|
---|
1008 |
|
---|
1009 | @end enumerate
|
---|
1010 |
|
---|
1011 | And here is how to use these libraries with Visual C++:
|
---|
1012 |
|
---|
1013 | @enumerate
|
---|
1014 |
|
---|
1015 | @item Create a new console application ("File / New / Project") and then
|
---|
1016 | select "Win32 Console Application". On the appropriate page of the
|
---|
1017 | Application Wizard, uncheck the "Precompiled headers" option.
|
---|
1018 |
|
---|
1019 | @item Write the source code for your application, or, for testing, just
|
---|
1020 | copy the code from an existing sample application into the source file
|
---|
1021 | that Visual C++ has already created for you. (Note that your source
|
---|
1022 | filehas to have a @code{.cpp} extension; otherwise, Visual C++ won't
|
---|
1023 | compile the FFmpeg headers correctly because in C mode, it doesn't
|
---|
1024 | recognize the @code{inline} keyword.) For example, you can copy
|
---|
1025 | @file{output_example.c} from the FFmpeg distribution (but you will
|
---|
1026 | have to make minor modifications so the code will compile under
|
---|
1027 | C++, see below).
|
---|
1028 |
|
---|
1029 | @item Open the "Project / Properties" dialog box. In the "Configuration"
|
---|
1030 | combo box, select "All Configurations" so that the changes you make will
|
---|
1031 | affect both debug and release builds. In the tree view on the left hand
|
---|
1032 | side, select "C/C++ / General", then edit the "Additional Include
|
---|
1033 | Directories" setting to contain the complete paths to the
|
---|
1034 | @file{libavformat}, @file{libavcodec}, and @file{libavutil}
|
---|
1035 | subdirectories of your FFmpeg directory. Note that the directories have
|
---|
1036 | to be separated using semicolons. Now select "Linker / General" from the
|
---|
1037 | tree view and edit the "Additional Library Directories" setting to
|
---|
1038 | contain the same three directories.
|
---|
1039 |
|
---|
1040 | @item Still in the "Project / Properties" dialog box, select "Linker / Input"
|
---|
1041 | from the tree view, then add the files @file{avformat.lib},
|
---|
1042 | @file{avcodec.lib}, and @file{avutil.lib} to the end of the "Additional
|
---|
1043 | Dependencies". Note that the names of the libraries have to be separated
|
---|
1044 | using spaces.
|
---|
1045 |
|
---|
1046 | @item Now, select "C/C++ / Code Generation" from the tree view. Select
|
---|
1047 | "Debug" in the "Configuration" combo box. Make sure that "Runtime
|
---|
1048 | Library" is set to "Multi-threaded Debug DLL". Then, select "Release" in
|
---|
1049 | the "Configuration" combo box and make sure that "Runtime Library" is
|
---|
1050 | set to "Multi-threaded DLL".
|
---|
1051 |
|
---|
1052 | @item Click "OK" to close the "Project / Properties" dialog box and build
|
---|
1053 | the application. Hopefully, it should compile and run cleanly. If you
|
---|
1054 | used @file{output_example.c} as your sample application, you will get a
|
---|
1055 | few compiler errors, but they are easy to fix. The first type of error
|
---|
1056 | occurs because Visual C++ doesn't allow an @code{int} to be converted to
|
---|
1057 | an @code{enum} without a cast. To solve the problem, insert the required
|
---|
1058 | casts (this error occurs once for a @code{CodecID} and once for a
|
---|
1059 | @code{CodecType}). The second type of error occurs because C++ requires
|
---|
1060 | the return value of @code{malloc} to be cast to the exact type of the
|
---|
1061 | pointer it is being assigned to. Visual C++ will complain that, for
|
---|
1062 | example, @code{(void *)} is being assigned to @code{(uint8_t *)} without
|
---|
1063 | an explicit cast. So insert an explicit cast in these places to silence
|
---|
1064 | the compiler. The third type of error occurs because the @code{snprintf}
|
---|
1065 | library function is called @code{_snprintf} under Visual C++. So just
|
---|
1066 | add an underscore to fix the problem. With these changes,
|
---|
1067 | @file{output_example.c} should compile under Visual C++, and the
|
---|
1068 | resulting executable should produce valid video files.
|
---|
1069 |
|
---|
1070 | @end enumerate
|
---|
1071 |
|
---|
1072 | @subsection Cross compilation for Windows with Linux
|
---|
1073 |
|
---|
1074 | You must use the MinGW cross compilation tools available at
|
---|
1075 | @url{http://www.mingw.org/}.
|
---|
1076 |
|
---|
1077 | Then configure FFmpeg with the following options:
|
---|
1078 | @example
|
---|
1079 | ./configure --enable-mingw32 --cross-prefix=i386-mingw32msvc-
|
---|
1080 | @end example
|
---|
1081 | (you can change the cross-prefix according to the prefix chosen for the
|
---|
1082 | MinGW tools).
|
---|
1083 |
|
---|
1084 | Then you can easily test FFmpeg with Wine
|
---|
1085 | (@url{http://www.winehq.com/}).
|
---|
1086 |
|
---|
1087 | @section Mac OS X
|
---|
1088 |
|
---|
1089 | @section BeOS
|
---|
1090 |
|
---|
1091 | The configure script should guess the configuration itself.
|
---|
1092 | Networking support is currently not finished.
|
---|
1093 | errno issues fixed by Andrew Bachmann.
|
---|
1094 |
|
---|
1095 | Old stuff:
|
---|
1096 |
|
---|
1097 | François Revol - revol at free dot fr - April 2002
|
---|
1098 |
|
---|
1099 | The configure script should guess the configuration itself,
|
---|
1100 | however I still didn't test building on the net_server version of BeOS.
|
---|
1101 |
|
---|
1102 | FFserver is broken (needs poll() implementation).
|
---|
1103 |
|
---|
1104 | There are still issues with errno codes, which are negative in BeOS, and
|
---|
1105 | that FFmpeg negates when returning. This ends up turning errors into
|
---|
1106 | valid results, then crashes.
|
---|
1107 | (To be fixed)
|
---|
1108 |
|
---|
1109 | @chapter Developers Guide
|
---|
1110 |
|
---|
1111 | @section API
|
---|
1112 | @itemize
|
---|
1113 | @item libavcodec is the library containing the codecs (both encoding and
|
---|
1114 | decoding). Look at @file{libavcodec/apiexample.c} to see how to use it.
|
---|
1115 |
|
---|
1116 | @item libavformat is the library containing the file format handling (mux and
|
---|
1117 | demux code for several formats). Look at @file{ffplay.c} to use it in a
|
---|
1118 | player. See @file{output_example.c} to use it to generate audio or video
|
---|
1119 | streams.
|
---|
1120 |
|
---|
1121 | @end itemize
|
---|
1122 |
|
---|
1123 | @section Integrating libavcodec or libavformat in your program
|
---|
1124 |
|
---|
1125 | You can integrate all the source code of the libraries to link them
|
---|
1126 | statically to avoid any version problem. All you need is to provide a
|
---|
1127 | 'config.mak' and a 'config.h' in the parent directory. See the defines
|
---|
1128 | generated by ./configure to understand what is needed.
|
---|
1129 |
|
---|
1130 | You can use libavcodec or libavformat in your commercial program, but
|
---|
1131 | @emph{any patch you make must be published}. The best way to proceed is
|
---|
1132 | to send your patches to the FFmpeg mailing list.
|
---|
1133 |
|
---|
1134 | @node Coding Rules
|
---|
1135 | @section Coding Rules
|
---|
1136 |
|
---|
1137 | FFmpeg is programmed in the ISO C90 language with a few additional
|
---|
1138 | features from ISO C99, namely:
|
---|
1139 | @itemize @bullet
|
---|
1140 | @item
|
---|
1141 | the @samp{inline} keyword;
|
---|
1142 | @item
|
---|
1143 | @samp{//} comments;
|
---|
1144 | @item
|
---|
1145 | designated struct initializers (@samp{struct s x = @{ .i = 17 @};})
|
---|
1146 | @item
|
---|
1147 | compound literals (@samp{x = (struct s) @{ 17, 23 @};})
|
---|
1148 | @end itemize
|
---|
1149 |
|
---|
1150 | These features are supported by all compilers we care about, so we won't
|
---|
1151 | accept patches to remove their use unless they absolutely don't impair
|
---|
1152 | clarity and performance.
|
---|
1153 |
|
---|
1154 | All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also
|
---|
1155 | compiles with several other compilers, such as the Compaq ccc compiler
|
---|
1156 | or Sun Studio 9, and we would like to keep it that way unless it would
|
---|
1157 | be exceedingly involved. To ensure compatibility, please don't use any
|
---|
1158 | additional C99 features or GCC extensions. Especially watch out for:
|
---|
1159 | @itemize @bullet
|
---|
1160 | @item
|
---|
1161 | mixing statements and declarations;
|
---|
1162 | @item
|
---|
1163 | @samp{long long} (use @samp{int64_t} instead);
|
---|
1164 | @item
|
---|
1165 | @samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar;
|
---|
1166 | @item
|
---|
1167 | GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}).
|
---|
1168 | @end itemize
|
---|
1169 |
|
---|
1170 | Indent size is 4.
|
---|
1171 | The presentation is the one specified by 'indent -i4 -kr -nut'.
|
---|
1172 | The TAB character is forbidden outside of Makefiles as is any
|
---|
1173 | form of trailing whitespace. Commits containing either will be
|
---|
1174 | rejected by the Subversion repository.
|
---|
1175 |
|
---|
1176 | Main priority in FFmpeg is simplicity and small code size (=less
|
---|
1177 | bugs).
|
---|
1178 |
|
---|
1179 | Comments: Use the JavaDoc/Doxygen
|
---|
1180 | format (see examples below) so that code documentation
|
---|
1181 | can be generated automatically. All nontrivial functions should have a comment
|
---|
1182 | above them explaining what the function does, even if it's just one sentence.
|
---|
1183 | All structures and their member variables should be documented, too.
|
---|
1184 | @example
|
---|
1185 | /**
|
---|
1186 | * @@file mpeg.c
|
---|
1187 | * MPEG codec.
|
---|
1188 | * @@author ...
|
---|
1189 | */
|
---|
1190 |
|
---|
1191 | /**
|
---|
1192 | * Summary sentence.
|
---|
1193 | * more text ...
|
---|
1194 | * ...
|
---|
1195 | */
|
---|
1196 | typedef struct Foobar@{
|
---|
1197 | int var1; /**< var1 description */
|
---|
1198 | int var2; ///< var2 description
|
---|
1199 | /** var3 description */
|
---|
1200 | int var3;
|
---|
1201 | @} Foobar;
|
---|
1202 |
|
---|
1203 | /**
|
---|
1204 | * Summary sentence.
|
---|
1205 | * more text ...
|
---|
1206 | * ...
|
---|
1207 | * @@param my_parameter description of my_parameter
|
---|
1208 | * @@return return value description
|
---|
1209 | */
|
---|
1210 | int myfunc(int my_parameter)
|
---|
1211 | ...
|
---|
1212 | @end example
|
---|
1213 |
|
---|
1214 | fprintf and printf are forbidden in libavformat and libavcodec,
|
---|
1215 | please use av_log() instead.
|
---|
1216 |
|
---|
1217 | @node Development Policy
|
---|
1218 | @section Development Policy
|
---|
1219 |
|
---|
1220 | @enumerate
|
---|
1221 | @item
|
---|
1222 | You must not commit code which breaks FFmpeg! (Meaning unfinished but
|
---|
1223 | enabled code which breaks compilation or compiles but does not work or
|
---|
1224 | breaks the regression tests)
|
---|
1225 | You can commit unfinished stuff (for testing etc), but it must be disabled
|
---|
1226 | (#ifdef etc) by default so it does not interfere with other developers'
|
---|
1227 | work.
|
---|
1228 | @item
|
---|
1229 | You don't have to over-test things. If it works for you, and you think it
|
---|
1230 | should work for others, then commit. If your code has problems
|
---|
1231 | (portability, triggers compiler bugs, unusual environment etc) they will be
|
---|
1232 | reported and eventually fixed.
|
---|
1233 | @item
|
---|
1234 | Do not commit unrelated changes together, split them into self-contained
|
---|
1235 | pieces.
|
---|
1236 | @item
|
---|
1237 | Do not change behavior of the program (renaming options etc) without
|
---|
1238 | first discussing it on the ffmpeg-devel mailing list. Do not remove
|
---|
1239 | functionality from the code. Just improve!
|
---|
1240 |
|
---|
1241 | Note: Redundant code can be removed.
|
---|
1242 | @item
|
---|
1243 | Do not commit changes to the build system (Makefiles, configure script)
|
---|
1244 | which change behavior, defaults etc, without asking first. The same
|
---|
1245 | applies to compiler warning fixes, trivial looking fixes and to code
|
---|
1246 | maintained by other developers. We usually have a reason for doing things
|
---|
1247 | the way we do. Send your changes as patches to the ffmpeg-devel mailing
|
---|
1248 | list, and if the code maintainers say OK, you may commit. This does not
|
---|
1249 | apply to files you wrote and/or maintain.
|
---|
1250 | @item
|
---|
1251 | We refuse source indentation and other cosmetic changes if they are mixed
|
---|
1252 | with functional changes, such commits will be rejected and removed. Every
|
---|
1253 | developer has his own indentation style, you should not change it. Of course
|
---|
1254 | if you (re)write something, you can use your own style, even though we would
|
---|
1255 | prefer if the indentation throughout FFmpeg was consistent (Many projects
|
---|
1256 | force a given indentation style - we don't.). If you really need to make
|
---|
1257 | indentation changes (try to avoid this), separate them strictly from real
|
---|
1258 | changes.
|
---|
1259 |
|
---|
1260 | NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code,
|
---|
1261 | then either do NOT change the indentation of the inner part within (don't
|
---|
1262 | move it to the right)! or do so in a separate commit
|
---|
1263 | @item
|
---|
1264 | Always fill out the commit log message. Describe in a few lines what you
|
---|
1265 | changed and why. You can refer to mailing list postings if you fix a
|
---|
1266 | particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
|
---|
1267 | @item
|
---|
1268 | If you apply a patch by someone else, include the name and email address in
|
---|
1269 | the log message. Since the ffmpeg-cvslog mailing list is publicly
|
---|
1270 | archived you should add some SPAM protection to the email address. Send an
|
---|
1271 | answer to ffmpeg-devel (or wherever you got the patch from) saying that
|
---|
1272 | you applied the patch.
|
---|
1273 | @item
|
---|
1274 | Do NOT commit to code actively maintained by others without permission.
|
---|
1275 | Send a patch to ffmpeg-devel instead. If noone answers within a reasonable
|
---|
1276 | timeframe (12h for build failures and security fixes, 3 days small changes,
|
---|
1277 | 1 week for big patches) then commit your patch if you think it's OK.
|
---|
1278 | Also note, the maintainer can simply ask for more time to review!
|
---|
1279 | @item
|
---|
1280 | Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits
|
---|
1281 | are sent there and reviewed by all the other developers. Bugs and possible
|
---|
1282 | improvements or general questions regarding commits are discussed there. We
|
---|
1283 | expect you to react if problems with your code are uncovered.
|
---|
1284 | @item
|
---|
1285 | Update the documentation if you change behavior or add features. If you are
|
---|
1286 | unsure how best to do this, send a patch to ffmpeg-devel, the documentation
|
---|
1287 | maintainer(s) will review and commit your stuff.
|
---|
1288 | @item
|
---|
1289 | Never write to unallocated memory, never write over the end of arrays,
|
---|
1290 | always check values read from some untrusted source before using them
|
---|
1291 | as array index or other risky things.
|
---|
1292 | @item
|
---|
1293 | Remember to check if you need to bump versions for the specific libav
|
---|
1294 | parts (libavutil, libavcodec, libavformat) you are changing. You need
|
---|
1295 | to change the version integer and the version string.
|
---|
1296 | Incrementing the first component means no backward compatibility to
|
---|
1297 | previous versions (e.g. removal of a function).
|
---|
1298 | Incrementing the second component means backward compatible change
|
---|
1299 | (e.g. addition of a function).
|
---|
1300 | Incrementing the third component means a noteworthy binary compatible
|
---|
1301 | change (e.g. encoder bug fix that matters for the decoder).
|
---|
1302 | @item
|
---|
1303 | If you add a new codec, remember to update the changelog, add it to
|
---|
1304 | the supported codecs table in the documentation and bump the second
|
---|
1305 | component of the @file{libavcodec} version number appropriately. If
|
---|
1306 | it has a fourcc, add it to @file{libavformat/avienc.c}, even if it
|
---|
1307 | is only a decoder.
|
---|
1308 | @end enumerate
|
---|
1309 |
|
---|
1310 | We think our rules are not too hard. If you have comments, contact us.
|
---|
1311 |
|
---|
1312 | Note, these rules are mostly borrowed from the MPlayer project.
|
---|
1313 |
|
---|
1314 | @subsection Renaming/moving files or content of files
|
---|
1315 | You CANNOT do that. Post a request for such a change to the mailing list
|
---|
1316 | Do NOT remove & readd a file - it will kill the changelog!!!!
|
---|
1317 |
|
---|
1318 | @section Submitting patches
|
---|
1319 |
|
---|
1320 | First, (@pxref{Coding Rules}) above if you didn't yet.
|
---|
1321 |
|
---|
1322 | When you submit your patch, try to send a unified diff (diff '-up'
|
---|
1323 | option). I cannot read other diffs :-)
|
---|
1324 |
|
---|
1325 | Also please do not submit patches which contain several unrelated changes.
|
---|
1326 | Split them into individual self-contained patches; this makes reviewing
|
---|
1327 | them much easier.
|
---|
1328 |
|
---|
1329 | Run the regression tests before submitting a patch so that you can
|
---|
1330 | verify that there are no big problems.
|
---|
1331 |
|
---|
1332 | Patches should be posted as base64 encoded attachments (or any other
|
---|
1333 | encoding which ensures that the patch won't be trashed during
|
---|
1334 | transmission) to the ffmpeg-devel mailing list, see
|
---|
1335 | @url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel}
|
---|
1336 |
|
---|
1337 | It also helps quite a bit if you tell us what the patch does (for example
|
---|
1338 | 'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant
|
---|
1339 | and has no lrint()')
|
---|
1340 |
|
---|
1341 | We reply to all submitted patches and either apply or reject with some
|
---|
1342 | explanation why, but sometimes we are quite busy so it can take a week or two.
|
---|
1343 |
|
---|
1344 | @section Regression tests
|
---|
1345 |
|
---|
1346 | Before submitting a patch (or committing to the repository), you should at least
|
---|
1347 | test that you did not break anything.
|
---|
1348 |
|
---|
1349 | The regression tests build a synthetic video stream and a synthetic
|
---|
1350 | audio stream. These are then encoded and decoded with all codecs or
|
---|
1351 | formats. The CRC (or MD5) of each generated file is recorded in a
|
---|
1352 | result file. A 'diff' is launched to compare the reference results and
|
---|
1353 | the result file.
|
---|
1354 |
|
---|
1355 | The regression tests then go on to test the FFserver code with a
|
---|
1356 | limited set of streams. It is important that this step runs correctly
|
---|
1357 | as well.
|
---|
1358 |
|
---|
1359 | Run 'make test' to test all the codecs and formats.
|
---|
1360 |
|
---|
1361 | Run 'make fulltest' to test all the codecs, formats and FFserver.
|
---|
1362 |
|
---|
1363 | [Of course, some patches may change the results of the regression tests. In
|
---|
1364 | this case, the reference results of the regression tests shall be modified
|
---|
1365 | accordingly].
|
---|
1366 |
|
---|
1367 | @bye
|
---|