[FFmpeg-cvslog] ffmpeg: add option not to offset seek position by start time
wm4
git at videolan.org
Mon Apr 20 21:45:57 CEST 2015
ffmpeg | branch: master | wm4 <nfxjfg at googlemail.com> | Mon Apr 20 19:36:51 2015 +0200| [bac7084fbd372676b6a4c7c1ab487640d4f945de] | committer: Michael Niedermayer
ffmpeg: add option not to offset seek position by start time
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bac7084fbd372676b6a4c7c1ab487640d4f945de
---
doc/ffmpeg.texi | 7 +++++++
ffmpeg.h | 2 ++
ffmpeg_opt.c | 5 ++++-
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
index d995995..c66cb16 100644
--- a/doc/ffmpeg.texi
+++ b/doc/ffmpeg.texi
@@ -1158,6 +1158,13 @@ This option enables or disables accurate seeking in input files with the
transcoding. Use @option{-noaccurate_seek} to disable it, which may be useful
e.g. when copying some streams and transcoding the others.
+ at item -seek_timestamp (@emph{input})
+This option enables or disables seeking by timestamp in input files with the
+ at option{-ss} option. It is disabled by default. If enabled, the argument
+to the @option{-ss} option is considered an actual timestamp, and is not
+offset by the start time of the file. This matters only for files which do
+not start from timestamp 0, such as transport streams.
+
@item -thread_queue_size @var{size} (@emph{input})
This option sets the maximum number of queued packets when reading from the
file or device. With low latency / high rate live streams, packets may be
diff --git a/ffmpeg.h b/ffmpeg.h
index 9050202..71061da 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -92,6 +92,7 @@ typedef struct OptionsContext {
/* input/output options */
int64_t start_time;
+ int seek_timestamp;
const char *format;
SpecifierOpt *codec_names;
@@ -339,6 +340,7 @@ typedef struct InputFile {
int64_t ts_offset;
int64_t last_ts;
int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
+ int seek_timestamp;
int64_t recording_time;
int nb_streams; /* number of stream that ffmpeg is aware of; may be different
from ctx.nb_streams if new streams appear during av_read_frame() */
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index 8f1f35d..75c80e7 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -919,7 +919,7 @@ static int open_input_file(OptionsContext *o, const char *filename)
timestamp = (o->start_time == AV_NOPTS_VALUE) ? 0 : o->start_time;
/* add the stream start time */
- if (ic->start_time != AV_NOPTS_VALUE)
+ if (!o->seek_timestamp && ic->start_time != AV_NOPTS_VALUE)
timestamp += ic->start_time;
/* if seeking requested, we execute it */
@@ -2865,6 +2865,9 @@ const OptionDef options[] = {
{ "ss", HAS_ARG | OPT_TIME | OPT_OFFSET |
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(start_time) },
"set the start time offset", "time_off" },
+ { "seek_timestamp", HAS_ARG | OPT_INT | OPT_OFFSET |
+ OPT_INPUT, { .off = OFFSET(seek_timestamp) },
+ "enable/disable seeking by timestamp with -ss" },
{ "accurate_seek", OPT_BOOL | OPT_OFFSET | OPT_EXPERT |
OPT_INPUT, { .off = OFFSET(accurate_seek) },
"enable/disable accurate seeking with -ss" },
More information about the ffmpeg-cvslog
mailing list