Skip to content

manymore13/segment

Repository files navigation

YouTube 视频切片工具

CLI 工具:输入 YouTube 链接,自动下载、分析并裁切精彩片段,输出多个 MP4 文件。

功能

  • 自动下载 YouTube 视频(支持字幕)
  • 智能分析视频内容,提取精彩片段
  • 支持多种 LLM 平台(DeepSeek、Gemini、OpenAI 等)
  • 无损裁切视频(ffmpeg -c copy
  • 生成 Markdown 切片报告

安装

1. 安装系统依赖

# Ubuntu/Debian
sudo apt install ffmpeg

# macOS
brew install ffmpeg

2. 创建虚拟环境并安装依赖

python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

Docker 安装(可选)

构建镜像

# CPU 版本(默认)
docker build -t yt-segment .

# GPU 版本(需要 nvidia-docker)
docker build -t yt-segment --build-arg GPU=true .

Docker 使用

# 基本用法
docker run --rm -v $(pwd)/output:/app/output yt-segment <YouTube URL>

# 传入 API Key
docker run --rm -v $(pwd)/output:/app/output yt-segment <URL> -p deepseek -k sk-xxx

# GPU 加速(需要 nvidia-docker)
docker run --rm --gpus all -v $(pwd)/output:/app/output yt-segment <URL>

参数说明:

  • -v $(pwd)/output:/app/output - 挂载输出目录到宿主机
  • --gpus all - 使用 GPU 加速 Whisper 转录

使用

基本用法

venv/bin/python3 main.py <YouTube URL>

完整参数

venv/bin/python3 main.py <URL> [选项]

必需参数:
  url                   YouTube 视频链接

选项:
  -p, --provider        LLM 平台 (gemini/deepseek/siliconflow/openai/custom)
  -m, --model           模型名称
  -k, --api-key         API Key
  --min-segments        最小切片数量 (默认: 3)
  --max-segments        最大切片数量 (默认: 5)
  -o, --output          输出目录 (默认: ./output)
  --temp                临时文件目录 (默认: ./temp)
  --subtitle-langs      字幕语言优先级 (默认: zh-Hans,zh,zh-TW,en)
  --keep-temp           保留临时文件
  --dry-run             只分析不裁切

示例

# 使用默认配置
venv/bin/python3 main.py https://www.youtube.com/watch?v=xxxxxx

# 指定 LLM 平台和输出目录
venv/bin/python3 main.py https://youtu.be/xxxxxx -p gemini -o ./clips

# 通过命令行传入 API Key
venv/bin/python3 main.py https://www.youtube.com/watch?v=xxxxxx -k YOUR_API_KEY

# 自定义切片数量
venv/bin/python3 main.py https://www.youtube.com/watch?v=xxxxxx --min-segments 2 --max-segments 10

# 测试模式(不裁切视频)
venv/bin/python3 main.py https://www.youtube.com/watch?v=xxxxxx --dry-run

完整命令示例

venv/bin/python3 main.py \
  https://www.youtube.com/watch?v=dQw4w9WgXcQ \
  -p deepseek \
  -k sk-xxxxxxxxxxxxxxxx \
  -m deepseek-chat \
  --min-segments 3 \
  --max-segments 8 \
  -o ./my_clips \
  --subtitle-langs "en,zh-Hans,zh"

参数解释:

参数 说明
URL https://www.youtube.com/watch?v=dQw4w9WgXcQ 要处理的 YouTube 视频链接
-p deepseek deepseek 使用 DeepSeek 作为 LLM 分析平台
-k sk-xxx sk-xxxxxxxxxxxxxxxx 直接通过命令行传入 API Key(优先级最高)
-m deepseek-chat deepseek-chat 指定使用的模型(可选,默认根据平台自动选择)
--min-segments 3 3 最少提取 3 个精彩片段
--max-segments 8 8 最多提取 8 个精彩片段
-o ./my_clips ./my_clips 切片视频保存到 my_clips 目录
--subtitle-langs "en,zh-Hans,zh" en,zh-Hans,zh 字幕语言优先级:英文 > 简体中文 > 中文

执行流程:

  1. 下载视频到临时目录 ./temp
  2. 优先下载英文字幕,若无则尝试中文字幕
  3. 调用 DeepSeek API 分析字幕内容,提取 3-8 个精彩片段
  4. 使用 ffmpeg 无损裁切视频
  5. 输出文件到 ./my_clips/ 目录
  6. 生成 ./my_clips/segments.md 报告
  7. 清理临时文件

配置

环境变量

变量 默认值 说明
LLM_PROVIDER deepseek LLM 平台
MIN_SEGMENTS 3 最小切片数量
MAX_SEGMENTS 5 最大切片数量
OUTPUT_DIR ./output 输出目录
TEMP_DIR ./temp 临时文件目录
SUBTITLE_LANGS zh-Hans,zh,zh-TW,en 字幕语言优先级

API Key 配置

优先级:命令行 > 环境变量 > 手动输入

平台 环境变量
Gemini GOOGLE_API_KEY
DeepSeek DEEPSEEK_API_KEY
SiliconFlow SILICONFLOW_API_KEY
OpenAI OPENAI_API_KEY
Custom CUSTOM_LLM_API_KEY

模型切换

支持自由切换 LLM 平台和模型:

# 使用 DeepSeek 默认模型 (deepseek-chat)
venv/bin/python3 main.py <URL> -p deepseek

# 使用 DeepSeek 推理模型
venv/bin/python3 main.py <URL> -p deepseek -m deepseek-reasoner

# 使用 Gemini
venv/bin/python3 main.py <URL> -p gemini

# 使用 Gemini 指定模型
venv/bin/python3 main.py <URL> -p gemini -m gemini-2.0-flash

# 使用 SiliconFlow (Qwen)
venv/bin/python3 main.py <URL> -p siliconflow

# 使用 SiliconFlow 指定模型
venv/bin/python3 main.py <URL> -p siliconflow -m deepseek-ai/DeepSeek-V3

# 使用 OpenAI
venv/bin/python3 main.py <URL> -p openai -m gpt-4o

# 使用自定义 OpenAI 兼容平台
export CUSTOM_LLM_BASE_URL=https://your-api.com/v1
export CUSTOM_LLM_MODEL=your-model-name
venv/bin/python3 main.py <URL> -p custom

各平台默认模型:

平台 默认模型
Gemini gemini-2.5-flash-lite
DeepSeek deepseek-chat
SiliconFlow Qwen/Qwen2.5-72B-Instruct
OpenAI gpt-4o-mini
Custom 需通过环境变量配置

配置示例

# 方式一:环境变量
export LLM_PROVIDER=deepseek
export DEEPSEEK_API_KEY=sk-xxxxx
venv/bin/python3 main.py https://www.youtube.com/watch?v=xxxxxx

# 方式二:.env 文件 (需自行加载)
cat > .env << EOF
LLM_PROVIDER=deepseek
DEEPSEEK_API_KEY=sk-xxxxx
MIN_SEGMENTS=2
MAX_SEGMENTS=10
EOF

项目结构

├── main.py          # 入口,编排 4 步流水线
├── downloader.py    # yt-dlp 下载视频和字幕
├── transcriber.py   # 解析字幕或调用 API 转录音频
├── analyzer.py      # LLM 分析字幕,提取精彩片段
├── cutter.py        # ffmpeg 裁切视频
├── config.py        # 配置管理
├── requirements.txt # Python 依赖
└── output/          # 输出目录(自动创建)

输出

  • output/*.mp4 - 切片视频文件,命名格式:NN_标题.mp4
  • output/segments.md - Markdown 格式的切片详情报告

注意事项

  • 需要网络访问 YouTube
  • 长视频的 AI 转录可能需要较长时间
  • Gemini 转录长音频时可能返回截断的 JSON,已做容错处理

About

视频切片工具,做短视频的可能用到

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors