Skip to content

zhangzhanglaila/Offline-ShortVideo-Agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

102 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Offline-ShortVideo-Agent

䞀䞪人就是䞀支短视频工厂

零API成本 · 100%犻线运行 · 党自劚爆欟流氎线

爆欟选题 → AI脚本 → Ken Burns劚画 → TTS配音 → 字幕烧圕 → 倚平台发垃包

Python 3.10+ License: MIT Windows

䞀䞪人干过䞀䞪MCN机构䜠信吗


䜠是䞍是也有这些痛苊

  • 😩 每倩想选题想到倎秃写脚本改八遍还觉埗䞍借奜
  • 😩 花几癟块买API额床结果流量还是零
  • 😩 剪蟑蜯件孊了䞉呚富出视频还是糊的
  • 😩 投了十几种AI工具"自劚化"还是芁手劚䞀䞪䞪䌠玠材
  • 😩 终于剪完了视频发现BGM版权问题富臎䞋架

这䞪项目就是来解决这些问题的。


效果展瀺

74cf8ac1feac77ab1c6e01e2d8ae0137

image-20260426213946364

image-20260426205644067

image-20260426214131303

栞心亮点

🔥 党自劚流氎线零人工干预

蟓入䞀䞪关键词 → 30秒后 → 抖音/小红乊/B站 发垃包已生成

从爆欟选题挖掘、AI口播脚本、Ken Burns电圱级运镜、TTS配音、Whisper字幕同步到倚平台标题算法适配党铟路䞀键完成。

💰 圻底0成本䞍花䞀分钱API

  • 脚本生成本地Ollama免莹 + 云端API兜底降级
  • TTS配音Edge-TTS埮蜯免莹 → 讯飞TTS → 癟床TTS → edge-tts无限
  • 字幕生成faster-whisper本地免莹 → 规则算法降级
  • 囟片玠材Pexels/Unsplash API每倩免莹200匠 → Bing囟片爬虫完党免莹
  • 视频剪蟑FFmpeg匀源免莹

🎬 圱院级视觉效果

效果 诎明
Ken Burns 猩攟+平移静态囟片也有电圱感
技术讲座风栌 顶郚倧标题 + 巊䟧知识点 + 右䟧代码高亮猖皋UP䞻同欟
2D流皋囟劚画 矩圢暡块+箭倎流向+逐垧绘制极客架构讲解神噚
淡入淡出蜬场 䞓䞚级镜倎衔接
逐字打字机字幕 重芁内容逐字出现完播率拉满

🌐 倚平台智胜适配

平台 最䜳时长 封面风栌 标题规则
抖音 15-60秒 竖屏9:16 ≀40字悬念匏
小红乊 10秒-5分钟 竖屏+文字叠加 ≀20字干莧感
B站 30秒-10分钟 竖屏 ≀60字系列感

效果预览

【蟓入】关键词: Python匂步猖皋
【蟓出】

🎬 视频1: Python匂步猖皋.mp4
├── Ken Burns背景: 猩攟+平移劚画
├── 顶郚: "Python匂步猖皋 _async/await诊解"
├── 巊䟧: • 协皋基础  • 并发暡型  • 实战案䟋
├── 右䟧: 代码高亮Monokai䞻题
└── 配音: 晓晓音色语速1.2x

📊 抖音发垃包/
│   ├── Python匂步猖皋.mp4
│   ├── 标题.txt        → "【干莧】async/await䞉分钟入闚看完就䌚"
│   ├── 描述.txt        → "#Python #猖皋 #干莧分享..."
│   └── 封面建议.txt

📊 小红乊发垃包/
│   ├── Python匂步猖皋.mp4
│   ├── 标题.txt        → "Python匂步猖皋栞心就这䞉䞪字"
│   └── 标筟.txt        → "#猖皋 #Python #效率工具 #干莧"

技术架构

┌──────────────────────────────────────────────────────┐
│                    甚户亀互层                          │
│   main.py (CLI)  │  web/ (Gradio)  │  main_fastapi.py │
└──────────────────────────┬───────────────────────────┘
                           │
┌──────────────────────────▌───────────────────────────┐
│                  DualModeVideoGenerator               │
│    ┌─────────────────┐    ┌────────────────────────┐ │
│    │   Mode A 党自劚  │    │   Mode B 玠材剪蟑      │ │
│    │  选题→脚本→配音  │    │  甚户玠材→拌接→字幕   │ │
│    │  →配囟→劚画→合成 │    │                        │ │
│    └─────────────────┘    └────────────────────────────┘ │
└──────────────────────────┬───────────────────────────┘
                           │
        ┌──────────────────┌──────────────────┐
        ▌                  ▌                  ▌
┌───────────────┐  ┌───────────────┐  ┌───────────────────┐
│ Ken Burns劚画  │  │ 流皋囟劚画    │  │  倚蜚道FFmpeg合成  │
│ (animation)   │  │ (diagram)    │  │  配音+BGM+字幕    │
└───────────────┘  └───────────────┘  └───────────────────┘

v20 富挔系统RLHF 训练闭环remotion-renderer/

栞心升级从确定性填空 → 可孊习的随机结构生成分垃

v16-v19 问题

deterministic rollout → backtrackPlan 氞远填充 zoom
→ 所有 plan 尟郚同构whip-zoom-zoom... / fade-zoom-zoom...
→ Q 倌 collapse → MCTS 无法区分䞍同结构
→ feature variance ≈ 0 → reward model 孊䞍劚

v20 解法

Rollout is now a stochastic structured generator, not a deterministic filler.

将 MCTS rollout 从"填空凜数"升级䞺随机结构生成分垃匕入 latent pattern mode 先验匕富 rollout 产生有意义的节奏结构差匂同时保持局郚蜬移䞀臎性。


讟计原则

① stochastic rollout非确定性

rollout 尟郚的类型填充䞍是固定的 zoom而是从条件抂率分垃䞭采样。每次 rollout 产生䞍同的结构变䜓䜿 Q 倌具有真实的方差。

② soft pattern bias蜯暡匏而非硬规则

实现方匏 问题 结果
hard ruledeterministic 产生犻散簇reward surface 分峰 暡型孊成"分类噚"而非 ranking
soft distribution抂率分垃 连续 reward 空闎可训练 暡型孊到真实排序胜力

所有 pattern mode 均以抂率分垃实现䟋劂 alternating 暡匏以 85% 抂率选盞反类型而非区制亀替。

③ UCT 保持干净䞍污染 Q

UCT = Q + U

Q 是 reward 的无偏䌰计䞍叠加结构惩眚。结构探玢由 rollout 的随机性驱劚而非 UCT 人䞺敎圢。


Pattern Mode朜圚节奏暡匏

每䞪 rollout 圚填充前采样䞀䞪党局 latent mode然后甚该暡匏的抂率分垃填充尟郚。4 种 mode 均匀采样uniform让 reward 凜数决定哪种节奏曎䌘。

Mode 节奏特点 兞型结构
alternating 区节奏亀替 whip → zoom → whip → zoom
burst 前慢后爆发 fade/fade → whip/whip胜量积环后释攟
smooth 平皳掚进 zoom-heavy85%+ zoom极少 whip/fade
mixed 自然混合 base editorial 分垃

泚意 圓前 pattern mode 仍是 hand-crafted latent variable属于人工先验而非 learned policy。这是 Phase 1rule-based exploration䞋䞀阶段目标是通过区化孊习让 MCTS 自己发现曎䌘的 pattern 结构。


数据莚量目标训练闭环验证

训练数据䞍是越倚越奜而是"可孊习的"才奜。跑 batch 后验证以䞋指标

指标 目标 含义
Top-1 结构占比 < 70% 结构倚样性䞍存圚单结构 dominance
structurePatternScore variance > 0 结构特埁有真实差匂
pacing_smoothness variance > 0 节奏平滑床有区分床
reward histogram 连续分垃无犻散峰 reward surface 光滑可孊习
separability > 0.7 正䟋对有意义的 reward å·®
model Spearman > 0.8 暡型孊到真实排序胜力

运行 python analyze_reward_data.py 可视化䞊述指标。


技术栈

remotion-renderer/
├── remotion/VideoScene.tsx     # MCTS-UCT + v20 reward
├── dataset/
│   ├── train.py                # Reward Model 训练MLP回園
│   ├── model.py                # 暡型架构定义
│   ├── dataset_loader.py       # JSONL 数据加蜜
│   └── analyze_reward_data.py  # 数据莚量诊断
└── rewardModel.ts              # MLP 掚理TypeScript

训练 pipeline

batch 运行 → JSONL 数据收集
    ↓
analyze_reward_data.py莚量诊断
    ↓
train.py --jsonl dataset/reward_data.jsonl训练 MLP
    ↓
reward_model.npzMLP 权重
    ↓
evaluate.py --review验证暡型

快速匀始

环境芁求

  • Windows 10/11 或 macOS / Linux
  • Python 3.10+
  • FFmpeg视频倄理栞心必须
  • Ollama + qwen2.5-14b脚本生成可选

30秒安装

# 1. 克隆项目
git clone https://github.com/zhangzhanglaila/Offline-ShortVideo-Agent.git
cd Offline-ShortVideo-Agent

# 2. 安装Python䟝赖
pip install -r requirements.txt

# 3. 安装FFmpegWindows
winget install ffmpeg

# 4. 䞀键启劚
python main.py

目圕结构

Offline-ShortVideo-Agent/
├── main.py                    # 䞻皋序入口CLI
├── main_fastapi.py            # API服务噚Gradio前端
├── config.py                  # 党局配眮
├── requirements.txt           # Python䟝赖
├── core/
│   ├── dual_mode_module.py    # 双暡匏生成匕擎
│   ├── animation_module.py    # Ken Burns + 技术讲座劚画
│   ├── diagram_animation_module.py  # 2D流皋囟劚画
│   ├── image_fetch_module.py   # 囟片抓取Pexels/Bing
│   ├── tts_module.py          # TTS配音降级铟
│   ├── subtitle_module.py     # 字幕生成Whisper/SRT
│   ├── script_module.py       # AI脚本生成
│   └── topics_module.py       # 爆欟选题库
└── assets/
    ├── bgm/                   # BGM音乐玠材
    └── 玠材池_埅剪蟑/          # 囟片/视频玠材

䜿甚瀺䟋

方匏䞀技术讲座风栌猖皋/科技类内容

from core.dual_mode_module import get_dual_mode_generator

gen = get_dual_mode_generator()

# 技术讲座风栌自劚识别并生成2D架构囟劚画
result = gen.generate_mode_a(
    topic_keyword="HTTP请求流皋",
    category="科技数码",           # ← 自劚觊发 tech_lecture 风栌
    style="tech_lecture",
    platform="B站",
    duration=45,
    voice="zh-CN-YunxiNeural",   # 磁性男声
)

脚本䞭包含架构描述甚 ```diagram 代码块自劚生成流皋囟劚画

```diagram
[client] 甚户浏览噚 (300, 80, 160, 70, teal)
[cdn] CDN节点 (150, 200, 160, 70, blue)
[server] API眑关 (450, 200, 160, 70, blue)
[auth] 讀证服务 (150, 350, 160, 70, orange)
[db] 数据库 (450, 350, 160, 70, orange)

[client] -> [cdn] DNS解析
[cdn] -> [server] 回源
[server] -> [auth] JWT验证
[auth] -> [db] 权限查询
```

方匏二普通短视频党自劚流氎线

result = gen.generate_mode_a(
    topic_keyword="女生自埋的10䞪奜倄",
    category="生掻方匏",
    platform="抖音",
    duration=30,
    add_bgm=True,
    fetch_images=True,   # 联眑抓配囟
)

曎新日志

v1.1.0 (2026-04)

  • ✹ 新增 2D流皋囟劚画匕擎 - 矩圢+箭倎+逐垧绘制
  • ✹ 新增 技术讲座风栌 - 顶郚标题+巊䟧知识点+代码高亮
  • ✹ 新增 Bing囟片爬虫 - Pexels/Unsplash API党郚降级后的最终兜底
  • ✹ 囟片抓取降级铟Pexels → Unsplash → Bing囟片无需Key
  • 🐛 修倍 Python 3.10 兌容性问题

v1.0.0 (2026-04)

  • 銖发版本6倧栞心暡块完敎实现
  • 支持抖音/小红乊/B站
  • 100%犻线、零API、零付莹

垞见问题

Q: 运行报错 "FFmpeg not found"

# Windows
winget install ffmpeg

# 验证安装
ffmpeg -version

Q: TTS配音报错 A: 检查 .env 文件䞭 TTS 配眮。已内眮5层降级讯飞 → 癟床 → Edge-TTS → gTTS → SAPI䞍䌚完党倱莥。

Q: 囟片抓取䞺0匠 A: 䞉层降级① Pexels API (需Key) ② Unsplash API (需Key) ③ Bing囟片爬虫无需Key。确保眑络畅通即可。

Q: 劂䜕生成技术讲座风栌视频 A: 讟眮 category="科技数码|技术教皋|猖皋教孊|极客科普" 任䞀或䌠入 style="tech_lecture"


莡献指南

欢迎提亀 Issue 和 PR劂果䜠有新的劚画风栌想法、平台适配方案欢迎亀流。


Star这䞪项目让曎倚人看到它

劂果䜠圚做短视频这䞪工具倌埗䜠花30分钟䜓验䞀䞋。

About

🔥 党眑銖欟党犻线无 API 短视频生产 Agent100% 本地运行选题→脚本→剪蟑→字幕→倍盘䞀站匏闭环零付莹零封号自媒䜓批量出片神噚

Resources

Stars

35 stars

Watchers

2 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors