]> git.sesse.net Git - ffmpeg/blob - doc/ffmpeg-doc.texi
95e419dbbee46bc08c41806feaf0039d7867c914
[ffmpeg] / doc / ffmpeg-doc.texi
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 @chapter Synopsis
11
12 The generic syntax is:
13
14 @example
15 @c man begin SYNOPSIS
16 ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{outfile}@}...
17 @c man end
18 @end example
19
20 @chapter Description
21 @c man begin DESCRIPTION
22
23 FFmpeg is a very fast video and audio converter. It can also grab from
24 a live audio/video source.
25
26 The command line interface is designed to be intuitive, in the sense
27 that FFmpeg tries to figure out all parameters that can possibly be
28 derived automatically. You usually only have to specify the target
29 bitrate you want.
30
31 FFmpeg can also convert from any sample rate to any other, and resize
32 video on the fly with a high quality polyphase filter.
33
34 As a general rule, options are applied to the next specified
35 file. Therefore, order is important, and you can have the same
36 option on the command line multiple times. Each occurrence is
37 then applied to the next input or output file.
38
39 * To set the video bitrate of the output file to 64kbit/s:
40 @example
41 ffmpeg -i input.avi -b 64k output.avi
42 @end example
43
44 * To force the frame rate of the output file to 24 fps:
45 @example
46 ffmpeg -i input.avi -r 24 output.avi
47 @end example
48
49 * To force the frame rate of the input file (valid for raw formats only)
50 to 1 fps and the frame rate of the output file to 24 fps:
51 @example
52 ffmpeg -r 1 -i input.m2v -r 24 output.avi
53 @end example
54
55 The format option may be needed for raw input files.
56
57 By default, FFmpeg tries to convert as losslessly as possible: It
58 uses the same audio and video parameters for the outputs as the one
59 specified for the inputs.
60
61 @c man end DESCRIPTION
62
63 @chapter Options
64 @c man begin OPTIONS
65
66 @include fftools-common-opts.texi
67
68 @section Main options
69
70 @table @option
71
72 @item -f @var{fmt}
73 Force format.
74
75 @item -i @var{filename}
76 input file name
77
78 @item -y
79 Overwrite output files.
80
81 @item -t @var{duration}
82 Restrict the transcoded/captured video sequence
83 to the duration specified in seconds.
84 @code{hh:mm:ss[.xxx]} syntax is also supported.
85
86 @item -fs @var{limit_size}
87 Set the file size limit.
88
89 @item -ss @var{position}
90 Seek to given time position in seconds.
91 @code{hh:mm:ss[.xxx]} syntax is also supported.
92
93 @item -itsoffset @var{offset}
94 Set the input time offset in seconds.
95 @code{[-]hh:mm:ss[.xxx]} syntax is also supported.
96 This option affects all the input files that follow it.
97 The offset is added to the timestamps of the input files.
98 Specifying a positive offset means that the corresponding
99 streams are delayed by 'offset' seconds.
100
101 @item -timestamp @var{time}
102 Set the timestamp.
103
104 @item -metadata @var{key}=@var{value}
105 Set a metadata key/value pair.
106
107 For example, for setting the title in the output file:
108 @example
109 ffmpeg -i in.avi -metadata title="my title" out.flv
110 @end example
111
112 @item -v @var{number}
113 Set the logging verbosity level.
114
115 @item -target @var{type}
116 Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd",
117 "ntsc-svcd", ... ). All the format options (bitrate, codecs,
118 buffer sizes) are then set automatically. You can just type:
119
120 @example
121 ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
122 @end example
123
124 Nevertheless you can specify additional options as long as you know
125 they do not conflict with the standard, as in:
126
127 @example
128 ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
129 @end example
130
131 @item -dframes @var{number}
132 Set the number of data frames to record.
133
134 @item -scodec @var{codec}
135 Force subtitle codec ('copy' to copy stream).
136
137 @item -newsubtitle
138 Add a new subtitle stream to the current output stream.
139
140 @item -slang @var{code}
141 Set the ISO 639 language code (3 letters) of the current subtitle stream.
142
143 @end table
144
145 @section Video Options
146
147 @table @option
148 @item -b @var{bitrate}
149 Set the video bitrate in bit/s (default = 200 kb/s).
150 @item -vframes @var{number}
151 Set the number of video frames to record.
152 @item -r @var{fps}
153 Set frame rate (Hz value, fraction or abbreviation), (default = 25).
154 @item -s @var{size}
155 Set frame size. The format is @samp{wxh} (ffserver default = 160x128, ffmpeg default = same as source).
156 The following abbreviations are recognized:
157 @table @samp
158 @item sqcif
159 128x96
160 @item qcif
161 176x144
162 @item cif
163 352x288
164 @item 4cif
165 704x576
166 @item 16cif
167 1408x1152
168 @item qqvga
169 160x120
170 @item qvga
171 320x240
172 @item vga
173 640x480
174 @item svga
175 800x600
176 @item xga
177 1024x768
178 @item uxga
179 1600x1200
180 @item qxga
181 2048x1536
182 @item sxga
183 1280x1024
184 @item qsxga
185 2560x2048
186 @item hsxga
187 5120x4096
188 @item wvga
189 852x480
190 @item wxga
191 1366x768
192 @item wsxga
193 1600x1024
194 @item wuxga
195 1920x1200
196 @item woxga
197 2560x1600
198 @item wqsxga
199 3200x2048
200 @item wquxga
201 3840x2400
202 @item whsxga
203 6400x4096
204 @item whuxga
205 7680x4800
206 @item cga
207 320x200
208 @item ega
209 640x350
210 @item hd480
211 852x480
212 @item hd720
213 1280x720
214 @item hd1080
215 1920x1080
216 @end table
217
218 @item -aspect @var{aspect}
219 Set aspect ratio (4:3, 16:9 or 1.3333, 1.7777).
220 @item -croptop @var{size}
221 Set top crop band size (in pixels).
222 @item -cropbottom @var{size}
223 Set bottom crop band size (in pixels).
224 @item -cropleft @var{size}
225 Set left crop band size (in pixels).
226 @item -cropright @var{size}
227 Set right crop band size (in pixels).
228 @item -padtop @var{size}
229 Set top pad band size (in pixels).
230 @item -padbottom @var{size}
231 Set bottom pad band size (in pixels).
232 @item -padleft @var{size}
233 Set left pad band size (in pixels).
234 @item -padright @var{size}
235 Set right pad band size (in pixels).
236 @item -padcolor @var{hex_color}
237 Set color of padded bands. The value for padcolor is expressed
238 as a six digit hexadecimal number where the first two digits
239 represent red, the middle two digits green and last two digits
240 blue (default = 000000 (black)).
241 @item -vn
242 Disable video recording.
243 @item -bt @var{tolerance}
244 Set video bitrate tolerance (in bits, default 4000k).
245 Has a minimum value of: (target_bitrate/target_framerate).
246 In 1-pass mode, bitrate tolerance specifies how far ratecontrol is
247 willing to deviate from the target average bitrate value. This is
248 not related to min/max bitrate. Lowering tolerance too much has
249 an adverse effect on quality.
250 @item -maxrate @var{bitrate}
251 Set max video bitrate (in bit/s).
252 Requires -bufsize to be set.
253 @item -minrate @var{bitrate}
254 Set min video bitrate (in bit/s).
255 Most useful in setting up a CBR encode:
256 @example
257 ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
258 @end example
259 It is of little use elsewise.
260 @item -bufsize @var{size}
261 Set video buffer verifier buffer size (in bits).
262 @item -vcodec @var{codec}
263 Force video codec to @var{codec}. Use the @code{copy} special value to
264 tell that the raw codec data must be copied as is.
265 @item -sameq
266 Use same video quality as source (implies VBR).
267
268 @item -pass @var{n}
269 Select the pass number (1 or 2). It is used to do two-pass
270 video encoding. The statistics of the video are recorded in the first
271 pass into a log file (see also the option -passlogfile),
272 and in the second pass that log file is used to generate the video
273 at the exact requested bitrate.
274 On pass 1, you may just deactivate audio and set output to null,
275 examples for Windows and Unix:
276 @example
277 ffmpeg -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y NUL
278 ffmpeg -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y /dev/null
279 @end example
280
281 @item -passlogfile @var{prefix}
282 Set two-pass log file name prefix to @var{prefix}, the default file name
283 prefix is ``ffmpeg2pass''. The complete file name will be
284 @file{PREFIX-N.log}, where N is a number specific to the output
285 stream.
286
287 @item -newvideo
288 Add a new video stream to the current output stream.
289
290 @item -vlang @var{code}
291 Set the ISO 639 language code (3 letters) of the current video stream.
292
293 @item -vf @var{filter_graph}
294 @var{filter_graph} is a description of the filter graph to apply to
295 the input video.
296 Use the option "-filters" to show all the available filters (including
297 also sources and sinks).
298
299 @end table
300
301 @section Advanced Video Options
302
303 @table @option
304 @item -pix_fmt @var{format}
305 Set pixel format. Use 'list' as parameter to show all the supported
306 pixel formats.
307 @item -sws_flags @var{flags}
308 Set SwScaler flags.
309 @item -g @var{gop_size}
310 Set the group of pictures size.
311 @item -intra
312 Use only intra frames.
313 @item -vdt @var{n}
314 Discard threshold.
315 @item -qscale @var{q}
316 Use fixed video quantizer scale (VBR).
317 @item -qmin @var{q}
318 minimum video quantizer scale (VBR)
319 @item -qmax @var{q}
320 maximum video quantizer scale (VBR)
321 @item -qdiff @var{q}
322 maximum difference between the quantizer scales (VBR)
323 @item -qblur @var{blur}
324 video quantizer scale blur (VBR) (range 0.0 - 1.0)
325 @item -qcomp @var{compression}
326 video quantizer scale compression (VBR) (default 0.5).
327 Constant of ratecontrol equation. Recommended range for default rc_eq: 0.0-1.0
328
329 @item -lmin @var{lambda}
330 minimum video lagrange factor (VBR)
331 @item -lmax @var{lambda}
332 max video lagrange factor (VBR)
333 @item -mblmin @var{lambda}
334 minimum macroblock quantizer scale (VBR)
335 @item -mblmax @var{lambda}
336 maximum macroblock quantizer scale (VBR)
337
338 These four options (lmin, lmax, mblmin, mblmax) use 'lambda' units,
339 but you may use the QP2LAMBDA constant to easily convert from 'q' units:
340 @example
341 ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
342 @end example
343
344 @item -rc_init_cplx @var{complexity}
345 initial complexity for single pass encoding
346 @item -b_qfactor @var{factor}
347 qp factor between P- and B-frames
348 @item -i_qfactor @var{factor}
349 qp factor between P- and I-frames
350 @item -b_qoffset @var{offset}
351 qp offset between P- and B-frames
352 @item -i_qoffset @var{offset}
353 qp offset between P- and I-frames
354 @item -rc_eq @var{equation}
355 Set rate control equation (@pxref{FFmpeg formula
356 evaluator}) (default = @code{tex^qComp}).
357 @item -rc_override @var{override}
358 rate control override for specific intervals
359 @item -me_method @var{method}
360 Set motion estimation method to @var{method}.
361 Available methods are (from lowest to best quality):
362 @table @samp
363 @item zero
364 Try just the (0, 0) vector.
365 @item phods
366 @item log
367 @item x1
368 @item hex
369 @item umh
370 @item epzs
371 (default method)
372 @item full
373 exhaustive search (slow and marginally better than epzs)
374 @end table
375
376 @item -dct_algo @var{algo}
377 Set DCT algorithm to @var{algo}. Available values are:
378 @table @samp
379 @item 0
380 FF_DCT_AUTO (default)
381 @item 1
382 FF_DCT_FASTINT
383 @item 2
384 FF_DCT_INT
385 @item 3
386 FF_DCT_MMX
387 @item 4
388 FF_DCT_MLIB
389 @item 5
390 FF_DCT_ALTIVEC
391 @end table
392
393 @item -idct_algo @var{algo}
394 Set IDCT algorithm to @var{algo}. Available values are:
395 @table @samp
396 @item 0
397 FF_IDCT_AUTO (default)
398 @item 1
399 FF_IDCT_INT
400 @item 2
401 FF_IDCT_SIMPLE
402 @item 3
403 FF_IDCT_SIMPLEMMX
404 @item 4
405 FF_IDCT_LIBMPEG2MMX
406 @item 5
407 FF_IDCT_PS2
408 @item 6
409 FF_IDCT_MLIB
410 @item 7
411 FF_IDCT_ARM
412 @item 8
413 FF_IDCT_ALTIVEC
414 @item 9
415 FF_IDCT_SH4
416 @item 10
417 FF_IDCT_SIMPLEARM
418 @end table
419
420 @item -er @var{n}
421 Set error resilience to @var{n}.
422 @table @samp
423 @item 1
424 FF_ER_CAREFUL (default)
425 @item 2
426 FF_ER_COMPLIANT
427 @item 3
428 FF_ER_AGGRESSIVE
429 @item 4
430 FF_ER_VERY_AGGRESSIVE
431 @end table
432
433 @item -ec @var{bit_mask}
434 Set error concealment to @var{bit_mask}. @var{bit_mask} is a bit mask of
435 the following values:
436 @table @samp
437 @item 1
438 FF_EC_GUESS_MVS (default = enabled)
439 @item 2
440 FF_EC_DEBLOCK (default = enabled)
441 @end table
442
443 @item -bf @var{frames}
444 Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4).
445 @item -mbd @var{mode}
446 macroblock decision
447 @table @samp
448 @item 0
449 FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in FFmpeg).
450 @item 1
451 FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
452 @item 2
453 FF_MB_DECISION_RD: rate distortion
454 @end table
455
456 @item -4mv
457 Use four motion vector by macroblock (MPEG-4 only).
458 @item -part
459 Use data partitioning (MPEG-4 only).
460 @item -bug @var{param}
461 Work around encoder bugs that are not auto-detected.
462 @item -strict @var{strictness}
463 How strictly to follow the standards.
464 @item -aic
465 Enable Advanced intra coding (h263+).
466 @item -umv
467 Enable Unlimited Motion Vector (h263+)
468
469 @item -deinterlace
470 Deinterlace pictures.
471 @item -ilme
472 Force interlacing support in encoder (MPEG-2 and MPEG-4 only).
473 Use this option if your input file is interlaced and you want
474 to keep the interlaced format for minimum losses.
475 The alternative is to deinterlace the input stream with
476 @option{-deinterlace}, but deinterlacing introduces losses.
477 @item -psnr
478 Calculate PSNR of compressed frames.
479 @item -vstats
480 Dump video coding statistics to @file{vstats_HHMMSS.log}.
481 @item -vstats_file @var{file}
482 Dump video coding statistics to @var{file}.
483 @item -top @var{n}
484 top=1/bottom=0/auto=-1 field first
485 @item -dc @var{precision}
486 Intra_dc_precision.
487 @item -vtag @var{fourcc/tag}
488 Force video tag/fourcc.
489 @item -qphist
490 Show QP histogram.
491 @item -vbsf @var{bitstream_filter}
492 Bitstream filters available are "dump_extra", "remove_extra", "noise", "h264_mp4toannexb", "imxdump", "mjpegadump".
493 @example
494 ffmpeg -i h264.mp4 -vcodec copy -vbsf h264_mp4toannexb -an out.h264
495 @end example
496 @end table
497
498 @section Audio Options
499
500 @table @option
501 @item -aframes @var{number}
502 Set the number of audio frames to record.
503 @item -ar @var{freq}
504 Set the audio sampling frequency (default = 44100 Hz).
505 @item -ab @var{bitrate}
506 Set the audio bitrate in bit/s (default = 64k).
507 @item -aq @var{q}
508 Set the audio quality (codec-specific, VBR).
509 @item -ac @var{channels}
510 Set the number of audio channels (default = 1).
511 @item -an
512 Disable audio recording.
513 @item -acodec @var{codec}
514 Force audio codec to @var{codec}. Use the @code{copy} special value to
515 specify that the raw codec data must be copied as is.
516 @item -newaudio
517 Add a new audio track to the output file. If you want to specify parameters,
518 do so before @code{-newaudio} (@code{-acodec}, @code{-ab}, etc..).
519
520 Mapping will be done automatically, if the number of output streams is equal to
521 the number of input streams, else it will pick the first one that matches. You
522 can override the mapping using @code{-map} as usual.
523
524 Example:
525 @example
526 ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio
527 @end example
528 @item -alang @var{code}
529 Set the ISO 639 language code (3 letters) of the current audio stream.
530 @end table
531
532 @section Advanced Audio options:
533
534 @table @option
535 @item -atag @var{fourcc/tag}
536 Force audio tag/fourcc.
537 @item -absf @var{bitstream_filter}
538 Bitstream filters available are "dump_extra", "remove_extra", "noise", "mp3comp", "mp3decomp".
539 @end table
540
541 @section Subtitle options:
542
543 @table @option
544 @item -scodec @var{codec}
545 Force subtitle codec ('copy' to copy stream).
546 @item -newsubtitle
547 Add a new subtitle stream to the current output stream.
548 @item -slang @var{code}
549 Set the ISO 639 language code (3 letters) of the current subtitle stream.
550 @item -sn
551 Disable subtitle recording.
552 @item -sbsf @var{bitstream_filter}
553 Bitstream filters available are "mov2textsub", "text2movsub".
554 @example
555 ffmpeg -i file.mov -an -vn -sbsf mov2textsub -scodec copy -f rawvideo sub.txt
556 @end example
557 @end table
558
559 @section Audio/Video grab options
560
561 @table @option
562 @item -vc @var{channel}
563 Set video grab channel (DV1394 only).
564 @item -tvstd @var{standard}
565 Set television standard (NTSC, PAL (SECAM)).
566 @item -isync
567 Synchronize read on input.
568 @end table
569
570 @section Advanced options
571
572 @table @option
573 @item -map @var{input_stream_id}[:@var{sync_stream_id}]
574 Set stream mapping from input streams to output streams.
575 Just enumerate the input streams in the order you want them in the output.
576 @var{sync_stream_id} if specified sets the input stream to sync
577 against.
578 @item -map_meta_data @var{outfile}:@var{infile}
579 Set meta data information of @var{outfile} from @var{infile}.
580 @item -debug
581 Print specific debug info.
582 @item -benchmark
583 Show benchmarking information at the end of an encode.
584 Shows CPU time used and maximum memory consumption.
585 Maximum memory consumption is not supported on all systems,
586 it will usually display as 0 if not supported.
587 @item -dump
588 Dump each input packet.
589 @item -hex
590 When dumping packets, also dump the payload.
591 @item -bitexact
592 Only use bit exact algorithms (for codec testing).
593 @item -ps @var{size}
594 Set RTP payload size in bytes.
595 @item -re
596 Read input at native frame rate. Mainly used to simulate a grab device.
597 @item -loop_input
598 Loop over the input stream. Currently it works only for image
599 streams. This option is used for automatic FFserver testing.
600 @item -loop_output @var{number_of_times}
601 Repeatedly loop output for formats that support looping such as animated GIF
602 (0 will loop the output infinitely).
603 @item -threads @var{count}
604 Thread count.
605 @item -vsync @var{parameter}
606 Video sync method.
607 0   Each frame is passed with its timestamp from the demuxer to the muxer
608 1   Frames will be duplicated and dropped to achieve exactly the requested
609     constant framerate.
610 2   Frames are passed through with their timestamp or dropped so as to prevent
611     2 frames from having the same timestamp
612 -1  Chooses between 1 and 2 depending on muxer capabilities. This is the default method.
613
614 With -map you can select from
615 which stream the timestamps should be taken. You can leave either video or
616 audio unchanged and sync the remaining stream(s) to the unchanged one.
617 @item -async @var{samples_per_second}
618 Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps,
619 the parameter is the maximum samples per second by which the audio is changed.
620 -async 1 is a special case where only the start of the audio stream is corrected
621 without any later correction.
622 @item -copyts
623 Copy timestamps from input to output.
624 @item -shortest
625 Finish encoding when the shortest input stream ends.
626 @item -dts_delta_threshold
627 Timestamp discontinuity delta threshold.
628 @item -muxdelay @var{seconds}
629 Set the maximum demux-decode delay.
630 @item -muxpreload @var{seconds}
631 Set the initial demux-decode delay.
632 @end table
633
634 @section Preset files
635
636 A preset file contains a sequence of @var{option}=@var{value} pairs,
637 one for each line, specifying a sequence of options which would be
638 awkward to specify on the command line. Lines starting with the hash
639 ('#') character are ignored and are used to provide comments. Check
640 the @file{ffpresets} directory in the FFmpeg source tree for examples.
641
642 Preset files are specified with the @code{vpre}, @code{apre},
643 @code{spre}, and @code{fpre} options. The @code{fpre} option takes the
644 filename of the preset instead of a preset name as input and can be
645 used for any kind of codec. For the @code{vpre}, @code{apre}, and
646 @code{spre} options, the options specified in a preset file are
647 applied to the currently selected codec of the same type as the preset
648 option.
649
650 The argument passed to the @code{vpre}, @code{apre}, and @code{spre}
651 preset options identifies the preset file to use according to the
652 following rules:
653
654 First ffmpeg searches for a file named @var{arg}.ffpreset in the
655 directories @file{$FFMPEG_DATADIR} (if set), and @file{$HOME/.ffmpeg}, and in
656 the datadir defined at configuration time (usually @file{PREFIX/share/ffmpeg})
657 in that order. For example, if the argument is @code{libx264-max}, it will
658 search for the file @file{libx264-max.ffpreset}.
659
660 If no such file is found, then ffmpeg will search for a file named
661 @var{codec_name}-@var{arg}.ffpreset in the above-mentioned
662 directories, where @var{codec_name} is the name of the codec to which
663 the preset file options will be applied. For example, if you select
664 the video codec with @code{-vcodec libx264} and use @code{-vpre max},
665 then it will search for the file @file{libx264-max.ffpreset}.
666
667 @anchor{FFmpeg formula evaluator}
668 @section FFmpeg formula evaluator
669
670 When evaluating a rate control string, FFmpeg uses an internal formula
671 evaluator.
672
673 The following binary operators are available: @code{+}, @code{-},
674 @code{*}, @code{/}, @code{^}.
675
676 The following unary operators are available: @code{+}, @code{-},
677 @code{(...)}.
678
679 The following statements are available: @code{ld}, @code{st},
680 @code{while}.
681
682 The following functions are available:
683 @table @var
684 @item sinh(x)
685 @item cosh(x)
686 @item tanh(x)
687 @item sin(x)
688 @item cos(x)
689 @item tan(x)
690 @item atan(x)
691 @item asin(x)
692 @item acos(x)
693 @item exp(x)
694 @item log(x)
695 @item abs(x)
696 @item squish(x)
697 @item gauss(x)
698 @item mod(x, y)
699 @item max(x, y)
700 @item min(x, y)
701 @item eq(x, y)
702 @item gte(x, y)
703 @item gt(x, y)
704 @item lte(x, y)
705 @item lt(x, y)
706 @item bits2qp(bits)
707 @item qp2bits(qp)
708 @end table
709
710 The following constants are available:
711 @table @var
712 @item PI
713 @item E
714 @item iTex
715 @item pTex
716 @item tex
717 @item mv
718 @item fCode
719 @item iCount
720 @item mcVar
721 @item var
722 @item isI
723 @item isP
724 @item isB
725 @item avgQP
726 @item qComp
727 @item avgIITex
728 @item avgPITex
729 @item avgPPTex
730 @item avgBPTex
731 @item avgTex
732 @end table
733
734 @c man end
735
736 @section Protocols
737
738 The file name can be @file{-} to read from standard input or to write
739 to standard output.
740
741 FFmpeg also handles many protocols specified with an URL syntax.
742
743 Use 'ffmpeg -protocols' to see a list of the supported protocols.
744
745 The protocol @code{http:} is currently used only to communicate with
746 FFserver (see the FFserver documentation). When FFmpeg will be a
747 video player it will also be used for streaming :-)
748
749 @chapter Tips
750 @c man begin TIPS
751
752 @itemize
753 @item
754 For streaming at very low bitrate application, use a low frame rate
755 and a small GOP size. This is especially true for RealVideo where
756 the Linux player does not seem to be very fast, so it can miss
757 frames. An example is:
758
759 @example
760 ffmpeg -g 3 -r 3 -t 10 -b 50k -s qcif -f rv10 /tmp/b.rm
761 @end example
762
763 @item
764 The parameter 'q' which is displayed while encoding is the current
765 quantizer. The value 1 indicates that a very good quality could
766 be achieved. The value 31 indicates the worst quality. If q=31 appears
767 too often, it means that the encoder cannot compress enough to meet
768 your bitrate. You must either increase the bitrate, decrease the
769 frame rate or decrease the frame size.
770
771 @item
772 If your computer is not fast enough, you can speed up the
773 compression at the expense of the compression ratio. You can use
774 '-me zero' to speed up motion estimation, and '-intra' to disable
775 motion estimation completely (you have only I-frames, which means it
776 is about as good as JPEG compression).
777
778 @item
779 To have very low audio bitrates, reduce the sampling frequency
780 (down to 22050 Hz for MPEG audio, 22050 or 11025 for AC-3).
781
782 @item
783 To have a constant quality (but a variable bitrate), use the option
784 '-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
785 quality).
786
787 @item
788 When converting video files, you can use the '-sameq' option which
789 uses the same quality factor in the encoder as in the decoder.
790 It allows almost lossless encoding.
791
792 @end itemize
793 @c man end TIPS
794
795 @chapter Examples
796 @c man begin EXAMPLES
797
798 @section Video and Audio grabbing
799
800 FFmpeg can grab video and audio from devices given that you specify the input
801 format and device.
802
803 @example
804 ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
805 @end example
806
807 Note that you must activate the right video source and channel before
808 launching FFmpeg with any TV viewer such as xawtv
809 (@url{http://linux.bytesex.org/xawtv/}) by Gerd Knorr. You also
810 have to set the audio recording levels correctly with a
811 standard mixer.
812
813 @section X11 grabbing
814
815 FFmpeg can grab the X11 display.
816
817 @example
818 ffmpeg -f x11grab -s cif -i :0.0 /tmp/out.mpg
819 @end example
820
821 0.0 is display.screen number of your X11 server, same as
822 the DISPLAY environment variable.
823
824 @example
825 ffmpeg -f x11grab -s cif -i :0.0+10,20 /tmp/out.mpg
826 @end example
827
828 0.0 is display.screen number of your X11 server, same as the DISPLAY environment
829 variable. 10 is the x-offset and 20 the y-offset for the grabbing.
830
831 @section Video and Audio file format conversion
832
833 * FFmpeg can use any supported file format and protocol as input:
834
835 Examples:
836
837 * You can use YUV files as input:
838
839 @example
840 ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
841 @end example
842
843 It will use the files:
844 @example
845 /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
846 /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
847 @end example
848
849 The Y files use twice the resolution of the U and V files. They are
850 raw files, without header. They can be generated by all decent video
851 decoders. You must specify the size of the image with the @option{-s} option
852 if FFmpeg cannot guess it.
853
854 * You can input from a raw YUV420P file:
855
856 @example
857 ffmpeg -i /tmp/test.yuv /tmp/out.avi
858 @end example
859
860 test.yuv is a file containing raw YUV planar data. Each frame is composed
861 of the Y plane followed by the U and V planes at half vertical and
862 horizontal resolution.
863
864 * You can output to a raw YUV420P file:
865
866 @example
867 ffmpeg -i mydivx.avi hugefile.yuv
868 @end example
869
870 * You can set several input files and output files:
871
872 @example
873 ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
874 @end example
875
876 Converts the audio file a.wav and the raw YUV video file a.yuv
877 to MPEG file a.mpg.
878
879 * You can also do audio and video conversions at the same time:
880
881 @example
882 ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
883 @end example
884
885 Converts a.wav to MPEG audio at 22050 Hz sample rate.
886
887 * You can encode to several formats at the same time and define a
888 mapping from input stream to output streams:
889
890 @example
891 ffmpeg -i /tmp/a.wav -ab 64k /tmp/a.mp2 -ab 128k /tmp/b.mp2 -map 0:0 -map 0:0
892 @end example
893
894 Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. '-map
895 file:index' specifies which input stream is used for each output
896 stream, in the order of the definition of output streams.
897
898 * You can transcode decrypted VOBs:
899
900 @example
901 ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec libmp3lame -ab 128k snatch.avi
902 @end example
903
904 This is a typical DVD ripping example; the input is a VOB file, the
905 output an AVI file with MPEG-4 video and MP3 audio. Note that in this
906 command we use B-frames so the MPEG-4 stream is DivX5 compatible, and
907 GOP size is 300 which means one intra frame every 10 seconds for 29.97fps
908 input video. Furthermore, the audio stream is MP3-encoded so you need
909 to enable LAME support by passing @code{--enable-libmp3lame} to configure.
910 The mapping is particularly useful for DVD transcoding
911 to get the desired audio language.
912
913 NOTE: To see the supported input formats, use @code{ffmpeg -formats}.
914
915 * You can extract images from a video, or create a video from many images:
916
917 For extracting images from a video:
918 @example
919 ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
920 @end example
921
922 This will extract one video frame per second from the video and will
923 output them in files named @file{foo-001.jpeg}, @file{foo-002.jpeg},
924 etc. Images will be rescaled to fit the new WxH values.
925
926 If you want to extract just a limited number of frames, you can use the
927 above command in combination with the -vframes or -t option, or in
928 combination with -ss to start extracting from a certain point in time.
929
930 For creating a video from many images:
931 @example
932 ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
933 @end example
934
935 The syntax @code{foo-%03d.jpeg} specifies to use a decimal number
936 composed of three digits padded with zeroes to express the sequence
937 number. It is the same syntax supported by the C printf function, but
938 only formats accepting a normal integer are suitable.
939
940 * You can put many streams of the same type in the output:
941
942 @example
943 ffmpeg -i test1.avi -i test2.avi -vcodec copy -acodec copy -vcodec copy -acodec copy test12.avi -newvideo -newaudio
944 @end example
945
946 In addition to the first video and audio streams, the resulting
947 output file @file{test12.avi} will contain the second video
948 and the second audio stream found in the input streams list.
949
950 The @code{-newvideo}, @code{-newaudio} and @code{-newsubtitle}
951 options have to be specified immediately after the name of the output
952 file to which you want to add them.
953 @c man end EXAMPLES
954
955 @include filters.texi
956
957 @ignore
958
959 @setfilename ffmpeg
960 @settitle FFmpeg video converter
961
962 @c man begin SEEALSO
963 ffplay(1), ffprobe(1), ffserver(1) and the FFmpeg HTML documentation
964 @c man end
965
966 @c man begin AUTHORS
967 The FFmpeg developers
968 @c man end
969
970 @end ignore
971
972 @bye