提交 fbedce6b 编写于 作者: C Clément Bœsch

lavfi/silencedetect: export silence info to metadata.

上级 de23953d
......@@ -78,6 +78,12 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
return 0;
}
static char *get_metadata_val(AVFilterBufferRef *insamples, const char *key)
{
AVDictionaryEntry *e = av_dict_get(insamples->metadata, key, NULL, 0);
return e && e->value ? e->value : NULL;
}
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{
int i;
......@@ -94,6 +100,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
silence->last_sample_rate = srate;
// TODO: support more sample formats
// TODO: document metadata
if (insamples->format == AV_SAMPLE_FMT_DBL) {
double *p = (double *)insamples->data[0];
......@@ -103,16 +110,23 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
silence->nb_null_samples++;
if (silence->nb_null_samples >= nb_samples_notify) {
silence->start = insamples->pts - (int64_t)(silence->duration / av_q2d(inlink->time_base) + .5);
av_log(silence, AV_LOG_INFO,
"silence_start: %s\n", av_ts2timestr(silence->start, &inlink->time_base));
av_dict_set(&insamples->metadata, "lavfi.silence_start",
av_ts2timestr(silence->start, &inlink->time_base), 0);
av_log(silence, AV_LOG_INFO, "silence_start: %s\n",
get_metadata_val(insamples, "lavfi.silence_start"));
}
}
} else {
if (silence->start)
if (silence->start) {
av_dict_set(&insamples->metadata, "lavfi.silence_end",
av_ts2timestr(insamples->pts, &inlink->time_base), 0);
av_dict_set(&insamples->metadata, "lavfi.silence_duration",
av_ts2timestr(insamples->pts - silence->start, &inlink->time_base), 0);
av_log(silence, AV_LOG_INFO,
"silence_end: %s | silence_duration: %s\n",
av_ts2timestr(insamples->pts, &inlink->time_base),
av_ts2timestr(insamples->pts - silence->start, &inlink->time_base));
get_metadata_val(insamples, "lavfi.silence_end"),
get_metadata_val(insamples, "lavfi.silence_duration"));
}
silence->nb_null_samples = silence->start = 0;
}
}
......
......@@ -30,7 +30,7 @@
#define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MINOR 20
#define LIBAVFILTER_VERSION_MICRO 101
#define LIBAVFILTER_VERSION_MICRO 102
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \
......
......@@ -53,6 +53,10 @@ FATE_FILTER-$(call ALLYES, FFPROBE LAVFI_INDEV MOVIE_FILTER SELECT_FILTER AVCODE
fate-filter-metadata-scenedetect: SRC = $(SAMPLES)/svq3/Vertical400kbit.sorenson3.mov
fate-filter-metadata-scenedetect: CMD = run $(FILTER_METADATA_COMMAND) "movie=$(SRC),select=gt(scene\,.4)"
FATE_FILTER-$(call ALLYES, FFPROBE LAVFI_INDEV AMOVIE_FILTER AMR_DEMUXER AMRWB_DECODER) += fate-filter-metadata-silencedetect
fate-filter-metadata-silencedetect: SRC = $(SAMPLES)/amrwb/seed-12k65.awb
fate-filter-metadata-silencedetect: CMD = run $(FILTER_METADATA_COMMAND) "amovie=$(SRC),silencedetect=d=.1"
FATE_SAMPLES_AVCONV += $(FATE_FILTER-yes)
fate-filter: $(FATE_FILTER-yes)
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册