From patchwork Tue Dec 27 21:46:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Viola X-Patchwork-Id: 39762 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp3721544pzb; Tue, 27 Dec 2022 13:47:25 -0800 (PST) X-Google-Smtp-Source: AMrXdXvOLi2A75z+PPO3zf4mlq5LZTgOWNzI1rLSJQ7UXdEe5T5THRCVfPp8kkZSSfGOCYb4iaeB X-Received: by 2002:a17:906:8492:b0:7c0:affa:866f with SMTP id m18-20020a170906849200b007c0affa866fmr18832723ejx.26.1672177644760; Tue, 27 Dec 2022 13:47:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672177644; cv=none; d=google.com; s=arc-20160816; b=sx/NUjX6GInOPMkrRPvuBEeBSgkp0NUS5PVAbwYIDkFNXoWeIEMx3cxKuSCu1Px46c BwFhKvgh2soW4ybd+sBjKBXiZIGBszv7UMdsgrdPfrtcVD/xeBnlbV/27vgs55QClFLK luc2MQWbV9/W3DMcm/iSkkpGlvAIaeX214E7B3Er5r4k3U46Ha8AnAZqb0XZUdMszdAC nk1SuBZY5G6yz6oKEyU5mgpcJLUwPF0T9cCDFivg3xsuzaHkh8SyA98ykSu6UOrnKT8n AnOCEogQdXHmSOYpnJ8CrfZvoYzYwkBD5lzUorO5ULAH1VvV+Fk96pMzjEJWlm5JL3lS ZZ5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=+Oa8n8S+GSFidFlwDEZ9k+d1HkualS6X7WlUg2xz5lo=; b=1DPPfWr/8LkkOnHBntVvYw/yDpTDmWccGKetbUpGE6OJr8sXalnuZ0l58pJCkkLCjy hZrpkW6ydplHol3J7Nx070LyCSoLqag8amGGrF4GTLB9MS1+9UHidQsIYwwLam0ylZc0 M0uOfo009Nwz1aUz9qGMGrLYKt5h7km4T3J5NFJ5NRtZBUrSChuwXug8/4hWZMWC0FDj UK4qcP/PHaEDt3VxENovMLxOR2ZRpdaVkL9RZ8U8v7ZsLf4lpRMJYkhaxdlYr5x87Fuq DuRwE3R8OLBe6lvnpkpcQiNYJ4swYo9Adwv+e/6JH9FWpq+7Y6KlJIlxBOJxxrXbkQrt hUzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@criticalmention.com header.s=google header.b=nJzumL7A; 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=QUARANTINE sp=NONE dis=NONE) header.from=criticalmention.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id wu8-20020a170906eec800b007a1d4f0e7fcsi12236670ejb.655.2022.12.27.13.47.24; Tue, 27 Dec 2022 13:47:24 -0800 (PST) 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=@criticalmention.com header.s=google header.b=nJzumL7A; 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=QUARANTINE sp=NONE dis=NONE) header.from=criticalmention.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9494368BBD3; Tue, 27 Dec 2022 23:47:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C9B6B68B766 for ; Tue, 27 Dec 2022 23:47:15 +0200 (EET) Received: by mail-pf1-f178.google.com with SMTP id w26so9606613pfj.6 for ; Tue, 27 Dec 2022 13:47:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=criticalmention.com; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=3+OYJ4ijctNkbtQ/Bj6Ki5gv2RLk7/wB7P1fKx6ObCo=; b=nJzumL7AsYQt8zETzhYRzqi6gU3diVU+Hxry2sOr1vFUfg41bRa5qpEUfFyIW4O+1w b67a4sYQAnFjUfu6n3OL7Djfjx+wiqTcQuUbzAoMX3GQfmwu21h/EtdvDZ4MbUDunDHh sp0K+wFWuVVFjsaxOvCDeVW5hB3BEBeYRuat0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3+OYJ4ijctNkbtQ/Bj6Ki5gv2RLk7/wB7P1fKx6ObCo=; b=a+jg3NathJD/wQqQTzmn0zO4UWOQqcsFjOECwZ0pZhjXl/Qp3HnhzF/oW+9CKLV2Lq iv5f9X7sINts6iiPV30jVQ77d+MP+QghoPHI7j/9zwqo9UJLp5fN3D4wNKwUyQkxEhLW cmWDM3kYoVE0pdeiL8pIV4VPqYhh+NfcjldJ5olNRNT5NCsGR6nof/Pr/0dZbj6wq+R1 DkuYXYgiDdG4IwhBhSr8CWLjiIEhd/X8ItzY0su/JTQ3japWTaYNvToLKtB3gf6Woh9T FIKWFkoi/bIQcE4YJgYqdzCgVRub+GvKDbvcMbJBMX7aZoMry/Hr7wXSnp8Z6HjfYvj7 RP8g== X-Gm-Message-State: AFqh2kpwXznE+cxWnoIbJKwOUmDaIYDWwwlZQ+xsjGmsgJxvxXWUBb76 dNrGkgZsfBiSXQPK/UoUwaDMPimuZWisburL X-Received: by 2002:aa7:8815:0:b0:580:d668:ff36 with SMTP id c21-20020aa78815000000b00580d668ff36mr13504504pfo.27.1672177633239; Tue, 27 Dec 2022 13:47:13 -0800 (PST) Received: from ip-10-0-37-69.us-west-2.compute.internal (ec2-52-42-255-76.us-west-2.compute.amazonaws.com. [52.42.255.76]) by smtp.googlemail.com with ESMTPSA id z189-20020a6265c6000000b0057630286100sm8987530pfb.164.2022.12.27.13.47.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Dec 2022 13:47:11 -0800 (PST) From: Steven Viola To: ffmpeg-devel@ffmpeg.org Date: Tue, 27 Dec 2022 21:46:39 +0000 Message-Id: <20221227214639.818807-1-sviola@criticalmention.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/segment: Add strftime list prefix formatting 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: Steven Viola Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: tmrwnOKr64uW In the segment muxer, when `strftime` is enabled, apply formatting to the `segment_list_entry_prefix` string if it's set. ``` ffmpeg -i in.mkv -codec copy -map 0 -f segment \ -segment_list out.csv -segment_list_entry_prefix %Y/ \ -strftime 1 "/var/www/html/%Y/%Y%m%d%H%M%S.ts" ``` Will produce a CSV with the following: 2022/20221227205722.ts,0.000000,8.089222 2022/20221227205730.ts,8.089222,18.065856 2022/20221227205740.ts,18.065856,28.075856 2022/20221227205750.ts,28.075856,38.085856 If strftime is not set, then no formatting will be applied to segment_list_entry_prefix. Signed-off-by: Steven Viola --- libavformat/segment.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/libavformat/segment.c b/libavformat/segment.c index c904e20708..4563bff732 100644 --- a/libavformat/segment.c +++ b/libavformat/segment.c @@ -190,7 +190,9 @@ static int set_segment_filename(AVFormatContext *s) size_t size; int ret; char buf[1024]; + char prefix_buf[1024]; char *new_name; + char *new_prefix = NULL; if (seg->segment_idx_wrap) seg->segment_idx %= seg->segment_idx_wrap; @@ -199,14 +201,24 @@ static int set_segment_filename(AVFormatContext *s) struct tm *tm, tmpbuf; time(&now0); tm = localtime_r(&now0, &tmpbuf); + if (seg->entry_prefix) { + if (!strftime(prefix_buf, sizeof(prefix_buf), seg->entry_prefix, tm)) { + av_log(oc, AV_LOG_ERROR, "Could not get prefix with strftime\n"); + return AVERROR(EINVAL); + } + new_prefix = av_strdup(prefix_buf); + } if (!strftime(buf, sizeof(buf), s->url, tm)) { av_log(oc, AV_LOG_ERROR, "Could not get segment filename with strftime\n"); return AVERROR(EINVAL); } - } else if (av_get_frame_filename(buf, sizeof(buf), - s->url, seg->segment_idx) < 0) { - av_log(oc, AV_LOG_ERROR, "Invalid segment filename template '%s'\n", s->url); - return AVERROR(EINVAL); + } else { + if (av_get_frame_filename(buf, sizeof(buf), + s->url, seg->segment_idx) < 0) { + av_log(oc, AV_LOG_ERROR, "Invalid segment filename template '%s'\n", s->url); + return AVERROR(EINVAL); + } + new_prefix = av_strdup(seg->entry_prefix); } new_name = av_strdup(buf); if (!new_name) @@ -215,13 +227,13 @@ static int set_segment_filename(AVFormatContext *s) /* copy modified name in list entry */ size = strlen(av_basename(oc->url)) + 1; - if (seg->entry_prefix) - size += strlen(seg->entry_prefix); + if (new_prefix) + size += strlen(new_prefix); if ((ret = av_reallocp(&seg->cur_entry.filename, size)) < 0) return ret; snprintf(seg->cur_entry.filename, size, "%s%s", - seg->entry_prefix ? seg->entry_prefix : "", + new_prefix ? new_prefix : "", av_basename(oc->url)); return 0;