çæ¬Ÿéé¢ â AIèæ¬ â Ken Burnsåšç» â TTSé é³ â åå¹ç§åœ â å€å¹³å°ååžå
äžäžªäººå¹²è¿äžäžªMCNæºæïŒäœ ä¿¡åïŒ
- ð© æ¯å€©æ³é颿³å°å€Žç§ïŒåèæ¬æ¹å «éè¿è§åŸäžå€å¥œ
- ð© è±å çŸåä¹°APIé¢åºŠïŒç»ææµéè¿æ¯é¶
- ð© åªèŸèœ¯ä»¶åŠäºäžåšïŒå¯Œåºè§é¢è¿æ¯ç³ç
- ð© æäºåå ç§AIå·¥å ·"èªåšå"ïŒè¿æ¯èŠæåšäžäžªäžªäŒ çŽ æ
- ð© ç»äºåªå®äºè§é¢ïŒåç°BGMçæé®é¢å¯ŒèŽäžæ¶
è¿äžªé¡¹ç®ïŒå°±æ¯æ¥è§£å³è¿äºé®é¢çã
èŸå
¥äžäžªå
³é®è¯ â 30ç§å â æé³/å°çº¢ä¹Š/Bç« ååžå
å·²çæ
ä»ç欟é颿æãAIå£æèæ¬ãKen Burnsçµåœ±çº§è¿éãTTSé é³ãWhisperåå¹åæ¥ïŒå°å€å¹³å°æ é¢ç®æ³éé ïŒå šéŸè·¯äžé®å®æã
- èæ¬çæïŒæ¬å°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+åå¹ â
âââââââââââââââââ âââââââââââââââââ âââââââââââââââââââââ
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 人䞺æŽåœ¢ã
æ¯äžª 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ïŒ
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ïŒèæ¬çæïŒå¯éïŒ
# 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.pyOffline-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, # èçœæé
åŸ
)- âš æ°å¢ 2DæµçšåŸåšç»åŒæ - ç©åœ¢+ç®å€Ž+éåž§ç»å¶
- âš æ°å¢ ææ¯è®²åº§é£æ Œ - é¡¶éšæ é¢+巊䟧ç¥è¯ç¹+代ç é«äº®
- âš æ°å¢ BingåŸçç¬è« - Pexels/Unsplash APIå šéšé级åçæç»å åº
- âš åŸçæåé级éŸïŒPexels â Unsplash â BingåŸçïŒæ éKeyïŒ
- ð ä¿®å€ Python 3.10 å Œå®¹æ§é®é¢
- éŠåçæ¬ïŒ6å€§æ žå¿æš¡å宿Žå®ç°
- æ¯ææé³/å°çº¢ä¹Š/Bç«
- 100%犻线ãé¶APIãé¶ä»è޹
Q: è¿è¡æ¥é "FFmpeg not found"
# Windows
winget install ffmpeg
# éªè¯å®è£
ffmpeg -versionQ: 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åéäœéªäžäžã



