| @@ -30,6 +30,7 @@ version <next>: | |||||
| - drop avserver, it was unmaintained for years and largely broken | - drop avserver, it was unmaintained for years and largely broken | ||||
| - Icecast protocol | - Icecast protocol | ||||
| - request icecast metadata by default | - request icecast metadata by default | ||||
| - support for using metadata in stream specifiers in avtools | |||||
| version 10: | version 10: | ||||
| @@ -1536,6 +1536,29 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec) | |||||
| spec += 2; | spec += 2; | ||||
| stream_id = strtol(spec, &endptr, 0); | stream_id = strtol(spec, &endptr, 0); | ||||
| return stream_id == st->id; | 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 */ | } else if (!*spec) /* empty specifier, matches everything */ | ||||
| return 1; | return 1; | ||||
| @@ -720,6 +720,11 @@ To map all the streams except the second audio, use negative mappings | |||||
| avconv -i INPUT -map 0 -map -0:a:1 OUTPUT | avconv -i INPUT -map 0 -map -0:a:1 OUTPUT | ||||
| @end example | @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. | Note that using this option disables the default mappings for this output file. | ||||
| @item -map_metadata[:@var{metadata_spec_out}] @var{infile}[:@var{metadata_spec_in}] (@emph{output,per-metadata}) | @item -map_metadata[:@var{metadata_spec_out}] @var{infile}[:@var{metadata_spec_in}] (@emph{output,per-metadata}) | ||||
| @@ -44,6 +44,13 @@ If @var{stream_index} is given, then matches stream number @var{stream_index} in | |||||
| program with id @var{program_id}. Otherwise matches all streams in this program. | program with id @var{program_id}. Otherwise matches all streams in this program. | ||||
| @item i:@var{stream_id} | @item i:@var{stream_id} | ||||
| Match the stream by stream id (e.g. PID in MPEG-TS container). | 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 | @end table | ||||
| @section Generic options | @section Generic options | ||||