基于 TransNetV2 深度学习模型的专业视频场景自动分割API服务。SceneCut Pro 能够智能识别视频中的场景变化,提供高精度的场景边界检测,支持多种部署方式。
- 动态阈值算法:根据视频内容自动计算最佳分割阈值
- 双模式支持:场景模式(scene)和转场模式(transition)
- 高精度识别:基于 TransNetV2 深度学习模型,准确率高达 95%+
- 最小场景过滤:智能合并过短场景,避免过度分割
- REST API:完整的异步API服务,支持后台任务处理
- 命令行工具:本地批量处理,支持脚本集成
- Docker部署:一键部署,支持容器化运行
- 视频分割:自动将视频分割成独立的场景片段
- 可视化图表:生成场景边界分布图
- 场景信息:详细的场景时间戳、帧范围等元数据
- 批量处理:支持多视频并行处理
- Python 3.7+
- FFmpeg(用于视频处理)
- CUDA(可选,用于GPU加速)
# 克隆仓库
git clone https://github.com/yourusername/scenecut-pro.git
cd scenecut-pro
# 安装依赖
pip install -r requirements.txt
# 安装程序
python setup.py install# 自动下载(如果没有)
wget -O app/models/transnetv2_pytorch_weights.pth \
https://github.com/soCzech/TransNetV2/releases/download/v1.0/transnetv2_pytorch_weights.pth# 方式1:直接启动
python -m app.api.server
# 方式2:使用uvicorn(支持热重载)
uvicorn app.api.server:app --reload --host 0.0.0.0 --port 8000
# 方式3:安装后使用命令
scenecut-api上传视频文件分割:
# 使用动态阈值(推荐)
curl -X POST -F "video=@video.mp4" \
http://localhost:8000/api/v1/segment
# 使用固定阈值
curl -X POST -F "video=@video.mp4" \
-F "threshold=0.5" \
http://localhost:8000/api/v1/segment处理网络视频URL:
curl -X POST \
-F "video_url=https://example.com/video.mp4" \
-F "split_mode=scene" \
http://localhost:8000/api/v1/segment-url查询任务状态:
curl http://localhost:8000/api/v1/tasks/{task_id}# 基本使用
scenecut video.mp4
# 指定输出目录
scenecut video.mp4 --output-dir ./results
# 使用固定阈值
scenecut video.mp4 --threshold 0.5 --split-mode scene
# 批量处理目录
scenecut ./videos_folder --output-dir ./results
# 生成可视化和缩略图
scenecut video.mp4 --visualize --create-thumbnails
# 使用GPU加速
scenecut video.mp4 --device gpu# 构建镜像
docker build -t scenecut-pro:latest .
# 运行容器
docker run -d \
-p 8000:8000 \
-v $(pwd)/videos:/app/videos \
-v $(pwd)/output:/app/output \
scenecut-pro:latest
# 或使用docker-compose
docker-compose up -d| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
threshold |
float | None | 场景检测阈值(0.1-0.9),不填则使用动态阈值 |
split_mode |
string | "scene" | 分割模式:scene/transition |
min_scene_length |
int | 15 | 最小场景长度(帧数) |
visualize |
bool | true | 是否生成可视化图表 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
batch_size |
int | 512 | 批处理大小 |
device |
string | "auto" | 计算设备:auto/cpu/gpu |
threads |
int | 4 | 处理线程数 |
| 端点 | 方法 | 描述 |
|---|---|---|
/api/v1/segment |
POST | 上传视频文件进行分割 |
/api/v1/segment-url |
POST | 处理网络视频URL |
/api/v1/tasks/{task_id} |
GET | 获取任务状态 |
/api/v1/tasks |
GET | 列出所有任务 |
/api/v1/download/{task_id}/{file} |
GET | 下载处理结果 |
| 端点 | 方法 | 描述 |
|---|---|---|
/health |
GET | 健康检查 |
/api/v1/info |
GET | API信息 |
/docs |
GET | Swagger文档 |
/api/v1/merge-videos |
POST | 合并多个视频 |
scenecut-pro/
├── app/
│ ├── api/ # API服务器
│ ├── core/ # 核心处理模块
│ │ ├── scene_detector.py # 场景检测算法
│ │ ├── scene_predictor.py # 模型预测
│ │ ├── frame_extractor.py # 帧提取
│ │ └── video_splitter.py # 视频分割
│ ├── models/ # 深度学习模型
│ │ └── transnetv2.py # TransNetV2实现
│ ├── utils/ # 工具模块
│ └── plugins/ # 插件系统
├── bin/
│ └── segmentation_cli.py # 命令行工具
├── tests/ # 测试文件
├── docker/ # Docker配置
└── docs/ # 文档
# 运行API完整性测试
python test_api_completeness.py
# 测试阈值功能
python test_threshold_api.py
# 运行使用示例
python api_usage_example.py video.mp4- 视频编辑:自动识别场景切换点,辅助视频剪辑
- 内容分析:分析视频结构,提取关键场景
- 广告检测:识别电视节目中的广告片段
- 视频索引:为长视频创建场景级索引
- 素材管理:自动分类和整理视频素材库
- 直播剪辑:快速提取直播精彩片段
- 准确率:场景检测准确率 95%+
- 处理速度:
- CPU:约 5-10 FPS
- GPU:约 30-50 FPS(NVIDIA GPU)
- 内存占用:< 2GB(标准配置)
- 支持格式:MP4, AVI, MOV, MKV, FLV, WMV, WebM
- 模型架构:TransNetV2 with DDCNN(Dilated Dense CNN)
- 输入尺寸:48x27 RGB frames
- 特征提取:帧相似度 + 颜色直方图
- 阈值策略:
- 动态阈值:基于视频内容复杂度自适应计算
- 固定阈值:用户指定(0.1-0.9)
- 视频验证:检查格式和编码兼容性
- 帧提取:提取并调整为模型输入尺寸
- 场景预测:使用TransNetV2模型预测转场概率
- 边界检测:应用阈值和后处理算法
- 场景合并:智能合并过短场景
- 视频分割:使用FFmpeg分割视频
欢迎贡献代码、报告问题或提出建议!
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
- TransNetV2 - 原始模型实现
- PyTorch - 深度学习框架
- FastAPI - Web框架
- FFmpeg - 视频处理
- 项目主页:https://github.com/lu0b0/SceneCut-Pro
- 问题反馈:Issues
- 电子邮件:your.email@example.com
Made with ❤️ by SceneCut Pro Team