AutoClip 出片质量工程化与可发布导出实战从「切片是素材」到「成片直接能发」【免费下载链接】autoclipAutoClip : AI-powered video clipping and highlight generation · 一款智能高光提取与剪辑的二创工具项目地址: https://gitcode.com/GitHub_Trending/autoc/autoclip导读AutoClip 是一个 AI 驱动的视频高光提取与二创工具其核心流水线把长视频拆成大纲、时间线、评分、标题、聚类、切割六个步骤。本文围绕仓库中的 docs/QUALITY_AND_PUBLISH_PLAN.md 方案文档完整讲解「出片质量工程化」与「产出物可直接发布」两条改造主线如何用时长画像DurationProfile取代写死的播客参数、如何用程序化校正把 LLM 给出的时间区间吸附到字幕 cue 边界、如何用评分兜底消灭「切片为 0」以及如何通过一次 ffmpeg 调用把素材切片渲染成带竖屏画幅、烧字幕、标题卡的抖音 / 小红书 / Shorts / B 站成片。读完你将掌握这套方案的完整参数、实现位置与命令行用法并能在自己的项目里直接复用。一、为什么两条线要一起看方案文档在开头提出一个关键判断用户看到的不是「流水线跑成功」而是切出来的东西能不能直接用。文档引用了 issue #59 的典型反馈——「一个 5 分钟的视频剪出来三个视频每个 2 分钟几个大章节都识别不出来」——这句话其实同时暴露了两类问题边界切得不对切片时长失控、起点落在句子中间属于出片质量问题切出来也只是素材即使切对了产出物是 16:9 无字幕的原始切片不能直接上传抖音 / 小红书 / Shorts / B 站属于发布问题。因此方案把「质量工程化」和「可发布导出」放在同一份文档里推进共享同一个目标让产出物离「可直接发布」更近一步。这也是本文两条主线的由来。二、诊断现在的流水线为什么会出这些片方案的第一步是诊断。读完 backend/pipeline/step1_outline.py、step2_timeline.py、step3_scoring.py 与根目录 prompt/时间点.txt 后文档给出的结论是问题不在模型在工程。七类现象与根因可以归纳如下#现象根因代码位置15 分钟视频切出 3×2 分钟长视频切得还行提示词按 60 分钟播客写死「硬性最小 90 秒」「目标 3–6 分钟」「30 分钟块提取 2–5 个话题」程序没有任何地方感知视频总时长短视频被硬套长视频参数prompt/时间点.txt 时长控制节、prompt/大纲.txt 数量控制节、step1_outline.py 固定分块逻辑2边界落在句子中间 / 早了几秒时间戳完全由 LLM「算」程序只做块内 clamp、不对齐字幕 cue且-ss放在-i前加-c:v copy会导致起点吸附到前一个关键帧GOP 大时可提前数秒step2_timeline.py 的解析校验video_processor.py 的切割参数3切片为 0三处「一错全丢」评分返回数量与输入不等 → 整块丢弃全部低于 0.7 → 0 片JSON 解析失败 → 跳过块没有任何兜底step3_scoring.py、阈值判定逻辑4评分不准评分只看outline 要点列表不看转写原文「传播潜力」这类维度靶子太虚step3_scoring.py、prompt/推荐理由.txt5选了「知识 / 商业」类型没区别桌面端SimplePipelineAdapter从不传prompt_filesprompt 下的category/目录形同虚设simple_pipeline_adapter.py6重叠 / 重复片段各块独立定位跨块无去重同块内 LLM 也可能返回重叠区间step2_timeline.py 只做了排序7改了提示词不知道变好还是变坏没有回归集、没有指标、LLM 输出不可复现—方案给出的总原则非常明确先把「程序能做的事」从 LLM 手里拿回来——算时长、对齐边界、去重、兜底都交给确定性的代码然后再谈提示词与模型。下面两节分别展开两条改造线。三、线 1出片质量工程化3.1 质量目标5 分钟视频出 3–6 条 30–90 秒的片60 分钟播客出 6–12 条 2–6 分钟的片时长自适应每条片的起止都落在字幕 cue 边界不切半句「切片为 0」只在字幕为空时发生其余情况至少保底 top-K任何提示词 / 阈值改动都能在回归集上跑出数字。3.2 A. 时长画像DurationProfile核心实现位于 backend/pipeline/quality.py。它从 SRT 总时长算出 tier每个 tier 给一组切片参数然后生成一段中文「本次任务参数」追加到 step1 / step2 提示词末尾覆盖提示词里写死的 90 秒 / 3–6 分钟规则。分档逻辑见profile_for()quality.pytier判定总时长min_clip_sectarget_clip_secmax_clip_sectopics_hintmin_keep / max_clipsshort 8 分钟20 s30–90 s150 s3–62 / 6medium8–30 分钟45 s60–180 s300 s4–103 / 10long 30 分钟90 s120–360 s480 s按小时数线性放大max(6, 6×h)起3 /max(12, 16×h)DurationProfile还带三个算法参数snap_window_sec3.0吸附到最近 cue 的搜索窗口、merge_gap_sec5.0过短片段与相邻段间隔小于此则合并、overlap_merge_ratio0.5重叠超过较短者此比例 → 合并。prompt_hint()quality.py生成的追加段落关键内容如下--- ## 本次任务参数优先级高于上文所有时长与数量规则 - 视频总时长5 分 0 秒short 类型 - 整条视频建议提取 3–6 个话题话题之间不要重叠 - 每个片段目标时长 30 秒–90 秒最短不少于 20 秒最长不超过 150 秒 - 上文中「至少 90 秒」「3–6 分钟」等具体数字一律以本节为准 - 起止时间必须落在字幕行的边界上直接引用字幕行的时间戳不要自行推算接入点有两处step1 在extract_outline里用profile_from_srt save_profile落盘并拼接到大纲提示词step1_outline.py同时分块间隔从「长视频固定 30 分钟」改为按 tier 计算——长视频 30 分钟一块短 / 中视频整条一块step2 用load_profile读取并拼接到时间线提示词step2_timeline.py。画像会写入metadata/duration_profile.json供后续步骤与质量报告复用。3.3 B. 程序化校正clip_refiner同样位于 quality.py核心函数是refine_timeline()quality.py全部是纯函数、可单测。它对 step2 的 LLM 时间区间依次执行五步吸附snap起点吸附到最近 cue 的start、终点吸附到最近 cue 的end±3 s 窗口内取最近否则取包含该时刻或其后第一条的 cue时长下限沿 cue 向后延到min_clip_sec撞到下一段或视频末尾就停仍不够 → 与相邻段间隔 5 s 时合并否则丢弃时长上限按 cue 边界截到max_clip_sec去重按起点排序后重叠 较短者 50% → 合并保留前者 outline、拼接 content小重叠 → 后者起点推到前者终点所在 cue重新编号输出metadata/quality_report.json包含吸附偏移分布snap_offsets_sec、snap_offset_p50/p90、合并 / 丢弃条目与原因、时长分布与coverage覆盖率。接入点在run_step2_timeline的末尾step2_timeline.py所有调用方——桌面端、Celery、CLI——都经过这里因此一处接入全局生效。校正失败时降级为沿用原始结果并打日志不会让流水线崩溃。3.4 C. 评分兜底 类别提示词方案文档给评分环节的修复包含四点全部能在 step3_scoring.py 与 quality.py 中找到实现数量对齐align_scores()quality.py在 LLM 返回数量与输入不一致时按outline文本对齐对不上的给 0.5 「未评分自动兜底」不再整块丢选片兜底select_clips()quality.py阈值之上全留标记selected_bythreshold不足min_keep时按分数补齐并标selected_byfallback超过max_clips时按分截断评分输入加转写原文ClipScorer._excerpt()用excerpt_between()quality.py把时间范围内的转写原文截断到约 600 字喂给模型让分数落在内容上而不是标题上类别提示词SimplePipelineAdapter._prompt_files()simple_pipeline_adapter.py读取项目video_category通过get_prompt_files(category)shared_config.py把prompt/category/目录下的专用提示词传给各步目录缺失时逐文件回退到默认提示词。此外评分阈值解析也有了完整优先级CLI 显式--min-score 设置页「最低评分阈值」settings.json热重载 代码默认0.7见resolve_min_score_threshold()step3_scoring.py。3.5 D. 回归集与指标质量改造没有指标就没有闭环。方案落地了两件配套工程LLM 录制 / 回放缓存设置AUTOCLIP_LLM_CACHE_DIR环境变量后LLMClient按sha1(promptinput)把响应落盘 / 读盘CI 里只回放零 API 费用、结果可复现。eval 框架backend/eval每个 case 是一个目录eval/cases/name/内含input.srt、timeline.json、expect.jsonexpect.json写的是约束而不是标准答案字段包括clips_min、clips_max、duration_min、duration_max、must_not_zero、coverage_min可选人工标的黄金区间eval/metrics.py 计算片数、时长分布、覆盖率、零片率等指标并逐项判定运行方式python -m backend.eval跑全部 case 打印表格并写eval/reports/date.json--live预留真调模型并录制当前会提示先录制再回放见 eval/main.py。仓库自带的首个 case eval/cases/short-synthetic/expect.json 的约束是片数 3–6、单条时长 20–150 s、不允许零片、覆盖率 ≥ 0.35——正好对应方案文档验收表里「5 分钟视频不再出 2 分钟片」这一条。3.6 E.后续可插拔演进方案还预留了后续方向Step 3 评分后端可插拔接纳 #75 思路、ASR 可插拔#67、基于回归集做提示词 A/B。四、线 2产出物「可直接发布」4.1 设计原则默认流水线不变仍出 16:9 原始切片stream copy快发布导出是按需、单条用户点了才编码一个 ffmpeg 调用出一个成片filter graph 由代码拼不引入 MoviePy 之类的重依赖预设即规格包画幅 / 分辨率 / 时长上限 / 字幕样式 / 是否标题卡都封装在预设里。4.2 导出服务与预设规格核心实现在 backend/services/publish_export.py。预设定义publish_export.py预设 key平台 / 形态分辨率布局 layout时长上限douyin抖音 9:161080×1920blur原片等宽居中 高斯模糊放大底无xiaohongshu小红书 9:161080×1920blur无shortsYouTube Shorts1080×1920crop居中裁切60 s超长截断并告警bilibiliB 站横屏1920×1080fit等比缩放 黑边填充无original原画重编码跟随源none无三种竖屏 / 横屏布局的 filter 实现在_layout_filters()publish_export.pyblur用split2分路、背景scaleforce_original_aspect_ratioincreasecropgblursigma24、前景scale后居中overlaycrop直接scalecropfit用scalepad加黑边。编码参数export_clip()publish_export.py同时解决了线 1 的关键帧吸附问题-ss前置快速定位 重新编码libx264 veryfast crf 20aac 160kfaststart帧精确输出。烧字幕从项目 SRT 切出片段区间、平移时间、写临时 SRTslice_srt()publish_export.py通过subtitlesfilter 与force_style控制字号 / 描边 / 底部边距Fontsize16, Outline2, MarginV48。标题卡drawtext前 4 秒显示generated_title用textfile规避转义问题半透明底条boxcolorblack0.45。中文字体resolve_cjk_font()publish_export.py按平台探测——macOS 用PingFang.ttcLinux / Docker 用NotoSansCJKWindows 用msyh.ttc找不到时跳过标题卡并返回警告。输出与幂等输出到output/exports/{clip_id}_{preset}.mp4关闭字幕 / 标题卡或覆盖 layout 时文件名追加_nosub/_notitle/_{layout}后缀同参数已存在直接返回cachedTrue不重复编码ffmpeg / ffprobe 路径可通过AUTOCLIP_FFMPEG_PATH/AUTOCLIP_FFPROBE_PATH环境变量指定见 backend/utils/ffmpeg_utils.py。4.3 入口API / CLI / MCPREST APIbackend/api/v1/projects.py方法路径说明GET/projects/{id}/export-presets列出可用预设POST/projects/{id}/clips/{clip_id}/export后台线程启动导出返回 job_idbody 可传preset/subtitles/title_card/layoutGET/projects/{id}/exports/{job_id}查询任务状态与结果queued/running/completed/failed含 percentGET/projects/{id}/exports/{job_id}/download下载成片文件未完成返回 409CLIbackend/cli.py 与参数定义 cli.py# 列出全部预设 autoclip export project_id --list-presets # 导出单个切片为抖音竖屏默认预设即 douyin autoclip export project_id --clip 2 --clip 5 --preset douyin # 导出全部切片为 B 站横屏不带字幕与标题卡 autoclip export project_id --preset bilibili --no-subtitles --no-title # 给脚本 / agent 用JSON 输出 autoclip export project_id --preset shorts --jsonMCP 工具export_clip(project_id, clip_id, preset, subtitles, title_card)定义于 backend/mcp_server.py返回成片路径同参数再导走缓存。4.4 桌面端入口ClipCard 的占位「投稿」被换成「发布导出」Dialog 里用Segmented选预设、开关字幕 / 标题卡ProgressLine显示进度完成后一个按钮下载全部使用frontend/src/ui原语并按 DESIGN.md 落地。4.5 D.后续演进方向方案规划了后续能力说话人居中裁切人脸检测轨迹 平滑、封面图高能量帧 标题、多平台直传B 站已有半成品。五、验收标准与当前进度5.1 验收方式项怎么验5 分钟视频不再出 2 分钟片eval caseshort-*片数 3–6时长 20–150 s边界对齐quality_report.snap_offsetsp90 0.5 s人工抽看 5 条无半句零片率eval 全部 caseclips min_keepfallback_rate有数但不为 100%发布导出三个预设各导一条ffprobe 分辨率正确、字幕可见、标题卡前 4 秒出现、时长与元数据一致±0.1 s不伤旧路径现有单测 docker-smoke 全绿默认导出仍是 stream copy 的 16:95.2 推进记录2026-09-07方案起草并落地线 1 A–D、线 2 A–C已合入backend/pipeline/quality.pystep1/2/3 与SimplePipelineAdapter接入LLM 缓存backend/evalshort-synthetic绿publish_export.py API/CLI/MCP ClipCard Dialog单测通过含 backend/tests/test_quality.py 与 backend/tests/test_publish_export.py其中test_export_original_reencodes_and_is_idempotent用 lavfi 生成 3 秒测试视频验证了 original 预设的帧精确重编码与幂等返回frontendtsc干净未做真 5 分钟视频对照、竖屏预设人工看片、说话人跟踪、封面图。六、从方案到代码的验证路径如果你想深入验证这套方案仓库里可以直接对照阅读的链路如下参数与算法backend/pipeline/quality.pyDurationProfile/refine_timeline/align_scores/select_clips流水线接入step1_outline.py、step2_timeline.py、step3_scoring.py、simple_pipeline_adapter.py回归指标backend/eval/main.py、backend/eval/metrics.py、backend/eval/cases/short-synthetic/expect.json发布导出backend/services/publish_export.py、backend/api/v1/projects.py、backend/cli.py、backend/mcp_server.py测试佐证backend/tests/test_quality.py、backend/tests/test_publish_export.py。这五条链路合起来就是「把程序能算的事从 LLM 手里拿回来 一个 ffmpeg 调用出成片」这份方案从设计文档到可运行代码的完整落地过程。【免费下载链接】autoclipAutoClip : AI-powered video clipping and highlight generation · 一款智能高光提取与剪辑的二创工具项目地址: https://gitcode.com/GitHub_Trending/autoc/autoclip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
kOps 项目中 diskv 库全解析:Go 语言磁盘键值存储的架构设计与实战指南 kOps 项目中 diskv 库全解析:Go 语言磁盘键值存储的架构设计与实战指南 【免费下载链接】kops Kubernetes Operations (kOps) - Production Grade k8s Installation, Upgrades and Management 项目地址: https://gitcode.com/gh_mirrors/kop/kops
导读
disk… · 2026/9/23 10:39:38
货运系统手写实现:3个致命坑让你少走弯路 货运系统手写实现:3个致命坑让你少走弯路 刚接了个物流单子,代码跑起来满屏红字,StackTrace 长得跟天书一样。别慌,这锅通常不甩给框架,多半是你在 手写实现… · 2026/9/23 10:39:25
AI芯片建模与仿真:gem5与SystemC协同实战指南 1. 项目概述:当AI芯片不再只是黑盒,建模与仿真是工程师的“显微镜”和“试验场”“AI芯片建模与仿真”这六个字,听起来像实验室里高不可攀的术语,但在我过去十年带团队做AI加速器架构设计、流片前验证和算法-硬件协同优化的过程中… · 2026/9/23 10:39:18
硬件测试规范实战:从原理图审查到自动化脚本的完整指南 简介:这份硬件测试方案文档面向硬件工程师、测试人员及电子相关专业学生,聚焦整机与单板两类测试场景,帮助读者建立从测试目的、适用范围到判定准则的完整测试框架。资源包内含1个doc文件,约7.95MB,共76页,… · 2026/9/23 11:23:26
SpaceX-API v4 Core 数据模型完全解析:字段语义、落地记录与查询实战 SpaceX-API v4 Core 数据模型完全解析:字段语义、落地记录与查询实战 【免费下载链接】SpaceX-API :rocket: Open Source REST API for SpaceX launch, rocket, core, capsule, starlink, launchpad, and landing pad data. 项目地址: https://gitcode.com/gh_mir… · 2026/9/23 11:23:26
Word如何只删当前页水印?分节+取消链接是关键 1. 水印不只是一张图:先搞懂它到底住在哪一层做毕业论文、标书、合同编排的时候,经常遇到这种需求:整份文档都要有水印,偏偏某一页不能有——比如最后一页的免责声明、附录里的授权页、中间的证书扫描页。很多人下意识用鼠标去点页… · 2026/9/23 11:23:19
电商数据分析驱动跨界合作:从用户重叠到增量评估的实战方法论 做了这么多年电商数据分析,我最深的一个感受是:这个岗位的价值早就不该只停留在“日报、周报、活动复盘”上了。你花一整晚跑出来的转化漏斗,老板看完点点头,第二天晨会该干嘛还干嘛。但有一天我换了个思路,把分析视角… · 2026/9/23 11:23:13
3个核心算法手写实现,搞定迅雷快传资源搜索面试难题 3个核心算法手写实现,搞定迅雷快传资源搜索面试难题 面试被问原理答不上来,那种尴尬感真的让人头皮发麻。很多候选人面对“迅雷快传资源搜索”这类高频场景,只能背八股文,一旦追问底层逻辑,立马哑火。今天不整虚的,直接带你 手写实现… · 2026/9/23 11:23:13
大学生个人小结一文搞懂:转岗微服务避坑指南 大学生个人小结一文搞懂:转岗微服务避坑指南 很多应届生盯着语法书看了三个月,闭着眼都能敲出 for 循环,可一让搭个能跑通的项目就卡壳。这种“会写代码却不会做系统”的割裂感,是转岗大厂最痛的点。今天这篇大学生个人小结,不灌鸡汤,直接拆解微服… · 2026/9/23 11:23:13
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29