视频分割
官方脚本
可调用节点
v2.1.0
视频分割工具 | 基于 FFmpeg + PySceneDetect,支持按时长/按数量/按时间点切割、AI 智能场景检测分割,可选精确转码或无损流复制 | 一键批量把视频分割成多个片段,支持定时任务与脚本联动
脚本能力
直接启动支持
右键启动支持
快捷键启动支持
超级复制启动不支持
定时任务支持
可被其他脚本调用是
依赖其他脚本否
图形化启动界面支持
基于 FFmpeg 与 PySceneDetect 的视频分割工具,支持按时长 / 按数量 / 按时间点切割,以及 AI 场景检测智能分割,一键批量把视频切成多个片段。
核心特性
- 按时长分割:每段固定时长(如每 10 分钟一段)
- 按数量分割:将视频等分成 N 段
- 按时间点分割:手动指定切割点(如
00:10:00, 00:20:00) - 智能场景分割:自动检测场景,按镜头把视频切成片段(推荐)
- 无损快速:基础分割支持 FFmpeg 流复制(
-c copy),速度快、无画质损失 - 批量处理:支持同时选中多个视频批量分割
- 自动参数表单:盒子根据参数自动生成界面,随分割模式联动显隐,无需手写窗口
- 定时任务:可被盒子定时调度,无人值守自动分割
- 自定义输出目录:可指定输出位置,留空则自动在视频旁创建「<视频名>_分割」文件夹
脚本演示

安装方法
本脚本的运行环境、依赖组件及参数窗口均依赖「不忙脚本盒子」,建议仅通过盒子安装和使用。
前置条件:安装好 不忙脚本盒子
- 打开盒子 → 脚本市场 → 搜索 「视频分割」
- 点击「安装」
使用方式
-
卡片启动
- 打开盒子,点击「视频分割」脚本卡片
- 在弹出表单的数据输入区选择要分割的视频
- 选择分割模式、填写参数后点击「执行」
-
右键启动
- 在文件管理器中选中视频文件
- 右键 → 选择「视频分割」
- 盒子弹出参数表单并自动预填选中的文件,确认后点击「执行」
-
快捷键启动
- 为脚本设置全局快捷键,选中视频后按下即可执行
-
定时任务
- 在盒子中为脚本创建定时任务,在表单里选择视频并配置分割参数
- 到点自动无人值守分割
💡 使用提示
- 分割模式
- 按时长:每段秒数,如
600= 每 10 分钟一段 - 按数量:等分份数,至少 2 段
- 按时间点:逗号分隔的切割点,如
600,1200或00:10,00:20 - 智能分割:自动检测场景,适合按镜头拆分的视频(推荐)
- 按时长:每段秒数,如
- 切割精度(基础分割)
- 精确转码:重新编码视频,段长精确到秒(默认)
- 快速流复制:无损、速度快,但只能在关键帧处切割,段长有偏差
- 智能分割算法
- 内容检测器:普通拍摄 / 剪辑视频
- 自适应检测器:运动剧烈或动画类视频
- 阈值检测器:有淡入淡出、黑屏转场的视频
- 灵敏度留空时按算法默认值(内容 27 / 自适应 3 / 阈值 16),数值越大分割越少
- 输出目录:留空则自动在原视频旁创建「<视频名>_分割」文件夹
节点脚本(开发者阅读)
本脚本已声明为节点,可被其他脚本通过盒子本地 API 联动调用。
调用示例
import json, sys, requests
payload = json.load(open(sys.argv[1], encoding="utf-8"))
env = payload["environment"]
r = requests.post(f"{env['api_base']}/api/link", json={
"script_id": "d6115731-e9ce-4a3a-9b61-945406dd0cde",
"data": {"target_paths": ["C:/video.mp4"]},
"params": {"mode": "smart", "detector": "content"},
}, timeout=3600)
body = r.json()
result = body["result"] # 信封
segment_files = result["segment_files"]
返回业务键
| 键 | 类型 | 说明 |
|---|---|---|
output_dirs |
list | 各视频片段输出目录列表 |
segment_files |
list | 全部片段文件路径列表 |
🖥️ 环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10+(64 位) |
| 运行环境 | Python 3.8+、FFmpeg(含 ffprobe;盒子安装时自动配置) |
本脚本已声明为节点,可被其他脚本通过「不忙脚本盒子」机制调用。完整配置见下方 TOML,其他脚本若需调用请严格按此配置构造请求。
bm-scripts-box-rc.toml
[bmscriptsbox]
[bmscriptsbox.info]
id = "d6115731-e9ce-4a3a-9b61-945406dd0cde"
name = "视频分割"
desc = "视频分割工具 | 基于 FFmpeg + PySceneDetect,支持按时长/按数量/按时间点切割、AI 智能场景检测分割,可选精确转码或无损流复制 | 一键批量把视频分割成多个片段,支持定时任务与脚本联动"
version = "2.1.0"
icon = "./imgs/img.png"
[bmscriptsbox.runtime]
language = "python"
language_version = ">=3.8"
entry = "main.py"
terminal = "always"
binaries = [{ name = "ffmpeg" }]
[bmscriptsbox.triggers.context_menu]
enabled = true
targets = ["files"]
filters = [".mp4", ".mkv", ".mov", ".avi", ".wmv", ".flv", ".webm", ".m4v", ".ts", ".mts", ".m2ts", ".mpg", ".mpeg", ".vob", ".3gp", ".3g2", ".rm", ".rmvb", ".f4v", ".ogv", ".ogg", ".asf", ".divx", ".mxf", ".tp", ".trp", ".h264", ".hevc", ".264", ".265"]
[bmscriptsbox.triggers.shortcut]
enabled = true
input_type = "files"
filters = [".mp4", ".mkv", ".mov", ".avi", ".wmv", ".flv", ".webm", ".m4v", ".ts", ".mts", ".m2ts", ".mpg", ".mpeg", ".vob", ".3gp", ".3g2", ".rm", ".rmvb", ".f4v", ".ogv", ".ogg", ".asf", ".divx", ".mxf", ".tp", ".trp", ".h264", ".hevc", ".264", ".265"]
[[bmscriptsbox.inputs]]
name = "target_paths"
label = "源视频"
type = "list"
pick = "files"
exts = [".mp4", ".mkv", ".mov", ".avi", ".wmv", ".flv", ".webm", ".m4v", ".ts", ".mts", ".m2ts", ".mpg", ".mpeg", ".vob", ".3gp", ".3g2", ".rm", ".rmvb", ".f4v", ".ogv", ".ogg", ".asf", ".divx", ".mxf", ".tp", ".trp", ".h264", ".hevc", ".264", ".265"]
[[bmscriptsbox.params]]
name = "mode"
label = "分割模式"
type = "str"
default = "smart"
choices = ["duration", "count", "timepoints", "smart"]
choice_labels = { duration = "按时长", count = "按数量", timepoints = "按时间点", smart = "智能分割" }
[[bmscriptsbox.params]]
name = "duration"
label = "每段时长(秒)"
type = "float"
default = 600
description = "按时长模式:每段固定秒数,如 600 = 每 10 分钟一段"
when = { field = "mode", eq = "duration" }
[[bmscriptsbox.params]]
name = "segment_count"
label = "分割段数"
type = "int"
default = 4
description = "按数量模式:将视频等分成 N 段"
when = { field = "mode", eq = "count" }
[[bmscriptsbox.params]]
name = "timepoints"
label = "切割时间点"
type = "str"
default = ""
description = "按时间点模式:逗号分隔,如 600,1200 或 00:10,00:20"
when = { field = "mode", eq = "timepoints" }
[[bmscriptsbox.params]]
name = "split_codec"
label = "切割精度"
type = "str"
default = "reencode"
choices = ["reencode", "copy"]
choice_labels = { reencode = "精确转码)", copy = "快速流复制" }
description = "基础分割(按时长/数量/时间点)的切割精度"
when = { field = "mode", in = ["duration", "count", "timepoints"] }
[[bmscriptsbox.params]]
name = "detector"
label = "检测算法"
type = "str"
default = "content"
choices = ["content", "adaptive", "threshold"]
choice_labels = { content = "内容检测器", adaptive = "自适应检测器", threshold = "阈值检测器" }
description = "智能分割:内容检测器适合普通拍摄/剪辑;自适应适合运动剧烈/动画;阈值适合淡入淡出/黑屏转场"
when = { field = "mode", eq = "smart" }
[[bmscriptsbox.params]]
name = "threshold"
label = "灵敏度"
type = "str"
default = ""
description = "留空时自适应、数值越大分割越少"
when = { field = "mode", eq = "smart" }
[[bmscriptsbox.params]]
name = "min_scene_len"
label = "最小场景时长"
type = "float"
default = 2
description = "智能分割:小于该时长的场景会被合并"
when = { field = "mode", eq = "smart" }
[[bmscriptsbox.params]]
name = "max_scene_len"
label = "最大场景时长"
type = "float"
default = 0
description = "智能分割:超过该时长的场景会被强制切开"
when = { field = "mode", eq = "smart" }
[[bmscriptsbox.params]]
name = "output_dir"
label = "输出目录"
type = "str"
default = ""
description = "留空则存至原目录"
[bmscriptsbox.params_form]
enabled = true
[bmscriptsbox.schedule]
enabled = true
[bmscriptsbox.node]
enabled = true
[[bmscriptsbox.outputs]]
name = "output_dirs"
type = "list"
description = "各视频片段输出目录列表"
[[bmscriptsbox.outputs]]
name = "segment_files"
type = "list"
description = "全部片段文件路径列表"
免责声明
所有脚本由用户通过开源仓库自行发布。本站仅提供索引服务,"不忙脚本盒子"仅提供展示与安装服务。请在使用前仔细核实脚本内容,作者不对其安全性、准确性及适用性作任何保证。