智能剪辑处理环境

从项目根目录运行 bash services/smart-edit/setup.sh。准备 Python 3.11、FFmpeg/ffprobe(包含 libx264 与 subtitles/libass)、中文字体(Linux 推荐 Noto Sans CJK)。基础分析依赖按版本固定,虚拟环境独立。

应用环境配置:

  • SMART_EDIT_PYTHON=/绝对路径/.venv-smart-edit/bin/python
  • SMART_EDIT_CACHE_DIR=/有足够磁盘空间的私有目录/smart-edit-cache(缺省 .cache/smart-edit)
  • 运行目录保持项目根目录;Next standalone 打包已包含 analyze.py,Python 与 FFmpeg 单独安装。

语音识别选装:执行 bash services/smart-edit/setup.sh --with-asr,会安装 FunASR/PyTorch 并从 ModelScope 下载官方 Paraformer、FSMN-VAD、CT-Transformer 三个模型。把脚本输出的 SMART_EDIT_ASR_MODEL、SMART_EDIT_VAD_MODEL、SMART_EDIT_PUNC_MODEL 路径写入应用环境。模型代码禁止 trust_remote_code,用户请求不能选择任意模型文件。模型权重下载可能较大,应在维护期间完成;请求阶段仅读取已经配置好的本地模型。

诊断:$SMART_EDIT_PYTHON services/smart-edit/analyze.py --check。API /api/canvas/smart-edit/capabilities 仅对登录用户返回可用功能与模型列表,不返回密钥或本地路径。ASR 未准备好时页面关闭自动转写选项,仍可导入 SRT 和进行画面混剪。

资源:整个智能剪辑作业通过 PostgreSQL advisory lock 限制为同一数据库下同时一个重处理任务,租约心跳沿用画布任务队列。Python/FFmpeg 限制线程数,单素材 ≤180 秒、≤125 MiB、至多6份,总素材≤10分钟,成片≤90秒、≤12片段;分析缓存按用户隔离,内容 hash 校验,7天过期、4GiB上限。低清代理仅用于分析,成片使用原素材。数据库锁繁忙时任务保存为可恢复状态,页面轮询或返回画布会继续运行。

算法:PySceneDetect 检测镜头,librosa 检测节拍,FunASR 返回语句时间戳(采用 FunClip 的时间戳剪辑思路)。去静音为独立实现的 RMS 阈值算法,参考 Auto-Editor 的粗剪与余量机制;没有复制 Auto-Editor 或 FunClip 源码,也不依赖它们的 UI。来源与许可证记录在项目 docs/video-canvas-smart-edit-research-2026-09-17.md。PySceneDetect 为 BSD-3-Clause,librosa 为 ISC,FunASR 源码和各权重许可应按所安装版本一并保留。

智能选片直接复用项目内官方千问3.8视觉模型;关闭智能选片后所有镜头/节拍/剪辑流程均为本地运算。供应商受理状态不明的语义请求不会自动重发。素材文本和字幕仅为待分析数据,模型只允许返回实际候选ID,不能生成任意时间区间、文件路径或命令。

预览使用同一 EDL 的时间、裁剪、速度、音量和叠化参数;浏览器流式预览受网络和解码影响。最终导出由 FFmpeg 确定性合成。音乐文件不足时末尾补静音,不默认循环;背景音量由用户调整。字幕样式与浏览器字体可能有差异。广告多版本目前对候选排序作轮换,素材不足时明确提示,不宣称独立生成多个创意脚本。

远程合成:设置 SMART_EDIT_RENDER_URL 与 SMART_EDIT_RENDER_TOKEN 后,render操作进入独立API,不占用本地主处理锁。独立服务部署见 ../video-render/README.md,其千问仅提供可选文字能力。分析操作仍使用本机Python/代理文件。