[FFmpeg-devel] [PATCH] fftools/ffmpeg: fix -t inaccurate recording time

Gyan Doshi ffmpeg at gyani.pro
Sat Jul 17 12:40:48 EEST 2021



On 2021-07-10 15:42, Gyan Doshi wrote:
>
>
> On 2021-07-09 11:03, Shiwang.Xie wrote:
>> Pings.
>
> Will test.

Fix confirmed. Will push tomorrow if no one objects.

Regards,
Gyan


>
>>
>> On Sat, 5 Jun 2021, Shiwang.Xie wrote:
>>
>>> Ping.
>>>
>>> Thanks,
>>> Shiwang.Xie
>>>
>>> On Sat, 29 May 2021, Shiwang.Xie wrote:
>>>
>>>> Hi, any updates for this?
>>>>
>>>> Thanks,
>>>> Shiwang.Xie
>>>>
>>>> On Wed, 19 May 2021, Shiwang.Xie wrote:
>>>>
>>>>> Hi, is there objection?
>>>>>
>>>>> Thanks,
>>>>> Shiwang.Xie
>>>>>
>>>>> On Sat, 15 May 2021, Shiwang.Xie wrote:
>>>>>
>>>>>> if input start time is not 0 -t is inaccurate doing stream copy,
>>>>>> will record extra duration according to input start time.
>>>>>> it should base on following cases:
>>>>>>
>>>>>> input video start time from 60s, duration is 300s,
>>>>>> 1. stream copy:
>>>>>>       ffmpeg -ss 40 -t 60 -i in.mp4 -c copy -y out.mp4
>>>>>>   open_input_file() will seek to 100 and set ts_offset to -100,
>>>>>>   process_input() will offset pkt->pts with ts_offset to make it 0,
>>>>>>   so when do_streamcopy() with -t, exits when ist->pts >= 
>>>>>> recording_time.
>>>>>>
>>>>>> 2. stream copy with -copyts:
>>>>>>       ffmpeg -ss 40 -t 60 -copyts -i in.mp4 -c copy -y out.mp4
>>>>>>   open_input_file() will seek to 100 and set ts_offset to 0,
>>>>>>   process_input() will keep raw pkt->pts as ts_offset is 0,
>>>>>>   so when do_streamcopy() with -t, exits when
>>>>>>   ist->pts >= (recording_time+f->start_time+f->ctx->start_time).
>>>>>>
>>>>>> 3. stream copy with -copyts -start_at_zero:
>>>>>>       ffmpeg -ss 40 -t 60 -copyts -start_at_zero -i in.mp4 -c 
>>>>>> copy -y out.mp4
>>>>>>   open_input_file() will seek to 120 and set ts_offset to -60 as 
>>>>>> start_to_zero option,
>>>>>>   process_input() will offset pkt->pts with input file start time,
>>>>>>   so when do_streamcopy() with -t, exits when ist->pts >= 
>>>>>> (recording_time+f->start_time).
>>>>>>
>>>>>> 0      60     40      60                     360
>>>>>> |_______|_____|_______|_______________________|
>>>>>>      start   -ss     -t
>>>>>>
>>>>>> This fixes ticket #9141.
>>>>>>
>>>>>> Signed-off-by: Shiwang.Xie <shiwang.xie666 at outlook.com>
>>>>>> ---
>>>>>> fftools/ffmpeg.c | 8 +++++---
>>>>>> 1 file changed, 5 insertions(+), 3 deletions(-)
>>>>>>
>>>>>> diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
>>>>>> index b3658d8f65..309d9dfa6e 100644
>>>>>> --- a/fftools/ffmpeg.c
>>>>>> +++ b/fftools/ffmpeg.c
>>>>>> @@ -2082,9 +2082,11 @@ static void do_streamcopy(InputStream 
>>>>>> *ist, OutputStream *ost, const AVPacket *p
>>>>>>     }
>>>>>>
>>>>>>     if (f->recording_time != INT64_MAX) {
>>>>>> -        start_time = f->ctx->start_time;
>>>>>> -        if (f->start_time != AV_NOPTS_VALUE && copy_ts)
>>>>>> -            start_time += f->start_time;
>>>>>> +        start_time = 0;
>>>>>> +        if (copy_ts) {
>>>>>> +            start_time += f->start_time != AV_NOPTS_VALUE ? 
>>>>>> f->start_time : 0;
>>>>>> +            start_time += start_at_zero ? 0 : f->ctx->start_time;
>>>>>> +        }
>>>>>>         if (ist->pts >= f->recording_time + start_time) {
>>>>>>             close_output_stream(ost);
>>>>>>             return;
>>>>>> -- 
>>>>>> 2.18.5
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".



More information about the ffmpeg-devel mailing list