video-creator
8
总安装量
4
周安装量
#34847
全站排名
安装命令
npx skills add https://github.com/zrt-ai-lab/opencode-skills --skill video-creator
Agent 安装分布
claude-code
4
opencode
4
trae-cn
2
gemini-cli
2
antigravity
2
codebuddy
2
Skill 文档
Video Creator
å¾ç+é³é¢åæè§é¢å·¥å ·ã
æ ¸å¿æµç¨ï¼éå¾ï¼
æ äºç±»è§é¢çææµç¨ï¼å¥å¨æµç¨ï¼
å½ç¨æ·æä¾æ äº/å§æ /å§æ¬æ¶ï¼å¿ é¡»ä¸¥æ ¼æä»¥ä¸å¥å¨æµç¨æ§è¡ï¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 第ä¸å±ï¼æ
äº â æååºæ¯ â å¹¶åçæåºæ¯ä¸»å¾ï¼æçå¾ï¼ â
â â
â 大é¹å¤©å®« â åºæ¯1ï¼å¼¼é©¬æ¸©åè¾± â
â åºæ¯2ï¼çæäºåè±æå±± â
â åºæ¯3ï¼ç叿´¾å
µ â
â ... â
â â å¹¶åè°ç¨ text_to_image.py çææ¯ä¸ªåºæ¯ä¸»å¾ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 第äºå±ï¼æ¯ä¸ªåºæ¯ä¸»å¾ â å¾ç徿åºç»é头ï¼ä¿æè§è²ä¸è´ï¼ â
â â
â åºæ¯1ä¸»å¾ â ç»é头1ï¼æç©ºçå®å°çæ â
â ç»é头2ï¼æç©ºè¸¢ç¿»é©¬æ§½ â
â åºæ¯2ä¸»å¾ â ç»é头1ï¼è¸çæäºè
¾ç©º â
â ç»é头2ï¼è±æå±±èªå°å¤§å£ â
â â å¹¶åè°ç¨ image_to_image.pyï¼ä»¥ä¸»å¾ä¸ºåè â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 第ä¸å±ï¼çæé
é³ + åå¹ + åæè§é¢ â
â â
â 1. tts_generator.py çæé
é³ + æ¶é´æ³ â
â 2. ãéå¾ãæ ¹æ®æ¶é´æ³ç²¾ç¡®è®¡ç®æ¯å¼ å¾çdurationï¼è§ä¸æ¹è§èï¼ â
â 3. çæ SRT åå¹ â
â 4. çæ video_config.yaml åå¿
é¡»æ ¡éªæ»æ¶é¿ â
â 5. video_maker.py åæï¼ â
â â å¾çåæï¼å¸¦è½¬åºï¼ â
â â åå¹¶é³é¢ â
â â ç§å½åå¹ï¼ASSæ ¼å¼ï¼åºé¨å±
ä¸åºå®ï¼ â
â â èªå¨æ¼æ¥çå°¾ï¼äºç»´ç +"ç¹å
³æ³¨ä¸è¿·è·¯"ï¼ â
â â æ·»å BGM â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
**éå¾ï¼ææè§é¢å¿
é¡»èªå¨æ¼æ¥çå°¾ï¼**
ç®å½ç»æè§è
assets/generated/{project_name}/
âââ scene1/
â âââ main.png # åºæ¯1主å¾ï¼æçå¾ï¼
â âââ shot_01.png # ç»é头1ï¼å¾çå¾ï¼
â âââ shot_02.png # ç»é头2ï¼å¾çå¾ï¼
âââ scene2/
â âââ main.png
â âââ shot_01.png
â âââ shot_02.png
âââ ...
âââ narration.mp3 # é
é³
âââ narration.json # æ¶é´æ³
âââ subtitles.srt # åå¹
âââ video_config.yaml # è§é¢é
ç½®
âââ {project_name}.mp4 # æç»è§é¢
æ§è¡å½ä»¤ç¤ºä¾
# 第ä¸å±ï¼å¹¶åçæåºæ¯ä¸»å¾
python .opencode/skills/image-service/scripts/text_to_image.py "飿 ¼æè¿°ï¼åºæ¯1å
容" -r 9:16 -o scene1/main.png &
python .opencode/skills/image-service/scripts/text_to_image.py "飿 ¼æè¿°ï¼åºæ¯2å
容" -r 9:16 -o scene2/main.png &
wait
# 第äºå±ï¼å¹¶åå¾çå¾çæç»é头
python .opencode/skills/image-service/scripts/image_to_image.py scene1/main.png "ä¿æè§è²é£æ ¼ï¼ç»é头æè¿°" -r 9:16 -o scene1/shot_01.png &
python .opencode/skills/image-service/scripts/image_to_image.py scene1/main.png "ä¿æè§è²é£æ ¼ï¼ç»é头æè¿°" -r 9:16 -o scene1/shot_02.png &
wait
# 第ä¸å±ï¼çæé
é³+åæè§é¢
python .opencode/skills/video-creator/scripts/tts_generator.py --text "宿´æç½" --output narration.mp3 --timestamps
python .opencode/skills/video-creator/scripts/video_maker.py video_config.yaml --srt subtitles.srt --bgm epic
è§é¢é ç½®æä»¶æ ¼å¼
# video_config.yaml
ratio: "9:16" # å¿
é¡»å å¼å·ï¼é¿å
YAMLè§£æé误
bgm_volume: 0.12
outro: true
scenes:
- audio: narration.mp3
images:
# æåºæ¯é¡ºåºæåææç»é头
- file: scene1/shot_01.png
duration: 4.34
- file: scene1/shot_02.png
duration: 4.88
- file: scene2/shot_01.png
duration: 2.15
# ...
注æï¼ratio å¿
é¡»ç¨å¼å·å
裹ï¼å¦ "9:16"ï¼å¦å YAML ä¼è§£æææ¶é´æ ¼å¼ã
æ¶é¿åé è§èï¼éå¾ï¼ï¼
çæ video_config.yaml åï¼å¿ é¡»ä¸¥æ ¼æä»¥ä¸æµç¨è®¡ç® durationï¼
æ¥éª¤1ï¼è¯»åæ¶é´æ³æä»¶
import json
with open("narration.json", "r") as f:
timestamps = json.load(f)
audio_duration = timestamps[-1]["end"]
print(f"é³é¢æ»æ¶é¿: {audio_duration:.1f}s")
æ¥éª¤2ï¼æå 容è¯ä¹åååºæ¯
æ ¹æ®è§£è¯´è¯å 容ï¼ç¡®å®æ¯å¼ å¾å¯¹åºçæ¶é´æ®µï¼
# 示ä¾ï¼æ ¹æ®è§£è¯´è¯å
容åå
# æ¾å°æ¯ä¸ªä¸»é¢åæ¢ç¹çæ¶é´æ³
scenes = [
("cover.png", 0, 12.5), # å¼åºå°ç¬¬ä¸ä¸ªä¸»é¢åæ¢
("scene01.png", 12.5, 26), # ç¬¬äºæ®µå
容
# ...æ ¹æ® narration.json ä¸çå¥åè¾¹ç精确åå
]
æ¥éª¤3ï¼è®¡ç®æ¯å¼ å¾ç duration
for file, start, end in scenes:
duration = end - start
print(f"{file}: {duration:.1f}s")
æ¥éª¤4ï¼æ ¡éªæ»æ¶é¿
total_duration = sum(duration for _, _, duration in scenes)
assert abs(total_duration - audio_duration) < 1.0, \
f"æ¶é¿ä¸å¹é
ï¼å¾çæ»æ¶é¿{total_duration}s vs é³é¢{audio_duration}s"
éå¾
- å¿ é¡»å 读å narration.json æ¶é´æ³ï¼ä¸è½åæè§ä¼°ç®
- æå¥åè¯ä¹è¾¹çååï¼ä¸è½å¹³ååé
- çæé ç½®åå¿ é¡»æ ¡éªï¼ç¡®ä¿å¾çæ»æ¶é¿ â é³é¢æ»æ¶é¿ï¼è¯¯å·®<1ç§ï¼
- ç¦æ¢è®©èæ¬èªå¨æä¼¸ï¼é³ç»ä¸åæ¥çè§é¢ä¸åæ ¼
æ¶é¿åé 表模æ¿
çæé ç½®åï¼å è¾åºåé è¡¨è®©ç¨æ·ç¡®è®¤ï¼
| åºæ¯å¾ | 对åºå
容 | å¼å§ | ç»æ | æ¶é¿ |
|--------|----------|------|------|------|
| cover.png | å¼åºå¼å
¥ | 0s | 12.5s | 12.5s |
| scene01.png | AI Agentæ¶ä»£ | 12.5s | 26s | 13.5s |
| ... | ... | ... | ... | ... |
| **å计** | | | | **{total}s** |
é³é¢æ»æ¶é¿ï¼{audio_duration}s
å·®å¼ï¼{diff}s â
/â
åå¹è§è
åå¹ä½¿ç¨ ASS æ ¼å¼ï¼å¼ºå¶åºé¨å± ä¸åºå®ä½ç½®ï¼
- ä½ç½®ï¼åºé¨å± ä¸ï¼Alignment=2ï¼
- åä½ï¼PingFang SC
- 大å°ï¼å±å¹é«åº¦ / 40
- æè¾¹ï¼2px é»è²æè¾¹ + 1px é´å½±
- åºè¾¹è·ï¼å±å¹é«åº¦ / 20
ç¦æ¢ï¼åå¹ä¹±è·ã大å°ä¸ä¸ãä½ç½®ä¸åºå®
èæ¬åæ°è¯´æ
video_maker.py
python video_maker.py config.yaml [options]
| åæ° | 说æ | é»è®¤å¼ |
|---|---|---|
--no-outro |
䏿·»å çå°¾ | æ·»å |
--no-bgm |
䏿·»å BGM | æ·»å |
--fade |
è½¬åºæ¶é¿(ç§) | 0.5 |
--bgm-volume |
BGMé³é | 0.08 |
--bgm |
èªå®ä¹BGMï¼å¯é: epicï¼ | é»è®¤ç§æé£ |
--ratio |
è§é¢æ¯ä¾ | 16:9ï¼ä¼è¢«é ç½®æä»¶è¦çï¼ |
--srt |
åå¹æä»¶è·¯å¾ | æ |
tts_generator.py
python tts_generator.py --text "ææ¬" --output audio.mp3 [options]
| åæ° | 说æ | é»è®¤å¼ |
|---|---|---|
--voice |
é³è² | zh-CN-YunxiNeural |
--rate |
è¯é | +0% |
--timestamps |
è¾åºæ¶é´æ³JSON | å¦ |
æ¯æçè§é¢æ¯ä¾
ä¸ image-service ç徿å¡ä¿æä¸è´ï¼æ¯æ 10 ç§æ¯ä¾ï¼
| æ¯ä¾ | å辨ç | éç¨åºæ¯ |
|---|---|---|
| 1:1 | 1024Ã1024 | æ£æ¹å½¢ï¼æåå |
| 2:3 | 832Ã1248 | ç«çæµ·æ¥ |
| 3:2 | 1248Ã832 | æ¨ªçæµ·æ¥ |
| 3:4 | 1080Ã1440 | å°çº¢ä¹¦ãæåå |
| 4:3 | 1440Ã1080 | ä¼ ç»æ¾ç¤ºå¨ |
| 4:5 | 864Ã1080 | |
| 5:4 | 1080Ã864 | 横çç §ç |
| 9:16 | 1080Ã1920 | æé³ãè§é¢å·ãç«å± |
| 16:9 | 1920Ã1080 | Bç«ãYouTubeãæ¨ªå± |
| 21:9 | 1536Ã672 | è¶ å®½å±çµå½± |
çå°¾è§è
éå¾ï¼ææè§é¢å¿ é¡»èªå¨æ¼æ¥å¯¹åºå°ºå¯¸ççå°¾ï¼
çå°¾å¹é 顺åºï¼
- 精确å¹é
ï¼
outro_{ratio}.mp4 - æ¹åå¹é
ï¼ç«çâ
outro_9x16.mp4ï¼æ¨ªçâoutro_16x9.mp4 - å
åºï¼
outro.mp4
BGM èµæº
| æä»¶ | 飿 ¼ | éç¨åºæ¯ |
|---|---|---|
bgm_technology.mp3 |
ç§ææ | ææ¯æç¨ã产åä»ç» |
bgm_epic.mp3 |
çè¡å²è¯ | æ äºãææãå±å¿ |
使ç¨ï¼--bgm epic æ --bgm /path/to/bgm.mp3
常ç¨é³è²
| é³è² ID | 飿 ¼ |
|---|---|
| zh-CN-YunyangNeural | ç·å£°ï¼æ°é»ææ¥ |
| zh-CN-YunxiNeural | ç·å£°ï¼é³å 活泼 |
| zh-CN-XiaoxiaoNeural | å¥³å£°ï¼æ¸©æèªç¶ |
| zh-CN-XiaoyiNeural | å¥³å£°ï¼æ´»æ³¼å¯ç± |
ç®å½ç»æ
video-creator/
âââ SKILL.md
âââ scripts/
â âââ video_maker.py # ä¸»èæ¬ï¼å¾ç+é³é¢âè§é¢
â âââ tts_generator.py # TTS è¯é³çæ
â âââ scene_splitter.py # åºæ¯æåå¨ï¼å¯éï¼
âââ assets/
â âââ outro.mp4 # éç¨çå°¾ï¼16:9ï¼
â âââ outro_9x16.mp4 # ç«ççå°¾
â âââ outro_3x4.mp4 # 3:4çå°¾
â âââ bgm_technology.mp3 # é»è®¤BGM
â âââ bgm_epic.mp3 # çè¡BGM
âââ references/
âââ edge_tts_voices.md
ä¾èµ
# ç³»ç»ä¾èµ
brew install ffmpeg # Mac
# Python ä¾èµ
pip install edge-tts pyyaml