关于 markdown-video
Markdown Video Skill 使用生成的幻灯片图像和语音合成音频,将 Markdown 幻灯片转换为带旁白的 MP4。适合演示文稿制作者,支持逐页或按章节制作视频,并可仅重新生成有变更的内容。
主要功能
- 01使用 Gemini 生成幻灯片图像
- 02根据演讲者备注用 OpenAI TTS 生成旁白
- 03仅重新生成已更改的幻灯片
- 04选择多种视觉风格
- 05制作逐页或按章节的视频
适用场景
- 01将 Markdown 幻灯片制作为带旁白的 MP4
- 02编辑部分幻灯片后更新视频
- 03为长演示文稿生成章节信息图
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jykim/ claude-obsidian-skills --skill markdown-video安装后在 Claude Code 中输入/markdown-video确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
create_audio_mapping.pycreate_section_video.pycreate_slides_from_markdown.pycreate_slides_gemini.pycreate_video_script.pygenerate_audio.pygenerate_section_images.pyREADME.mdrequirements.txtslides_to_video.py详细介绍
Markdown 视频技能
将 Markdown 幻灯片转换为演示视频,并使用 AI 生成视觉素材和 TTS 旁白。
何时使用此技能
在用户遇到以下情况时启用此技能:
- 要求根据 Markdown 幻灯片制作视频
- 请求将演示文稿转换为 MP4 格式
- 想要生成带旁白的幻灯片视频
- 需要自动将幻灯片转换为视频
主要功能
- Gemini AI 生成的视觉素材:高质量幻灯片图像,全面支持表情符号和韩语
- OpenAI TTS 旁白:根据演讲者备注生成自然语音
- 增量更新:仅重新生成有变更的幻灯片(节省时间和 API 费用)
- 多种视觉风格:technical-diagram、professional、vibrant-cartoon、watercolor
输入要求
- 带有
^前缀演讲者备注的 Markdown 文件 - 用于图像生成的 GEMINI_API_KEY 环境变量
- 用于 TTS 音频的 OPENAI_API_KEY 环境变量
输出规格
- MP4 视频:1920x1080(全高清)
- 时长:每张幻灯片的显示时长与其音频旁白时长一致
- 文件命名:
{input_filename}.mp4
工作流
步骤 1:生成音频文件
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/generate_audio.py "{slides_filename}" --output-dir "audio"
增量更新:仅为演讲者备注有变更的幻灯片重新生成音频。
- 使用
--force重新生成所有音频文件
输出:
audio/slide_0.mp3、slide_1.mp3、……(从 0 开始索引)- 缓存文件:
audio/.audio_cache.json
步骤 2:使用 Gemini 生成幻灯片图像
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/create_slides_gemini.py "{slides_filename}" \
--output-dir "slides-gemini" \
--style "technical-diagram" \
--auto-approve
增量更新:仅为内容有变更的幻灯片重新生成图像。
- 使用
--force重新生成所有幻灯片图像
风格选项:
| 风格 | 描述 | 最适合 |
|---|---|---|
technical-diagram | 线条简洁、信息图标、低饱和度蓝灰色 | 技术、教育 |
professional | 极简风格、几何图形 | 企业、正式场合 |
vibrant-cartoon | 明亮渐变色、扁平化设计 | 营销、初创公司 |
watercolor | 柔和的粉彩色、有机形状 | 创意、个人用途 |
其他参数:
--model:Gemini 模型(默认:gemini-3-pro-image-preview)--aspect-ratio:16:9(默认)、1:1、9:16、4:3、3:4--start-from N:从第 N 张幻灯片继续--dry-run:预览提示词,但不生成内容
输出:
slides-gemini/1.jpeg、2.jpeg、……(从 1 开始索引)- 缓存文件:
slides-gemini/.slides_cache.json
步骤 3:创建最终视频
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/slides_to_video.py \
--slides-dir "slides-gemini" \
--audio-dir "audio" \
--output "{output_filename}.mp4"
增量更新
音频和图像生成均支持增量更新——仅重新生成有变更的内容。
工作原理
- 内容哈希:为每张幻灯片的内容计算哈希(MD5)
- 缓存存储:将哈希值存储在
.audio_cache.json/.slides_cache.json中 - 变更检测:后续运行时,仅重新生成有变更的幻灯片
- 文件验证:同时检查输出文件是否存在
输出示例
✅ Found 20 slides
20 slides with speaker notes
✨ Delta update: 17 slides unchanged, 3 to regenerate
🎵 Generating 3 audio files...
Progress |████████████████████████████████████████| 3/3 (100.0%)
✅ Audio generation complete!
Generated: 3/3 files
Unchanged: 17 files (skipped)
强制重新生成
若要忽略缓存并重新生成所有内容:
# Force regenerate all audio
python generate_audio.py "slides.md" --output-dir "audio" --force
# Force regenerate all images
python create_slides_gemini.py "slides.md" --output-dir "slides-gemini" --force
快速参考
完整工作流(首次运行)
cd "{slides_directory}"
# Step 1: Generate audio
python /Users/lifidea/.claude/skills/markdown-video/generate_audio.py "slides.md" --output-dir "audio"
# Step 2: Generate slide images
python /Users/lifidea/.claude/skills/markdown-video/create_slides_gemini.py "slides.md" \
--output-dir "slides-gemini" \
--style "technical-diagram" \
--auto-approve
# Step 3: Create video
python /Users/lifidea/.claude/skills/markdown-video/slides_to_video.py \
--slides-dir "slides-gemini" \
--audio-dir "audio" \
--output "presentation.mp4"
更新工作流(变更后)
使用相同命令——增量更新会自动执行:
# Only regenerates changed slides
python generate_audio.py "slides.md" --output-dir "audio"
python create_slides_gemini.py "slides.md" --output-dir "slides-gemini" --auto-approve
python slides_to_video.py --slides-dir "slides-gemini" --audio-dir "audio" --output "presentation.mp4"
要求
系统依赖项
- Python 3.7+
- ffmpeg:
brew install ffmpeg
Python 包
pip install Pillow requests google-genai
环境变量
export OPENAI_API_KEY="sk-..."
export GEMINI_API_KEY="..."
费用估算
| 组件 | 费用 | 示例(20 张幻灯片) |
|---|---|---|
| Gemini 图像 | 约 $0.04/张 | 约 $0.80 |
| OpenAI TTS | 约 $0.015/1K 字符 | 约 $0.50 |
| 总计 | 约 $1.30 |
使用增量更新后,后续运行仅需为有变更的幻灯片付费。
错误处理
未找到演讲者备注
- 幻灯片需要带有
^前缀的演讲者备注才能生成旁白 - 示例:
^ This is the speaker note for this slide.
发音问题
- 在演讲者备注中将专业术语替换为表音拼写
- 先使用
--dry-run测试
API 错误
- 检查 API 密钥环境变量
- Gemini 速率限制:脚本会在每次生成之间间隔 1 秒
质量检查清单
完成前,请确认:
- 已配置 OpenAI 和 Gemini API 密钥
- Markdown 文件包含以
^为前缀的演讲者备注 - 音频文件已成功生成
- 幻灯片图片已成功生成
- 视频播放正常,且音频已同步
- 分辨率为 1920x1080
图片生成模式
生成视觉内容有两种方式:
| 模式 | 脚本 | 适用场景 |
|---|---|---|
| 逐张幻灯片 | create_slides_gemini.py | 标准演示文稿、需要精确控制 |
| 按章节 | generate_section_images.py | 长篇演示文稿、信息图风格 |
何时使用按章节模式
- 演示文稿包含 20 张以上幻灯片
- 内容自然地划分为多个逻辑章节
- 更喜欢每章一张信息图概览,而非单独的幻灯片图片
- 希望降低 API 成本(减少图片数量)
按章节工作流(替代方案)
对于包含许多幻灯片的演示文稿,可以为每个章节生成一张信息图,而不是为每张幻灯片生成图片。
对比
| 方面 | 逐张幻灯片 | 按章节 |
|---|---|---|
| 图片 | 每张幻灯片 1 张 | 每个章节 1 张 |
| 音频 | 每张幻灯片单独生成 | 每张幻灯片单独生成 → 按章节合并 |
| 审阅 | 直接在 Markdown 中审阅 | 视频脚本文档 |
| 适用场景 | 短篇演示文稿 | 长篇演示文稿(20 张以上幻灯片) |
第 1 步:生成音频文件
与标准工作流相同:
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/generate_audio.py "{slides_filename}" --output-dir "audio"
第 2 步:生成章节信息图
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/generate_section_images.py "{slides_filename}" \
--output-dir "slides-section" \
--style "infographic"
风格选项:
| 风格 | 描述 |
|---|---|
infographic | 简洁专业,带有图标(默认) |
professional | 极简商务设计 |
vibrant | 适用于营销的明亮渐变色 |
technical | 流程图和技术示意图 |
其他参数:
--start-from N:从第 N 个章节继续--force:重新生成所有图片--dry-run:预览章节,不生成图片--delay N:API 调用之间的等待秒数(默认值:2.0)
第 3 步:创建视频脚本(可选)
生成用于审阅旁白的 Markdown 文档:
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/create_video_script.py "{slides_filename}" \
--output "video_script.md" \
--image-dir "slides-section"
脚本文档包含:
- 嵌入的章节图片
- 每张幻灯片的演讲者备注
- 便于编辑的格式
第 4 步:审阅并编辑旁白
- 打开
video_script.md - 审阅引用块中的旁白
- 直接在文档中编辑
- 将修改更新到原始 Markdown 文件
- 为修改过的幻灯片重新生成音频:
python generate_audio.py "slides.md" --output-dir "audio"
第 5 步:创建按章节生成的视频
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/create_section_video.py \
--slides "{slides_filename}" \
--audio-dir "audio" \
--image-dir "slides-section" \
--output "presentation.mp4"
使用配置文件(用于自定义章节映射):
python create_section_video.py \
--config "sections.json" \
--audio-dir "audio" \
--image-dir "slides-section" \
--output "presentation.mp4"
配置文件格式:
{
"sections": [
{"id": 0, "name": "title", "audio_slides": [0]},
{"id": 1, "name": "introduction", "audio_slides": [1, 2, 3]},
{"id": 2, "name": "main_content", "audio_slides": [4, 5, 6, 7]}
]
}
按章节快速参考
cd "{slides_directory}"
# Step 1: Generate audio
python /Users/lifidea/.claude/skills/markdown-video/generate_audio.py "slides.md" --output-dir "audio"
# Step 2: Generate section images
python /Users/lifidea/.claude/skills/markdown-video/generate_section_images.py "slides.md" \
--output-dir "slides-section" \
--style "infographic"
# Step 3 (optional): Create review document
python /Users/lifidea/.claude/skills/markdown-video/create_video_script.py "slides.md" \
--output "video_script.md" \
--image-dir "slides-section"
# Step 4: Create final video
python /Users/lifidea/.claude/skills/markdown-video/create_section_video.py \
--slides "slides.md" \
--audio-dir "audio" \
--image-dir "slides-section" \
--output "presentation.mp4"
评论
支持 Markdown