[FFmpeg-devel] PATCH: Make -copyts a tri-state

Rodger Combs rodger.combs at gmail.com
Tue Oct 21 01:50:12 CEST 2014


> On Oct 17, 2014, at 03:19, Rodger Combs <rodger.combs at gmail.com> wrote:
> 
>> 
>> On Oct 15, 2014, at 06:00, Rodger Combs <rodger.combs at gmail.com <mailto:rodger.combs at gmail.com>> wrote:
>> 
>> 
>>> On Oct 15, 2014, at 05:37, Nicolas George <george at nsup.org> wrote:
>>> 
>>> Le quartidi 24 vendémiaire, an CCXXIII, Rodger Combs a écrit :
>>>> Discussed this briefly on IRC; decided this was a good idea. I'm not sure
>>>> if the commit message explains it well enough; please poke me here or on
>>>> IRC if it doesn't.
>>> 
>>>> From 617b532c8a403c1cf06e60c99e9f36c787553b43 Mon Sep 17 00:00:00 2001
>>>> From: Rodger Combs <rodger.combs at gmail.com>
>>>> Date: Wed, 15 Oct 2014 05:00:02 -0500
>>>> Subject: [PATCH] Make copyts a tri-state, with `no` normalizing input
>>>> timestamps.
>>>> 
>>>> This doesn't change the default or `-copyts` behavior, but allows
>>>> `-nocopyts` to make e.g. `-ss 50` have timestamps starting at 50 seconds,
>>>> even if the input file's timestamps start at a value other than zero.
>>>> ---
>>>> ffmpeg.c     | 6 +++---
>>>> ffmpeg_opt.c | 4 ++--
>>>> 2 files changed, 5 insertions(+), 5 deletions(-)
>>> 
>>> It looks like you forgot to update the documentation too.
>>> 
>>> Regards,
>>> 
>>> -- 
>>> Nicolas George
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> 
>> Indeed I did. Here you go:
>> <0001-Make-copyts-a-tri-state-with-no-normalizing-input-ti.patch>
>> 
>> It occurs to me that it might be more useful in some cases to have one master input file (the first one?) be shifted so its timestamps start at zero, and the rest be shifted by the same amount as the master. That might be a good argument for making this its own option, instead of making copyts a tri-state.
>> 
>> I'm not particularly attached to the naming or implementation here, so suggestions are plenty welcome :)
>> 
>> 
> Upon some further testing, this seems to create some unusual and undesired behavior in some cases, and I'm not sure exactly why. The patch is definitely not ready, but I'd appreciate it if anyone could help work out a better design for the feature.

My previous patch was awkward and had some unintended side-effects; this version just adds a separate option instead of hacking -copyts.

From 88eb820b701c7eea11d60dd75faa2cefe57bbfe0 Mon Sep 17 00:00:00 2001
From: Rodger Combs <rodger.combs at gmail.com>
Date: Mon, 20 Oct 2014 18:31:18 -0500
Subject: [PATCH] Add -start_at_zero option.

This automatically shifts input timestamps to start at 0 instead of the file's
starting timestamp when using -copyts.
---
 ffmpeg_opt.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index c518ae1..13152d0 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -91,6 +91,7 @@ int do_benchmark_all  = 0;
 int do_hex_dump       = 0;
 int do_pkt_dump       = 0;
 int copy_ts           = 0;
+int start_at_zero     = 0;
 int copy_tb           = -1;
 int debug_ts          = 0;
 int exit_on_error     = 0;
@@ -921,7 +922,7 @@ static int open_input_file(OptionsContext *o, const char *filename)
     f->start_time = o->start_time;
     f->recording_time = o->recording_time;
     f->input_ts_offset = o->input_ts_offset;
-    f->ts_offset  = o->input_ts_offset - (copy_ts ? 0 : timestamp);
+    f->ts_offset  = o->input_ts_offset - (copy_ts ? (start_at_zero && ic->start_time != AV_NOPTS_VALUE ? ic->start_time : 0) : timestamp);
     f->nb_streams = ic->nb_streams;
     f->rate_emu   = o->rate_emu;
     f->accurate_seek = o->accurate_seek;
@@ -2840,6 +2841,8 @@ const OptionDef options[] = {
         "audio drift threshold", "threshold" },
     { "copyts",         OPT_BOOL | OPT_EXPERT,                       { &copy_ts },
         "copy timestamps" },
+    { "start_at_zero",  OPT_BOOL | OPT_EXPERT,                       { &start_at_zero },
+        "shift input timestamps to start at 0 when using copyts" },
     { "copytb",         HAS_ARG | OPT_INT | OPT_EXPERT,              { &copy_tb },
         "copy input stream time base when stream copying", "mode" },
     { "shortest",       OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
-- 
1.9.1




More information about the ffmpeg-devel mailing list