ffmpeg.texi 30.8 KB
Newer Older
1 2
\input texinfo @c -*- texinfo -*-

3
@settitle ffmpeg Documentation
4
@titlepage
5
@center @titlefont{ffmpeg Documentation}
6 7
@end titlepage

8 9 10 11
@top

@contents

12 13 14 15 16 17 18 19 20 21
@chapter Synopsis

The generic syntax is:

@example
@c man begin SYNOPSIS
ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{outfile}@}...
@c man end
@end example

22 23
@chapter Description
@c man begin DESCRIPTION
24

25 26 27
ffmpeg is a very fast video and audio converter that can also grab from
a live audio/video source. It can also convert between arbitrary sample
rates and resize video on the fly with a high quality polyphase filter.
28

29
The command line interface is designed to be intuitive, in the sense
30
that ffmpeg tries to figure out all parameters that can possibly be
Diego Biurrun's avatar
Diego Biurrun committed
31 32
derived automatically. You usually only have to specify the target
bitrate you want.
33

34 35 36 37 38
As a general rule, options are applied to the next specified
file. Therefore, order is important, and you can have the same
option on the command line multiple times. Each occurrence is
then applied to the next input or output file.

39 40 41
@itemize
@item
To set the video bitrate of the output file to 64kbit/s:
42 43 44 45
@example
ffmpeg -i input.avi -b 64k output.avi
@end example

46 47
@item
To force the frame rate of the output file to 24 fps:
48 49 50 51
@example
ffmpeg -i input.avi -r 24 output.avi
@end example

52 53
@item
To force the frame rate of the input file (valid for raw formats only)
54 55 56 57
to 1 fps and the frame rate of the output file to 24 fps:
@example
ffmpeg -r 1 -i input.m2v -r 24 output.avi
@end example
58
@end itemize
59 60 61

The format option may be needed for raw input files.

62
By default ffmpeg tries to convert as losslessly as possible: It
63 64 65 66 67
uses the same audio and video parameters for the outputs as the one
specified for the inputs.

@c man end DESCRIPTION

68
@chapter Options
69
@c man begin OPTIONS
70 71 72

@include fftools-common-opts.texi

73 74
@section Main options

75
@table @option
76

77
@item -f @var{fmt}
Diego Biurrun's avatar
Diego Biurrun committed
78
Force format.
Fabrice Bellard's avatar
Fabrice Bellard committed
79

80
@item -i @var{filename}
81
input file name
82

83
@item -y
Diego Biurrun's avatar
Diego Biurrun committed
84
Overwrite output files.
85

86
@item -t @var{duration}
87 88
Restrict the transcoded/captured video sequence
to the duration specified in seconds.
Diego Biurrun's avatar
Diego Biurrun committed
89
@code{hh:mm:ss[.xxx]} syntax is also supported.
90

91
@item -fs @var{limit_size}
92 93
Set the file size limit.

94
@item -ss @var{position}
Diego Biurrun's avatar
Diego Biurrun committed
95 96
Seek to given time position in seconds.
@code{hh:mm:ss[.xxx]} syntax is also supported.
97

98
@item -itsoffset @var{offset}
99 100 101 102 103 104 105
Set the input time offset in seconds.
@code{[-]hh:mm:ss[.xxx]} syntax is also supported.
This option affects all the input files that follow it.
The offset is added to the timestamps of the input files.
Specifying a positive offset means that the corresponding
streams are delayed by 'offset' seconds.

106
@item -timestamp @var{time}
107 108 109 110 111 112 113 114 115 116
Set the recording timestamp in the container.
The syntax for @var{time} is:
@example
now|([(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH[:MM[:SS[.m...]]])|(HH[MM[SS[.m...]]]))[Z|z])
@end example
If the value is "now" it takes the current time.
Time is local time unless 'Z' or 'z' is appended, in which case it is
interpreted as UTC.
If the year-month-day part is not specified it takes the current
year-month-day.
117

118
@item -metadata @var{key}=@var{value}
Stefano Sabatini's avatar
Stefano Sabatini committed
119
Set a metadata key/value pair.
120

121
For example, for setting the title in the output file:
122
@example
123
ffmpeg -i in.avi -metadata title="my title" out.flv
124
@end example
125

126
@item -v @var{number}
127
Set the logging verbosity level.
128

129
@item -target @var{type}
130
Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd",
Diego Biurrun's avatar
Diego Biurrun committed
131 132
"ntsc-svcd", ... ). All the format options (bitrate, codecs,
buffer sizes) are then set automatically. You can just type:
Fabrice Bellard's avatar
Fabrice Bellard committed
133 134 135 136 137

@example
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
@end example

Diego Biurrun's avatar
Diego Biurrun committed
138 139
Nevertheless you can specify additional options as long as you know
they do not conflict with the standard, as in:
140 141 142 143 144

@example
ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
@end example

145
@item -dframes @var{number}
146 147
Set the number of data frames to record.

148
@item -scodec @var{codec}
149 150 151 152 153
Force subtitle codec ('copy' to copy stream).

@item -newsubtitle
Add a new subtitle stream to the current output stream.

154
@item -slang @var{code}
155
Set the ISO 639 language code (3 letters) of the current subtitle stream.
156

157 158 159 160
@end table

@section Video Options

161
@table @option
162
@item -b @var{bitrate}
163
Set the video bitrate in bit/s (default = 200 kb/s).
164
@item -vframes @var{number}
165
Set the number of video frames to record.
166
@item -r @var{fps}
167
Set frame rate (Hz value, fraction or abbreviation), (default = 25).
168
@item -s @var{size}
169
Set frame size. The format is @samp{wxh} (ffserver default = 160x128, ffmpeg default = same as source).
Diego Biurrun's avatar
Diego Biurrun committed
170
The following abbreviations are recognized:
Fabrice Bellard's avatar
Fabrice Bellard committed
171
@table @samp
Fabrice Bellard's avatar
Fabrice Bellard committed
172 173 174 175 176 177 178 179
@item sqcif
128x96
@item qcif
176x144
@item cif
352x288
@item 4cif
704x576
180 181
@item 16cif
1408x1152
Benoit Fouet's avatar
Benoit Fouet committed
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
@item qqvga
160x120
@item qvga
320x240
@item vga
640x480
@item svga
800x600
@item xga
1024x768
@item uxga
1600x1200
@item qxga
2048x1536
@item sxga
1280x1024
@item qsxga
2560x2048
@item hsxga
5120x4096
@item wvga
852x480
@item wxga
1366x768
@item wsxga
1600x1024
@item wuxga
1920x1200
@item woxga
2560x1600
@item wqsxga
3200x2048
@item wquxga
3840x2400
@item whsxga
6400x4096
@item whuxga
7680x4800
@item cga
320x200
@item ega
640x350
@item hd480
852x480
@item hd720
1280x720
@item hd1080
1920x1080
Fabrice Bellard's avatar
Fabrice Bellard committed
230 231
@end table

232
@item -aspect @var{aspect}
233 234 235 236 237 238 239
Set the video display aspect ratio specified by @var{aspect}.

@var{aspect} can be a floating point number string, or a string of the
form @var{num}:@var{den}, where @var{num} and @var{den} are the
numerator and denominator of the aspect ratio. For example "4:3",
"16:9", "1.3333", and "1.7777" are valid argument values.

240 241 242 243 244 245 246
@item -croptop @var{size}
@item -cropbottom @var{size}
@item -cropleft @var{size}
@item -cropright @var{size}
All the crop options have been removed. Use -vf
crop=width:height:x:y instead.

247 248 249 250 251
@item -padtop @var{size}
@item -padbottom @var{size}
@item -padleft @var{size}
@item -padright @var{size}
@item -padcolor @var{hex_color}
252 253
All the pad options have been removed. Use -vf
pad=width:height:x:y:color instead.
254
@item -vn
Diego Biurrun's avatar
Diego Biurrun committed
255
Disable video recording.
256
@item -bt @var{tolerance}
257 258 259 260 261 262
Set video bitrate tolerance (in bits, default 4000k).
Has a minimum value of: (target_bitrate/target_framerate).
In 1-pass mode, bitrate tolerance specifies how far ratecontrol is
willing to deviate from the target average bitrate value. This is
not related to min/max bitrate. Lowering tolerance too much has
an adverse effect on quality.
263
@item -maxrate @var{bitrate}
264
Set max video bitrate (in bit/s).
265
Requires -bufsize to be set.
266
@item -minrate @var{bitrate}
267
Set min video bitrate (in bit/s).
268 269 270 271 272
Most useful in setting up a CBR encode:
@example
ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
@end example
It is of little use elsewise.
273
@item -bufsize @var{size}
Diego Biurrun's avatar
Diego Biurrun committed
274
Set video buffer verifier buffer size (in bits).
275
@item -vcodec @var{codec}
Diego Biurrun's avatar
Diego Biurrun committed
276
Force video codec to @var{codec}. Use the @code{copy} special value to
Fabrice Bellard's avatar
Fabrice Bellard committed
277
tell that the raw codec data must be copied as is.
Fabrice Bellard's avatar
Fabrice Bellard committed
278
@item -sameq
Lou Logan's avatar
Lou Logan committed
279
Use same quantizer as source (implies VBR).
280

281
@item -pass @var{n}
282 283 284 285 286
Select the pass number (1 or 2). It is used to do two-pass
video encoding. The statistics of the video are recorded in the first
pass into a log file (see also the option -passlogfile),
and in the second pass that log file is used to generate the video
at the exact requested bitrate.
287 288 289 290 291 292
On pass 1, you may just deactivate audio and set output to null,
examples for Windows and Unix:
@example
ffmpeg -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y NUL
ffmpeg -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y /dev/null
@end example
293

294 295 296 297
@item -passlogfile @var{prefix}
Set two-pass log file name prefix to @var{prefix}, the default file name
prefix is ``ffmpeg2pass''. The complete file name will be
@file{PREFIX-N.log}, where N is a number specific to the output
298
stream.
299

300 301 302
@item -newvideo
Add a new video stream to the current output stream.

303 304 305
@item -vlang @var{code}
Set the ISO 639 language code (3 letters) of the current video stream.

306 307 308 309 310 311
@item -vf @var{filter_graph}
@var{filter_graph} is a description of the filter graph to apply to
the input video.
Use the option "-filters" to show all the available filters (including
also sources and sinks).

312 313
@end table

Fabrice Bellard's avatar
Fabrice Bellard committed
314
@section Advanced Video Options
315

316
@table @option
317
@item -pix_fmt @var{format}
318 319
Set pixel format. Use 'list' as parameter to show all the supported
pixel formats.
320
@item -sws_flags @var{flags}
321
Set SwScaler flags.
322
@item -g @var{gop_size}
Diego Biurrun's avatar
Diego Biurrun committed
323
Set the group of pictures size.
324
@item -intra
Diego Biurrun's avatar
Diego Biurrun committed
325
Use only intra frames.
326
@item -vdt @var{n}
327
Discard threshold.
328
@item -qscale @var{q}
329
Use fixed video quantizer scale (VBR).
330
@item -qmin @var{q}
331
minimum video quantizer scale (VBR)
332
@item -qmax @var{q}
333
maximum video quantizer scale (VBR)
334
@item -qdiff @var{q}
335
maximum difference between the quantizer scales (VBR)
336
@item -qblur @var{blur}
337
video quantizer scale blur (VBR) (range 0.0 - 1.0)
338
@item -qcomp @var{compression}
339 340
video quantizer scale compression (VBR) (default 0.5).
Constant of ratecontrol equation. Recommended range for default rc_eq: 0.0-1.0
Fabrice Bellard's avatar
Fabrice Bellard committed
341

342
@item -lmin @var{lambda}
343
minimum video lagrange factor (VBR)
344
@item -lmax @var{lambda}
345
max video lagrange factor (VBR)
346
@item -mblmin @var{lambda}
347
minimum macroblock quantizer scale (VBR)
348
@item -mblmax @var{lambda}
349 350 351 352 353 354 355 356
maximum macroblock quantizer scale (VBR)

These four options (lmin, lmax, mblmin, mblmax) use 'lambda' units,
but you may use the QP2LAMBDA constant to easily convert from 'q' units:
@example
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
@end example

357
@item -rc_init_cplx @var{complexity}
Diego Biurrun's avatar
Diego Biurrun committed
358
initial complexity for single pass encoding
359
@item -b_qfactor @var{factor}
Diego Biurrun's avatar
Diego Biurrun committed
360
qp factor between P- and B-frames
361
@item -i_qfactor @var{factor}
Diego Biurrun's avatar
Diego Biurrun committed
362
qp factor between P- and I-frames
363
@item -b_qoffset @var{offset}
Diego Biurrun's avatar
Diego Biurrun committed
364
qp offset between P- and B-frames
365
@item -i_qoffset @var{offset}
Diego Biurrun's avatar
Diego Biurrun committed
366
qp offset between P- and I-frames
367
@item -rc_eq @var{equation}
Stefano Sabatini's avatar
Stefano Sabatini committed
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
Set rate control equation (see section "Expression Evaluation")
(default = @code{tex^qComp}).

When computing the rate control equation expression, besides the
standard functions defined in the section "Expression Evaluation", the
following functions are available:
@table @var
@item bits2qp(bits)
@item qp2bits(qp)
@end table

and the following constants are available:
@table @var
@item iTex
@item pTex
@item tex
@item mv
@item fCode
@item iCount
@item mcVar
@item var
@item isI
@item isP
@item isB
@item avgQP
@item qComp
@item avgIITex
@item avgPITex
@item avgPPTex
@item avgBPTex
@item avgTex
@end table

401
@item -rc_override @var{override}
Fabrice Bellard's avatar
Fabrice Bellard committed
402
rate control override for specific intervals
403
@item -me_method @var{method}
Diego Biurrun's avatar
Diego Biurrun committed
404 405
Set motion estimation method to @var{method}.
Available methods are (from lowest to best quality):
Fabrice Bellard's avatar
Fabrice Bellard committed
406 407
@table @samp
@item zero
Fabrice Bellard's avatar
Fabrice Bellard committed
408
Try just the (0, 0) vector.
Fabrice Bellard's avatar
Fabrice Bellard committed
409 410 411
@item phods
@item log
@item x1
412 413
@item hex
@item umh
Fabrice Bellard's avatar
Fabrice Bellard committed
414 415 416 417 418 419
@item epzs
(default method)
@item full
exhaustive search (slow and marginally better than epzs)
@end table

420
@item -dct_algo @var{algo}
Diego Biurrun's avatar
Diego Biurrun committed
421
Set DCT algorithm to @var{algo}. Available values are:
Fabrice Bellard's avatar
Fabrice Bellard committed
422 423 424 425 426 427 428 429 430 431 432 433 434 435 436
@table @samp
@item 0
FF_DCT_AUTO (default)
@item 1
FF_DCT_FASTINT
@item 2
FF_DCT_INT
@item 3
FF_DCT_MMX
@item 4
FF_DCT_MLIB
@item 5
FF_DCT_ALTIVEC
@end table

437
@item -idct_algo @var{algo}
Diego Biurrun's avatar
Diego Biurrun committed
438
Set IDCT algorithm to @var{algo}. Available values are:
Fabrice Bellard's avatar
Fabrice Bellard committed
439 440 441 442
@table @samp
@item 0
FF_IDCT_AUTO (default)
@item 1
443
FF_IDCT_INT
Fabrice Bellard's avatar
Fabrice Bellard committed
444
@item 2
445
FF_IDCT_SIMPLE
Fabrice Bellard's avatar
Fabrice Bellard committed
446
@item 3
447
FF_IDCT_SIMPLEMMX
Fabrice Bellard's avatar
Fabrice Bellard committed
448
@item 4
449
FF_IDCT_LIBMPEG2MMX
Fabrice Bellard's avatar
Fabrice Bellard committed
450
@item 5
451
FF_IDCT_PS2
Fabrice Bellard's avatar
Fabrice Bellard committed
452
@item 6
453
FF_IDCT_MLIB
Fabrice Bellard's avatar
Fabrice Bellard committed
454
@item 7
455
FF_IDCT_ARM
Fabrice Bellard's avatar
Fabrice Bellard committed
456
@item 8
457
FF_IDCT_ALTIVEC
Fabrice Bellard's avatar
Fabrice Bellard committed
458
@item 9
459
FF_IDCT_SH4
Fabrice Bellard's avatar
Fabrice Bellard committed
460
@item 10
461
FF_IDCT_SIMPLEARM
Fabrice Bellard's avatar
Fabrice Bellard committed
462 463
@end table

464
@item -er @var{n}
Diego Biurrun's avatar
Diego Biurrun committed
465
Set error resilience to @var{n}.
Fabrice Bellard's avatar
Fabrice Bellard committed
466
@table @samp
467
@item 1
468
FF_ER_CAREFUL (default)
Fabrice Bellard's avatar
Fabrice Bellard committed
469
@item 2
Fabrice Bellard's avatar
Fabrice Bellard committed
470
FF_ER_COMPLIANT
Fabrice Bellard's avatar
Fabrice Bellard committed
471 472 473 474 475 476
@item 3
FF_ER_AGGRESSIVE
@item 4
FF_ER_VERY_AGGRESSIVE
@end table

477
@item -ec @var{bit_mask}
Diego Biurrun's avatar
Diego Biurrun committed
478
Set error concealment to @var{bit_mask}. @var{bit_mask} is a bit mask of
Fabrice Bellard's avatar
Fabrice Bellard committed
479
the following values:
Fabrice Bellard's avatar
Fabrice Bellard committed
480 481
@table @samp
@item 1
Diego Biurrun's avatar
Diego Biurrun committed
482
FF_EC_GUESS_MVS (default = enabled)
Fabrice Bellard's avatar
Fabrice Bellard committed
483
@item 2
Diego Biurrun's avatar
Diego Biurrun committed
484
FF_EC_DEBLOCK (default = enabled)
Fabrice Bellard's avatar
Fabrice Bellard committed
485 486
@end table

487
@item -bf @var{frames}
Diego Biurrun's avatar
Diego Biurrun committed
488
Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4).
489
@item -mbd @var{mode}
Fabrice Bellard's avatar
Fabrice Bellard committed
490 491 492
macroblock decision
@table @samp
@item 0
493
FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in ffmpeg).
Fabrice Bellard's avatar
Fabrice Bellard committed
494
@item 1
Diego Biurrun's avatar
Diego Biurrun committed
495
FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
Fabrice Bellard's avatar
Fabrice Bellard committed
496
@item 2
Diego Biurrun's avatar
Diego Biurrun committed
497
FF_MB_DECISION_RD: rate distortion
Fabrice Bellard's avatar
Fabrice Bellard committed
498 499 500
@end table

@item -4mv
Diego Biurrun's avatar
Diego Biurrun committed
501
Use four motion vector by macroblock (MPEG-4 only).
Fabrice Bellard's avatar
Fabrice Bellard committed
502
@item -part
Diego Biurrun's avatar
Diego Biurrun committed
503
Use data partitioning (MPEG-4 only).
504
@item -bug @var{param}
Diego Biurrun's avatar
Diego Biurrun committed
505
Work around encoder bugs that are not auto-detected.
506
@item -strict @var{strictness}
Diego Biurrun's avatar
Diego Biurrun committed
507
How strictly to follow the standards.
Fabrice Bellard's avatar
Fabrice Bellard committed
508
@item -aic
Diego Biurrun's avatar
Diego Biurrun committed
509
Enable Advanced intra coding (h263+).
Fabrice Bellard's avatar
Fabrice Bellard committed
510
@item -umv
Diego Biurrun's avatar
Diego Biurrun committed
511
Enable Unlimited Motion Vector (h263+)
Fabrice Bellard's avatar
Fabrice Bellard committed
512 513

@item -deinterlace
Diego Biurrun's avatar
Diego Biurrun committed
514
Deinterlace pictures.
515
@item -ilme
Diego Biurrun's avatar
Diego Biurrun committed
516 517 518 519 520
Force interlacing support in encoder (MPEG-2 and MPEG-4 only).
Use this option if your input file is interlaced and you want
to keep the interlaced format for minimum losses.
The alternative is to deinterlace the input stream with
@option{-deinterlace}, but deinterlacing introduces losses.
Fabrice Bellard's avatar
Fabrice Bellard committed
521
@item -psnr
Diego Biurrun's avatar
Diego Biurrun committed
522
Calculate PSNR of compressed frames.
Fabrice Bellard's avatar
Fabrice Bellard committed
523
@item -vstats
Diego Biurrun's avatar
Diego Biurrun committed
524
Dump video coding statistics to @file{vstats_HHMMSS.log}.
525
@item -vstats_file @var{file}
526
Dump video coding statistics to @var{file}.
527
@item -top @var{n}
528
top=1/bottom=0/auto=-1 field first
529
@item -dc @var{precision}
530
Intra_dc_precision.
531
@item -vtag @var{fourcc/tag}
532 533 534
Force video tag/fourcc.
@item -qphist
Show QP histogram.
535
@item -vbsf @var{bitstream_filter}
536
Bitstream filters available are "dump_extra", "remove_extra", "noise", "h264_mp4toannexb", "imxdump", "mjpegadump", "mjpeg2jpeg".
537 538 539
@example
ffmpeg -i h264.mp4 -vcodec copy -vbsf h264_mp4toannexb -an out.h264
@end example
540 541 542 543 544 545
@item -force_key_frames @var{time}[,@var{time}...]
Force key frames at the specified timestamps, more precisely at the first
frames after each specified time.
This option can be useful to ensure that a seek point is present at a
chapter mark or any other designated place in the output file.
The timestamps must be specified in ascending order.
Fabrice Bellard's avatar
Fabrice Bellard committed
546 547 548 549 550
@end table

@section Audio Options

@table @option
551
@item -aframes @var{number}
552
Set the number of audio frames to record.
553
@item -ar @var{freq}
554 555 556 557
Set the audio sampling frequency. For input streams it is set by
default to 44100 Hz, for output streams it is set by default to the
frequency of the input stream. If the input file has audio streams
with different frequencies, the behaviour is undefined.
558
@item -ab @var{bitrate}
559
Set the audio bitrate in bit/s (default = 64k).
560 561
@item -aq @var{q}
Set the audio quality (codec-specific, VBR).
562
@item -ac @var{channels}
563 564 565 566
Set the number of audio channels. For input streams it is set by
default to 1, for output streams it is set by default to the same
number of audio channels in input. If the input file has audio streams
with different channel count, the behaviour is undefined.
Fabrice Bellard's avatar
Fabrice Bellard committed
567
@item -an
Diego Biurrun's avatar
Diego Biurrun committed
568
Disable audio recording.
569
@item -acodec @var{codec}
Diego Biurrun's avatar
Diego Biurrun committed
570 571
Force audio codec to @var{codec}. Use the @code{copy} special value to
specify that the raw codec data must be copied as is.
572
@item -newaudio
Diego Biurrun's avatar
Diego Biurrun committed
573 574
Add a new audio track to the output file. If you want to specify parameters,
do so before @code{-newaudio} (@code{-acodec}, @code{-ab}, etc..).
575

Diego Biurrun's avatar
Diego Biurrun committed
576 577
Mapping will be done automatically, if the number of output streams is equal to
the number of input streams, else it will pick the first one that matches. You
578 579 580 581
can override the mapping using @code{-map} as usual.

Example:
@example
582
ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio
583
@end example
584
@item -alang @var{code}
585 586 587 588 589 590
Set the ISO 639 language code (3 letters) of the current audio stream.
@end table

@section Advanced Audio options:

@table @option
591
@item -atag @var{fourcc/tag}
592
Force audio tag/fourcc.
593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614
@item -audio_service_type @var{type}
Set the type of service that the audio stream contains.
@table @option
@item ma
Main Audio Service (default)
@item ef
Effects
@item vi
Visually Impaired
@item hi
Hearing Impaired
@item di
Dialogue
@item co
Commentary
@item em
Emergency
@item vo
Voice Over
@item ka
Karaoke
@end table
615
@item -absf @var{bitstream_filter}
616 617 618 619 620 621
Bitstream filters available are "dump_extra", "remove_extra", "noise", "mp3comp", "mp3decomp".
@end table

@section Subtitle options:

@table @option
622
@item -scodec @var{codec}
623 624 625
Force subtitle codec ('copy' to copy stream).
@item -newsubtitle
Add a new subtitle stream to the current output stream.
626
@item -slang @var{code}
627
Set the ISO 639 language code (3 letters) of the current subtitle stream.
Diego Biurrun's avatar
Diego Biurrun committed
628 629
@item -sn
Disable subtitle recording.
630 631 632 633 634
@item -sbsf @var{bitstream_filter}
Bitstream filters available are "mov2textsub", "text2movsub".
@example
ffmpeg -i file.mov -an -vn -sbsf mov2textsub -scodec copy -f rawvideo sub.txt
@end example
Fabrice Bellard's avatar
Fabrice Bellard committed
635 636 637 638 639
@end table

@section Audio/Video grab options

@table @option
640
@item -vc @var{channel}
Diego Biurrun's avatar
Diego Biurrun committed
641
Set video grab channel (DV1394 only).
642
@item -tvstd @var{standard}
Diego Biurrun's avatar
Diego Biurrun committed
643
Set television standard (NTSC, PAL (SECAM)).
644 645
@item -isync
Synchronize read on input.
Fabrice Bellard's avatar
Fabrice Bellard committed
646 647 648 649 650
@end table

@section Advanced options

@table @option
651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687
@item -map @var{input_file_id}.@var{input_stream_id}[:@var{sync_file_id}.@var{sync_stream_id}]

Designate an input stream as a source for the output file. Each input
stream is identified by the input file index @var{input_file_id} and
the input stream index @var{input_stream_id} within the input
file. Both indexes start at 0. If specified,
@var{sync_file_id}.@var{sync_stream_id} sets which input stream
is used as a presentation sync reference.

The @code{-map} options must be specified just after the output file.
If any @code{-map} options are used, the number of @code{-map} options
on the command line must match the number of streams in the output
file. The first @code{-map} option on the command line specifies the
source for output stream 0, the second @code{-map} option specifies
the source for output stream 1, etc.

For example, if you have two audio streams in the first input file,
these streams are identified by "0.0" and "0.1". You can use
@code{-map} to select which stream to place in an output file. For
example:
@example
ffmpeg -i INPUT out.wav -map 0.1
@end example
will map the input stream in @file{INPUT} identified by "0.1" to
the (single) output stream in @file{out.wav}.

For example, to select the stream with index 2 from input file
@file{a.mov} (specified by the identifier "0.2"), and stream with
index 6 from input @file{b.mov} (specified by the identifier "1.6"),
and copy them to the output file @file{out.mov}:
@example
ffmpeg -i a.mov -i b.mov -vcodec copy -acodec copy out.mov -map 0.2 -map 1.6
@end example

To add more streams to the output file, you can use the
@code{-newaudio}, @code{-newvideo}, @code{-newsubtitle} options.

688
@item -map_meta_data @var{outfile}[,@var{metadata}]:@var{infile}[,@var{metadata}]
689 690 691 692
Deprecated, use @var{-map_metadata} instead.

@item -map_metadata @var{outfile}[,@var{metadata}]:@var{infile}[,@var{metadata}]
Set metadata information of @var{outfile} from @var{infile}. Note that those
693
are file indices (zero-based), not filenames.
694 695 696 697 698
Optional @var{metadata} parameters specify, which metadata to copy - (g)lobal
(i.e. metadata that applies to the whole file), per-(s)tream, per-(c)hapter or
per-(p)rogram. All metadata specifiers other than global must be followed by the
stream/chapter/program number. If metadata specifier is omitted, it defaults to
global.
699 700 701 702 703 704

By default, global metadata is copied from the first input file to all output files,
per-stream and per-chapter metadata is copied along with streams/chapters. These
default mappings are disabled by creating any mapping of the relevant type. A negative
file index can be used to create a dummy mapping that just disables automatic copying.

705 706 707
For example to copy metadata from the first stream of the input file to global metadata
of the output file:
@example
708
ffmpeg -i in.ogg -map_metadata 0:0,s0 out.mp3
709
@end example
710 711 712 713
@item -map_chapters @var{outfile}:@var{infile}
Copy chapters from @var{infile} to @var{outfile}. If no chapter mapping is specified,
then chapters are copied from the first input file with at least one chapter to all
output files. Use a negative file index to disable any chapter copying.
Fabrice Bellard's avatar
Fabrice Bellard committed
714
@item -debug
Diego Biurrun's avatar
Diego Biurrun committed
715
Print specific debug info.
716
@item -benchmark
717 718 719 720
Show benchmarking information at the end of an encode.
Shows CPU time used and maximum memory consumption.
Maximum memory consumption is not supported on all systems,
it will usually display as 0 if not supported.
721
@item -dump
Diego Biurrun's avatar
Diego Biurrun committed
722
Dump each input packet.
723 724
@item -hex
When dumping packets, also dump the payload.
Fabrice Bellard's avatar
Fabrice Bellard committed
725
@item -bitexact
Diego Biurrun's avatar
Diego Biurrun committed
726
Only use bit exact algorithms (for codec testing).
727
@item -ps @var{size}
728
Set RTP payload size in bytes.
Fabrice Bellard's avatar
Fabrice Bellard committed
729
@item -re
Diego Biurrun's avatar
Diego Biurrun committed
730
Read input at native frame rate. Mainly used to simulate a grab device.
731
@item -loop_input
Diego Biurrun's avatar
Diego Biurrun committed
732 733
Loop over the input stream. Currently it works only for image
streams. This option is used for automatic FFserver testing.
734
@item -loop_output @var{number_of_times}
Diego Biurrun's avatar
Diego Biurrun committed
735
Repeatedly loop output for formats that support looping such as animated GIF
Diego Biurrun's avatar
Diego Biurrun committed
736
(0 will loop the output infinitely).
737
@item -threads @var{count}
738
Thread count.
739
@item -vsync @var{parameter}
740
Video sync method.
741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759

@table @option
@item 0
Each frame is passed with its timestamp from the demuxer to the muxer.
@item 1
Frames will be duplicated and dropped to achieve exactly the requested
constant framerate.
@item 2
Frames are passed through with their timestamp or dropped so as to
prevent 2 frames from having the same timestamp.
@item -1
Chooses between 1 and 2 depending on muxer capabilities. This is the
default method.
@end table

With -map you can select from which stream the timestamps should be
taken. You can leave either video or audio unchanged and sync the
remaining stream(s) to the unchanged one.

760
@item -async @var{samples_per_second}
761
Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps,
762 763 764
the parameter is the maximum samples per second by which the audio is changed.
-async 1 is a special case where only the start of the audio stream is corrected
without any later correction.
765 766
@item -copyts
Copy timestamps from input to output.
767 768
@item -copytb
Copy input stream time base from input to output when stream copying.
769 770 771 772
@item -shortest
Finish encoding when the shortest input stream ends.
@item -dts_delta_threshold
Timestamp discontinuity delta threshold.
773
@item -muxdelay @var{seconds}
774
Set the maximum demux-decode delay.
775
@item -muxpreload @var{seconds}
776
Set the initial demux-decode delay.
777
@item -streamid @var{output-stream-index}:@var{new-value}
778 779 780 781
Assign a new stream-id value to an output stream. This option should be
specified prior to the output filename to which it applies.
For the situation where multiple output files exist, a streamid
may be reassigned to a different value.
782 783 784 785 786 787

For example, to set the stream 0 PID to 33 and the stream 1 PID to 36 for
an output mpegts file:
@example
ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts
@end example
788
@end table
Fabrice Bellard's avatar
Fabrice Bellard committed
789

790 791 792 793 794 795
@section Preset files

A preset file contains a sequence of @var{option}=@var{value} pairs,
one for each line, specifying a sequence of options which would be
awkward to specify on the command line. Lines starting with the hash
('#') character are ignored and are used to provide comments. Check
796
the @file{ffpresets} directory in the Libav source tree for examples.
797

798 799 800 801 802
Preset files are specified with the @code{vpre}, @code{apre},
@code{spre}, and @code{fpre} options. The @code{fpre} option takes the
filename of the preset instead of a preset name as input and can be
used for any kind of codec. For the @code{vpre}, @code{apre}, and
@code{spre} options, the options specified in a preset file are
803 804
applied to the currently selected codec of the same type as the preset
option.
805

806 807 808
The argument passed to the @code{vpre}, @code{apre}, and @code{spre}
preset options identifies the preset file to use according to the
following rules:
809 810

First ffmpeg searches for a file named @var{arg}.ffpreset in the
811 812 813
directories @file{$FFMPEG_DATADIR} (if set), and @file{$HOME/.ffmpeg}, and in
the datadir defined at configuration time (usually @file{PREFIX/share/ffmpeg})
in that order. For example, if the argument is @code{libx264-max}, it will
814
search for the file @file{libx264-max.ffpreset}.
815 816 817 818 819 820 821

If no such file is found, then ffmpeg will search for a file named
@var{codec_name}-@var{arg}.ffpreset in the above-mentioned
directories, where @var{codec_name} is the name of the codec to which
the preset file options will be applied. For example, if you select
the video codec with @code{-vcodec libx264} and use @code{-vpre max},
then it will search for the file @file{libx264-max.ffpreset}.
822 823
@c man end

824
@chapter Tips
825
@c man begin TIPS
826 827

@itemize
828 829
@item
For streaming at very low bitrate application, use a low frame rate
Diego Biurrun's avatar
Diego Biurrun committed
830
and a small GOP size. This is especially true for RealVideo where
831 832
the Linux player does not seem to be very fast, so it can miss
frames. An example is:
833 834

@example
835
ffmpeg -g 3 -r 3 -t 10 -b 50k -s qcif -f rv10 /tmp/b.rm
836 837
@end example

838 839
@item
The parameter 'q' which is displayed while encoding is the current
Diego Biurrun's avatar
Diego Biurrun committed
840 841
quantizer. The value 1 indicates that a very good quality could
be achieved. The value 31 indicates the worst quality. If q=31 appears
842
too often, it means that the encoder cannot compress enough to meet
Diego Biurrun's avatar
Diego Biurrun committed
843
your bitrate. You must either increase the bitrate, decrease the
844
frame rate or decrease the frame size.
845

846 847
@item
If your computer is not fast enough, you can speed up the
848 849
compression at the expense of the compression ratio. You can use
'-me zero' to speed up motion estimation, and '-intra' to disable
Diego Biurrun's avatar
Diego Biurrun committed
850
motion estimation completely (you have only I-frames, which means it
851
is about as good as JPEG compression).
852

853 854
@item
To have very low audio bitrates, reduce the sampling frequency
855
(down to 22050 Hz for MPEG audio, 22050 or 11025 for AC-3).
856

857 858
@item
To have a constant quality (but a variable bitrate), use the option
859 860
'-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
quality).
861

862 863
@item
When converting video files, you can use the '-sameq' option which
Diego Biurrun's avatar
Diego Biurrun committed
864 865
uses the same quality factor in the encoder as in the decoder.
It allows almost lossless encoding.
866 867

@end itemize
868
@c man end TIPS
869

870 871 872 873 874
@chapter Examples
@c man begin EXAMPLES

@section Video and Audio grabbing

875 876
If you specify the input format and device then ffmpeg can grab video
and audio directly.
877 878 879 880 881 882

@example
ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
@end example

Note that you must activate the right video source and channel before
883
launching ffmpeg with any TV viewer such as xawtv
884 885 886 887 888 889
(@url{http://linux.bytesex.org/xawtv/}) by Gerd Knorr. You also
have to set the audio recording levels correctly with a
standard mixer.

@section X11 grabbing

890
Grab the X11 display with ffmpeg via
891 892

@example
893
ffmpeg -f x11grab -s cif -r 25 -i :0.0 /tmp/out.mpg
894 895 896 897 898 899
@end example

0.0 is display.screen number of your X11 server, same as
the DISPLAY environment variable.

@example
900
ffmpeg -f x11grab -s cif -r 25 -i :0.0+10,20 /tmp/out.mpg
901 902 903 904 905 906 907
@end example

0.0 is display.screen number of your X11 server, same as the DISPLAY environment
variable. 10 is the x-offset and 20 the y-offset for the grabbing.

@section Video and Audio file format conversion

908
Any supported file format and protocol can serve as input to ffmpeg:
909 910

Examples:
911 912 913
@itemize
@item
You can use YUV files as input:
914 915 916 917 918 919 920 921 922 923 924 925 926 927

@example
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
@end example

It will use the files:
@example
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
@end example

The Y files use twice the resolution of the U and V files. They are
raw files, without header. They can be generated by all decent video
decoders. You must specify the size of the image with the @option{-s} option
928
if ffmpeg cannot guess it.
929

930 931
@item
You can input from a raw YUV420P file:
932 933 934 935 936 937 938 939 940

@example
ffmpeg -i /tmp/test.yuv /tmp/out.avi
@end example

test.yuv is a file containing raw YUV planar data. Each frame is composed
of the Y plane followed by the U and V planes at half vertical and
horizontal resolution.

941 942
@item
You can output to a raw YUV420P file:
943 944 945 946 947

@example
ffmpeg -i mydivx.avi hugefile.yuv
@end example

948 949
@item
You can set several input files and output files:
950 951 952 953 954 955 956 957

@example
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
@end example

Converts the audio file a.wav and the raw YUV video file a.yuv
to MPEG file a.mpg.

958 959
@item
You can also do audio and video conversions at the same time:
960 961 962 963 964 965 966

@example
ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
@end example

Converts a.wav to MPEG audio at 22050 Hz sample rate.

967 968
@item
You can encode to several formats at the same time and define a
969 970 971 972 973 974 975 976 977 978
mapping from input stream to output streams:

@example
ffmpeg -i /tmp/a.wav -ab 64k /tmp/a.mp2 -ab 128k /tmp/b.mp2 -map 0:0 -map 0:0
@end example

Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. '-map
file:index' specifies which input stream is used for each output
stream, in the order of the definition of output streams.

979 980
@item
You can transcode decrypted VOBs:
981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996

@example
ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec libmp3lame -ab 128k snatch.avi
@end example

This is a typical DVD ripping example; the input is a VOB file, the
output an AVI file with MPEG-4 video and MP3 audio. Note that in this
command we use B-frames so the MPEG-4 stream is DivX5 compatible, and
GOP size is 300 which means one intra frame every 10 seconds for 29.97fps
input video. Furthermore, the audio stream is MP3-encoded so you need
to enable LAME support by passing @code{--enable-libmp3lame} to configure.
The mapping is particularly useful for DVD transcoding
to get the desired audio language.

NOTE: To see the supported input formats, use @code{ffmpeg -formats}.

997 998
@item
You can extract images from a video, or create a video from many images:
999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022

For extracting images from a video:
@example
ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
@end example

This will extract one video frame per second from the video and will
output them in files named @file{foo-001.jpeg}, @file{foo-002.jpeg},
etc. Images will be rescaled to fit the new WxH values.

If you want to extract just a limited number of frames, you can use the
above command in combination with the -vframes or -t option, or in
combination with -ss to start extracting from a certain point in time.

For creating a video from many images:
@example
ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
@end example

The syntax @code{foo-%03d.jpeg} specifies to use a decimal number
composed of three digits padded with zeroes to express the sequence
number. It is the same syntax supported by the C printf function, but
only formats accepting a normal integer are suitable.

1023 1024
@item
You can put many streams of the same type in the output:
1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036

@example
ffmpeg -i test1.avi -i test2.avi -vcodec copy -acodec copy -vcodec copy -acodec copy test12.avi -newvideo -newaudio
@end example

In addition to the first video and audio streams, the resulting
output file @file{test12.avi} will contain the second video
and the second audio stream found in the input streams list.

The @code{-newvideo}, @code{-newaudio} and @code{-newsubtitle}
options have to be specified immediately after the name of the output
file to which you want to add them.
1037 1038

@end itemize
1039 1040
@c man end EXAMPLES

Stefano Sabatini's avatar
Stefano Sabatini committed
1041
@include eval.texi
1042
@include encoders.texi
1043
@include demuxers.texi
Stefano Sabatini's avatar
Stefano Sabatini committed
1044
@include muxers.texi
1045 1046
@include indevs.texi
@include outdevs.texi
Stefano Sabatini's avatar
Stefano Sabatini committed
1047
@include protocols.texi
1048
@include bitstream_filters.texi
1049
@include filters.texi
Anton Khirnov's avatar
Anton Khirnov committed
1050
@include metadata.texi
1051

1052 1053 1054
@ignore

@setfilename ffmpeg
1055
@settitle ffmpeg video converter
1056 1057

@c man begin SEEALSO
1058
ffplay(1), ffprobe(1), ffserver(1) and the Libav HTML documentation
1059 1060
@c man end

1061
@c man begin AUTHORS
1062
The Libav developers
1063 1064 1065 1066
@c man end

@end ignore

1067
@bye