[FFmpeg-devel] [FFmpeg-cvslog] ffmpeg: Implement support for seeking relative to EOF

Clément Bœsch u at pkh.me
Wed Jul 29 18:22:04 CEST 2015


On Wed, Jul 29, 2015 at 05:32:14PM +0200, Michael Niedermayer wrote:
> ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Mon Jul 27 04:30:26 2015 +0200| [f4ada6dc3ff7a5c4193d2b30151a48de8e219c94] | committer: Michael Niedermayer
> 
> ffmpeg: Implement support for seeking relative to EOF
> 
> Fixes Ticket227
> 
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> 
> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f4ada6dc3ff7a5c4193d2b30151a48de8e219c94
> ---
> 
>  doc/ffmpeg.texi |    5 +++++
>  ffmpeg.h        |    1 +
>  ffmpeg_opt.c    |    6 ++++++
>  3 files changed, 12 insertions(+)
> 
> diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
> index 4d73788..3806a12 100644
> --- a/doc/ffmpeg.texi
> +++ b/doc/ffmpeg.texi
> @@ -307,6 +307,11 @@ input until the timestamps reach @var{position}.
>  
>  @var{position} may be either in seconds or in @code{hh:mm:ss[.xxx]} form.
>  
> + at item -sseof @var{position} (@emph{input/output})
> +
> +Like the -ss option but relative to the "end of file". That is negative

nit: @code{-ss}

> +values are earlier in the file, 0 is at EOF.
> +

So mmh,, this works properly for both the duration of the input, and the
duration of the output (respectively for -sseof as input and output
option)

>  @item -itsoffset @var{offset} (@emph{input})
>  Set the input time offset.
>  
> diff --git a/ffmpeg.h b/ffmpeg.h
> index a7e5e51..7467b16 100644
> --- a/ffmpeg.h
> +++ b/ffmpeg.h
> @@ -92,6 +92,7 @@ typedef struct OptionsContext {
>  
>      /* input/output options */
>      int64_t start_time;
> +    int64_t start_time_eof;
>      int seek_timestamp;
>      const char *format;
>  
> diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
> index 3c9f98a..351c47b 100644
> --- a/ffmpeg_opt.c
> +++ b/ffmpeg_opt.c
> @@ -156,6 +156,7 @@ static void init_options(OptionsContext *o)
>      o->stop_time = INT64_MAX;
>      o->mux_max_delay  = 0.7;
>      o->start_time     = AV_NOPTS_VALUE;
> +    o->start_time_eof = AV_NOPTS_VALUE;
>      o->recording_time = INT64_MAX;
>      o->limit_filesize = UINT64_MAX;
>      o->chapters_input_file = INT_MAX;
> @@ -933,6 +934,8 @@ static int open_input_file(OptionsContext *o, const char *filename)
>          }
>      }
>  
> +    if (o->start_time_eof != AV_NOPTS_VALUE && ic->duration>0)
> +        o->start_time = o->start_time_eof + ic->duration;

You most likely want to print a warning about this having no effect when
the duration can not be computed.

>      timestamp = (o->start_time == AV_NOPTS_VALUE) ? 0 : o->start_time;
>      /* add the stream start time */
>      if (!o->seek_timestamp && ic->start_time != AV_NOPTS_VALUE)
> @@ -3019,6 +3022,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" },
> +    { "sseof",          HAS_ARG | OPT_TIME | OPT_OFFSET |
> +                        OPT_INPUT | OPT_OUTPUT,                      { .off = OFFSET(start_time_eof) },
> +        "set the start time offset relative to EOF", "time_off" },
>      { "seek_timestamp", HAS_ARG | OPT_INT | OPT_OFFSET |
>                          OPT_INPUT,                                   { .off = OFFSET(seek_timestamp) },
>          "enable/disable seeking by timestamp with -ss" },
> 

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150729/98b752ec/attachment.sig>


More information about the ffmpeg-devel mailing list