From patchwork Sat May 15 08:53:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Shiwang.Xie" X-Patchwork-Id: 27785 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp1158485iof; Sat, 15 May 2021 01:54:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzxaXCQLVdGuiVdG/ocPFvxxzXrVwrCOVUUtoY6VmmandTtYJV94kbtZoVH7F4r1ovu7jqM X-Received: by 2002:a17:906:270a:: with SMTP id z10mr51438631ejc.204.1621068863580; Sat, 15 May 2021 01:54:23 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id sb9si10082696ejb.15.2021.05.15.01.54.22; Sat, 15 May 2021 01:54:23 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=f9Si8wYA; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CC9E26881E8; Sat, 15 May 2021 11:54:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-oln040092253074.outbound.protection.outlook.com [40.92.253.74]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B911668076E for ; Sat, 15 May 2021 11:54:11 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Plx29NJ51YpATs7ABFGWp9wOPGlcXCoZ9w5oGfqYUv5Ca/X0/p0pjtoaDAOXfn5JE3g6ZKdvEPOyymegYm+n3UAry0/HJff03gFlS0P8FLaIZCjbK+u+9ZPTRLyenjxyxp9LjqgXqIk5Nh648S7qqeegnBi1U1DRdeYSTZrLDVFSemUMkDt215NikWdJJaep/nhB/G3nYh7fKPw2nrDgoir69y/ZTbuHO4Hy76T4eAqwnQwaY3Y1bLHucWmFVyfQqgHj3JwkTPAIZF6UVeTf0xVRmVxDNE0ExPoEvJXkjaVgTWBEdLHFeMG7pdMXo0rL8C7YOQYuwTJfM9ow9L9zvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WV/GhSTg4XS1WwDANzz7Shq5uXWRjHH4F63FM/S/sAA=; b=JH6IQ9nlbFkebqQG8f0EUWCwZ5oXbVyD9XPb6pxIIhdz8Owry3AZXwlIWz+7cKr9xq3pwFVDq24M3N2khs2Yf6qpn03RkOWAbW5NBB8ROoxSQV/T/ye8+QtBCreGpOeLi8dL72s+UMI/2WuwLM1REgnO/4ukMYyRG9QOpzZef/GMYUY/YTx29fzB522Ii87rK0z9uVY/pSZBXHrJyvwVrS46372DTJyjxwGRN/r1kgyTMQRYuRuyBKDjsmXuZw7BB5/7mpV1eQ0fhNnFx4yBRa28nQ1o+GOnuyZaBO1DPWTEfZzZzFnzDhXnwSScjta5tOeutx/xjuutepky+oZWpQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WV/GhSTg4XS1WwDANzz7Shq5uXWRjHH4F63FM/S/sAA=; b=f9Si8wYA6OlPGk64eH2NzVIyy7GQx3lbqXGvTZWwwJ53WbUmbuM+35brOOCkmkD8Iy/U9tfpy2BahwVnGaHzwuwaXoh11ZdkzqJIBFna7RZ+0LT5vMdHLhOxjDubDIoM7p+q81xiy2SS6F4pmD6h5AoXvLP+ytPj+AL64ctX5XxiiWOTYvGTgJaBiSpqgoYP16B0yVWHrn4sdzz7udzCDobVsRsXLih7lozg2hhEKhCu+Fpc14JvhFhMoCMF6VtUZdtGzfDVrFs19DtKwTkIH8aSlLHxWhQDLN3vX0+6sEjWaJE6wp7r2sq22NpcGyp2LERyU17XpAfUdhzxlmnuRA== Received: from PS1PR0401CA0053.apcprd04.prod.outlook.com (2603:1096:803::21) by TY2PR0101MB2992.apcprd01.prod.exchangelabs.com (2603:1096:404:9f::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.25; Sat, 15 May 2021 08:54:08 +0000 Received: from PU1APC01FT006.eop-APC01.prod.protection.outlook.com (2603:1096:803:0:cafe::ad) by PS1PR0401CA0053.outlook.office365.com (2603:1096:803::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25 via Frontend Transport; Sat, 15 May 2021 08:54:08 +0000 Received: from OS3PR01MB5573.jpnprd01.prod.outlook.com (10.152.252.59) by PU1APC01FT006.mail.protection.outlook.com (10.152.252.104) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.25 via Frontend Transport; Sat, 15 May 2021 08:54:08 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:8D39D74277C06FC10E67D70C0BB26E9FA83A4DD99695BF868D729D53EFBF0A86; UpperCasedChecksum:2490B3FE598440DE54ED6D4A264E6BE00F22DF2ADECE3AD1AFA68FF99AA81742; SizeAsReceived:7291; Count:44 Received: from OS3PR01MB5573.jpnprd01.prod.outlook.com ([fe80::1833:e96b:dd3c:e5f2]) by OS3PR01MB5573.jpnprd01.prod.outlook.com ([fe80::1833:e96b:dd3c:e5f2%7]) with mapi id 15.20.4129.029; Sat, 15 May 2021 08:54:07 +0000 From: "Shiwang.Xie" To: ffmpeg-devel@ffmpeg.org Date: Sat, 15 May 2021 08:53:56 +0000 Message-ID: X-Mailer: git-send-email 2.18.5 X-TMN: [fPGkpjS5HH53nRNdKaWwXKtndULWQimR] X-ClientProxiedBy: BM1PR01CA0156.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::26) To OS3PR01MB5573.jpnprd01.prod.outlook.com (2603:1096:604:c3::9) X-Microsoft-Original-Message-ID: <20210515085356.6409-1-shiwang.xie666@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from ip-172-31-17-3.ap-south-1.compute.internal (13.126.74.14) by BM1PR01CA0156.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25 via Frontend Transport; Sat, 15 May 2021 08:54:07 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 44 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 349abd3a-9049-479e-4f84-08d9177effd3 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEsl5e/SdZZ3fr3pDtF/scKvhE0sJU9gucn/+Fj5C19hgDa8H5rev+KBZAr2tYDbs39nKhnEN/tILqYOvZc7uz2cRgRArG/r8djMEe7MDirlbCuN2ucbdVnHRwJGAh4gWHJL2f/YrxylKg0Lji7UoR8zymxbUY6Cm2SDvC3UlktvoZEdiksH5MM1EgYzebzOQU9kmaBjGfAaw46qlDanxRQ5eLqTXUyfDOrNdwGIiAoUasYNhCF3zA8pfydiOAJcjwb2aEqQuQ1eiG3j0KLwyIaacRuUN0h+2K8r+79g5Vw5JNGp1QrAOtPHV3wqwmvtGTG9twz82U/Z39nK2JQPBy4MCk9Y2EhpBQJfPa4ZE7y7w7+wncR7NhPvibOq04fLXDOJHREXWvJNuJxP6PBDUeYnIKUHZK+l0TfgmZuV+U8fo6kYhTFD6HshJmxAzwl7ErIEtezgAxGezrvgOc37Pa8Zn7yMwoKbP8JPBwDSnQQxiAyleJvXVEz+N9wob6LxuKneIEyemr58/UNlh3fpFsdj+8FftMG331ePUDDPlB8BiJ/s3IDBTfQPBx3NJUb8BeY78lShriCscltvpi4lGsnVnAxWLgeB3FnjHe0gDbrYhoY0GnWxi3u5xzICTp/otGzcKUuZQ1q3F5URPyGVOMe8/q5kbY92/ZD9GvVWZ9UUKnYrMRKMgLpTZBgjIeboiVr2aWWz8vO+4xE1yRj47Q2xl6ciOAwBfpiqo3FPQaYSRrcYTu/g7kT3IZmloOo8hZSoOtJQZSnI7msTXasPxaX8 X-MS-TrafficTypeDiagnostic: TY2PR0101MB2992: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2v35Ovg3Vmjyk7Hbwqs1ZhSe/k4eha+jNSxqlBfKgS7zdO/R75m87TPFrqpH44qOkeumGmHiSfNXEkZY9LAopqMi8zIogCOfmDBi4JlDu7nZIL5u6RQf6WP/4ZZIjc9OTbZrH7p9LF3FSXpm8xN2kjuDy+Tp5RrrbBYuUO6CIBEEWNI80OL2macRBaoXW48P/t6K0ZT5+qcW1X9Usp7wwdKrAwWN5O8Gr/Nejn17nBwH3MON0m2+MqaKudUQ6TURpIa7cqejV9cS006tzlJeMv6WIuANS4YnArNH5hiGHhmLSOl/jbjzfQ6q+631l2f0uC3obbryFYzPUMfAtuNh0oAi+aYcunJQpVk+hjj3K6e2I10RgDfLHTdQtMuWyR6pO4XH7vbt/u1Ugs3lL3fzvQ== X-MS-Exchange-AntiSpam-MessageData: JAb96FsK95tKe+23C3OveBf+zIc3Y8shkzpFCadKogYIg5WAAwu0m6m/rK//W3zwonlwkFwqz9+ux4YS1P8EeyVJ7Lz6E5dG+i0mJjPM8/psqrO27S/rL0HwdicX1kNVO9JVxygHjfr5WEplgdscXw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 349abd3a-9049-479e-4f84-08d9177effd3 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2021 08:54:07.8347 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: PU1APC01FT006.eop-APC01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY2PR0101MB2992 Subject: [FFmpeg-devel] [PATCH] fftools/ffmpeg: fix -t inaccurate recording time X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: "Shiwang.Xie" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: EqgF4r8Pfxt8 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 --- 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;