Merge commit '481a3667495425db9fdffb653292b6460fb68208'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Aug 2014 22:41:08 +0000 (00:41 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Aug 2014 22:41:21 +0000 (00:41 +0200)
* commit '481a3667495425db9fdffb653292b6460fb68208':
  cmdutils: allow matching by metadata in stream specifiers

Conflicts:
Changelog
cmdutils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
doc/ffmpeg.texi
doc/fftools-common-opts.texi
libavformat/utils.c

diff --cc Changelog
+++ b/Changelog
@@@ -2,293 -2,145 +2,294 @@@ Entries are sorted chronologically fro
  releases are sorted from youngest to oldest.
  
  version <next>:
 -- libx265 encoder
 +- Icecast protocol
 +- ported lenscorrection filter from frei0r filter
 +- large optimizations in dctdnoiz to make it usable
 +- request icecast metadata by default
++- support for using metadata in stream specifiers in fftools
 +
 +
 +version 2.3:
 +- AC3 fixed-point decoding
  - shuffleplanes filter
 +- subfile protocol
 +- Phantom Cine demuxer
  - replaygain data export
 +- VP7 video decoder
  - Alias PIX image encoder and decoder
 -- BRender PIX image decoder
 -- Amazing Studio PAF playback support
 -- XBM decoder
 -- bmp standalone parser
 -- OpenEXR image decoder
 -- support encoding and decoding 4-channel SGI images
 +- Improvements to the BRender PIX image decoder
 +- Improvements to the XBM decoder
 +- QTKit input device
 +- improvements to OpenEXR image decoder
  - support decoding 16-bit RLE SGI images
 -- VP7 video decoder
 -- LucasArts SMUSH SANM video decoder
 -- LucasArts SMUSH VIMA audio decoder (ADPCM)
 -- LucasArts SMUSH demuxer
 -- MP2 encoding via TwoLAME
 -- asettb filter
 -- Silicon Graphics RLE 8-bit video decoder
 -- Silicon Graphics Motion Video Compressor 1 & 2 decoder
 -- Silicon Graphics Movie demuxer
 +- GDI screen grabbing for Windows
 +- alternative rendition support for HTTP Live Streaming
 +- AVFoundation input device
 +- Direct Stream Digital (DSD) decoder
 +- Magic Lantern Video (MLV) demuxer
  - On2 AVC (Audio for Video) decoder
 -- support for decoding through DXVA2 in avconv
 +- support for decoding through DXVA2 in ffmpeg
  - libbs2b-based stereo-to-binaural audio filter
 +- libx264 reference frames count limiting depending on level
  - native Opus decoder
  - display matrix export and rotation api
 -- drop avserver, it was unmaintained for years and largely broken
 -- Icecast protocol
 -- request icecast metadata by default
 -- support for using metadata in stream specifiers in avtools
 +- WebVTT encoder
 +- showcqt multimedia filter
 +- zoompan filter
 +- signalstats filter
 +- hqx filter (hq2x, hq3x, hq4x)
 +- flanger filter
 +- Image format auto-detection
 +- LRC demuxer and muxer
 +- Samba protocol (via libsmbclient)
 +- WebM DASH Manifest muxer
 +- libfribidi support in drawtext
  
  
 -version 10:
 -- av_strnstr
 -- support ID3v2 tags in ASF files
 +version 2.2:
 +
 +- HNM version 4 demuxer and video decoder
 +- Live HDS muxer
 +- setsar/setdar filters now support variables in ratio expressions
 +- elbg filter
 +- string validation in ffprobe
 +- support for decoding through VDPAU in ffmpeg (the -hwaccel option)
 +- complete Voxware MetaSound decoder
 +- remove mp3_header_compress bitstream filter
 +- Windows resource files for shared libraries
 +- aeval filter
 +- stereoscopic 3d metadata handling
 +- WebP encoding via libwebp
 +- ATRAC3+ decoder
 +- VP8 in Ogg demuxing
 +- side & metadata support in NUT
 +- framepack filter
 +- XYZ12 rawvideo support in NUT
 +- Exif metadata support in WebP decoder
 +- OpenGL device
 +- Use metadata_header_padding to control padding in ID3 tags (currently used in
 +  MP3, AIFF, and OMA files), FLAC header, and the AVI "junk" block.
 +- Mirillis FIC video decoder
 +- Support DNx444
 +- libx265 encoder
 +- dejudder filter
 +- Autodetect VDA like all other hardware accelerations
 +
 +
 +version 2.1:
 +
 +- aecho filter
 +- perspective filter ported from libmpcodecs
 +- ffprobe -show_programs option
 +- compand filter
 +- RTMP seek support
 +- when transcoding with ffmpeg (i.e. not streamcopying), -ss is now accurate
 +  even when used as an input option. Previous behavior can be restored with
 +  the -noaccurate_seek option.
 +- ffmpeg -t option can now be used for inputs, to limit the duration of
 +  data read from an input file
 +- incomplete Voxware MetaSound decoder
 +- read EXIF metadata from JPEG
 +- DVB teletext decoder
 +- phase filter ported from libmpcodecs
 +- w3fdif filter
 +- Opus support in Matroska
 +- FFV1 version 1.3 is stable and no longer experimental
 +- FFV1: YUVA(444,422,420) 9, 10 and 16 bit support
 +- changed DTS stream id in lavf mpeg ps muxer from 0x8a to 0x88, to be
 +  more consistent with other muxers.
 +- adelay filter
 +- pullup filter ported from libmpcodecs
 +- ffprobe -read_intervals option
 +- Lossless and alpha support for WebP decoder
 +- Error Resilient AAC syntax (ER AAC LC) decoding
 +- Low Delay AAC (ER AAC LD) decoding
 +- mux chapters in ASF files
 +- SFTP protocol (via libssh)
 +- libx264: add ability to encode in YUVJ422P and YUVJ444P
 +- Fraps: use BT.709 colorspace by default for yuv, as reference fraps decoder does
 +- make decoding alpha optional for prores, ffv1 and vp6 by setting
 +  the skip_alpha flag.
 +- ladspa wrapper filter
 +- native VP9 decoder
 +- dpx parser
 +- max_error_rate parameter in ffmpeg
 +- PulseAudio output device
 +- ReplayGain scanner
 +- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
 +- Linux framebuffer output device
 +- HEVC decoder
 +- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
 +- mergeplanes filter
 +
 +
 +version 2.0:
 +
 +- curves filter
  - reference-counting for AVFrame and AVPacket data
 -- avconv now fails when input options are used for output file
 +- ffmpeg now fails when input options are used for output file
    or vice versa
 -- avconv options -filter_script and -filter_complex_script, which allow a
 +- support for Monkey's Audio versions from 3.93
 +- perms and aperms filters
 +- audio filtering support in ffplay
 +- 10% faster aac encoding on x86 and MIPS
 +- sine audio filter source
 +- WebP demuxing and decoding support
 +- ffmpeg options -filter_script and -filter_complex_script, which allow a
    filtergraph description to be read from a file
 +- OpenCL support
 +- audio phaser filter
 +- separatefields filter
 +- libquvi demuxer
  - uniform options syntax across all filters
 +- telecine filter
  - interlace filter
 -- JPEG 2000 decoder
 -- asetpts filter (same as setpts, but for audio)
 +- smptehdbars source
 +- inverse telecine filters (fieldmatch and decimate)
 +- colorbalance filter
 +- colorchannelmixer filter
 +- The matroska demuxer can now output proper verbatim ASS packets. It will
 +  become the default at the next libavformat major bump.
 +- decent native animated GIF encoding
 +- asetrate filter
 +- interleave filter
 +- timeline editing with filters
 +- vidstabdetect and vidstabtransform filters for video stabilization using
 +  the vid.stab library
 +- astats filter
  - trim and atrim filters
 -- avconv -t and -ss (output-only) options are now sample-accurate when
 +- ffmpeg -t and -ss (output-only) options are now sample-accurate when
    transcoding audio
  - Matroska muxer can now put the index at the beginning of the file.
 -- avconv -deinterlace option removed, the yadif filter should be used instead
 +- extractplanes filter
 +- avectorscope filter
 +- ADPCM DTK decoder
 +- ADP demuxer
 +- RSD demuxer
 +- RedSpark demuxer
 +- ADPCM IMA Radical decoder
 +- zmq filters
 +- DCT denoiser filter (dctdnoiz)
 +- Wavelet denoiser filter ported from libmpcodecs as owdenoise (formerly "ow")
  - Apple Intermediate Codec decoder
  - Escape 130 video decoder
 +- FTP protocol support
 +- V4L2 output device
 +- 3D LUT filter (lut3d)
 +- SMPTE 302M audio encoder
  - support for slice multithreading in libavfilter
 +- Hald CLUT support (generation and filtering)
  - VC-1 interlaced B-frame support
  - support for WavPack muxing (raw and in Matroska)
 +- XVideo output device
 +- vignette filter
 +- True Audio (TTA) encoder
  - Go2Webinar decoder
 +- mcdeint filter ported from libmpcodecs
 +- sab filter ported from libmpcodecs
 +- ffprobe -show_chapters option
  - WavPack encoding through libwavpack
 -- Added the -n parameter to avconv
 -- RTMP seek support
 -- when transcoding with avconv (i.e. not streamcopying), -ss is now accurate
 -  even when used as an input option. Previous behavior can be restored with
 -  the -noaccurate_seek option.
 -- avconv -t option can now be used for inputs, to limit the duration of
 -  data read from an input file
 -- Voxware MetaSound decoder
 -- WebP decoder
 -- Error Resilient AAC syntax (ER AAC LC) decoding
 -- Low Delay AAC (ER AAC LD) decoding
 -- mux chapters in ASF files
 -- Opus in Ogg demuxing
 -- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
 -- F4V muxer
 -- HNM version 4 demuxer and video decoder
 -- HEVC decoder
 -- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
 -- remove avplay -vismv option, which has not worked for a long time
 -- Live HDS muxer
 -- setsar/setdar filters now support variables in ratio expressions
 -- dar variable in the scale filter now returns the actual DAR (i.e. a * sar)
 -- VP9 decoder
 -- support for decoding through VDPAU in avconv (the -hwaccel option)
 -- remove mp3_header_(de)compress bitstream filters
 -- stereoscopic 3d metadata handling
 -- png standalone parser
 -- WebP encoding via libwebp
 -- ATRAC3+ decoder
 -- framepack filter
 -- Mirillis FIC video decoder
 -- Support DNx444
 -- compand audio filter
 +- rotate filter
 +- spp filter ported from libmpcodecs
 +- libgme support
 +- psnr filter
  
  
 -version 9:
 -- av_basename and av_dirname
 -- adobe and limelight publisher authentication in RTMP
 +version 1.2:
 +
  - VDPAU hardware acceleration through normal hwaccel
  - SRTP support
 +- Error diffusion dither in Swscale
 +- Chained Ogg support
 +- Theora Midstream reconfiguration support
 +- EVRC decoder
 +- audio fade filter
 +- filtering audio with unknown channel layout
 +- allpass, bass, bandpass, bandreject, biquad, equalizer, highpass, lowpass
 +  and treble audio filter
 +- improved showspectrum filter, with multichannel support and sox-like colors
 +- histogram filter
 +- tee muxer
 +- il filter ported from libmpcodecs
 +- support ID3v2 tags in ASF files
 +- encrypted TTA stream decoding support
 +- RF64 support in WAV muxer
 +- noise filter ported from libmpcodecs
 +- Subtitles character encoding conversion
 +- blend filter
 +- stereo3d filter ported from libmpcodecs
  
  
 -version 9_beta3:
 -- ashowinfo audio filter
 +version 1.1:
 +
 +- stream disposition information printing in ffprobe
 +- filter for loudness analysis following EBU R128
 +- Opus encoder using libopus
 +- ffprobe -select_streams option
 +- Pinnacle TARGA CineWave YUV16 decoder
 +- TAK demuxer, decoder and parser
 +- DTS-HD demuxer
 +- remove -same_quant, it hasn't worked for years
 +- FFM2 support
 +- X-Face image encoder and decoder
  - 24-bit FLAC encoding
 -- audio volume filter
 -- deprecated the avconv -vol option. the volume filter is to be used instead.
  - multi-channel ALAC encoding up to 7.1
 -- TAK demuxer, parser, and decoder
 -- adaptive frame-level multithreading for H.264
 -
 -
 -version 9_beta2:
  - metadata (INFO tag) support in WAV muxer
 +- subtitles raw text decoder
  - support for building DLLs using MSVC
 -- remove avserver daemon mode
 +- LVF demuxer
 +- ffescape tool
 +- metadata (info chunk) support in CAF muxer
 +- field filter ported from libmpcodecs
 +- AVR demuxer
 +- geq filter ported from libmpcodecs
 +- remove ffserver daemon mode
 +- AST muxer/demuxer
 +- new expansion syntax for drawtext
 +- BRender PIX image decoder
 +- ffprobe -show_entries option
 +- ffprobe -sections option
 +- ADPCM IMA Dialogic decoder
 +- BRSTM demuxer
 +- animated GIF decoder and demuxer
 +- PVF demuxer
 +- subtitles filter
 +- IRCAM muxer/demuxer
 +- Paris Audio File demuxer
 +- Virtual concatenation demuxer
 +- VobSub demuxer
 +- JSON captions for TED talks decoding support
 +- SOX Resampler support in libswresample
 +- aselect filter
 +- SGI RLE 8-bit / Silicon Graphics RLE 8-bit video decoder
 +- Silicon Graphics Motion Video Compressor 1 & 2 decoder
 +- Silicon Graphics Movie demuxer
 +- apad filter
 +- Resolution & pixel format change support with multithreading for H.264
 +- documentation split into per-component manuals
 +- pp (postproc) filter ported from MPlayer
 +- NIST Sphere demuxer
 +- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
 +- Sony Wave64 muxer
 +- adobe and limelight publisher authentication in RTMP
 +- data: URI scheme
  - support building on the Plan 9 operating system
 -- ffv1: support version 1.3
 +- kerndeint filter ported from MPlayer
 +- histeq filter ported from VirtualDub
 +- Megalux Frame demuxer
 +- 012v decoder
 +- Improved AVC Intra decoding support
  
  
 -version 9_beta1:
 +version 1.0:
  
 -- XWD encoder and decoder
 -- Support for fragmentation in the mov/mp4 muxer
 -- ISMV (Smooth Streaming) muxer
 -- CDXL demuxer and decoder
 -- Apple ProRes encoder
 -- Sun Rasterfile Encoder
 -- remove libpostproc
 -- ID3v2 attached pictures reading and writing
 -- WMA Lossless decoder
 -- XBM encoder
 -- RealAudio Lossless decoder
 -- ZeroCodec decoder
 -- drop support for avconv without libavfilter
 -- add libavresample audio conversion library
 -- audio filters support in libavfilter and avconv
 -- add fps filter
 -- audio split filter
 -- audio mix filter
 -- avprobe output is now standard INI or JSON. The old format can still
 -  be used with -of old.
 +- INI and flat output in ffprobe
 +- Scene detection in libavfilter
  - Indeo Audio decoder
  - channelsplit audio filter
 +- setnsamples audio filter
 +- atempo filter
 +- ffprobe -show_data option
  - RTMPT protocol support
  - iLBC encoding/decoding via libilbc
  - Microsoft Screen 1 decoder
diff --cc doc/ffmpeg.texi
index f741a05,0000000..158f4ed
mode 100644,000000..100644
--- /dev/null
@@@ -1,1545 -1,0 +1,1550 @@@
 +\input texinfo @c -*- texinfo -*-
 +
 +@settitle ffmpeg Documentation
 +@titlepage
 +@center @titlefont{ffmpeg Documentation}
 +@end titlepage
 +
 +@top
 +
 +@contents
 +
 +@chapter Synopsis
 +
 +ffmpeg [@var{global_options}] @{[@var{input_file_options}] -i @file{input_file}@} ... @{[@var{output_file_options}] @file{output_file}@} ...
 +
 +@chapter Description
 +@c man begin DESCRIPTION
 +
 +@command{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.
 +
 +@command{ffmpeg} reads from an arbitrary number of input "files" (which can be regular
 +files, pipes, network streams, grabbing devices, etc.), specified by the
 +@code{-i} option, and writes to an arbitrary number of output "files", which are
 +specified by a plain output filename. Anything found on the command line which
 +cannot be interpreted as an option is considered to be an output filename.
 +
 +Each input or output file can, in principle, contain any number of streams of
 +different types (video/audio/subtitle/attachment/data). The allowed number and/or
 +types of streams may be limited by the container format. Selecting which
 +streams from which inputs will go into which output is either done automatically
 +or with the @code{-map} option (see the Stream selection chapter).
 +
 +To refer to input files in options, you must use their indices (0-based). E.g.
 +the first input file is @code{0}, the second is @code{1}, etc. Similarly, streams
 +within a file are referred to by their indices. E.g. @code{2:3} refers to the
 +fourth stream in the third input file. Also see the Stream specifiers chapter.
 +
 +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.
 +Exceptions from this rule are the global options (e.g. verbosity level),
 +which should be specified first.
 +
 +Do not mix input and output files -- first specify all input files, then all
 +output files. Also do not mix options which belong to different files. All
 +options apply ONLY to the next input or output file and are reset between files.
 +
 +@itemize
 +@item
 +To set the video bitrate of the output file to 64 kbit/s:
 +@example
 +ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
 +@end example
 +
 +@item
 +To force the frame rate of the output file to 24 fps:
 +@example
 +ffmpeg -i input.avi -r 24 output.avi
 +@end example
 +
 +@item
 +To force the frame rate of the input file (valid for raw formats only)
 +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
 +@end itemize
 +
 +The format option may be needed for raw input files.
 +
 +@c man end DESCRIPTION
 +
 +@chapter Detailed description
 +@c man begin DETAILED DESCRIPTION
 +
 +The transcoding process in @command{ffmpeg} for each output can be described by
 +the following diagram:
 +
 +@example
 + _______              ______________
 +|       |            |              |
 +| input |  demuxer   | encoded data |   decoder
 +| file  | ---------> | packets      | -----+
 +|_______|            |______________|      |
 +                                           v
 +                                       _________
 +                                      |         |
 +                                      | decoded |
 +                                      | frames  |
 +                                      |_________|
 + ________             ______________       |
 +|        |           |              |      |
 +| output | <-------- | encoded data | <----+
 +| file   |   muxer   | packets      |   encoder
 +|________|           |______________|
 +
 +
 +@end example
 +
 +@command{ffmpeg} calls the libavformat library (containing demuxers) to read
 +input files and get packets containing encoded data from them. When there are
 +multiple input files, @command{ffmpeg} tries to keep them synchronized by
 +tracking lowest timestamp on any active input stream.
 +
 +Encoded packets are then passed to the decoder (unless streamcopy is selected
 +for the stream, see further for a description). The decoder produces
 +uncompressed frames (raw video/PCM audio/...) which can be processed further by
 +filtering (see next section). After filtering, the frames are passed to the
 +encoder, which encodes them and outputs encoded packets. Finally those are
 +passed to the muxer, which writes the encoded packets to the output file.
 +
 +@section Filtering
 +Before encoding, @command{ffmpeg} can process raw audio and video frames using
 +filters from the libavfilter library. Several chained filters form a filter
 +graph. @command{ffmpeg} distinguishes between two types of filtergraphs:
 +simple and complex.
 +
 +@subsection Simple filtergraphs
 +Simple filtergraphs are those that have exactly one input and output, both of
 +the same type. In the above diagram they can be represented by simply inserting
 +an additional step between decoding and encoding:
 +
 +@example
 + _________                        ______________
 +|         |                      |              |
 +| decoded |                      | encoded data |
 +| frames  |\                   _ | packets      |
 +|_________| \                  /||______________|
 +             \   __________   /
 +  simple     _\||          | /  encoder
 +  filtergraph   | filtered |/
 +                | frames   |
 +                |__________|
 +
 +@end example
 +
 +Simple filtergraphs are configured with the per-stream @option{-filter} option
 +(with @option{-vf} and @option{-af} aliases for video and audio respectively).
 +A simple filtergraph for video can look for example like this:
 +
 +@example
 + _______        _____________        _______        ________
 +|       |      |             |      |       |      |        |
 +| input | ---> | deinterlace | ---> | scale | ---> | output |
 +|_______|      |_____________|      |_______|      |________|
 +
 +@end example
 +
 +Note that some filters change frame properties but not frame contents. E.g. the
 +@code{fps} filter in the example above changes number of frames, but does not
 +touch the frame contents. Another example is the @code{setpts} filter, which
 +only sets timestamps and otherwise passes the frames unchanged.
 +
 +@subsection Complex filtergraphs
 +Complex filtergraphs are those which cannot be described as simply a linear
 +processing chain applied to one stream. This is the case, for example, when the graph has
 +more than one input and/or output, or when output stream type is different from
 +input. They can be represented with the following diagram:
 +
 +@example
 + _________
 +|         |
 +| input 0 |\                    __________
 +|_________| \                  |          |
 +             \   _________    /| output 0 |
 +              \ |         |  / |__________|
 + _________     \| complex | /
 +|         |     |         |/
 +| input 1 |---->| filter  |\
 +|_________|     |         | \   __________
 +               /| graph   |  \ |          |
 +              / |         |   \| output 1 |
 + _________   /  |_________|    |__________|
 +|         | /
 +| input 2 |/
 +|_________|
 +
 +@end example
 +
 +Complex filtergraphs are configured with the @option{-filter_complex} option.
 +Note that this option is global, since a complex filtergraph, by its nature,
 +cannot be unambiguously associated with a single stream or file.
 +
 +The @option{-lavfi} option is equivalent to @option{-filter_complex}.
 +
 +A trivial example of a complex filtergraph is the @code{overlay} filter, which
 +has two video inputs and one video output, containing one video overlaid on top
 +of the other. Its audio counterpart is the @code{amix} filter.
 +
 +@section Stream copy
 +Stream copy is a mode selected by supplying the @code{copy} parameter to the
 +@option{-codec} option. It makes @command{ffmpeg} omit the decoding and encoding
 +step for the specified stream, so it does only demuxing and muxing. It is useful
 +for changing the container format or modifying container-level metadata. The
 +diagram above will, in this case, simplify to this:
 +
 +@example
 + _______              ______________            ________
 +|       |            |              |          |        |
 +| input |  demuxer   | encoded data |  muxer   | output |
 +| file  | ---------> | packets      | -------> | file   |
 +|_______|            |______________|          |________|
 +
 +@end example
 +
 +Since there is no decoding or encoding, it is very fast and there is no quality
 +loss. However, it might not work in some cases because of many factors. Applying
 +filters is obviously also impossible, since filters work on uncompressed data.
 +
 +@c man end DETAILED DESCRIPTION
 +
 +@chapter Stream selection
 +@c man begin STREAM SELECTION
 +
 +By default, @command{ffmpeg} includes only one stream of each type (video, audio, subtitle)
 +present in the input files and adds them to each output file.  It picks the
 +"best" of each based upon the following criteria: for video, it is the stream
 +with the highest resolution, for audio, it is the stream with the most channels, for
 +subtitles, it is the first subtitle stream. In the case where several streams of
 +the same type rate equally, the stream with the lowest index is chosen.
 +
 +You can disable some of those defaults by using the @code{-vn/-an/-sn} options. For
 +full manual control, use the @code{-map} option, which disables the defaults just
 +described.
 +
 +@c man end STREAM SELECTION
 +
 +@chapter Options
 +@c man begin OPTIONS
 +
 +@include fftools-common-opts.texi
 +
 +@section Main options
 +
 +@table @option
 +
 +@item -f @var{fmt} (@emph{input/output})
 +Force input or output file format. The format is normally auto detected for input
 +files and guessed from the file extension for output files, so this option is not
 +needed in most cases.
 +
 +@item -i @var{filename} (@emph{input})
 +input file name
 +
 +@item -y (@emph{global})
 +Overwrite output files without asking.
 +
 +@item -n (@emph{global})
 +Do not overwrite output files, and exit immediately if a specified
 +output file already exists.
 +
 +@item -c[:@var{stream_specifier}] @var{codec} (@emph{input/output,per-stream})
 +@itemx -codec[:@var{stream_specifier}] @var{codec} (@emph{input/output,per-stream})
 +Select an encoder (when used before an output file) or a decoder (when used
 +before an input file) for one or more streams. @var{codec} is the name of a
 +decoder/encoder or a special value @code{copy} (output only) to indicate that
 +the stream is not to be re-encoded.
 +
 +For example
 +@example
 +ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
 +@end example
 +encodes all video streams with libx264 and copies all audio streams.
 +
 +For each stream, the last matching @code{c} option is applied, so
 +@example
 +ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
 +@end example
 +will copy all the streams except the second video, which will be encoded with
 +libx264, and the 138th audio, which will be encoded with libvorbis.
 +
 +@item -t @var{duration} (@emph{input/output})
 +When used as an input option (before @code{-i}), limit the @var{duration} of
 +data read from the input file.
 +
 +When used as an output option (before an output filename), stop writing the
 +output after its duration reaches @var{duration}.
 +
 +@var{duration} may be a number in seconds, or in @code{hh:mm:ss[.xxx]} form.
 +
 +-to and -t are mutually exclusive and -t has priority.
 +
 +@item -to @var{position} (@emph{output})
 +Stop writing the output at @var{position}.
 +@var{position} may be a number in seconds, or in @code{hh:mm:ss[.xxx]} form.
 +
 +-to and -t are mutually exclusive and -t has priority.
 +
 +@item -fs @var{limit_size} (@emph{output})
 +Set the file size limit, expressed in bytes.
 +
 +@item -ss @var{position} (@emph{input/output})
 +When used as an input option (before @code{-i}), seeks in this input file to
 +@var{position}. Note the in most formats it is not possible to seek exactly, so
 +@command{ffmpeg} will seek to the closest seek point before @var{position}.
 +When transcoding and @option{-accurate_seek} is enabled (the default), this
 +extra segment between the seek point and @var{position} will be decoded and
 +discarded. When doing stream copy or when @option{-noaccurate_seek} is used, it
 +will be preserved.
 +
 +When used as an output option (before an output filename), decodes but discards
 +input until the timestamps reach @var{position}.
 +
 +@var{position} may be either in seconds or in @code{hh:mm:ss[.xxx]} form.
 +
 +@item -itsoffset @var{offset} (@emph{input})
 +Set the input time offset.
 +
 +@var{offset} must be a time duration specification,
 +see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
 +
 +The offset is added to the timestamps of the input files. Specifying
 +a positive offset means that the corresponding streams are delayed by
 +the time duration specified in @var{offset}.
 +
 +@item -timestamp @var{date} (@emph{output})
 +Set the recording timestamp in the container.
 +
 +@var{date} must be a time duration specification,
 +see @ref{date syntax,,the Date section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
 +
 +@item -metadata[:metadata_specifier] @var{key}=@var{value} (@emph{output,per-metadata})
 +Set a metadata key/value pair.
 +
 +An optional @var{metadata_specifier} may be given to set metadata
 +on streams or chapters. See @code{-map_metadata} documentation for
 +details.
 +
 +This option overrides metadata set with @code{-map_metadata}. It is
 +also possible to delete metadata by using an empty value.
 +
 +For example, for setting the title in the output file:
 +@example
 +ffmpeg -i in.avi -metadata title="my title" out.flv
 +@end example
 +
 +To set the language of the first audio stream:
 +@example
 +ffmpeg -i INPUT -metadata:s:a:1 language=eng OUTPUT
 +@end example
 +
 +@item -target @var{type} (@emph{output})
 +Specify target file type (@code{vcd}, @code{svcd}, @code{dvd}, @code{dv},
 +@code{dv50}). @var{type} may be prefixed with @code{pal-}, @code{ntsc-} or
 +@code{film-} to use the corresponding standard. All the format options
 +(bitrate, codecs, buffer sizes) are then set automatically. You can just type:
 +
 +@example
 +ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
 +@end example
 +
 +Nevertheless you can specify additional options as long as you know
 +they do not conflict with the standard, as in:
 +
 +@example
 +ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
 +@end example
 +
 +@item -dframes @var{number} (@emph{output})
 +Set the number of data frames to record. This is an alias for @code{-frames:d}.
 +
 +@item -frames[:@var{stream_specifier}] @var{framecount} (@emph{output,per-stream})
 +Stop writing to the stream after @var{framecount} frames.
 +
 +@item -q[:@var{stream_specifier}] @var{q} (@emph{output,per-stream})
 +@itemx -qscale[:@var{stream_specifier}] @var{q} (@emph{output,per-stream})
 +Use fixed quality scale (VBR). The meaning of @var{q}/@var{qscale} is
 +codec-dependent.
 +If @var{qscale} is used without a @var{stream_specifier} then it applies only
 +to the video stream, this is to maintain compatibility with previous behavior
 +and as specifying the same codec specific value to 2 different codecs that is
 +audio and video generally is not what is intended when no stream_specifier is
 +used.
 +
 +@anchor{filter_option}
 +@item -filter[:@var{stream_specifier}] @var{filtergraph} (@emph{output,per-stream})
 +Create the filtergraph specified by @var{filtergraph} and use it to
 +filter the stream.
 +
 +@var{filtergraph} is a description of the filtergraph to apply to
 +the stream, and must have a single input and a single output of the
 +same type of the stream. In the filtergraph, the input is associated
 +to the label @code{in}, and the output to the label @code{out}. See
 +the ffmpeg-filters manual for more information about the filtergraph
 +syntax.
 +
 +See the @ref{filter_complex_option,,-filter_complex option} if you
 +want to create filtergraphs with multiple inputs and/or outputs.
 +
 +@item -filter_script[:@var{stream_specifier}] @var{filename} (@emph{output,per-stream})
 +This option is similar to @option{-filter}, the only difference is that its
 +argument is the name of the file from which a filtergraph description is to be
 +read.
 +
 +@item -pre[:@var{stream_specifier}] @var{preset_name} (@emph{output,per-stream})
 +Specify the preset for matching stream(s).
 +
 +@item -stats (@emph{global})
 +Print encoding progress/statistics. It is on by default, to explicitly
 +disable it you need to specify @code{-nostats}.
 +
 +@item -progress @var{url} (@emph{global})
 +Send program-friendly progress information to @var{url}.
 +
 +Progress information is written approximately every second and at the end of
 +the encoding process. It is made of "@var{key}=@var{value}" lines. @var{key}
 +consists of only alphanumeric characters. The last key of a sequence of
 +progress information is always "progress".
 +
 +@item -stdin
 +Enable interaction on standard input. On by default unless standard input is
 +used as an input. To explicitly disable interaction you need to specify
 +@code{-nostdin}.
 +
 +Disabling interaction on standard input is useful, for example, if
 +ffmpeg is in the background process group. Roughly the same result can
 +be achieved with @code{ffmpeg ... < /dev/null} but it requires a
 +shell.
 +
 +@item -debug_ts (@emph{global})
 +Print timestamp information. It is off by default. This option is
 +mostly useful for testing and debugging purposes, and the output
 +format may change from one version to another, so it should not be
 +employed by portable scripts.
 +
 +See also the option @code{-fdebug ts}.
 +
 +@item -attach @var{filename} (@emph{output})
 +Add an attachment to the output file. This is supported by a few formats
 +like Matroska for e.g. fonts used in rendering subtitles. Attachments
 +are implemented as a specific type of stream, so this option will add
 +a new stream to the file. It is then possible to use per-stream options
 +on this stream in the usual way. Attachment streams created with this
 +option will be created after all the other streams (i.e. those created
 +with @code{-map} or automatic mappings).
 +
 +Note that for Matroska you also have to set the mimetype metadata tag:
 +@example
 +ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
 +@end example
 +(assuming that the attachment stream will be third in the output file).
 +
 +@item -dump_attachment[:@var{stream_specifier}] @var{filename} (@emph{input,per-stream})
 +Extract the matching attachment stream into a file named @var{filename}. If
 +@var{filename} is empty, then the value of the @code{filename} metadata tag
 +will be used.
 +
 +E.g. to extract the first attachment to a file named 'out.ttf':
 +@example
 +ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
 +@end example
 +To extract all attachments to files determined by the @code{filename} tag:
 +@example
 +ffmpeg -dump_attachment:t "" -i INPUT
 +@end example
 +
 +Technical note -- attachments are implemented as codec extradata, so this
 +option can actually be used to extract extradata from any stream, not just
 +attachments.
 +
 +@end table
 +
 +@section Video Options
 +
 +@table @option
 +@item -vframes @var{number} (@emph{output})
 +Set the number of video frames to record. This is an alias for @code{-frames:v}.
 +@item -r[:@var{stream_specifier}] @var{fps} (@emph{input/output,per-stream})
 +Set frame rate (Hz value, fraction or abbreviation).
 +
 +As an input option, ignore any timestamps stored in the file and instead
 +generate timestamps assuming constant frame rate @var{fps}.
 +
 +As an output option, duplicate or drop input frames to achieve constant output
 +frame rate @var{fps}.
 +
 +@item -s[:@var{stream_specifier}] @var{size} (@emph{input/output,per-stream})
 +Set frame size.
 +
 +As an input option, this is a shortcut for the @option{video_size} private
 +option, recognized by some demuxers for which the frame size is either not
 +stored in the file or is configurable -- e.g. raw video or video grabbers.
 +
 +As an output option, this inserts the @code{scale} video filter to the
 +@emph{end} of the corresponding filtergraph. Please use the @code{scale} filter
 +directly to insert it at the beginning or some other place.
 +
 +The format is @samp{wxh} (default - same as source).
 +
 +@item -aspect[:@var{stream_specifier}] @var{aspect} (@emph{output,per-stream})
 +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.
 +
 +If used together with @option{-vcodec copy}, it will affect the aspect ratio
 +stored at container level, but not the aspect ratio stored in encoded
 +frames, if it exists.
 +
 +@item -vn (@emph{output})
 +Disable video recording.
 +
 +@item -vcodec @var{codec} (@emph{output})
 +Set the video codec. This is an alias for @code{-codec:v}.
 +
 +@item -pass[:@var{stream_specifier}] @var{n} (@emph{output,per-stream})
 +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.
 +On pass 1, you may just deactivate audio and set output to null,
 +examples for Windows and Unix:
 +@example
 +ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
 +ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
 +@end example
 +
 +@item -passlogfile[:@var{stream_specifier}] @var{prefix} (@emph{output,per-stream})
 +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
 +stream
 +
 +@item -vf @var{filtergraph} (@emph{output})
 +Create the filtergraph specified by @var{filtergraph} and use it to
 +filter the stream.
 +
 +This is an alias for @code{-filter:v}, see the @ref{filter_option,,-filter option}.
 +@end table
 +
 +@section Advanced Video options
 +
 +@table @option
 +@item -pix_fmt[:@var{stream_specifier}] @var{format} (@emph{input/output,per-stream})
 +Set pixel format. Use @code{-pix_fmts} to show all the supported
 +pixel formats.
 +If the selected pixel format can not be selected, ffmpeg will print a
 +warning and select the best pixel format supported by the encoder.
 +If @var{pix_fmt} is prefixed by a @code{+}, ffmpeg will exit with an error
 +if the requested pixel format can not be selected, and automatic conversions
 +inside filtergraphs are disabled.
 +If @var{pix_fmt} is a single @code{+}, ffmpeg selects the same pixel format
 +as the input (or graph output) and automatic conversions are disabled.
 +
 +@item -sws_flags @var{flags} (@emph{input/output})
 +Set SwScaler flags.
 +@item -vdt @var{n}
 +Discard threshold.
 +
 +@item -rc_override[:@var{stream_specifier}] @var{override} (@emph{output,per-stream})
 +Rate control override for specific intervals, formatted as "int,int,int"
 +list separated with slashes. Two first values are the beginning and
 +end frame numbers, last one is quantizer to use if positive, or quality
 +factor if negative.
 +
 +@item -ilme
 +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.
 +@item -psnr
 +Calculate PSNR of compressed frames.
 +@item -vstats
 +Dump video coding statistics to @file{vstats_HHMMSS.log}.
 +@item -vstats_file @var{file}
 +Dump video coding statistics to @var{file}.
 +@item -top[:@var{stream_specifier}] @var{n} (@emph{output,per-stream})
 +top=1/bottom=0/auto=-1 field first
 +@item -dc @var{precision}
 +Intra_dc_precision.
 +@item -vtag @var{fourcc/tag} (@emph{output})
 +Force video tag/fourcc. This is an alias for @code{-tag:v}.
 +@item -qphist (@emph{global})
 +Show QP histogram
 +@item -vbsf @var{bitstream_filter}
 +Deprecated see -bsf
 +
 +@item -force_key_frames[:@var{stream_specifier}] @var{time}[,@var{time}...] (@emph{output,per-stream})
 +@item -force_key_frames[:@var{stream_specifier}] expr:@var{expr} (@emph{output,per-stream})
 +Force key frames at the specified timestamps, more precisely at the first
 +frames after each specified time.
 +
 +If the argument is prefixed with @code{expr:}, the string @var{expr}
 +is interpreted like an expression and is evaluated for each frame. A
 +key frame is forced in case the evaluation is non-zero.
 +
 +If one of the times is "@code{chapters}[@var{delta}]", it is expanded into
 +the time of the beginning of all chapters in the file, shifted by
 +@var{delta}, expressed as a time in seconds.
 +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.
 +
 +For example, to insert a key frame at 5 minutes, plus key frames 0.1 second
 +before the beginning of every chapter:
 +@example
 +-force_key_frames 0:05:00,chapters-0.1
 +@end example
 +
 +The expression in @var{expr} can contain the following constants:
 +@table @option
 +@item n
 +the number of current processed frame, starting from 0
 +@item n_forced
 +the number of forced frames
 +@item prev_forced_n
 +the number of the previous forced frame, it is @code{NAN} when no
 +keyframe was forced yet
 +@item prev_forced_t
 +the time of the previous forced frame, it is @code{NAN} when no
 +keyframe was forced yet
 +@item t
 +the time of the current processed frame
 +@end table
 +
 +For example to force a key frame every 5 seconds, you can specify:
 +@example
 +-force_key_frames expr:gte(t,n_forced*5)
 +@end example
 +
 +To force a key frame 5 seconds after the time of the last forced one,
 +starting from second 13:
 +@example
 +-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))
 +@end example
 +
 +Note that forcing too many keyframes is very harmful for the lookahead
 +algorithms of certain encoders: using fixed-GOP options or similar
 +would be more efficient.
 +
 +@item -copyinkf[:@var{stream_specifier}] (@emph{output,per-stream})
 +When doing stream copy, copy also non-key frames found at the
 +beginning.
 +
 +@item -hwaccel[:@var{stream_specifier}] @var{hwaccel} (@emph{input,per-stream})
 +Use hardware acceleration to decode the matching stream(s). The allowed values
 +of @var{hwaccel} are:
 +@table @option
 +@item none
 +Do not use any hardware acceleration (the default).
 +
 +@item auto
 +Automatically select the hardware acceleration method.
 +
 +@item vda
 +Use Apple VDA hardware acceleration.
 +
 +@item vdpau
 +Use VDPAU (Video Decode and Presentation API for Unix) hardware acceleration.
 +
 +@item dxva2
 +Use DXVA2 (DirectX Video Acceleration) hardware acceleration.
 +@end table
 +
 +This option has no effect if the selected hwaccel is not available or not
 +supported by the chosen decoder.
 +
 +Note that most acceleration methods are intended for playback and will not be
 +faster than software decoding on modern CPUs. Additionally, @command{ffmpeg}
 +will usually need to copy the decoded frames from the GPU memory into the system
 +memory, resulting in further performance loss. This option is thus mainly
 +useful for testing.
 +
 +@item -hwaccel_device[:@var{stream_specifier}] @var{hwaccel_device} (@emph{input,per-stream})
 +Select a device to use for hardware acceleration.
 +
 +This option only makes sense when the @option{-hwaccel} option is also
 +specified. Its exact meaning depends on the specific hardware acceleration
 +method chosen.
 +
 +@table @option
 +@item vdpau
 +For VDPAU, this option specifies the X11 display/screen to use. If this option
 +is not specified, the value of the @var{DISPLAY} environment variable is used
 +
 +@item dxva2
 +For DXVA2, this option should contain the number of the display adapter to use.
 +If this option is not specified, the default adapter is used.
 +@end table
 +@end table
 +
 +@section Audio Options
 +
 +@table @option
 +@item -aframes @var{number} (@emph{output})
 +Set the number of audio frames to record. This is an alias for @code{-frames:a}.
 +@item -ar[:@var{stream_specifier}] @var{freq} (@emph{input/output,per-stream})
 +Set the audio sampling frequency. For output streams it is set by
 +default to the frequency of the corresponding input stream. For input
 +streams this option only makes sense for audio grabbing devices and raw
 +demuxers and is mapped to the corresponding demuxer options.
 +@item -aq @var{q} (@emph{output})
 +Set the audio quality (codec-specific, VBR). This is an alias for -q:a.
 +@item -ac[:@var{stream_specifier}] @var{channels} (@emph{input/output,per-stream})
 +Set the number of audio channels. For output streams it is set by
 +default to the number of input audio channels. For input streams
 +this option only makes sense for audio grabbing devices and raw demuxers
 +and is mapped to the corresponding demuxer options.
 +@item -an (@emph{output})
 +Disable audio recording.
 +@item -acodec @var{codec} (@emph{input/output})
 +Set the audio codec. This is an alias for @code{-codec:a}.
 +@item -sample_fmt[:@var{stream_specifier}] @var{sample_fmt} (@emph{output,per-stream})
 +Set the audio sample format. Use @code{-sample_fmts} to get a list
 +of supported sample formats.
 +
 +@item -af @var{filtergraph} (@emph{output})
 +Create the filtergraph specified by @var{filtergraph} and use it to
 +filter the stream.
 +
 +This is an alias for @code{-filter:a}, see the @ref{filter_option,,-filter option}.
 +@end table
 +
 +@section Advanced Audio options
 +
 +@table @option
 +@item -atag @var{fourcc/tag} (@emph{output})
 +Force audio tag/fourcc. This is an alias for @code{-tag:a}.
 +@item -absf @var{bitstream_filter}
 +Deprecated, see -bsf
 +@item -guess_layout_max @var{channels} (@emph{input,per-stream})
 +If some input channel layout is not known, try to guess only if it
 +corresponds to at most the specified number of channels. For example, 2
 +tells to @command{ffmpeg} to recognize 1 channel as mono and 2 channels as
 +stereo but not 6 channels as 5.1. The default is to always try to guess. Use
 +0 to disable all guessing.
 +@end table
 +
 +@section Subtitle options
 +
 +@table @option
 +@item -scodec @var{codec} (@emph{input/output})
 +Set the subtitle codec. This is an alias for @code{-codec:s}.
 +@item -sn (@emph{output})
 +Disable subtitle recording.
 +@item -sbsf @var{bitstream_filter}
 +Deprecated, see -bsf
 +@end table
 +
 +@section Advanced Subtitle options
 +
 +@table @option
 +
 +@item -fix_sub_duration
 +Fix subtitles durations. For each subtitle, wait for the next packet in the
 +same stream and adjust the duration of the first to avoid overlap. This is
 +necessary with some subtitles codecs, especially DVB subtitles, because the
 +duration in the original packet is only a rough estimate and the end is
 +actually marked by an empty subtitle frame. Failing to use this option when
 +necessary can result in exaggerated durations or muxing failures due to
 +non-monotonic timestamps.
 +
 +Note that this option will delay the output of all data until the next
 +subtitle packet is decoded: it may increase memory consumption and latency a
 +lot.
 +
 +@item -canvas_size @var{size}
 +Set the size of the canvas used to render subtitles.
 +
 +@end table
 +
 +@section Advanced options
 +
 +@table @option
 +@item -map [-]@var{input_file_id}[:@var{stream_specifier}][,@var{sync_file_id}[:@var{stream_specifier}]] | @var{[linklabel]} (@emph{output})
 +
 +Designate one or more input streams 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 indices start at 0. If specified,
 +@var{sync_file_id}:@var{stream_specifier} sets which input stream
 +is used as a presentation sync reference.
 +
 +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.
 +
 +A @code{-} character before the stream identifier creates a "negative" mapping.
 +It disables matching streams from already created mappings.
 +
 +An alternative @var{[linklabel]} form will map outputs from complex filter
 +graphs (see the @option{-filter_complex} option) to the output file.
 +@var{linklabel} must correspond to a defined output link label in the graph.
 +
 +For example, to map ALL streams from the first input file to output
 +@example
 +ffmpeg -i INPUT -map 0 output
 +@end example
 +
 +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 streams to place in an output file. For
 +example:
 +@example
 +ffmpeg -i INPUT -map 0:1 out.wav
 +@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 -c copy -map 0:2 -map 1:6 out.mov
 +@end example
 +
 +To select all video and the third audio stream from an input file:
 +@example
 +ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
 +@end example
 +
 +To map all the streams except the second audio, use negative mappings
 +@example
 +ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
 +@end example
 +
++To pick the English audio stream:
++@example
++avconv -i INPUT -map 0:m:language:eng OUTPUT
++@end example
++
 +Note that using this option disables the default mappings for this output file.
 +
 +@item -map_channel [@var{input_file_id}.@var{stream_specifier}.@var{channel_id}|-1][:@var{output_file_id}.@var{stream_specifier}]
 +Map an audio channel from a given input to an output. If
 +@var{output_file_id}.@var{stream_specifier} is not set, the audio channel will
 +be mapped on all the audio streams.
 +
 +Using "-1" instead of
 +@var{input_file_id}.@var{stream_specifier}.@var{channel_id} will map a muted
 +channel.
 +
 +For example, assuming @var{INPUT} is a stereo audio file, you can switch the
 +two audio channels with the following command:
 +@example
 +ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT
 +@end example
 +
 +If you want to mute the first channel and keep the second:
 +@example
 +ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT
 +@end example
 +
 +The order of the "-map_channel" option specifies the order of the channels in
 +the output stream. The output channel layout is guessed from the number of
 +channels mapped (mono if one "-map_channel", stereo if two, etc.). Using "-ac"
 +in combination of "-map_channel" makes the channel gain levels to be updated if
 +input and output channel layouts don't match (for instance two "-map_channel"
 +options and "-ac 6").
 +
 +You can also extract each channel of an input to specific outputs; the following
 +command extracts two channels of the @var{INPUT} audio stream (file 0, stream 0)
 +to the respective @var{OUTPUT_CH0} and @var{OUTPUT_CH1} outputs:
 +@example
 +ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
 +@end example
 +
 +The following example splits the channels of a stereo input into two separate
 +streams, which are put into the same output file:
 +@example
 +ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg
 +@end example
 +
 +Note that currently each output stream can only contain channels from a single
 +input stream; you can't for example use "-map_channel" to pick multiple input
 +audio channels contained in different streams (from the same or different files)
 +and merge them into a single output stream. It is therefore not currently
 +possible, for example, to turn two separate mono streams into a single stereo
 +stream. However splitting a stereo stream into two single channel mono streams
 +is possible.
 +
 +If you need this feature, a possible workaround is to use the @emph{amerge}
 +filter. For example, if you need to merge a media (here @file{input.mkv}) with 2
 +mono audio streams into one single stereo channel audio stream (and keep the
 +video stream), you can use the following command:
 +@example
 +ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
 +@end example
 +
 +@item -map_metadata[:@var{metadata_spec_out}] @var{infile}[:@var{metadata_spec_in}] (@emph{output,per-metadata})
 +Set metadata information of the next output file from @var{infile}. Note that
 +those are file indices (zero-based), not filenames.
 +Optional @var{metadata_spec_in/out} parameters specify, which metadata to copy.
 +A metadata specifier can have the following forms:
 +@table @option
 +@item @var{g}
 +global metadata, i.e. metadata that applies to the whole file
 +
 +@item @var{s}[:@var{stream_spec}]
 +per-stream metadata. @var{stream_spec} is a stream specifier as described
 +in the @ref{Stream specifiers} chapter. In an input metadata specifier, the first
 +matching stream is copied from. In an output metadata specifier, all matching
 +streams are copied to.
 +
 +@item @var{c}:@var{chapter_index}
 +per-chapter metadata. @var{chapter_index} is the zero-based chapter index.
 +
 +@item @var{p}:@var{program_index}
 +per-program metadata. @var{program_index} is the zero-based program index.
 +@end table
 +If metadata specifier is omitted, it defaults to global.
 +
 +By default, global metadata is copied from the first input file,
 +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.
 +
 +For example to copy metadata from the first stream of the input file to global metadata
 +of the output file:
 +@example
 +ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
 +@end example
 +
 +To do the reverse, i.e. copy global metadata to all audio streams:
 +@example
 +ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
 +@end example
 +Note that simple @code{0} would work as well in this example, since global
 +metadata is assumed by default.
 +
 +@item -map_chapters @var{input_file_index} (@emph{output})
 +Copy chapters from input file with index @var{input_file_index} to the next
 +output file. If no chapter mapping is specified, then chapters are copied from
 +the first input file with at least one chapter. Use a negative file index to
 +disable any chapter copying.
 +
 +@item -benchmark (@emph{global})
 +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.
 +@item -benchmark_all (@emph{global})
 +Show benchmarking information during the encode.
 +Shows CPU time used in various steps (audio/video encode/decode).
 +@item -timelimit @var{duration} (@emph{global})
 +Exit after ffmpeg has been running for @var{duration} seconds.
 +@item -dump (@emph{global})
 +Dump each input packet to stderr.
 +@item -hex (@emph{global})
 +When dumping packets, also dump the payload.
 +@item -re (@emph{input})
 +Read input at native frame rate. Mainly used to simulate a grab device.
 +or live input stream (e.g. when reading from a file). Should not be used
 +with actual grab devices or live input streams (where it can cause packet
 +loss).
 +By default @command{ffmpeg} attempts to read the input(s) as fast as possible.
 +This option will slow down the reading of the input(s) to the native frame rate
 +of the input(s). It is useful for real-time output (e.g. live streaming).
 +@item -loop_input
 +Loop over the input stream. Currently it works only for image
 +streams. This option is used for automatic FFserver testing.
 +This option is deprecated, use -loop 1.
 +@item -loop_output @var{number_of_times}
 +Repeatedly loop output for formats that support looping such as animated GIF
 +(0 will loop the output infinitely).
 +This option is deprecated, use -loop.
 +@item -vsync @var{parameter}
 +Video sync method.
 +For compatibility reasons old values can be specified as numbers.
 +Newly added values will have to be specified as strings always.
 +
 +@table @option
 +@item 0, passthrough
 +Each frame is passed with its timestamp from the demuxer to the muxer.
 +@item 1, cfr
 +Frames will be duplicated and dropped to achieve exactly the requested
 +constant frame rate.
 +@item 2, vfr
 +Frames are passed through with their timestamp or dropped so as to
 +prevent 2 frames from having the same timestamp.
 +@item drop
 +As passthrough but destroys all timestamps, making the muxer generate
 +fresh timestamps based on frame-rate.
 +@item -1, auto
 +Chooses between 1 and 2 depending on muxer capabilities. This is the
 +default method.
 +@end table
 +
 +Note that the timestamps may be further modified by the muxer, after this.
 +For example, in the case that the format option @option{avoid_negative_ts}
 +is enabled.
 +
 +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.
 +
 +@item -async @var{samples_per_second}
 +Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps,
 +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.
 +
 +Note that the timestamps may be further modified by the muxer, after this.
 +For example, in the case that the format option @option{avoid_negative_ts}
 +is enabled.
 +
 +This option has been deprecated. Use the @code{aresample} audio filter instead.
 +
 +@item -copyts
 +Do not process input timestamps, but keep their values without trying
 +to sanitize them. In particular, do not remove the initial start time
 +offset value.
 +
 +Note that, depending on the @option{vsync} option or on specific muxer
 +processing (e.g. in case the format option @option{avoid_negative_ts}
 +is enabled) the output timestamps may mismatch with the input
 +timestamps even when this option is selected.
 +
 +@item -copytb @var{mode}
 +Specify how to set the encoder timebase when stream copying.  @var{mode} is an
 +integer numeric value, and can assume one of the following values:
 +
 +@table @option
 +@item 1
 +Use the demuxer timebase.
 +
 +The time base is copied to the output encoder from the corresponding input
 +demuxer. This is sometimes required to avoid non monotonically increasing
 +timestamps when copying video streams with variable frame rate.
 +
 +@item 0
 +Use the decoder timebase.
 +
 +The time base is copied to the output encoder from the corresponding input
 +decoder.
 +
 +@item -1
 +Try to make the choice automatically, in order to generate a sane output.
 +@end table
 +
 +Default value is -1.
 +
 +@item -shortest (@emph{output})
 +Finish encoding when the shortest input stream ends.
 +@item -dts_delta_threshold
 +Timestamp discontinuity delta threshold.
 +@item -muxdelay @var{seconds} (@emph{input})
 +Set the maximum demux-decode delay.
 +@item -muxpreload @var{seconds} (@emph{input})
 +Set the initial demux-decode delay.
 +@item -streamid @var{output-stream-index}:@var{new-value} (@emph{output})
 +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.
 +
 +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
 +
 +@item -bsf[:@var{stream_specifier}] @var{bitstream_filters} (@emph{output,per-stream})
 +Set bitstream filters for matching streams. @var{bitstream_filters} is
 +a comma-separated list of bitstream filters. Use the @code{-bsfs} option
 +to get the list of bitstream filters.
 +@example
 +ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
 +@end example
 +@example
 +ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
 +@end example
 +
 +@item -tag[:@var{stream_specifier}] @var{codec_tag} (@emph{input/output,per-stream})
 +Force a tag/fourcc for matching streams.
 +
 +@item -timecode @var{hh}:@var{mm}:@var{ss}SEP@var{ff}
 +Specify Timecode for writing. @var{SEP} is ':' for non drop timecode and ';'
 +(or '.') for drop.
 +@example
 +ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
 +@end example
 +
 +@anchor{filter_complex_option}
 +@item -filter_complex @var{filtergraph} (@emph{global})
 +Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
 +outputs. For simple graphs -- those with one input and one output of the same
 +type -- see the @option{-filter} options. @var{filtergraph} is a description of
 +the filtergraph, as described in the ``Filtergraph syntax'' section of the
 +ffmpeg-filters manual.
 +
 +Input link labels must refer to input streams using the
 +@code{[file_index:stream_specifier]} syntax (i.e. the same as @option{-map}
 +uses). If @var{stream_specifier} matches multiple streams, the first one will be
 +used. An unlabeled input will be connected to the first unused input stream of
 +the matching type.
 +
 +Output link labels are referred to with @option{-map}. Unlabeled outputs are
 +added to the first output file.
 +
 +Note that with this option it is possible to use only lavfi sources without
 +normal input files.
 +
 +For example, to overlay an image over video
 +@example
 +ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
 +'[out]' out.mkv
 +@end example
 +Here @code{[0:v]} refers to the first video stream in the first input file,
 +which is linked to the first (main) input of the overlay filter. Similarly the
 +first video stream in the second input is linked to the second (overlay) input
 +of overlay.
 +
 +Assuming there is only one video stream in each input file, we can omit input
 +labels, so the above is equivalent to
 +@example
 +ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
 +'[out]' out.mkv
 +@end example
 +
 +Furthermore we can omit the output label and the single output from the filter
 +graph will be added to the output file automatically, so we can simply write
 +@example
 +ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
 +@end example
 +
 +To generate 5 seconds of pure red video using lavfi @code{color} source:
 +@example
 +ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
 +@end example
 +
 +@item -lavfi @var{filtergraph} (@emph{global})
 +Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
 +outputs. Equivalent to @option{-filter_complex}.
 +
 +@item -filter_complex_script @var{filename} (@emph{global})
 +This option is similar to @option{-filter_complex}, the only difference is that
 +its argument is the name of the file from which a complex filtergraph
 +description is to be read.
 +
 +@item -accurate_seek (@emph{input})
 +This option enables or disables accurate seeking in input files with the
 +@option{-ss} option. It is enabled by default, so seeking is accurate when
 +transcoding. Use @option{-noaccurate_seek} to disable it, which may be useful
 +e.g. when copying some streams and transcoding the others.
 +
 +@item -override_ffserver (@emph{global})
 +Overrides the input specifications from @command{ffserver}. Using this
 +option you can map any input stream to @command{ffserver} and control
 +many aspects of the encoding from @command{ffmpeg}. Without this
 +option @command{ffmpeg} will transmit to @command{ffserver} what is
 +requested by @command{ffserver}.
 +
 +The option is intended for cases where features are needed that cannot be
 +specified to @command{ffserver} but can be to @command{ffmpeg}.
 +
 +@item -discard (@emph{input})
 +Allows discarding specific streams or frames of streams at the demuxer.
 +Not all demuxers support this.
 +
 +@table @option
 +@item none
 +Discard no frame.
 +
 +@item default
 +Default, which discards no frames.
 +
 +@item noref
 +Discard all non-reference frames.
 +
 +@item bidir
 +Discard all bidirectional frames.
 +
 +@item nokey
 +Discard all frames excepts keyframes.
 +
 +@item all
 +Discard all frames.
 +@end table
 +
 +@end table
 +
 +As a special exception, you can use a bitmap subtitle stream as input: it
 +will be converted into a video with the same size as the largest video in
 +the file, or 720x576 if no video is present. Note that this is an
 +experimental and temporary solution. It will be removed once libavfilter has
 +proper support for subtitles.
 +
 +For example, to hardcode subtitles on top of a DVB-T recording stored in
 +MPEG-TS format, delaying the subtitles by 1 second:
 +@example
 +ffmpeg -i input.ts -filter_complex \
 +  '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
 +  -sn -map '#0x2dc' output.mkv
 +@end example
 +(0x2d0, 0x2dc and 0x2ef are the MPEG-TS PIDs of respectively the video,
 +audio and subtitles streams; 0:0, 0:3 and 0:7 would have worked too)
 +
 +@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
 +the @file{presets} directory in the FFmpeg source tree for examples.
 +
 +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
 +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})
 +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
 +
 +@chapter Tips
 +@c man begin TIPS
 +
 +@itemize
 +@item
 +For streaming at very low bitrates, use a low frame rate
 +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:
 +
 +@example
 +ffmpeg -g 3 -r 3 -t 10 -b:v 50k -s qcif -f rv10 /tmp/b.rm
 +@end example
 +
 +@item
 +The parameter 'q' which is displayed while encoding is the current
 +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
 +your bitrate. You must either increase the bitrate, decrease the
 +frame rate or decrease the frame size.
 +
 +@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
 +motion estimation completely (you have only I-frames, which means it
 +is about as good as JPEG compression).
 +
 +@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).
 +
 +@end itemize
 +@c man end TIPS
 +
 +@chapter Examples
 +@c man begin EXAMPLES
 +
 +@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}.
 +
 +@section Video and Audio grabbing
 +
 +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
 +
 +@example
 +ffmpeg -f x11grab -video_size cif -framerate 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 -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
 +@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
 +
 +Any supported file format and protocol can serve as input to ffmpeg:
 +
 +Examples:
 +@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.
 +
 +@item
 +You can transcode decrypted VOBs:
 +
 +@example
 +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:
 +
 +@example
 +ffmpeg -i test1.avi -i test2.avi -map 0:3 -map 0:2 -map 0:1 -map 0:0 -c copy test12.nut
 +@end example
 +
 +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
 +@end example
 +
 +@end itemize
 +@c man end EXAMPLES
 +
 +@include config.texi
 +@ifset config-all
 +@ifset config-avutil
 +@include utils.texi
 +@end ifset
 +@ifset config-avcodec
 +@include codecs.texi
 +@include bitstream_filters.texi
 +@end ifset
 +@ifset config-avformat
 +@include formats.texi
 +@include protocols.texi
 +@end ifset
 +@ifset config-avdevice
 +@include devices.texi
 +@end ifset
 +@ifset config-swresample
 +@include resampler.texi
 +@end ifset
 +@ifset config-swscale
 +@include scaler.texi
 +@end ifset
 +@ifset config-avfilter
 +@include filters.texi
 +@end ifset
 +@end ifset
 +
 +@chapter See Also
 +
 +@ifhtml
 +@ifset config-all
 +@url{ffmpeg.html,ffmpeg}
 +@end ifset
 +@ifset config-not-all
 +@url{ffmpeg-all.html,ffmpeg-all},
 +@end ifset
 +@url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver},
 +@url{ffmpeg-utils.html,ffmpeg-utils},
 +@url{ffmpeg-scaler.html,ffmpeg-scaler},
 +@url{ffmpeg-resampler.html,ffmpeg-resampler},
 +@url{ffmpeg-codecs.html,ffmpeg-codecs},
 +@url{ffmpeg-bitstream-filters.html,ffmpeg-bitstream-filters},
 +@url{ffmpeg-formats.html,ffmpeg-formats},
 +@url{ffmpeg-devices.html,ffmpeg-devices},
 +@url{ffmpeg-protocols.html,ffmpeg-protocols},
 +@url{ffmpeg-filters.html,ffmpeg-filters}
 +@end ifhtml
 +
 +@ifnothtml
 +@ifset config-all
 +ffmpeg(1),
 +@end ifset
 +@ifset config-not-all
 +ffmpeg-all(1),
 +@end ifset
 +ffplay(1), ffprobe(1), ffserver(1),
 +ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1),
 +ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1),
 +ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)
 +@end ifnothtml
 +
 +@include authors.texi
 +
 +@ignore
 +
 +@setfilename ffmpeg
 +@settitle ffmpeg video converter
 +
 +@end ignore
 +
 +@bye
index ab627ca,0000000..6ee6292
mode 100644,000000..100644
--- /dev/null
@@@ -1,305 -1,0 +1,312 @@@
 +All the numerical options, if not specified otherwise, accept a string
 +representing a number as input, which may be followed by one of the SI
 +unit prefixes, for example: 'K', 'M', or 'G'.
 +
 +If 'i' is appended to the SI unit prefix, the complete prefix will be
 +interpreted as a unit prefix for binary multiplies, which are based on
 +powers of 1024 instead of powers of 1000. Appending 'B' to the SI unit
 +prefix multiplies the value by 8. This allows using, for example:
 +'KB', 'MiB', 'G' and 'B' as number suffixes.
 +
 +Options which do not take arguments are boolean options, and set the
 +corresponding value to true. They can be set to false by prefixing
 +the option name with "no". For example using "-nofoo"
 +will set the boolean option with name "foo" to false.
 +
 +@anchor{Stream specifiers}
 +@section Stream specifiers
 +Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
 +are used to precisely specify which stream(s) a given option belongs to.
 +
 +A stream specifier is a string generally appended to the option name and
 +separated from it by a colon. E.g. @code{-codec:a:1 ac3} contains the
 +@code{a:1} stream specifier, which matches the second audio stream. Therefore, it
 +would select the ac3 codec for the second audio stream.
 +
 +A stream specifier can match several streams, so that the option is applied to all
 +of them. E.g. the stream specifier in @code{-b:a 128k} matches all audio
 +streams.
 +
 +An empty stream specifier matches all streams. For example, @code{-codec copy}
 +or @code{-codec: copy} would copy all the streams without reencoding.
 +
 +Possible forms of stream specifiers are:
 +@table @option
 +@item @var{stream_index}
 +Matches the stream with this index. E.g. @code{-threads:1 4} would set the
 +thread count for the second stream to 4.
 +@item @var{stream_type}[:@var{stream_index}]
 +@var{stream_type} is one of following: 'v' for video, 'a' for audio, 's' for subtitle,
 +'d' for data, and 't' for attachments. If @var{stream_index} is given, then it matches
 +stream number @var{stream_index} of this type. Otherwise, it matches all
 +streams of this type.
 +@item p:@var{program_id}[:@var{stream_index}]
 +If @var{stream_index} is given, then it matches the stream with number @var{stream_index}
 +in the program with the id @var{program_id}. Otherwise, it matches all streams in the
 +program.
 +@item #@var{stream_id} or i:@var{stream_id}
 +Match the stream by stream id (e.g. PID in MPEG-TS container).
++@item m:@var{key}[:@var{value}]
++Matches streams with the metadata tag @var{key} having the specified value. If
++@var{value} is not given, matches streams that contain the given tag with any
++value.
++
++Note that in @command{avconv}, matching by metadata will only work properly for
++input files.
 +@end table
 +
 +@section Generic options
 +
 +These options are shared amongst the ff* tools.
 +
 +@table @option
 +
 +@item -L
 +Show license.
 +
 +@item -h, -?, -help, --help [@var{arg}]
 +Show help. An optional parameter may be specified to print help about a specific
 +item. If no argument is specified, only basic (non advanced) tool
 +options are shown.
 +
 +Possible values of @var{arg} are:
 +@table @option
 +@item long
 +Print advanced tool options in addition to the basic tool options.
 +
 +@item full
 +Print complete list of options, including shared and private options
 +for encoders, decoders, demuxers, muxers, filters, etc.
 +
 +@item decoder=@var{decoder_name}
 +Print detailed information about the decoder named @var{decoder_name}. Use the
 +@option{-decoders} option to get a list of all decoders.
 +
 +@item encoder=@var{encoder_name}
 +Print detailed information about the encoder named @var{encoder_name}. Use the
 +@option{-encoders} option to get a list of all encoders.
 +
 +@item demuxer=@var{demuxer_name}
 +Print detailed information about the demuxer named @var{demuxer_name}. Use the
 +@option{-formats} option to get a list of all demuxers and muxers.
 +
 +@item muxer=@var{muxer_name}
 +Print detailed information about the muxer named @var{muxer_name}. Use the
 +@option{-formats} option to get a list of all muxers and demuxers.
 +
 +@item filter=@var{filter_name}
 +Print detailed information about the filter name @var{filter_name}. Use the
 +@option{-filters} option to get a list of all filters.
 +@end table
 +
 +@item -version
 +Show version.
 +
 +@item -formats
 +Show available formats.
 +
 +@item -codecs
 +Show all codecs known to libavcodec.
 +
 +Note that the term 'codec' is used throughout this documentation as a shortcut
 +for what is more correctly called a media bitstream format.
 +
 +@item -decoders
 +Show available decoders.
 +
 +@item -encoders
 +Show all available encoders.
 +
 +@item -bsfs
 +Show available bitstream filters.
 +
 +@item -protocols
 +Show available protocols.
 +
 +@item -filters
 +Show available libavfilter filters.
 +
 +@item -pix_fmts
 +Show available pixel formats.
 +
 +@item -sample_fmts
 +Show available sample formats.
 +
 +@item -layouts
 +Show channel names and standard channel layouts.
 +
 +@item -colors
 +Show recognized color names.
 +
 +@item -loglevel [repeat+]@var{loglevel} | -v [repeat+]@var{loglevel}
 +Set the logging level used by the library.
 +Adding "repeat+" indicates that repeated log output should not be compressed
 +to the first line and the "Last message repeated n times" line will be
 +omitted. "repeat" can also be used alone.
 +If "repeat" is used alone, and with no prior loglevel set, the default
 +loglevel will be used. If multiple loglevel parameters are given, using
 +'repeat' will not change the loglevel.
 +@var{loglevel} is a number or a string containing one of the following values:
 +@table @samp
 +@item quiet
 +Show nothing at all; be silent.
 +@item panic
 +Only show fatal errors which could lead the process to crash, such as
 +and assert failure. This is not currently used for anything.
 +@item fatal
 +Only show fatal errors. These are errors after which the process absolutely
 +cannot continue after.
 +@item error
 +Show all errors, including ones which can be recovered from.
 +@item warning
 +Show all warnings and errors. Any message related to possibly
 +incorrect or unexpected events will be shown.
 +@item info
 +Show informative messages during processing. This is in addition to
 +warnings and errors. This is the default value.
 +@item verbose
 +Same as @code{info}, except more verbose.
 +@item debug
 +Show everything, including debugging information.
 +@end table
 +
 +By default the program logs to stderr, if coloring is supported by the
 +terminal, colors are used to mark errors and warnings. Log coloring
 +can be disabled setting the environment variable
 +@env{AV_LOG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting
 +the environment variable @env{AV_LOG_FORCE_COLOR}.
 +The use of the environment variable @env{NO_COLOR} is deprecated and
 +will be dropped in a following FFmpeg version.
 +
 +@item -report
 +Dump full command line and console output to a file named
 +@code{@var{program}-@var{YYYYMMDD}-@var{HHMMSS}.log} in the current
 +directory.
 +This file can be useful for bug reports.
 +It also implies @code{-loglevel verbose}.
 +
 +Setting the environment variable @code{FFREPORT} to any value has the
 +same effect. If the value is a ':'-separated key=value sequence, these
 +options will affect the report; options values must be escaped if they
 +contain special characters or the options delimiter ':' (see the
 +``Quoting and escaping'' section in the ffmpeg-utils manual). The
 +following option is recognized:
 +@table @option
 +@item file
 +set the file name to use for the report; @code{%p} is expanded to the name
 +of the program, @code{%t} is expanded to a timestamp, @code{%%} is expanded
 +to a plain @code{%}
 +@item level
 +set the log level
 +@end table
 +
 +Errors in parsing the environment variable are not fatal, and will not
 +appear in the report.
 +
 +@item -hide_banner
 +Suppress printing banner.
 +
 +All FFmpeg tools will normally show a copyright notice, build options
 +and library versions. This option can be used to suppress printing
 +this information.
 +
 +@item -cpuflags flags (@emph{global})
 +Allows setting and clearing cpu flags. This option is intended
 +for testing. Do not use it unless you know what you're doing.
 +@example
 +ffmpeg -cpuflags -sse+mmx ...
 +ffmpeg -cpuflags mmx ...
 +ffmpeg -cpuflags 0 ...
 +@end example
 +Possible flags for this option are:
 +@table @samp
 +@item x86
 +@table @samp
 +@item mmx
 +@item mmxext
 +@item sse
 +@item sse2
 +@item sse2slow
 +@item sse3
 +@item sse3slow
 +@item ssse3
 +@item atom
 +@item sse4.1
 +@item sse4.2
 +@item avx
 +@item xop
 +@item fma4
 +@item 3dnow
 +@item 3dnowext
 +@item cmov
 +@end table
 +@item ARM
 +@table @samp
 +@item armv5te
 +@item armv6
 +@item armv6t2
 +@item vfp
 +@item vfpv3
 +@item neon
 +@end table
 +@item PowerPC
 +@table @samp
 +@item altivec
 +@end table
 +@item Specific Processors
 +@table @samp
 +@item pentium2
 +@item pentium3
 +@item pentium4
 +@item k6
 +@item k62
 +@item athlon
 +@item athlonxp
 +@item k8
 +@end table
 +@end table
 +
 +@item -opencl_bench
 +Benchmark all available OpenCL devices and show the results. This option
 +is only available when FFmpeg has been compiled with @code{--enable-opencl}.
 +
 +@item -opencl_options options (@emph{global})
 +Set OpenCL environment options. This option is only available when
 +FFmpeg has been compiled with @code{--enable-opencl}.
 +
 +@var{options} must be a list of @var{key}=@var{value} option pairs
 +separated by ':'. See the ``OpenCL Options'' section in the
 +ffmpeg-utils manual for the list of supported options.
 +@end table
 +
 +@section AVOptions
 +
 +These options are provided directly by the libavformat, libavdevice and
 +libavcodec libraries. To see the list of available AVOptions, use the
 +@option{-help} option. They are separated into two categories:
 +@table @option
 +@item generic
 +These options can be set for any container, codec or device. Generic options
 +are listed under AVFormatContext options for containers/devices and under
 +AVCodecContext options for codecs.
 +@item private
 +These options are specific to the given container, device or codec. Private
 +options are listed under their corresponding containers/devices/codecs.
 +@end table
 +
 +For example to write an ID3v2.3 header instead of a default ID3v2.4 to
 +an MP3 file, use the @option{id3v2_version} private option of the MP3
 +muxer:
 +@example
 +ffmpeg -i input.flac -id3v2_version 3 out.mp3
 +@end example
 +
 +All codec AVOptions are per-stream, and thus a stream specifier
 +should be attached to them.
 +
 +Note: the @option{-nooption} syntax cannot be used for boolean
 +AVOptions, use @option{-option 0}/@option{-option 1}.
 +
 +Note: the old undocumented way of specifying per-stream AVOptions by
 +prepending v/a/s to the options name is now obsolete and will be
 +removed soon.
@@@ -4115,114 -3002,6 +4115,137 @@@ int ff_add_param_change(AVPacket *pkt, 
      return 0;
  }
  
 +AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
 +{
 +    AVRational undef = {0, 1};
 +    AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef;
 +    AVRational codec_sample_aspect_ratio  = stream && stream->codec ? stream->codec->sample_aspect_ratio : undef;
 +    AVRational frame_sample_aspect_ratio  = frame  ? frame->sample_aspect_ratio  : codec_sample_aspect_ratio;
 +
 +    av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den,
 +               stream_sample_aspect_ratio.num,  stream_sample_aspect_ratio.den, INT_MAX);
 +    if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0)
 +        stream_sample_aspect_ratio = undef;
 +
 +    av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den,
 +               frame_sample_aspect_ratio.num,  frame_sample_aspect_ratio.den, INT_MAX);
 +    if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0)
 +        frame_sample_aspect_ratio = undef;
 +
 +    if (stream_sample_aspect_ratio.num)
 +        return stream_sample_aspect_ratio;
 +    else
 +        return frame_sample_aspect_ratio;
 +}
 +
 +AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
 +{
 +    AVRational fr = st->r_frame_rate;
 +    AVRational codec_fr = av_inv_q(st->codec->time_base);
 +    AVRational   avg_fr = st->avg_frame_rate;
 +
 +    if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 &&
 +        av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) {
 +        fr = avg_fr;
 +    }
 +
 +
 +    if (st->codec->ticks_per_frame > 1) {
 +        codec_fr.den *= st->codec->ticks_per_frame;
 +        if (   codec_fr.num > 0 && codec_fr.den > 0 && av_q2d(codec_fr) < av_q2d(fr)*0.7
 +            && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1)
 +            fr = codec_fr;
 +    }
 +
 +    return fr;
 +}
 +
 +int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st,
 +                                    const char *spec)
 +{
 +    if (*spec <= '9' && *spec >= '0') /* opt:index */
 +        return strtol(spec, NULL, 0) == st->index;
 +    else if (*spec == 'v' || *spec == 'a' || *spec == 's' || *spec == 'd' ||
 +             *spec == 't') { /* opt:[vasdt] */
 +        enum AVMediaType type;
 +
 +        switch (*spec++) {
 +        case 'v': type = AVMEDIA_TYPE_VIDEO;      break;
 +        case 'a': type = AVMEDIA_TYPE_AUDIO;      break;
 +        case 's': type = AVMEDIA_TYPE_SUBTITLE;   break;
 +        case 'd': type = AVMEDIA_TYPE_DATA;       break;
 +        case 't': type = AVMEDIA_TYPE_ATTACHMENT; break;
 +        default:  av_assert0(0);
 +        }
 +        if (type != st->codec->codec_type)
 +            return 0;
 +        if (*spec++ == ':') { /* possibly followed by :index */
 +            int i, index = strtol(spec, NULL, 0);
 +            for (i = 0; i < s->nb_streams; i++)
 +                if (s->streams[i]->codec->codec_type == type && index-- == 0)
 +                   return i == st->index;
 +            return 0;
 +        }
 +        return 1;
 +    } else if (*spec == 'p' && *(spec + 1) == ':') {
 +        int prog_id, i, j;
 +        char *endptr;
 +        spec += 2;
 +        prog_id = strtol(spec, &endptr, 0);
 +        for (i = 0; i < s->nb_programs; i++) {
 +            if (s->programs[i]->id != prog_id)
 +                continue;
 +
 +            if (*endptr++ == ':') {
 +                int stream_idx = strtol(endptr, NULL, 0);
 +                return stream_idx >= 0 &&
 +                    stream_idx < s->programs[i]->nb_stream_indexes &&
 +                    st->index == s->programs[i]->stream_index[stream_idx];
 +            }
 +
 +            for (j = 0; j < s->programs[i]->nb_stream_indexes; j++)
 +                if (st->index == s->programs[i]->stream_index[j])
 +                    return 1;
 +        }
 +        return 0;
 +    } else if (*spec == '#' ||
 +               (*spec == 'i' && *(spec + 1) == ':')) {
 +        int stream_id;
 +        char *endptr;
 +        spec += 1 + (*spec == 'i');
 +        stream_id = strtol(spec, &endptr, 0);
 +        if (!*endptr)
 +            return stream_id == st->id;
++    } else if (*spec == 'm' && *(spec + 1) == ':') {
++        AVDictionaryEntry *tag;
++        char *key, *val;
++        int ret;
++
++        spec += 2;
++        val = strchr(spec, ':');
++
++        key = val ? av_strndup(spec, val - spec) : av_strdup(spec);
++        if (!key)
++            return AVERROR(ENOMEM);
++
++        tag = av_dict_get(st->metadata, key, NULL, 0);
++        if (tag) {
++            if (!val || !strcmp(tag->value, val + 1))
++                ret = 1;
++            else
++                ret = 0;
++        } else
++            ret = 0;
++
++        av_freep(&key);
++        return ret;
 +    } else if (!*spec) /* empty specifier, matches everything */
 +        return 1;
 +
 +    av_log(s, AV_LOG_ERROR, "Invalid stream specifier: %s.\n", spec);
 +    return AVERROR(EINVAL);
 +}
 +
  int ff_generate_avci_extradata(AVStream *st)
  {
      static const uint8_t avci100_1080p_extradata[] = {