mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
cmdutils: allow matching by metadata in stream specifiers
This commit is contained in:
parent
8ddc32629a
commit
481a366749
@ -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:
|
||||||
|
23
cmdutils.c
23
cmdutils.c
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user