diff options
author | Jean First <jeanfirst@gmail.com> | 2013-02-27 00:18:41 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-02-27 02:17:42 +0100 |
commit | 2d7044683f3c0fa87445bf60854f1bd7ab0faf4f (patch) | |
tree | f75033711c5f6fd67be058a4e8b012fb4cd9ad21 | |
parent | 997a36238ff0c700acfb77decaa560dc7b3095ec (diff) | |
download | ffmpeg-2d7044683f3c0fa87445bf60854f1bd7ab0faf4f.tar.gz |
ffmpeg_opt: add -to option to specify stop time
Signed-off-by: Jean First <jeanfirst@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | doc/ffmpeg.texi | 8 | ||||
-rw-r--r-- | ffmpeg.h | 1 | ||||
-rw-r--r-- | ffmpeg_opt.c | 17 |
3 files changed, 26 insertions, 0 deletions
diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index 3db1e98b45..77dba53da0 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. + +@item -to @var{position} (@emph{output}) +Stop writing the output at @var{position}. +@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. @@ -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 2e45e47450..fc5e1c86a5 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) }, |