fixed 'file:' in URLs
[ffmpeg.git] / doc / ffmpeg-doc.html
1 <HTML>
2 <HEAD>
3 <!-- Created by texi2html 1.56k from ffmpeg-doc.texi on 19 November 2002 -->
4
5 <TITLE>FFmpeg Documentation</TITLE>
6 </HEAD>
7 <BODY>
8 <H1>FFmpeg Documentation</H1>
9 <P>
10 <P><HR><P>
11 <H1>Table of Contents</H1>
12 <UL>
13 <LI><A NAME="TOC1" HREF="ffmpeg-doc.html#SEC1">1. Introduction</A>
14 <LI><A NAME="TOC2" HREF="ffmpeg-doc.html#SEC2">2. Quick Start</A>
15 <UL>
16 <LI><A NAME="TOC3" HREF="ffmpeg-doc.html#SEC3">2.1 Video and Audio grabbing</A>
17 <LI><A NAME="TOC4" HREF="ffmpeg-doc.html#SEC4">2.2 Video and Audio file format convertion</A>
18 </UL>
19 <LI><A NAME="TOC5" HREF="ffmpeg-doc.html#SEC5">3. Invocation</A>
20 <UL>
21 <LI><A NAME="TOC6" HREF="ffmpeg-doc.html#SEC6">3.1 Syntax</A>
22 <LI><A NAME="TOC7" HREF="ffmpeg-doc.html#SEC7">3.2 Main options</A>
23 <LI><A NAME="TOC8" HREF="ffmpeg-doc.html#SEC8">3.3 Video Options</A>
24 <LI><A NAME="TOC9" HREF="ffmpeg-doc.html#SEC9">3.4 Audio Options</A>
25 <LI><A NAME="TOC10" HREF="ffmpeg-doc.html#SEC10">3.5 Advanced options</A>
26 <LI><A NAME="TOC11" HREF="ffmpeg-doc.html#SEC11">3.6 Protocols</A>
27 </UL>
28 <LI><A NAME="TOC12" HREF="ffmpeg-doc.html#SEC12">4. Tips</A>
29 <LI><A NAME="TOC13" HREF="ffmpeg-doc.html#SEC13">5. Supported File Formats and Codecs</A>
30 <UL>
31 <LI><A NAME="TOC14" HREF="ffmpeg-doc.html#SEC14">5.1 File Formats</A>
32 <LI><A NAME="TOC15" HREF="ffmpeg-doc.html#SEC15">5.2 Image Formats</A>
33 <LI><A NAME="TOC16" HREF="ffmpeg-doc.html#SEC16">5.3 Video Codecs</A>
34 <LI><A NAME="TOC17" HREF="ffmpeg-doc.html#SEC17">5.4 Audio Codecs</A>
35 </UL>
36 <LI><A NAME="TOC18" HREF="ffmpeg-doc.html#SEC18">6. Platform Specific information</A>
37 <UL>
38 <LI><A NAME="TOC19" HREF="ffmpeg-doc.html#SEC19">6.1 Linux</A>
39 <LI><A NAME="TOC20" HREF="ffmpeg-doc.html#SEC20">6.2 BSD</A>
40 <LI><A NAME="TOC21" HREF="ffmpeg-doc.html#SEC21">6.3 Windows</A>
41 <LI><A NAME="TOC22" HREF="ffmpeg-doc.html#SEC22">6.4 MacOS X</A>
42 <LI><A NAME="TOC23" HREF="ffmpeg-doc.html#SEC23">6.5 BeOS</A>
43 </UL>
44 <LI><A NAME="TOC24" HREF="ffmpeg-doc.html#SEC24">7. Developpers Guide</A>
45 <UL>
46 <LI><A NAME="TOC25" HREF="ffmpeg-doc.html#SEC25">7.1 API</A>
47 <LI><A NAME="TOC26" HREF="ffmpeg-doc.html#SEC26">7.2 Integrating libavcodec or libavformat in your program</A>
48 <LI><A NAME="TOC27" HREF="ffmpeg-doc.html#SEC27">7.3 Coding Rules</A>
49 <LI><A NAME="TOC28" HREF="ffmpeg-doc.html#SEC28">7.4 Submitting patches</A>
50 <LI><A NAME="TOC29" HREF="ffmpeg-doc.html#SEC29">7.5 Regression tests</A>
51 </UL>
52 </UL>
53 <P><HR><P>
54
55 <P>
56 FFmpeg Documentation
57
58
59
60
61 <H1><A NAME="SEC1" HREF="ffmpeg-doc.html#TOC1">1. Introduction</A></H1>
62
63 <P>
64 FFmpeg is a very fast video and audio converter. It can also grab from
65 a live audio/video source.
66   
67 The command line interface is designed to be intuitive, in the sense
68 that ffmpeg tries to figure out all the parameters, when
69 possible. You have usually to give only the target bitrate you want.
70
71
72 <P>
73 FFmpeg can also convert from any sample rate to any other, and resize
74 video on the fly with a high quality polyphase filter.
75
76
77
78
79 <H1><A NAME="SEC2" HREF="ffmpeg-doc.html#TOC2">2. Quick Start</A></H1>
80
81
82
83 <H2><A NAME="SEC3" HREF="ffmpeg-doc.html#TOC3">2.1 Video and Audio grabbing</A></H2>
84
85 <P>
86  FFmpeg can use a video4linux compatible video source and any Open Sound
87   System audio source:
88
89 <PRE>
90   ffmpeg /tmp/out.mpg 
91 </PRE>
92
93 <P>
94   Note that you must activate the right video source and channel
95   before launching ffmpeg. You can use any TV viewer such as xawtv by
96   Gerd Knorr which I find very good. You must also set correctly the
97   audio recording levels with a standard mixer.
98
99
100
101
102 <H2><A NAME="SEC4" HREF="ffmpeg-doc.html#TOC4">2.2 Video and Audio file format convertion</A></H2>
103
104 <P>
105 * ffmpeg can use any supported file format and protocol as input: 
106
107
108 <P>
109 Examples:
110
111
112 <P>
113 * You can input from YUV files:
114
115
116
117 <PRE>
118   ffmpeg -i /tmp/test%d.Y /tmp/out.mpg 
119 </PRE>
120
121 <P>
122   It will use the files: 
123
124 <PRE>
125        /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
126        /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
127 </PRE>
128
129 <P>
130   The Y files use twice the resolution of the U and V files. They are
131   raw files, without header. They can be generated by all decent video
132   decoders. You must specify the size of the image with the '-s' option
133   if ffmpeg cannot guess it.
134
135
136 <P>
137 * You can input from a RAW YUV420P file:
138
139
140
141 <PRE>
142   ffmpeg -i /tmp/test.yuv /tmp/out.avi
143 </PRE>
144
145 <P>
146   The RAW YUV420P is a file containing RAW YUV planar, for each frame first
147   come the Y plane followed by U and V planes, which are half vertical and
148   horizontal resolution.
149
150
151 <P>
152 * You can output to a RAW YUV420P file:
153
154
155
156 <PRE>
157   ffmpeg -i mydivx.avi -o hugefile.yuv
158 </PRE>
159
160 <P>
161 * You can set several input files and output files:
162
163
164
165 <PRE>
166   ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
167 </PRE>
168
169 <P>
170   Convert the audio file a.wav and the raw yuv video file a.yuv
171   to mpeg file a.mpg
172
173
174 <P>
175 * You can also do audio and video convertions at the same time:
176
177
178
179 <PRE>
180   ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
181 </PRE>
182
183 <P>
184   Convert the sample rate of a.wav to 22050 Hz and encode it to MPEG audio.
185
186
187 <P>
188 * You can encode to several formats at the same time and define a
189   mapping from input stream to output streams:
190
191
192
193 <PRE>
194   ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0
195 </PRE>
196
197 <P>
198   Convert a.wav to a.mp2 at 64 kbits and b.mp2 at 128 kbits. '-map
199   file:index' specify which input stream is used for each output
200   stream, in the order of the definition of output streams.
201
202
203 <P>
204 * You can transcode decrypted VOBs
205
206
207
208 <PRE>
209   ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi
210 </PRE>
211
212 <P>
213   This is a typicall DVD ripper example, input from a VOB file, output
214   to an AVI file with MPEG-4 video and MP3 audio, note that in this
215   command we use B frames so the MPEG-4 stream is DivX5 compatible, GOP
216   size is 300 that means an INTRA frame every 10 seconds for 29.97 fps
217   input video.  Also the audio stream is MP3 encoded so you need LAME
218   support which is enabled using <CODE>--enable-mp3lame</CODE> when
219   configuring.  The mapping is particullary usefull for DVD transcoding
220   to get the desired audio language.
221
222
223 <P>
224   NOTE: to see the supported input formats, use <CODE>ffmpeg -formats</CODE>.
225
226
227
228
229 <H1><A NAME="SEC5" HREF="ffmpeg-doc.html#TOC5">3. Invocation</A></H1>
230
231
232
233 <H2><A NAME="SEC6" HREF="ffmpeg-doc.html#TOC6">3.1 Syntax</A></H2>
234
235 <P>
236  The generic syntax is:
237
238
239
240 <PRE>
241   ffmpeg [[options][-i input_file]]... {[options] output_file}...
242 </PRE>
243
244 <P>
245   If no input file is given, audio/video grabbing is done.
246
247
248 <P>
249   As a general rule, options are applied to the next specified
250   file. For example, if you give the '-b 64' option, it sets the video
251   bitrate of the next file. Format option may be needed for raw input
252   files.
253
254
255 <P>
256   By default, ffmpeg tries to convert as losslessly as possible: it
257   uses the same audio and video parameter fors the outputs as the one
258   specified for the inputs.
259
260
261
262
263 <H2><A NAME="SEC7" HREF="ffmpeg-doc.html#TOC7">3.2 Main options</A></H2>
264
265 <DL COMPACT>
266
267 <DT><SAMP>`-L'</SAMP>
268 <DD>
269 show license
270 <DT><SAMP>`-h'</SAMP>
271 <DD>
272                   show help
273 <DT><SAMP>`-formats'</SAMP>
274 <DD>
275 show available formats, codecs, protocols, ...
276 <DT><SAMP>`-f fmt'</SAMP>
277 <DD>
278 force format
279 <DT><SAMP>`-i filename'</SAMP>
280 <DD>
281 input file name
282
283 <DT><SAMP>`-y'</SAMP>
284 <DD>
285 overwrite output files
286
287 <DT><SAMP>`-t duration'</SAMP>
288 <DD>
289 set the recording time in seconds. <CODE>hh:mm:ss[.xxx]</CODE> syntax is also
290 supported.
291
292 <DT><SAMP>`-title string'</SAMP>
293 <DD>
294 set the title
295
296 <DT><SAMP>`-author string'</SAMP>
297 <DD>
298 set the author
299
300 <DT><SAMP>`-copyright string'</SAMP>
301 <DD>
302 set the copyright
303
304 <DT><SAMP>`-comment string'</SAMP>
305 <DD>
306 set the comment
307
308 <DT><SAMP>`-b bitrate'</SAMP>
309 <DD>
310 set video bitrate (in kbit/s)
311 </DL>
312
313
314
315 <H2><A NAME="SEC8" HREF="ffmpeg-doc.html#TOC8">3.3 Video Options</A></H2>
316
317 <DL COMPACT>
318
319 <DT><SAMP>`-s size'</SAMP>
320 <DD>
321 set frame size                       [160x128]
322 <DT><SAMP>`-r fps'</SAMP>
323 <DD>
324 set frame rate                       [25]
325 <DT><SAMP>`-b bitrate'</SAMP>
326 <DD>
327 set the video bitrate in kbit/s      [200]
328 <DT><SAMP>`-vn'</SAMP>
329 <DD>
330 disable video recording              [no]
331 <DT><SAMP>`-bt tolerance'</SAMP>
332 <DD>
333 set video bitrate tolerance (in kbit/s)
334 <DT><SAMP>`-sameq'</SAMP>
335 <DD>
336 use same video quality as source (implies VBR)
337
338 <DT><SAMP>`-pass n'</SAMP>
339 <DD>
340 select the pass number (1 or 2). It is useful to do two pass encoding. The statistics of the video are recorded in the first pass and the video at the exact requested bit rate is generated in the second pass.
341
342 <DT><SAMP>`-passlogfile file'</SAMP>
343 <DD>
344 select two pass log file name
345
346 </DL>
347
348
349
350 <H2><A NAME="SEC9" HREF="ffmpeg-doc.html#TOC9">3.4 Audio Options</A></H2>
351
352 <DL COMPACT>
353
354 <DT><SAMP>`-ab bitrate'</SAMP>
355 <DD>
356 set audio bitrate (in kbit/s)
357 <DT><SAMP>`-ar freq'</SAMP>
358 <DD>
359  set the audio sampling freq          [44100]
360 <DT><SAMP>`-ab bitrate'</SAMP>
361 <DD>
362  set the audio bitrate in kbit/s      [64]
363 <DT><SAMP>`-ac channels'</SAMP>
364 <DD>
365  set the number of audio channels     [1]
366 <DT><SAMP>`-an'</SAMP>
367 <DD>
368  disable audio recording              [no]
369 </DL>
370
371
372
373 <H2><A NAME="SEC10" HREF="ffmpeg-doc.html#TOC10">3.5 Advanced options</A></H2>
374
375 <DL COMPACT>
376
377 <DT><SAMP>`-map file:stream'</SAMP>
378 <DD>
379 set input stream mapping
380 <DT><SAMP>`-g gop_size'</SAMP>
381 <DD>
382 set the group of picture size
383 <DT><SAMP>`-intra'</SAMP>
384 <DD>
385 use only intra frames
386 <DT><SAMP>`-qscale q'</SAMP>
387 <DD>
388 use fixed video quantiser scale (VBR)
389 <DT><SAMP>`-qmin q'</SAMP>
390 <DD>
391 min video quantiser scale (VBR)
392 <DT><SAMP>`-qmax q'</SAMP>
393 <DD>
394 max video quantiser scale (VBR)
395 <DT><SAMP>`-qdiff q'</SAMP>
396 <DD>
397 max difference between the quantiser scale (VBR)
398 <DT><SAMP>`-qblur blur'</SAMP>
399 <DD>
400 video quantiser scale blur (VBR)
401 <DT><SAMP>`-qcomp compression'</SAMP>
402 <DD>
403 video quantiser scale compression (VBR)
404 <DT><SAMP>`-vd device'</SAMP>
405 <DD>
406 set video device
407 <DT><SAMP>`-vcodec codec'</SAMP>
408 <DD>
409 force video codec
410 <DT><SAMP>`-me method'</SAMP>
411 <DD>
412 set motion estimation method
413 <DT><SAMP>`-bf frames'</SAMP>
414 <DD>
415 use 'frames' B frames (only MPEG-4)
416 <DT><SAMP>`-hq'</SAMP>
417 <DD>
418 activate high quality settings
419 <DT><SAMP>`-4mv'</SAMP>
420 <DD>
421 use four motion vector by macroblock (only MPEG-4)
422 <DT><SAMP>`-ad device'</SAMP>
423 <DD>
424 set audio device
425 <DT><SAMP>`-acodec codec'</SAMP>
426 <DD>
427 force audio codec
428 <DT><SAMP>`-deinterlace'</SAMP>
429 <DD>
430 deinterlace pictures
431 <DT><SAMP>`-benchmark'</SAMP>
432 <DD>
433 add timings for benchmarking
434 <DT><SAMP>`-hex'</SAMP>
435 <DD>
436 dump each input packet
437 <DT><SAMP>`-psnr'</SAMP>
438 <DD>
439 calculate PSNR of compressed frames
440 <DT><SAMP>`-vstats'</SAMP>
441 <DD>
442 dump video coding statistics to file
443 </DL>
444
445
446
447 <H2><A NAME="SEC11" HREF="ffmpeg-doc.html#TOC11">3.6 Protocols</A></H2>
448
449 <P>
450 The filename can be <TT>`-'</TT> to read from the standard input or to write
451 to the standard output.
452
453
454 <P>
455 ffmpeg handles also many protocols specified with the URL syntax.
456
457
458 <P>
459  Use 'ffmpeg -formats' to have a list of the supported protocols.
460
461
462 <P>
463  The protocol <CODE>http:</CODE> is currently used only to communicate with
464  ffserver (see the ffserver documentation). When ffmpeg will be a
465  video player it will also be used for streaming :-)
466
467
468
469
470 <H1><A NAME="SEC12" HREF="ffmpeg-doc.html#TOC12">4. Tips</A></H1>
471
472
473 <UL>
474 <LI>For streaming at very low bit rate application, use a low frame rate
475
476   and a small gop size. This is especially true for real video where
477   the Linux player does not seem to be very fast, so it can miss
478   frames. An example is:
479
480
481 <PRE>
482   ffmpeg -g 3 -r 3 -t 10 -b 50 -s qcif -f rv10 /tmp/b.rm
483 </PRE>
484
485 <LI>The parameter 'q' which is displayed while encoding is the current
486
487   quantizer. The value of 1 indicates that a very good quality could
488   be achieved. The value of 31 indicates the worst quality. If q=31
489   too often, it means that the encoder cannot compress enough to meet
490   your bit rate. You must either increase the bit rate, decrease the
491   frame rate or decrease the frame size.
492
493 <LI>If your computer is not fast enough, you can speed up the
494
495   compression at the expense of the compression ratio. You can use
496   '-me zero' to speed up motion estimation, and '-intra' to disable
497   completly motion estimation (you have only I frames, which means it
498   is about as good as JPEG compression).
499
500 <LI>To have very low bitrates in audio, reduce the sampling frequency
501
502   (down to 22050 kHz for mpeg audio, 22050 or 11025 for ac3).
503
504 <LI>To have a constant quality (but a variable bitrate), use the option
505
506   '-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
507   quality).
508
509 <LI>When converting video files, you can use the '-sameq' option which
510
511   uses in the encoder the same quality factor than in the decoder. It
512   allows to be almost lossless in encoding.
513
514 </UL>
515
516
517
518 <H1><A NAME="SEC13" HREF="ffmpeg-doc.html#TOC13">5. Supported File Formats and Codecs</A></H1>
519
520 <P>
521 You can use the <CODE>-formats</CODE> option to have an exhaustive list.
522
523
524
525
526 <H2><A NAME="SEC14" HREF="ffmpeg-doc.html#TOC14">5.1 File Formats</A></H2>
527
528 <P>
529 FFmpeg supports the following file formats thru the <CODE>libavformat</CODE>
530 library:
531
532
533 <TABLE BORDER>
534
535 <TR><TD>Supported File Format </TD><TD> Encoding </TD><TD> Decoding </TD><TD> Comments</TD>
536
537 </TR>
538 <TR><TD>MPEG audio </TD><TD> X </TD><TD> X</TD>
539
540 </TR>
541 <TR><TD>MPEG1 systems </TD><TD> X  </TD><TD>  X</TD>
542
543 </TD><TD> muxed audio and video
544 </TR>
545 <TR><TD>MPEG2 PS </TD><TD> X  </TD><TD>  X</TD>
546
547 </TD><TD> also known as <CODE>VOB</CODE> file
548 </TR>
549 <TR><TD>MPEG2 TS </TD><TD>    </TD><TD>  X</TD>
550
551 </TD><TD> also known as DVB Transport Stream
552 </TR>
553 <TR><TD>ASF</TD><TD> X </TD><TD> X</TD>
554
555 </TR>
556 <TR><TD>AVI</TD><TD> X </TD><TD> X</TD>
557
558 </TR>
559 <TR><TD>WAV</TD><TD> X </TD><TD> X</TD>
560
561 </TR>
562 <TR><TD>Macromedia Flash</TD><TD> X </TD><TD> X</TD>
563
564 </TD><TD> Only embedded audio is decoded
565 </TR>
566 <TR><TD>Real Audio and Video </TD><TD> X </TD><TD> X</TD>
567
568 </TR>
569 <TR><TD>Raw AC3 </TD><TD> X  </TD><TD>  X</TD>
570
571 </TR>
572 <TR><TD>Raw MJPEG </TD><TD> X  </TD><TD>  X</TD>
573
574 </TR>
575 <TR><TD>Raw MPEG video </TD><TD> X  </TD><TD>  X</TD>
576
577 </TR>
578 <TR><TD>Raw PCM8/16 bits, mulaw/Alaw</TD><TD> X  </TD><TD>  X</TD>
579
580 </TR>
581 <TR><TD>SUN AU format </TD><TD> X  </TD><TD>  X</TD>
582
583 </TR>
584 <TR><TD>Quicktime        </TD><TD>   </TD><TD>  X</TD>
585
586 </TR>
587 <TR><TD>MPEG4            </TD><TD>  </TD><TD>  X</TD>
588
589 </TD><TD> MPEG4 is a variant of Quicktime
590 </TR>
591 <TR><TD>Raw MPEG4 video  </TD><TD>  X </TD><TD>  X</TD>
592
593 </TR>
594 <TR><TD>DV               </TD><TD>  </TD><TD> X</TD>
595
596 </TD><TD> Only the video track is decoded.
597 </TR></TABLE>
598
599 <P>
600 <CODE>X</CODE> means that the encoding (resp. decoding) is supported.
601
602
603
604
605 <H2><A NAME="SEC15" HREF="ffmpeg-doc.html#TOC15">5.2 Image Formats</A></H2>
606
607 <P>
608 FFmpeg can read and write images for each frame of a video sequence. The
609 following image formats are supported:
610
611
612 <TABLE BORDER>
613
614 <TR><TD>Supported Image Format </TD><TD> Encoding </TD><TD> Decoding </TD><TD> Comments</TD>
615
616 </TR>
617 <TR><TD>PGM, PPM     </TD><TD> X </TD><TD> X</TD>
618
619 </TR>
620 <TR><TD>PGMYUV       </TD><TD> X </TD><TD> X </TD><TD> PGM with U and V components in 420</TD>
621
622 </TR>
623 <TR><TD>JPEG         </TD><TD> X </TD><TD> X </TD><TD> Progressive JPEG is not supported</TD>
624
625 </TR>
626 <TR><TD>.Y.U.V       </TD><TD> X </TD><TD> X </TD><TD> One raw file per component</TD>
627
628 </TR>
629 <TR><TD>Animated GIF </TD><TD> X </TD><TD>   </TD><TD> Only uncompressed GIFs are generated</TD>
630
631 </TR></TABLE>
632
633 <P>
634 <CODE>X</CODE> means that the encoding (resp. decoding) is supported.
635
636
637
638
639 <H2><A NAME="SEC16" HREF="ffmpeg-doc.html#TOC16">5.3 Video Codecs</A></H2>
640
641 <TABLE BORDER>
642
643 <TR><TD>Supported Codec </TD><TD> Encoding </TD><TD> Decoding </TD><TD> Comments</TD>
644
645 </TR>
646 <TR><TD>MPEG1 video            </TD><TD>  X  </TD><TD>  X</TD>
647
648 </TR>
649 <TR><TD>MPEG2 video            </TD><TD>     </TD><TD>  X</TD>
650
651 </TR>
652 <TR><TD>MPEG4                  </TD><TD>  X  </TD><TD>  X </TD><TD> Also known as DIVX4/5</TD>
653
654 </TR>
655 <TR><TD>MSMPEG4 V1             </TD><TD>  X  </TD><TD>  X</TD>
656
657 </TR>
658 <TR><TD>MSMPEG4 V2             </TD><TD>  X  </TD><TD>  X</TD>
659
660 </TR>
661 <TR><TD>MSMPEG4 V3             </TD><TD>  X  </TD><TD>  X </TD><TD> Also known as DIVX3</TD>
662
663 </TR>
664 <TR><TD>WMV7                   </TD><TD>  X  </TD><TD>  X</TD>
665
666 </TR>
667 <TR><TD>H263(+)                </TD><TD>  X  </TD><TD>  X </TD><TD> Also known as Real Video 1.0</TD>
668
669 </TR>
670 <TR><TD>MJPEG                  </TD><TD>  X  </TD><TD>  X</TD>
671
672 </TR>
673 <TR><TD>DV                     </TD><TD>     </TD><TD>  X</TD>
674
675 </TR>
676 <TR><TD>Huff YUV               </TD><TD>  X  </TD><TD>  X</TD>
677
678 </TR></TABLE>
679
680 <P>
681 <CODE>X</CODE> means that the encoding (resp. decoding) is supported.
682
683
684 <P>
685 Check at <A HREF="http://www.mplayerhq.hu/~michael/codec-features.html">http://www.mplayerhq.hu/~michael/codec-features.html</A> to
686 get a precise comparison of FFmpeg MPEG4 codec compared to the other
687 solutions.
688
689
690
691
692 <H2><A NAME="SEC17" HREF="ffmpeg-doc.html#TOC17">5.4 Audio Codecs</A></H2>
693
694 <TABLE BORDER>
695
696 <TR><TD>Supported Codec </TD><TD> Encoding </TD><TD> Decoding </TD><TD> Comments</TD>
697
698 </TR>
699 <TR><TD>MPEG audio layer 2     </TD><TD>  IX  </TD><TD>  IX</TD>
700
701 </TR>
702 <TR><TD>MPEG audio layer 1/3   </TD><TD> IX   </TD><TD>  IX</TD>
703
704 </TD><TD> MP3 encoding is supported thru the external library LAME
705 </TR>
706 <TR><TD>AC3                    </TD><TD>  IX  </TD><TD>  X</TD>
707
708 </TD><TD> liba52 is used internally for decoding.
709 </TR>
710 <TR><TD>Vorbis                 </TD><TD>  X   </TD><TD></TD>
711
712 </TD><TD> encoding is supported thru the external library libvorbis.
713 </TR>
714 <TR><TD>WMA V1/V2              </TD><TD>      </TD><TD> X</TD>
715
716 </TR></TABLE>
717
718 <P>
719 <CODE>X</CODE> means that the encoding (resp. decoding) is supported.
720
721
722 <P>
723 <CODE>I</CODE> means that an integer only version is available too (ensures highest
724 performances on systems without hardware floating point support).
725
726
727
728
729 <H1><A NAME="SEC18" HREF="ffmpeg-doc.html#TOC18">6. Platform Specific information</A></H1>
730
731
732
733 <H2><A NAME="SEC19" HREF="ffmpeg-doc.html#TOC19">6.1 Linux</A></H2>
734
735 <P>
736 ffmpeg should be compiled with at least GCC 2.95.3. GCC 3.2 is the
737 prefered compiler now for ffmpeg. All futur optimizations will depend on
738 features only found in GCC 3.2.
739
740
741
742
743 <H2><A NAME="SEC20" HREF="ffmpeg-doc.html#TOC20">6.2 BSD</A></H2>
744
745
746
747 <H2><A NAME="SEC21" HREF="ffmpeg-doc.html#TOC21">6.3 Windows</A></H2>
748
749
750
751 <H2><A NAME="SEC22" HREF="ffmpeg-doc.html#TOC22">6.4 MacOS X</A></H2>
752
753
754
755 <H2><A NAME="SEC23" HREF="ffmpeg-doc.html#TOC23">6.5 BeOS</A></H2>
756
757 <P>
758 The configure script should guess the configuration itself.
759 Networking support is currently not finished.
760 errno issues fixed by Andrew Bachmann.
761
762
763 <P>
764 Old stuff:
765
766
767 <P>
768 Fran├žois Revol - revol at free dot fr - April 2002
769
770
771 <P>
772 The configure script should guess the configuration itself, 
773 however I still didn't tested building on net_server version of BeOS.
774
775
776 <P>
777 ffserver is broken (needs poll() implementation).
778
779
780 <P>
781 There is still issues with errno codes, which are negative in BeOs, and
782 that ffmpeg negates when returning. This ends up turning errors into 
783 valid results, then crashes.
784 (To be fixed)
785
786
787
788
789 <H1><A NAME="SEC24" HREF="ffmpeg-doc.html#TOC24">7. Developpers Guide</A></H1>
790
791
792
793 <H2><A NAME="SEC25" HREF="ffmpeg-doc.html#TOC25">7.1 API</A></H2>
794
795 <UL>
796 <LI>libavcodec is the library containing the codecs (both encoding and
797
798   decoding). See <TT>`libavcodec/apiexample.c'</TT> to see how to use it.
799
800 <LI>libavformat is the library containing the file formats handling (mux and
801
802   demux code for several formats). (no example yet, the API is likely to
803   evolve).
804 </UL>
805
806
807
808 <H2><A NAME="SEC26" HREF="ffmpeg-doc.html#TOC26">7.2 Integrating libavcodec or libavformat in your program</A></H2>
809
810 <P>
811 You can integrate all the source code of the libraries to link them
812 statically to avoid any version problem. All you need is to provide a
813 'config.mak' and a 'config.h' in the parent directory. See the defines
814 generated by ./configure to understand what is needed.
815
816
817 <P>
818 You can use libavcodec or libavformat in your commercial program, but
819 <EM>any patch you make must be published</EM>. The best way to proceed is
820 to send your patches to the ffmpeg mailing list.
821
822
823
824
825 <H2><A NAME="SEC27" HREF="ffmpeg-doc.html#TOC27">7.3 Coding Rules</A></H2>
826
827 <P>
828 ffmpeg is programmed in ANSI C language. GCC extensions are
829 tolerated. Indent size is 4. The TAB character should not be used.
830
831
832 <P>
833 The presentation is the one specified by 'indent -i4 -kr'.
834
835
836 <P>
837 Main priority in ffmpeg is simplicity and small code size (=less
838 bugs).
839
840
841 <P>
842 Comments: for functions visible from other modules, use the JavaDoc
843 format (see examples in <TT>`libav/utils.c'</TT>) so that a documentation
844 can be generated automatically.
845
846
847
848
849 <H2><A NAME="SEC28" HREF="ffmpeg-doc.html#TOC28">7.4 Submitting patches</A></H2>
850
851 <P>
852 When you submit your patch, try to send a unified diff (diff '-u'
853 option). I cannot read other diffs :-)
854
855
856 <P>
857 Run the regression tests before submitting a patch so that you can
858 verify that there is no big problems.
859
860
861 <P>
862 Except if your patch is really big and adds an important feature, by
863 submitting it to me, you accept implicitely to put it under my
864 copyright. I prefer to do this to avoid potential problems if
865 licensing of ffmpeg changes.
866
867
868 <P>
869 Patches should be posted as base64 encoded attachments (or any other
870 encoding which ensures that the patch wont be trashed during 
871 transmission) to the ffmpeg-devel mailinglist, see 
872 <A HREF="http://lists.sourceforge.net/lists/listinfo/ffmpeg-devel">http://lists.sourceforge.net/lists/listinfo/ffmpeg-devel</A>
873
874
875
876
877 <H2><A NAME="SEC29" HREF="ffmpeg-doc.html#TOC29">7.5 Regression tests</A></H2>
878
879 <P>
880 Before submitting a patch (or commiting with CVS), you should at least
881 test that you did not break anything.
882
883
884 <P>
885 The regression test build a synthetic video stream and a synthetic
886 audio stream. Then there are encoded then decoded with all codecs or
887 formats. The CRC (or MD5) of each generated file is recorded in a
888 result file. Then a 'diff' is launched with the reference results and
889 the result file.
890
891
892 <P>
893 Run 'make test' to test all the codecs.
894
895
896 <P>
897 Run 'make libavtest' to test all the codecs.
898
899
900 <P>
901 [Of course, some patches may change the regression tests results. In
902 this case, the regression tests reference results shall be modified
903 accordingly].
904
905
906 <P><HR><P>
907 This document was generated on 19 November 2002 using
908 <A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>&nbsp;1.56k.
909 </BODY>
910 </HTML>