用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Wanludrame/AI-DaLiu --skill short-film-maker命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | short-film-maker |
| description | AI短片制作引擎:从小说/故事文本自动生成完整短片。全流程自动化:文本分析→分镜脚本→AI图片生成(Seedream)→AI视频生成(Seedance)→TTS旁白→字幕→BGM→最终组装。 |
从一篇小说或故事文本出发,全流程自动制作一部完整的短片视频。
用户提供:
最终产出文件保存在项目目录中:
短视频脚本/<标题>_短片脚本.txt # 分镜脚本
短片素材/<项目名>/ # 素材根目录
shot<NN>_<desc>.jpg # 概念图
shot<NN>_<desc>.mp4 # AI生成视频
audio/narr<NN>.mp3 # 旁白音频
bgm_<name>.mp3 # 背景音乐
temp/ # 中间处理文件
proc_<NN>.mp4 # 处理后的视频片段
subtitles.srt # 字幕文件
concat_video.mp4 # 拼接视频(无音频)
narration_full.wav # 完整旁白音轨
<标题>_完整版.mp4 # 最终输出
doubao-seedream-5-0-2601282048x2048)POST https://ark.cn-beijing.volces.com/api/v3/images/generations
Headers: Authorization: Bearer <API_KEY>
Body: {
"model": "doubao-seedream-5-0-260128",
"prompt": "<英文提示词>",
"size": "2048x2048"
}
Response: data[0].url → 下载图片
核心原则:优先使用最强模型,token/额度不足时自动降级到次一级模型。
模型降级梯队(从强到弱):
| 优先级 | 模型 | Model ID | 能力 |
|---|---|---|---|
| 1(首选) | Seedance 2.0 | doubao-seedance-2-0-260128 | 多模态→视频, 视频续写, 视频编辑 |
| 2 | Seedance 1.5 Pro | doubao-seedance-1-5-pro-251215 | t2v, i2v, 含音频输出 |
| 3 | Seedance 1.0 Pro | doubao-seedance-1-0-pro-250528 | t2v, i2v |
| 4 | Seedance 1.0 Pro Fast | doubao-seedance-1-0-pro-fast-251015 | t2v, i2v(速度快,质量略低) |
| i2v 专用 | Seedance 1.0 Lite i2v | doubao-seedance-1-0-lite-i2v-250428 | 图生视频(人物一致性场景) |
# 文生视频(t2v)— 从最强模型开始尝试
POST https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks
Body: {
"model": "<按降级梯队选择>",
"content": [{"type": "text", "text": "<英文提示词>"}]
}
# 图生视频(i2v)— 用于保持人物形象一致
POST https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks
Body: {
"model": "<按降级梯队选择,优先 2.0/1.5,备选 1.0 Lite i2v>",
"content": [
{"type": "image_url", "image_url": {"url": "<参考图URL或base64>"}},
{"type": "text", "text": "<英文动作/场景提示词>"}
]
}
# 轮询状态(每20秒一次,最长10分钟)
GET https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/<task_id>
Response: status (running/succeeded/failed), content.video_url
核心问题:纯文生视频每个镜头独立生成,同一人物在不同镜头中外貌差异巨大。
解决方案:定妆照 + 图生视频(i2v)
pip install edge-ttszh-CN-YunxiNeural(低沉克制)zh-CN-XiaoxiaoNeural(温柔细腻)zh-CN-YunjianNeural(浑厚有力)、zh-CN-YunyangNeural(沉稳新闻播报风)关键:不要用简单的 Communicate(text, voice, rate) 做平铺直叙。必须用 SSML 标记为每段旁白注入情感层次。
SSML 情感控制手段:
<prosody rate="-20%" pitch="-5%"> — 降速降调,制造沉重感<prosody rate="-35%" volume="soft"> — 极慢极轻,用于关键句/情感爆发点<break time="800ms"/> — 句间停顿,制造留白<prosody pitch="+5%" rate="+10%"> — 略快略高,用于叙事/信息段旁白情感设计原则:
SSML 模板示例:
ssml = '''
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<prosody rate="-15%" pitch="-3%">
她来看过他。
</prosody>
<break time="600ms"/>
<prosody rate="-20%">
她说了两个字:
</prosody>
<break time="400ms"/>
<prosody rate="-35%" volume="soft" pitch="-8%">
谢谢。
</prosody>
</voice>
</speak>
'''
在 Step 1 写分镜脚本时,旁白文本应同时附上 SSML 标注方案,标明哪些句子需要降速、加停顿、变轻声。在 Step 4 生成时直接用 SSML 调用。
ffmpeg 和 ffprobe 在 PATH 中)https://incompetech.com/music/royalty-free/pieces.jsonhttps://incompetech.com/music/royalty-free/mp3-royaltyfree/<filename>从环境变量 ARK_API_KEY 读取火山方舟 API Key:
import os
API_KEY = os.environ["ARK_API_KEY"]
如果环境变量不存在,提示用户设置:
powershell -Command "[System.Environment]::SetEnvironmentVariable('ARK_API_KEY', '<key>', 'User')"
阅读原始文本,执行以下分析:
1.1 文本分析
1.2 分镜设计原则
1.3 人物视觉锚点定义
1.4 为每个镜头设计
* 标记,停顿用 // 标记)[t2v](纯场景/无人物)或 [i2v](含人物,需传入定妆照)1.4 脚本格式
按以下标准格式输出脚本,保存到 短视频脚本/<标题>_短片脚本.txt:
<标题> —— 短片脚本
时长:约<N>秒
风格:<风格描述>
============================
镜号 01 | 0:00 - 0:06
============================
【画面】
<画面描述>
【字幕】
<字幕文本>
【旁白】(<声音描述>)
<旁白文本>
【音效/BGM】
<音效描述>
在脚本末尾附上制作说明,包含:
确认点:脚本完成后展示给用户确认,再进入后续步骤。如用户有修改意见,先修订脚本。
为需要参考图的镜头生成概念图。
执行逻辑:
char_<name>.jpgsize: "2048x2048"短片素材/<项目名>/shot<NN>_<desc>.jpg提示词优化规则:
错误处理:
为每个镜头生成 ~5 秒视频片段。
执行逻辑:
[t2v] 或 [i2v])短片素材/<项目名>/shot<NN>_<desc>.mp4video_tasks.json 以便断点续传模型降级策略(核心逻辑):
doubao-seedance-2-0-260128(Seedance 2.0)SetLimitExceeded 或额度不足错误,降级到 doubao-seedance-1-5-pro-251215(Seedance 1.5 Pro)doubao-seedance-1-0-pro-250528(Seedance 1.0 Pro)doubao-seedance-1-0-pro-fast-251015(Seedance 1.0 Pro Fast,速度快质量略低)doubao-seedance-1-0-lite-i2v-250428视频提示词优化规则:
为每个有旁白的镜头生成语音。
执行逻辑:
import edge_tts),未安装则 pip install edge-tts短片素材/<项目名>/audio/narr<NN>.mp3语音参数:
zh-CN-YunxiNeural(男声,低沉)zh-CN-XiaoxiaoNeural(女声,温柔)、zh-CN-YunjianNeural(男声,浑厚)必须使用 SSML 生成旁白,不要用简单的纯文本调用。 根据 Step 1 中的旁白SSML标注,为每段旁白构建 SSML:
import asyncio, edge_tts
async def generate_narration_ssml(ssml_text, output_path):
"""用 SSML 生成带情感层次的旁白"""
communicate = edge_tts.Communicate(ssml_text, voice="zh-CN-YunxiNeural")
await communicate.save(output_path)
# 示例 SSML
ssml = '''
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<prosody rate="-15%" pitch="-3%">
她来看过他。
</prosody>
<break time="600ms"/>
<prosody rate="-20%">
她说了两个字:
</prosody>
<break time="400ms"/>
<prosody rate="-35%" volume="soft" pitch="-8%">
谢谢。
</prosody>
</voice>
</speak>
'''
asyncio.run(generate_narration_ssml(ssml, "narr02.mp3"))
SSML 情感模板:
<prosody rate="-15%" pitch="-3%"> — 平稳,微沉<prosody rate="-20%" pitch="-5%"> — 渐慢渐沉<prosody rate="-35%" volume="soft" pitch="-8%"> — 极慢极轻<break time="800ms"/>,句首 <prosody rate="-10%"> 再回落<break time="400ms"/> 到 <break time="1000ms"/>,越重要的停顿越长将所有生成的视频片段处理为统一格式。
目标规格:1920×1080, 24fps, H.264, yuv420p
每个片段的处理:
FFmpeg filter chain:
setpts=<慢放系数>*PTS,
scale=1920:1080:force_original_aspect_ratio=decrease,
pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,
fade=t=in:st=0:d=0.8,
fade=t=out:st=<目标时长-0.8>:d=0.8
纯黑屏+文字镜头(如结尾点题):
ffmpeg -y -f lavfi -i "color=c=black:s=1920x1080:d=<时长>:r=24"
-c:v libx264 -preset fast -crf 20 -pix_fmt yuv420p output.mp4
Python subprocess 调用规范:
sys.stdout.reconfigure(encoding='utf-8', errors='replace')import subprocess
def run_ffmpeg(args, desc=""):
if desc:
print(f" {desc}")
result = subprocess.run(["ffmpeg"] + args, capture_output=True)
if result.returncode != 0:
stderr = result.stderr.decode("utf-8", errors="replace")
for line in stderr.split("\n"):
if any(k in line.lower() for k in ["error", "invalid", "failed"]):
print(f" ERR: {line.strip()}")
return False
return True
6.1 生成 SRT 字幕文件
按时间线生成 SRT,每个镜头一条字幕:
1
00:00:00,300 --> 00:00:05,500
字幕文本
2
00:00:07,300 --> 00:00:13,500
字幕文本
...
6.2 拼接所有片段
使用 FFmpeg concat demuxer:
ffmpeg -f concat -safe 0 -i concat.txt -c copy output.mp46.3 烧入字幕
使用 subtitles filter。因 Windows 路径含中文/空格会导致 FFmpeg 解析失败,采用以下策略:
c:/Users/<username>/)字幕样式:
FontName=Microsoft YaHei,FontSize=22,PrimaryColour=&H00FFFFFF,
OutlineColour=&H80000000,BorderStyle=3,Outline=1,Shadow=0,MarginV=40
7.1 BGM 选择
从 Incompetech 曲库自动匹配:
GET https://incompetech.com/music/royalty-free/pieces.json| 短片风格 | 匹配关键词 (feel) | 偏好乐器 |
|---|---|---|
| 冷峻科幻 | Dark, Mysterious, Somber | Piano, Cello, Strings |
| 温暖文艺 | Calm, Relaxed, Peaceful | Piano, Guitar, Strings |
| 悬疑惊悚 | Dark, Eerie, Unnerving, Tense | Strings, Synth |
| 史诗壮阔 | Epic, Heroic, Intense | Orchestra, Brass, Percussion |
| 忧郁沉静 | Somber, Mystical | Piano, Cello, Choir |
GET https://incompetech.com/music/royalty-free/mp3-royaltyfree/<filename>7.2 音频混合
将旁白音频拼接为完整音轨:
BGM 处理:
volume=0.15)afade=t=in:st=0:d=3)afade=t=out:st=<总时长-5>:d=5)atrim=0:<总时长>)最终混合:
[narration][bgm]amix=inputs=2:duration=first:dropout_transition=3
7.3 最终输出
同样使用简单路径策略避免编码问题:
<标题>_完整版.mp4ffmpeg -y
-i <concat_video>
-i <narration_full>
-i <bgm>
-filter_complex "[2:a]volume=0.15,afade=...,atrim=...[bgm];[1:a][bgm]amix=...[aout]"
-vf "subtitles=<srt_path>:force_style='<样式>'"
-map 0:v -map "[aout]"
-c:v libx264 -preset fast -crf 20
-c:a aac -b:a 192k
-shortest
<output>
| 错误场景 | 处理方式 |
|---|---|
| Seedream API 返回 400(尺寸不够) | 自动调整为 2048x2048 |
| Seedance SetLimitExceeded | 按降级梯队切换:2.0 → 1.5 Pro → 1.0 Pro → 1.0 Pro Fast,全部受限则提示用户 |
| Seedance 任务超时(>10min) | 重试一次,仍失败则跳过该镜头(用图片静帧替代) |
| edge-tts 未安装 | 自动 pip install edge-tts |
| FFmpeg subtitles filter 路径错误 | 使用简单路径临时文件策略 |
| FFmpeg 编码错误(cp1252) | subprocess 使用列表参数,不使用 shell=True |
| BGM 下载失败 | 输出无 BGM 版本,提供 SRT 字幕文件供用户自行配乐 |
| 某个镜头视频生成失败 | 用对应图片生成 Ken Burns 效果视频替代 |
cinematic, 4K,以及具体的光线和色调描述video_tasks.json 记录任务 ID,如果中途失败可以从上次状态继续。temp/ 目录,最终确认无误后可提示用户清理。"<Track>" Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 4.0 License完成制作后,逐项检查:
现在,请根据用户提供的文本,按照以上流程制作短片。每完成一个步骤,简要汇报进度,遇到问题及时告知用户。
基于 SOC 职业分类