You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
ffmpeg: Allow "-to" on input files in addition to "-t"
For some strange reason "-t" option was only implemented for input files while both "-t" and "-to" were available for use for output files. This made extracting a range from input file inconvenient. This patch enables -to option for input so one can do ffmpeg -ss 1:23:20 -to 1:27:22.3 -i myinput.mkv ... Signed-off-by: Vitaly _Vi Shukela <vi0oss@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
committed by
Michael Niedermayer
parent
ae61bcbdf8
commit
80ef3c8360
@@ -289,8 +289,8 @@ see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1)
|
|||||||
|
|
||||||
-to and -t are mutually exclusive and -t has priority.
|
-to and -t are mutually exclusive and -t has priority.
|
||||||
|
|
||||||
@item -to @var{position} (@emph{output})
|
@item -to @var{position} (@emph{input/output})
|
||||||
Stop writing the output at @var{position}.
|
Stop writing the output or reading the input at @var{position}.
|
||||||
@var{position} must be a time duration specification,
|
@var{position} must be a time duration specification,
|
||||||
see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
|
see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
|
||||||
|
|
||||||
|
@@ -976,6 +976,21 @@ static int open_input_file(OptionsContext *o, const char *filename)
|
|||||||
char * data_codec_name = NULL;
|
char * data_codec_name = NULL;
|
||||||
int scan_all_pmts_set = 0;
|
int scan_all_pmts_set = 0;
|
||||||
|
|
||||||
|
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) {
|
||||||
|
int64_t start_time = o->start_time == AV_NOPTS_VALUE ? 0 : o->start_time;
|
||||||
|
if (o->stop_time <= start_time) {
|
||||||
|
av_log(NULL, AV_LOG_ERROR, "-to value smaller than -ss; aborting.\n");
|
||||||
|
exit_program(1);
|
||||||
|
} else {
|
||||||
|
o->recording_time = o->stop_time - start_time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (o->format) {
|
if (o->format) {
|
||||||
if (!(file_iformat = av_find_input_format(o->format))) {
|
if (!(file_iformat = av_find_input_format(o->format))) {
|
||||||
av_log(NULL, AV_LOG_FATAL, "Unknown input format: '%s'\n", o->format);
|
av_log(NULL, AV_LOG_FATAL, "Unknown input format: '%s'\n", o->format);
|
||||||
@@ -3407,7 +3422,7 @@ const OptionDef options[] = {
|
|||||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(recording_time) },
|
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(recording_time) },
|
||||||
"record or transcode \"duration\" seconds of audio/video",
|
"record or transcode \"duration\" seconds of audio/video",
|
||||||
"duration" },
|
"duration" },
|
||||||
{ "to", HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(stop_time) },
|
{ "to", HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(stop_time) },
|
||||||
"record or transcode stop time", "time_stop" },
|
"record or transcode stop time", "time_stop" },
|
||||||
{ "fs", HAS_ARG | OPT_INT64 | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(limit_filesize) },
|
{ "fs", HAS_ARG | OPT_INT64 | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(limit_filesize) },
|
||||||
"set the limit file size in bytes", "limit_size" },
|
"set the limit file size in bytes", "limit_size" },
|
||||||
|
Reference in New Issue
Block a user