history-persona-video — 历史人物AI复原短视频
把历史人物从画像里"拉到现实中"的竖版短视频完整制作流程。已用《AI还原曹操》实测验证(v2 成品:56s / 1080×1920 / 7.8MB)。
核心思路
- 不做学术考据,先视觉冲击,再简短史料增加可信度
- 固定时间轴模板(45-60s):强钩子 → 制造期待 → 过程展示 → 最终揭晓 → 互动结尾
- 用 AI 生图 + TTS 磁性配音 + 低沉史诗 BGM + 大气中文字体(方正粗黑宋简体)
- 每次交付必须加免责声明:"基于史料、时代服饰与AI视觉推演的艺术化还原,不代表真实照片"
前置环境
- ffmpeg(含 ffprobe)可用
- Python 3 + Pillow
- RunningHub 技能已装(
skills/runninghub/scripts/runninghub.py),API Key 已配置 - 大气字体:
C:\Windows\Fonts\方正粗黑宋简体.ttf(复制到 workspace 为font_heisong.ttf,避免 drawtext 冒号转义问题)
第一步:素材准备
1. 史料与画像调研
用 web_search 收集:
- 正史外貌线索(如《三国志》《世说新语·容止》)→ 塑造可信度
- 传统画像(Wikimedia 公有领域,如《三才图会》)→ 古画像素材
- 时代服饰依据(《续汉书·舆服志》等)→ AI 生图关键词
下载古画像用 Wikimedia Special:FilePath URL:
https://commons.wikimedia.org/wiki/Special:FilePath/<文件名>?width=800
2. AI 生图(RunningHub 或 GPT Image 2)
按 9:16 竖版生成 4 张核心画面(1152×2048):
| 素材 | 内容 | 提示词要点 |
|---|---|---|
| 最终还原像 | 人物半身肖像 | 约X岁、时代服饰、真实人像摄影、电影级光影、超写实、暗色背景、庄重 |
| 战乱/氛围图 | 时代背景 | 氛围、史诗感 |
| AI初稿过程图 | 草稿效果 | 未完成、素描感 |
| 诗意图 | 人物代表诗句意境 | 月下/饮酒/剪影等 |
生图命令(RunningHub):
py skills/runninghub/scripts/runninghub.py --endpoint <text-to-image端点> --prompt "<提示词>" --param aspectRatio=9:16 -o "media/<人物>/<name>.png"
3. TTS 配音(磁性男声)
- 端点:
rhart-audio/text-to-audio/speech-2.8-hd - 磁性男声:
voice_id=male-qn-qingse(低沉有磁性;备选 audiobook_male_2 沉稳) - 语速:
speed=1.05(纪录片节奏,中等偏快) - 成本参考:全文约 ¥0.025,5s 测试 ¥0.002
py skills/runninghub/scripts/runninghub.py --endpoint rhart-audio/text-to-audio/speech-2.8-hd --prompt "<全文文案>" --param voice_id=male-qn-qingse --param speed=1.05 --param enable_base64_output=false --param english_normalization=false -o "<out>.mp3"
⚠️ PowerShell 传长中文文案易出错 → 先把文案写入 txt(UTF-8),用 Get-Content -Raw -Encoding UTF8 读入变量再传。
4. BGM(低沉史诗感)
- 端点:
rhart-audio/text-to-audio/music-2.5 - 目标:60s 左右低沉史诗配乐(成本约 ¥0.12)
- 混音时压到配音的 16% 音量
第二步:卡片制作(PIL + 大气字体)
用 Python PIL 生成 3 张 1080×1920 卡片:
| 卡片 | 用途 | 内容 |
|---|---|---|
| card_hook.png | 0-5.5s 钩子封面 | 黑底+模糊人物轮廓+大标题+关键词 |
| card_keywords.png | 8-13s 关键词卡 | 史料/五官/须发/冠服/气质 线索 |
| card_compare.png | 结尾对比图 | 古画 vs AI 左右分屏+互动文字 |
关键实现:
- 主字体
font_heisong.ttf(方正粗黑宋简体,大气),点缀用simkai.ttf楷体 - 主标题 100-110px,正文 40-60px,副标题楷体
- 钩子卡背景:最终还原像 GaussianBlur(30) + 压暗(Brightness 0.28)叠在近黑底上
- 对比卡:
ImageOps.fit左右各半(古画 | AI还原)
第三步:视频合成(ffmpeg)
时间轴模板(按配音时长动态对齐)
以曹操版实测切点(配音 56.27s)为基准:
0-5.5s S1 钩子(card_hook 缓慢推近 zoompan)
5.5-8s S2 古画像快闪(两张各1.25s,轻微 zoom)
8-13s S3 关键词卡
13-20s S4 AI初稿缓慢放大
20-27s S5 五官修正(初稿→还原像 xfade 交叉溶解 1.5s)
27-40s S6 最终揭晓(还原像推近 + 大气字体字幕)
40-50s S7 诗意图(对酒当歌类 + 大字字幕)
50-56.3s S8 互动结尾(对比图 + "英雄,还是枭雄?下一期想看X还是Y?")
若新配音时长不同,按比例缩放各段,保证总时长=配音时长。
分段生成要点
- 统一
-r 30 -c:v libx264 -pix_fmt yuv420p -an - 推近动效:
zoompan=z='min(zoom+0.0008,1.06)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=<帧数>:s=1080x1920:fps=30 - drawtext 字幕必须用相对路径字体 + cwd=workspace(Windows 冒号转义坑:
C:会被当选项分隔符,方案=把字体复制到工作目录用font_heisong.ttf) - 多输入片段(S5 交叉溶解)用
-filter_complex,不能用-vf
拼接与混音
# concat 拼接
ffmpeg -y -v error -f concat -safe 0 -i concat_list.txt -c copy video_silent.mp4
# 混音:配音1.0 + BGM 0.16,normalize=0 + volume=2.0 提升响度
ffmpeg -y -v error -i video_silent.mp4 -i peiyin.mp3 -i bgm.mp3 \
-filter_complex "[1:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=1.0[vo];[2:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.16[bg];[vo][bg]amix=inputs=2:duration=first:dropout_transition=2:normalize=0,volume=2.0[aout]" \
-map 0:v -map "[aout]" -c:v copy -c:a aac -b:a 192k -shortest video_final.mp4
第四步:质量验证(必做)
- ffprobe:确认时长=配音时长、1080×1920、h264+aac
- 关键帧亮度(视觉模型不可用时用 PIL):
ffmpeg -i video.mp4 -vf "fps=1/7" check_%02d.png # PIL ImageStat:钩子帧 mean低但 max=255(黑底白字),其余帧 mean>30 无黑屏 - 音量:
volumedetect确认 mean≈-20dB、max≈-0.5dB(无爆音) - 抽查文字是否渲染:钩子帧标题区 max=255 即白色大字已渲染
交付规范
- 输出
video_<人物>_FINAL.mp4到media/<人物>/ - 交付时附上:时长/分辨率/音色/字体/成本明细
- 固定结尾互动句式:"你觉得更像英雄,还是枭雄?下一期想看X还是Y?"(按人物调整)
- 记住免责声明
成本参考(曹操版实测)
| 项目 | 成本 |
|---|---|
| 配音(全文磁性男声) | ¥0.025 |
| BGM(60s 史诗配乐) | ¥0.12 |
| 图片(4张 2K 竖版) | 约 ¥0.06 |
| TTS 音色测试 | ¥0.002/次 |
| 合计 | 约 ¥0.3/条 |
已验证参数速查
- 磁性男声:
male-qn-qingse;沉稳有声书:audiobook_male_2 - 大气字体:方正粗黑宋简体(
font_heisong.ttf);楷体点缀:simkai.ttf - TTS 端点:
rhart-audio/text-to-audio/speech-2.8-hd - BGM 端点:
rhart-audio/text-to-audio/music-2.5 - 画质:1152×2048 生图 → 1080×1920 输出
脚本模板文件
本技能建议同目录维护:
scripts/make_cards.py— 卡片生成(参数化:人物名、标题、关键词、古画/AI图路径)scripts/make_video.py— 分段+拼接+混音全流程(参数化:各段素材、配音、BGM、字幕文字)
