Skip to content
Snippets Groups Projects
ffmpeg.texi 48 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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. To lower the chance of interfering
    with your actual file names and the shell's glob expansion, you are required
    to activate glob meta characters by prefixing them with a single @code{%}
    character, like in @code{foo-%*.jpeg}, @code{foo-%?%?%?.jpeg} or
    @code{foo-00%[234%]%*.jpeg}.
    If your filename actually contains a character sequence of a @code{%} character
    followed by a glob character, you must double the @code{%} character to escape
    it. Imagine your files begin with @code{%?-foo-}, then you could use a glob
    pattern like @code{%%?-foo-%*.jpeg}. For input patterns that could be both a
    printf or a glob pattern, ffmpeg will assume it is a glob pattern.
    
    @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