It drops everything that cannot be used for re-encoding and/or streamcopy.tags/n2.7
@@ -1587,6 +1587,28 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec) | |||||
av_freep(&key); | av_freep(&key); | ||||
return ret; | return ret; | ||||
} else if (*spec == 'u') { | |||||
AVCodecContext *avctx = st->codec; | |||||
int val; | |||||
switch (avctx->codec_type) { | |||||
case AVMEDIA_TYPE_AUDIO: | |||||
val = avctx->sample_rate && avctx->channels; | |||||
if (avctx->sample_fmt == AV_SAMPLE_FMT_NONE) | |||||
return 0; | |||||
break; | |||||
case AVMEDIA_TYPE_VIDEO: | |||||
val = avctx->width && avctx->height; | |||||
if (avctx->pix_fmt == AV_PIX_FMT_NONE) | |||||
return 0; | |||||
break; | |||||
case AVMEDIA_TYPE_UNKNOWN: | |||||
val = 0; | |||||
break; | |||||
default: | |||||
val = 1; | |||||
break; | |||||
} | |||||
return avctx->codec_id != AV_CODEC_ID_NONE && val != 0; | |||||
} else if (!*spec) /* empty specifier, matches everything */ | } else if (!*spec) /* empty specifier, matches everything */ | ||||
return 1; | return 1; | ||||
@@ -48,6 +48,9 @@ Match the stream by stream id (e.g. PID in MPEG-TS container). | |||||
Matches streams with the metadata tag @var{key} having the specified value. If | 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 | @var{value} is not given, matches streams that contain the given tag with any | ||||
value. | value. | ||||
@item u | |||||
Matches streams with usable configuration, the codec must be defined and the | |||||
essential information such as video dimension or audio sample rate must be present. | |||||
Note that in @command{avconv}, matching by metadata will only work properly for | Note that in @command{avconv}, matching by metadata will only work properly for | ||||
input files. | input files. | ||||