[FFmpeg-devel] [PATCH] fftools/ffmpeg: fix -t inaccurate recording time
Gyan Doshi
ffmpeg at gyani.pro
Thu May 6 17:50:48 EEST 2021
On 2021-05-06 20:00, Shiwang Xie wrote:
> Have tested several cases, will push after tomorrow if without
> objection, thanks.
Resend the patch inlined or attached with text/x-diff or text/x-patch
mime type
so that patchwork picks it up and runs fate on it.
Regards,
Gyan
>
> On Thu, 29 Apr 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 3ad11452da..fac9f67462 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.24.3 (Apple Git-128)
>>
>>
> _______________________________________________
> 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