6.8 KiB
智能剪辑处理环境
从项目根目录运行 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/pythonSMART_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、至多12份,总原始素材≤10分钟,成片≤300秒、≤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/代理文件。
远程合成链路暂时不可用时,可设置 SMART_EDIT_RENDER_FORCE_LOCAL=1 让新任务使用本机 FFmpeg;已有远程任务仍保留原服务地址与任务编号,等待原链路恢复后查询,避免重复合成。
人声分离、转写和完整字体库(2026-09-18)
bash services/smart-edit/setup.sh --with-all 在独立环境安装全部依赖。也可使用 --with-separation 或 --with-asr。
- 人声分离:
prepare_separation.py下载并校验官方 HTDemucs 权重。将输出的SMART_EDIT_SEPARATION_MODEL_DIR加入应用环境。请求阶段离线运行,CPU 2线程、7秒分块、每次最多180秒;支持仅保留人声、仅保留背景音、输出两个音轨,保持裁剪、变速、音量、静音及转场包络。视频原声自动关闭,独立音轨可继续分离;失败保留原内容。 - 自动转写:字幕列表直接提供入口。FunASR 同时开启
pred_timestamp与sentence_timestamp;时间戳限制在素材范围内,再映射至剪辑时间轴。保留手动字幕,重试只替换此前自动生成的字幕。任务存数据库,可退出后再打开;处理完成前锁住当前编辑,避免覆盖并行改动。 - 字体库:对应参考站2002项的目录见
lib/video-canvas/smart-edit/font-catalog.json(1997项)及fonts.ts(原有5项)。已逐一下载、解析和校验,完整新增字体约757MiB。原始与处理后SHA-256均固定;保留字体内版权/许可字段。浏览器和FFmpeg使用同一处理后文件,独立字体族名避免粗细变体串字,变量字体固定为选定默认实例。两款参考字体的OS/2版本声明与实际长度不一致,按已有字段修复为v4,不改变字形轮廓。 - 安装字体:默认按选择懒加载,需Python的
requirements-fonts.txt。部署前推荐执行$SMART_EDIT_PYTHON services/smart-edit/prepare_fonts.py预热全部目录,或者复制已校验的字体缓存。SMART_EDIT_FONT_CACHE_DIR指定共享缓存目录;SMART_EDIT_FONT_PYTHON可单独指定字体Python。原有5款字体仍随应用/合成服务打包。首次下载失败会明确报错,不静默替换成默认字体。 - 远程合成字体:独立合成服务同样安装字体依赖,设置同一缓存或预热目录;构建时已带上字体转换脚本及固定目录。
SMART_EDIT_FONT_SCRIPT可覆盖脚本位置。ASR/分离仍在主应用配置的处理器运行,合成远程执行。
当前限制:视频素材最多12份,每份180秒;成片最长300秒,最多12视频片段、24独立音频片段。含派生分离轨最多36份资源、累计1800秒。实际模型耗时随硬件和素材变化,合成字体的抗锯齿仍受浏览器与libass渲染器影响。
真实模型回归:提供含“智能剪辑”和“人声分离”的中文WAV,运行 $SMART_EDIT_PYTHON scripts/qa/smart-edit-models.py input.wav .qa/model-check。验证实际语音识别、逐句时间戳、真实混音分离及两轨重构误差,无付费模型调用。
本地主站全链路:在隔离数据库与存储环境启动真实Next,准备测试账号JSON和中文视频后,执行 SMART_EDIT_QA_DIR=.qa/isolated-main-chain node scripts/qa/smart-edit-main-chain.cjs。脚本只允许本地地址,验证登录、上传、方案、分离三个分支、转写、实际字幕字体成片和SRT。完整记录见 docs/smart-edit-completion-2026-09-18.md。