[FFmpeg-devel] [PATCH 3/4] concatdec: add option for adding segment start time and duration metadata
Marton Balint
cus at passwd.hu
Mon Nov 2 00:15:57 CET 2015
Signed-off-by: Marton Balint <cus at passwd.hu>
---
doc/demuxers.texi | 8 ++++++++
libavformat/concatdec.c | 12 ++++++++++++
2 files changed, 20 insertions(+)
diff --git a/doc/demuxers.texi b/doc/demuxers.texi
index 34bfc9b..41d3722 100644
--- a/doc/demuxers.texi
+++ b/doc/demuxers.texi
@@ -204,6 +204,14 @@ Currently, the only conversion is adding the h264_mp4toannexb bitstream
filter to H.264 streams in MP4 format. This is necessary in particular if
there are resolution changes.
+ at item segment_time_metadata
+If set to 1, every packet will contain the @var{lavf.concat.start_time} and the
+ at var{lavf.concat.duration} packet metadata values which are the start_time and
+the duration of the respective file segments in the concatenated output
+expressed in microseconds. The duration is only estimated in some files (e.g.
+MP3 without extra headers)
+The default is 0.
+
@end table
@section flv
diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c
index 15094bf..603f1b7 100644
--- a/libavformat/concatdec.c
+++ b/libavformat/concatdec.c
@@ -62,6 +62,7 @@ typedef struct {
int eof;
ConcatMatchMode stream_match_mode;
unsigned auto_convert;
+ int segment_time_metadata;
} ConcatContext;
static int concat_probe(AVProbeData *probe)
@@ -326,6 +327,15 @@ static int open_file(AVFormatContext *avf, unsigned fileno)
cat->files[fileno - 1].duration;
file->file_start_time = (cat->avf->start_time == AV_NOPTS_VALUE) ? 0 : cat->avf->start_time;
file->file_inpoint = (file->inpoint == AV_NOPTS_VALUE) ? file->file_start_time : file->inpoint;
+
+ if (cat->segment_time_metadata) {
+ int64_t duration = file->duration;
+ if (duration == AV_NOPTS_VALUE)
+ duration = get_duration(file, cat->avf);
+ av_dict_set_int(&file->metadata, "lavf.concatdec.start_time", file->start_time, 0);
+ av_dict_set_int(&file->metadata, "lavf.concatdec.duration", duration, 0);
+ }
+
if ((ret = match_streams(avf)) < 0)
return ret;
if (file->inpoint != AV_NOPTS_VALUE) {
@@ -709,6 +719,8 @@ static const AVOption options[] = {
OFFSET(safe), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, DEC },
{ "auto_convert", "automatically convert bitstream format",
OFFSET(auto_convert), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, DEC },
+ { "segment_time_metadata", "output file segment start time and duration as packet metadata",
+ OFFSET(segment_time_metadata), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC },
{ NULL }
};
--
2.1.4
More information about the ffmpeg-devel
mailing list