소스 정보
- 저장소
- Leoyishou/personal-ai-company
- 최근 소스 활동
- 2026년 3월 31일 03:57
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 28
- 포크
- 9
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/Leoyishou/personal-ai-company --skill stickman-video명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | stickman-video |
| description | 生成火柴人风格短视频。自动生成解说词、TTS语音、背景音乐、火柴人插图,使用Remotion合成视频。 |
| allowed-tools | Bash(python:*), Bash(npm:*), Bash(npx:*), Bash(ffmpeg:*), Bash(playwright-cli:*), Read, Write, Edit |
自动生成火柴人风格的短视频,整合实时数据获取、解说词生成、TTS语音、背景音乐搜索、AI绘图和Remotion视频合成。
| 参数 | 规格 |
|---|---|
| 分辨率 | 960×720 (横屏 4:3) |
| 编码 | H.264/AVC(兼容性好,所有播放器都能播放) |
| 帧率 | 30fps |
| 音频 | AAC, 44100Hz, 单声道 |
┌────────────────────────────────────────────────┐
│ 内容总结(黑色) 个人观点,无不良引导(红色) │ ← 顶部栏 36px 浅灰背景
├────────────────────────────────────────────────┤
│ │
│ │
│ 【火柴人插图区域】 │ ← 中间区域 白色/浅灰背景
│ 居中显示 │
│ │
│ │
├────────────────────────────────────────────────┤
│ 字幕文字(黑色大号) │ ← 底部渐变背景(透明→浅灰)
└────────────────────────────────────────────────┘
linear-gradient(to bottom, rgba(200,200,200,0) 0%, rgba(200,200,200,0.8) 30%, rgba(180,180,180,0.95) 100%)#222(不是白色!)如果视频主题涉及实时信息(股价、新闻、体育、热点等),使用 WebSearch 获取最新数据。
推荐使用 WebSearch(更准确):
# 股票数据
WebSearch: "HOOD stock price today"
WebSearch: "Robinhood HOOD 股票 最新消息 2026"
# 新闻热点
WebSearch: "今日热点新闻"
# 体育赛事
WebSearch: "NBA 今日比赛结果"
备选使用 playwright-cli(需要截图或复杂交互时):
playwright-cli open "https://finance.yahoo.com/quote/HOOD"
playwright-cli snapshot
playwright-cli screenshot --filename=stock_data.png
基于 Step 0 获取的实时数据,生成分段解说词。按语义分组,不是每句一张图。
⚠️ 视觉节奏要求 (Visual Pacing):
{
"meta": {
"title": "这就是所谓的实在人",
"bgm_mood": "sad", // 可选: happy, sad, tense, relaxing, upbeat
"bgm_tag": "piano", // 搜索关键词
"character_anchor": "simple stick figure with a red tie" // 角色一致性特征
},
"scenes": [
{
"id": 1,
"description": "引入-工作态度",
"image_prompt": "火柴人坐在办公桌前埋头工作,桌上左边一小叠钱标注LOW PAY...",
"image_file": "scene_01.png"
}
],
"segments": [
{
"id": 1,
"scene_id":
字幕数据结构说明:
subtitles: 每个segment可包含多条短字幕text: 字幕文字(不超过15字)ratio: 该字幕在segment音频时长中的占比(所有ratio之和应为1.0)⚠️ 重要:生成脚本后必须暂停,让用户确认后再继续!
使用 AskUserQuestion 工具询问用户:
示例提问:
脚本已生成,请确认以下内容:
**标题**: xxx
**实时数据**(通过 playwright-cli 获取):
- 数据来源: https://finance.yahoo.com/quote/HOOD
- 获取时间: 2026-02-05 21:30
- 当前股价: $76.25
- 今日涨跌: -3.2%
**解说词**:
1. xxx
2. xxx
...
⚠️ 股价等实时数据可能已发生变化,请确认是否需要更新。
请确认脚本内容是否准确,确认后将开始生成语音和图片。
只有用户确认后,才能继续执行后续步骤!
关键:生成连贯音频而非分段播放
# 1. 生成各段音频
for i in {1..N}; do
uv run python .claude/skills/volcengine-tts/scripts/tts.py "第i段文字" \
--voice BV002_streaming --output audio/segment_0${i}.mp3
done
# 2. 合并成一个连贯音频(重要!)
ffmpeg -i "concat:segment_01.mp3|segment_02.mp3|..." -acodec copy audio/full_audio.mp3
# 或使用文件列表方式合并
echo "file 'segment_01.mp3'" > list.txt
echo "file 'segment_02.mp3'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy audio/full_audio.mp3
根据 Step 1 脚本中的 mood 和 tag 搜索 (不要硬编码 "relaxing")。
# 示例:使用脚本中的变量
uv run python .claude/skills/bgm-search/scripts/search.py \
--mood "{script.meta.bgm_mood}" \
--tag "{script.meta.bgm_tag}" \
--duration "30-180" --limit 1 --download --output bgm/
使用 nanobanana-draw skill。
Prompt 构造规则:
Hand-drawn infographic illustration, sketchnote doodle style, black ink marker outlines...character_anchor (例如 simple stick figure with a red tie),确保主角形象统一。Prompt 构造模板: 将以下模板中的变量替换为 Step 1 脚本中的具体内容:
Hand-drawn infographic illustration, sketchnote doodle style, black ink marker outlines with spot pastel color highlights, white background,
featuring {script.meta.character_anchor}, {scene.description},
loose hand-drawn look, minimalist line art texture, expressive cute cartoon style, visual metaphors, [optional: with thought bubble containing simple icon related to the topic], [optional: with hand-written text label related to the topic connected by an arrow]
使用项目根目录的 Remotion 配置。
cd /项目根目录
npx remotion render StickmanXXX output/video.mp4 --codec=h264
Remotion 防闪烁规范 (参考 remotion-best-practices):
scene_id 变化时才应用淡入动画 (<SceneImage>),同场景内使用静态组件 (<StaticImage>)。// 分辨率必须是 960x720
<Composition
id="StickmanVideo"
width={960}
height={720}
fps={30}
...
/>
// 布局结构
<AbsoluteFill style={{ backgroundColor: '#f5f5f5' }}>
{/* 顶部标题栏 - 36px 高 */}
<div style={{ height: 36, backgroundColor: 'rgba(200,200,200,0.9)' }}>
<span style={{ color: '#333' }}>{title}</span>
<span style={{ color: '#d64541' }}>个人观点,无不良引导</span>
</div>
{/* 中间图片区域 */}
<div style={{ top: 36, bottom: 80 }}>
<Img src={currentImage} />
</div>
{/* 底部字幕条 - 80px 高 */}
<div style= , '(,,,)' }}>
{subtitle}
{/* 一个连贯的音频文件 */}
output/stickman-video/<topic>/
├── script.json # 解说词脚本
├── audio/
│ ├── segment_01.mp3 # 分段语音
│ ├── segment_02.mp3
│ ├── ...
│ └── full_audio.mp3 # 合并后的完整语音(关键!)
├── bgm/
│ └── background.mp3 # 背景音乐
├── images/
│ ├── scene_01.png # 场景图片
│ ├── scene_02.png
│ └── ...
└── 最终视频.mp4 # 960x720 H.264 编码
ffprobe -show_entries format=duration audio.mp3// 场景图片组件 - 带平滑过渡动画
const SceneImage: React.FC<{ imagePath: string; isNewScene: boolean }> = ({ imagePath, isNewScene }) => {
const frame = useCurrentFrame();
const { fps } = useVideoConfig();
// 只有新场景才有动画
const opacity = isNewScene
? interpolate(frame, [0, fps * 0.3], [0, 1], { extrapolateRight: 'clamp' })
: 1;
// 轻微的缩放动画,让过渡更自然
const scale = isNewScene
? interpolate(frame, [0, fps * 0.4], [1.05, 1], { extrapolateRight: 'clamp' })
: 1;
return (
<div style={{ opacity, transform: `scale(${scale})` }}>
<Img src={staticFile(imagePath)} />
</div>
);
};
// 字幕:不要任何动画,直接显示
const Subtitle = () => (
);
isNewScene = segment. !== prevSegment?.;
--codec=h264(兼容性好,所有播放器都能直接播放)