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
@@@ -818,67 -717,16 +818,72 @@@ ffmpeg -i INPUT -map 0:v -map 0:a:2 OUT
  
  To map all the streams except the second audio, use negative mappings
  @example
 -avconv -i INPUT -map 0 -map -0:a:1 OUTPUT
 +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.
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[] = {