Skip to content
Snippets Groups Projects
ffmpeg.texi 49.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • @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
    
    applied to the currently selected codec of the same type as the preset
    option.
    
    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:
    
    
    First ffmpeg searches for a file named @var{arg}.ffpreset in the
    
    directories @file{$FFMPEG_DATADIR} (if set), and @file{$HOME/.ffmpeg}, and in
    the datadir defined at configuration time (usually @file{PREFIX/share/ffmpeg})
    
    Gianluigi Tiesi's avatar
    Gianluigi Tiesi committed
    or in a @file{ffpresets} folder along the executable on win32,
    
    in that order. For example, if the argument is @code{libvpx-1080p}, it will
    search for the file @file{libvpx-1080p.ffpreset}.
    
    
    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 libvpx} and use @code{-vpre 1080p},
    then it will search for the file @file{libvpx-1080p.ffpreset}.
    
    @c man end OPTIONS
    
    @item
    For streaming at very low bitrate application, use a low frame rate
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    and a small GOP size. This is especially true for RealVideo where
    
    the Linux player does not seem to be very fast, so it can miss
    frames. An example is:
    
    ffmpeg -g 3 -r 3 -t 10 -b:v 50k -s qcif -f rv10 /tmp/b.rm
    
    @item
    The parameter 'q' which is displayed while encoding is the current
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    quantizer. The value 1 indicates that a very good quality could
    be achieved. The value 31 indicates the worst quality. If q=31 appears
    
    too often, it means that the encoder cannot compress enough to meet
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    your bitrate. You must either increase the bitrate, decrease the
    
    @item
    If your computer is not fast enough, you can speed up the
    
    compression at the expense of the compression ratio. You can use
    
    '-me zero' to speed up motion estimation, and '-g 0' to disable
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    motion estimation completely (you have only I-frames, which means it
    
    @item
    To have very low audio bitrates, reduce the sampling frequency
    
    (down to 22050 Hz for MPEG audio, 22050 or 11025 for AC-3).
    
    @item
    To have a constant quality (but a variable bitrate), use the option
    
    '-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
    quality).
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    @section Preset files
    
    A preset file contains a sequence of @var{option=value} pairs, one for
    each line, specifying a sequence of options which can be specified also on
    the command line. Lines starting with the hash ('#') character are ignored and
    are used to provide comments. Empty lines are also ignored. Check the
    @file{presets} directory in the FFmpeg source tree for examples.
    
    Preset files are specified with the @code{pre} option, this option takes a
    preset name as input.  FFmpeg searches for a file named @var{preset_name}.avpreset in
    the directories @file{$AVCONV_DATADIR} (if set), and @file{$HOME/.ffmpeg}, and in
    the data directory defined at configuration time (usually @file{$PREFIX/share/ffmpeg})
    in that order.  For example, if the argument is @code{libx264-max}, it will
    search for the file @file{libx264-max.avpreset}.
    
    
    If you specify the input format and device then ffmpeg can grab video
    and audio directly.
    
    
    @example
    ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
    
    @end example
    
    Or with an ALSA audio source (mono input, card id 1) instead of OSS:
    @example
    ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
    
    @end example
    
    Note that you must activate the right video source and channel before
    
    launching ffmpeg with any TV viewer such as
    @uref{http://linux.bytesex.org/xawtv/, xawtv} by Gerd Knorr. You also
    
    have to set the audio recording levels correctly with a
    standard mixer.
    
    @section X11 grabbing
    
    
    Grab the X11 display with ffmpeg via
    
    ffmpeg -f x11grab -s cif -r 25 -i :0.0 /tmp/out.mpg
    
    @end example
    
    0.0 is display.screen number of your X11 server, same as
    the DISPLAY environment variable.
    
    @example
    
    ffmpeg -f x11grab -s cif -r 25 -i :0.0+10,20 /tmp/out.mpg
    
    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
    
    
    Any supported file format and protocol can serve as input to ffmpeg:
    
    @itemize
    @item
    You can use YUV files as input:
    
    
    @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
    
    if ffmpeg cannot guess it.
    
    @item
    You can input from a raw YUV420P file:
    
    
    @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.
    
    
    @item
    You can output to a raw YUV420P file:
    
    
    @example
    ffmpeg -i mydivx.avi hugefile.yuv
    @end example
    
    
    @item
    You can set several input files and output files:
    
    
    @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.
    
    
    @item
    You can also do audio and video conversions at the same time:
    
    
    @example
    ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
    @end example
    
    Converts a.wav to MPEG audio at 22050 Hz sample rate.
    
    
    @item
    You can encode to several formats at the same time and define a
    
    mapping from input stream to output streams:
    
    @example
    
    ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
    
    @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.
    
    
    ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 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}.
    
    
    @item
    You can extract images from a video, or create a video from many images:
    
    
    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.
    
    
    When importing an image sequence, -i also supports expanding
    shell-like wildcard patterns (globbing) internally, by selecting the
    image2-specific @code{-pattern_type glob} option.
    
    For example, for creating a video from filenames matching the glob pattern
    @code{foo-*.jpeg}:
    @example
    ffmpeg -f image2 -pattern_type glob -i 'foo-*.jpeg' -r 12 -s WxH foo.avi
    @end example
    
    @item
    You can put many streams of the same type in the output:
    
    ffmpeg -i test1.avi -i test2.avi -map 0.3 -map 0.2 -map 0.1 -map 0.0 -c copy test12.nut
    
    The resulting output file @file{test12.avi} will contain first four streams from
    the input file in reverse order.
    
    @item
    To force CBR video output:
    @example
    
    ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
    
    @end example
    
    @item
    The four options lmin, lmax, mblmin and 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
    
    @include syntax.texi
    
    Stefano Sabatini's avatar
    Stefano Sabatini committed
    @include eval.texi
    
    @include decoders.texi
    
    @include encoders.texi
    
    @include demuxers.texi
    
    Stefano Sabatini's avatar
    Stefano Sabatini committed
    @include muxers.texi
    
    @include indevs.texi
    @include outdevs.texi
    
    Stefano Sabatini's avatar
    Stefano Sabatini committed
    @include protocols.texi
    
    @include bitstream_filters.texi
    
    Anton Khirnov's avatar
    Anton Khirnov committed
    @include metadata.texi
    
    @settitle ffmpeg video converter
    
    ffplay(1), ffprobe(1), ffserver(1) and the FFmpeg HTML documentation
    
    See git history