[FFmpeg-devel] [PATCH] ffmpeg_opt: add -to option to specify stop time
Jean First
jeanfirst at gmail.com
Mon Feb 25 13:22:39 CET 2013
Signed-off-by: Jean First <jeanfirst at gmail.com>
---
I forgot to add the ffmpeg.h file. Sorry for the noise.
ffmpeg.h | 1 +
ffmpeg_opt.c | 32 ++++++++++++++++++++++++++++++--
2 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/ffmpeg.h b/ffmpeg.h
index c64a015..012e772 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 b2a913f..92aa68a 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -96,6 +96,7 @@ static int do_psnr = 0;
static int input_sync;
static int64_t recording_time = INT64_MAX;
+static int64_t stop_time = INT64_MAX;
static void uninit_options(OptionsContext *o, int is_input)
{
@@ -128,16 +129,27 @@ static void uninit_options(OptionsContext *o, int is_input)
av_freep(&o->streamid_map);
av_freep(&o->attachments);
- if (is_input)
+ if (is_input) {
recording_time = o->recording_time;
- else
+ stop_time = o->stop_time;
+ } else {
recording_time = INT64_MAX;
+ stop_time = INT64_MAX;
+ }
}
static void init_options(OptionsContext *o, int is_input)
{
memset(o, 0, sizeof(*o));
+ if (!is_input && stop_time != INT64_MAX) {
+ o->stop_time = stop_time;
+ av_log(NULL, AV_LOG_WARNING,
+ "-to is not an input option, keeping it for the next output;"
+ " consider fixing your command line.\n");
+ } else
+ o->stop_time = INT64_MAX;
+
if (!is_input && recording_time != INT64_MAX) {
o->recording_time = recording_time;
av_log(NULL, AV_LOG_WARNING,
@@ -1655,6 +1667,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 then -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);
@@ -2388,6 +2414,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) },
--
1.7.10.2 (Apple Git-33)
More information about the ffmpeg-devel
mailing list