summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ffmpeg.c4
-rw-r--r--ffmpeg.h3
-rw-r--r--ffmpeg_opt.c5
3 files changed, 12 insertions, 0 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 7621e9d997..3eb15a6494 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -1340,6 +1340,10 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
!ost->copy_initial_nonkeyframes)
return;
+ if (!ost->frame_number && ist->pts < of->start_time &&
+ !ost->copy_prior_start)
+ return;
+
if (of->recording_time != INT64_MAX &&
ist->pts >= of->recording_time + of->start_time) {
close_output_stream(ost);
diff --git a/ffmpeg.h b/ffmpeg.h
index 85a11a01d9..56f8dfc5f1 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -157,6 +157,8 @@ typedef struct OptionsContext {
int nb_presets;
SpecifierOpt *copy_initial_nonkeyframes;
int nb_copy_initial_nonkeyframes;
+ SpecifierOpt *copy_prior_start;
+ int nb_copy_prior_start;
SpecifierOpt *filters;
int nb_filters;
SpecifierOpt *fix_sub_duration;
@@ -326,6 +328,7 @@ typedef struct OutputStream {
int stream_copy;
const char *attachment_filename;
int copy_initial_nonkeyframes;
+ int copy_prior_start;
int keep_pix_fmt;
} OutputStream;
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index 3d73564aa2..2c5fbfb6b2 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -960,6 +960,9 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
ost->max_frames = INT64_MAX;
MATCH_PER_STREAM_OPT(max_frames, i64, ost->max_frames, oc, st);
+ ost->copy_prior_start = -1;
+ MATCH_PER_STREAM_OPT(copy_prior_start, i, ost->copy_prior_start, oc ,st);
+
MATCH_PER_STREAM_OPT(bitstream_filters, str, bsf, oc, st);
while (bsf) {
if (next = strchr(bsf, ','))
@@ -2316,6 +2319,8 @@ const OptionDef options[] = {
"exit on error", "error" },
{ "copyinkf", OPT_BOOL | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(copy_initial_nonkeyframes) },
"copy initial non-keyframes" },
+ { "copypriorss", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(copy_prior_start) },
+ "copy or discard frames before start time" },
{ "frames", OPT_INT64 | HAS_ARG | OPT_SPEC, { .off = OFFSET(max_frames) },
"set the number of frames to record", "number" },
{ "tag", OPT_STRING | HAS_ARG | OPT_SPEC | OPT_EXPERT,{ .off = OFFSET(codec_tags) },