[FFmpeg-cvslog] ffmpeg_opt: add -to option to specify stop time

Jean First git at videolan.org
Wed Feb 27 02:34:34 CET 2013


ffmpeg | branch: master | Jean First <jeanfirst at gmail.com> | Wed Feb 27 00:18:41 2013 +0100| [2d7044683f3c0fa87445bf60854f1bd7ab0faf4f] | committer: Michael Niedermayer

ffmpeg_opt: add -to option to specify stop time

Signed-off-by: Jean First <jeanfirst at gmail.com>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2d7044683f3c0fa87445bf60854f1bd7ab0faf4f
---

 doc/ffmpeg.texi |    8 ++++++++
 ffmpeg.h        |    1 +
 ffmpeg_opt.c    |   17 +++++++++++++++++
 3 files changed, 26 insertions(+)

diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
index 3db1e98..77dba53 100644
--- a/doc/ffmpeg.texi
+++ b/doc/ffmpeg.texi
@@ -256,6 +256,14 @@ libx264, and the 138th audio, which will be encoded with libvorbis.
 Stop writing the output after its duration reaches @var{duration}.
 @var{duration} may be a number in seconds, or in @code{hh:mm:ss[.xxx]} form.
 
+-to and -t are mutually exclusive and -t has priority.
+
+ at item -to @var{position} (@emph{output})
+Stop writing the output at @var{position}.
+ at var{position} may be a number in seconds, or in @code{hh:mm:ss[.xxx]} form.
+
+-to and -t are mutually exclusive and -t has priority.
+
 @item -fs @var{limit_size} (@emph{output})
 Set the file size limit, expressed in bytes.
 
diff --git a/ffmpeg.h b/ffmpeg.h
index b89a5ac..d7046fd 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -114,6 +114,7 @@ typedef struct OptionsContext {
     int chapters_input_file;
 
     int64_t recording_time;
+    int64_t stop_time;
     uint64_t limit_filesize;
     float mux_preload;
     float mux_max_delay;
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index 2e45e47..fc5e1c8 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -145,6 +145,7 @@ static void init_options(OptionsContext *o, int is_input)
                 " consider fixing your command line.\n");
     } else
         o->recording_time = INT64_MAX;
+    o->stop_time = INT64_MAX;
     o->mux_max_delay  = 0.7;
     o->limit_filesize = UINT64_MAX;
     o->chapters_input_file = INT_MAX;
@@ -1656,6 +1657,20 @@ loop_end:
                 exit(1);
     }
 
+    if (o->stop_time != INT64_MAX && o->recording_time != INT64_MAX) {
+        o->stop_time = INT64_MAX;
+        av_log(NULL, AV_LOG_WARNING, "-t and -to cannot be used together; using -t.\n");
+    }
+
+    if (o->stop_time != INT64_MAX && o->recording_time == INT64_MAX) {
+        if (o->stop_time <= o->start_time) {
+            av_log(NULL, AV_LOG_WARNING, "-to value smaller than -ss; ignoring -to.\n");
+            o->stop_time = INT64_MAX;
+        } else {
+            o->recording_time = o->stop_time - o->start_time;
+        }
+    }
+
     GROW_ARRAY(output_files, nb_output_files);
     if (!(output_files[nb_output_files - 1] = av_mallocz(sizeof(*output_files[0]))))
         exit(1);
@@ -2389,6 +2404,8 @@ const OptionDef options[] = {
     { "t",              HAS_ARG | OPT_TIME | OPT_OFFSET,             { .off = OFFSET(recording_time) },
         "record or transcode \"duration\" seconds of audio/video",
         "duration" },
+    { "to",             HAS_ARG | OPT_TIME | OPT_OFFSET,             { .off = OFFSET(stop_time) },
+        "record or transcode stop time", "time_stop" },
     { "fs",             HAS_ARG | OPT_INT64 | OPT_OFFSET,            { .off = OFFSET(limit_filesize) },
         "set the limit file size in bytes", "limit_size" },
     { "ss",             HAS_ARG | OPT_TIME | OPT_OFFSET,             { .off = OFFSET(start_time) },



More information about the ffmpeg-cvslog mailing list