FMT视频制作技能 v1.0
将图片素材合成为完整FMT科普视频 v1.0(2026-05-12):视频合成+字幕+配音+片头片尾全流程
工具说明
| 工具 | 用途 |
|---|---|
gen_videos(T2V模式) | 根据Prompt生成片头/片尾视频片段 |
batch_text_to_video | 批量生成短视频片段(片头/过渡/片尾) |
tts | 中文旁白配音(文字转语音) |
exec(ffmpeg) | 视频合成、字幕烧录、音画同步 |
一、输入素材规范
标准输入格式
/workspace/fmt_pages/p[NN]_[主题]/
├── static.png ← 4K静态插画(原图)
├── HD.mp4 ← 1080P动态视频(已有字幕)
└── metadata.json ← 页面元数据
素材文件检查清单
[ ] static.png 存在且 ≥ 4K分辨率
[ ] HD.mp4 存在且为1080P/6秒
[ ] 有对应解说词文本(用于配音)
[ ] 有字幕内容(用于SRT)
[ ] 片头视频已生成(用于合成)
二、片头视频生成(可选,推荐使用)
片头规格:6秒,1080P,统一风格
生成命令(gen_videos T2V模式):
gen_videos({
video_requests: [{
duration: 6,
output_file: "/workspace/fmt_video_intro.mp4",
prompt: "A dramatic medical science intro animation. Soft blue-white gradient background. Large Chinese characters '肠菌移植' slowly fade in with golden glow effect. Animated medical icons (DNA helix, gut cross-section, bacteria) twinkle and rotate gently. Warm friendly atmosphere, high quality 1080P. Subtle light particles float upward. Duration 6 seconds, cinematic feel.",
resolution: "1080P"
}]
})
片头Prompt库(直接使用):
[片头A - 主题引入型]
A gentle fade-in opening. Blue gradient background. Chinese title "肠菌移植" in elegant white font fades in with golden glow. Animated gut icon rotates slowly. Medical bacteria icons float gently. Warm scientific atmosphere. 1080P, 6 seconds.
[片头B - 人物引入型]
A chibi doctor character waves and smiles at camera. City hospital background fades in. Title "肠菌移植科普" appears with soft bounce animation. Bubbles and light particles rise. Friendly educational tone. 1080P, 6 seconds.
三、中文配音(TTS)
工具:tts — 直接生成音频,自动发送
配音生成命令
tts({ text: "[完整解说词,最多500字/段]" })
音频自动生成并发送,回复写 NO_REPLY
分段配音规则
- 每段 ≤ 500字(中文),超过则自动分段
- 段间停顿:约1秒(自动处理)
- 语速:正常(1.0x)
- 推荐每张图配一段(6秒视频对应约80-120字配音)
解说词编写规范
[原则]
- 每句话 ≤ 20字,便于TTS自然表达
- 医学术语加停顿:"肠 | 菌 | 移 | 植" 而非 "肠菌移植"
- 避免歧义读音:"重于" vs "终于" → 明确写"不同于"
- 数字读法:10% → "百分之十",3期 → "第三期"
[示例 - 页面1肠菌移植概述]
"欢迎来到肠菌移植科普。今天我们了解一种创新的治疗方法。它通过重建肠道菌群,帮助恢复健康。让我们开始吧。"
四、字幕文件制作(SRT格式)
SRT格式说明
序号
开始时间 --> 结束时间
字幕内容
(空行)
序号
开始时间 --> 结束时间
字幕内容
时间码格式:时:分:秒,毫秒(例如 00:01:23,456)
自动生成SRT脚本
在 /workspace/scripts/fmt_make_srt.py:
#!/usr/bin/env python3
"""自动生成SRT字幕文件"""
import sys
def make_srt(time_start, time_end, index, text):
"""生成单条字幕"""
def fmt(t):
ms = int((t - int(t)) * 1000)
s = int(t) % 60
m = (int(t) // 60) % 60
h = int(t) // 3600
return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"
return f"{index}\n{fmt(time_start)} --> {fmt(time_end)}\n{text}\n\n"
# 示例:为6秒视频生成3条字幕
# 每条字幕持续2秒
lines = [
make_srt(0.0, 2.0, 1, "肠菌移植"),
make_srt(2.0, 4.0, 2, "重建肠道健康"),
make_srt(4.0, 6.0, 3, "苏州市立医院"),
]
srt_content = "".join(lines)
with open("/workspace/fmt_01.srt", "w", encoding="utf-8") as f:
f.write(srt_content)
print("SRT生成完成: /workspace/fmt_01.srt")
实际SRT生成命令
# 方式A:用Python脚本生成
cd /workspace
python3 -c "
def fmt(t):
ms = int((t - int(t)) * 1000)
s = int(t) % 60
m = (int(t) // 60) % 60
h = int(t) // 3600
return f'{h:02d}:{m:02d}:{s:02d},{ms:03d}'
subtitle_lines = [
(0.0, 2.0, '欢迎了解肠菌移植'),
(2.0, 4.0, '重建肠道微生态平衡'),
(4.0, 6.0, '苏州市立医院肠菌移植医学中心'),
]
with open('/workspace/fmt_s01.srt', 'w', encoding='utf-8') as f:
for i, (s, e, text) in enumerate(subtitle_lines, 1):
f.write(f'{i}\n{fmt(s)} --> {fmt(e)}\n{text}\n\n')
print('Done')
"
五、ffmpeg视频合成命令
检查ffmpeg是否可用
ffmpeg -version 2>&1 | head -1
- 输出版本号 → 可用
- command not found → 切换备选方案(见降级策略)
场景1:视频+字幕合成(推荐)
ffmpeg -i /workspace/fmt_pages/p01_肠菌移植概述/HD.mp4 \
-vf "subtitles=/workspace/fmt_s01.srt:force_style='FontName=Noto Sans CJK SC,FontSize=36,PrimaryColour=\&HFFFFFF,Outline=2,Bold=1'" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
/workspace/fmt_pages/p01_肠菌移植概述/final.mp4
⚠️ 若视频已有内置音轨,使用
-c:a aac -b:a 192k重新编码
场景2:视频+配音合成(音画同步)
ffmpeg -i /workspace/fmt_pages/p01_肠菌移植概述/HD.mp4 \
-i /workspace/fmt_01_audio.mp3 \
-c:v copy -c:a aac -b:a 192k \
-shortest \
/workspace/fmt_pages/p01_肠菌移植概述/final_with_audio.mp4
场景3:视频+字幕+配音全合成
ffmpeg -i /workspace/fmt_pages/p01_肠菌移植概述/HD.mp4 \
-i /workspace/fmt_01_audio.mp3 \
-vf "subtitles=/workspace/fmt_s01.srt:force_style='FontName=Noto Sans CJK SC,FontSize=36,PrimaryColour=\&HFFFFFF,Outline=2,Bold=1'" \
-c:v libx264 -preset fast -crf 23 \
-c:a aac -b:a 192k \
-shortest \
/workspace/fmt_pages/p01_肠菌移植概述/final_complete.mp4
场景4:片头+内容视频拼接
# 先检查片头和内容视频时长
ffprobe -v error -show_entries format=duration -of csv=p=0 /workspace/fmt_video_intro.mp4
ffprobe -v error -show_entries format=duration -of csv=p=0 /workspace/fmt_pages/p01_肠菌移植概述/final_complete.mp4
# 拼接(需先安装mkvmerge或用ffmpeg concat)
ffmpeg -f concat -safe 0 -i <(echo "file '/workspace/fmt_video_intro.mp4'"
echo "file '/workspace/fmt_pages/p01_肠菌移植概述/final_complete.mp4'") \
-c copy \
/workspace/fmt_pages/p01_肠菌移植概述/full_with_intro.mp4
字幕样式自定义
force_style 参数说明:
FontName=Noto Sans CJK SC ← 字体(系统需有Noto Sans CJK)
FontSize=36 ← 字号(1080P推荐36-48)
PrimaryColour=&HFFFFFF ← 文字颜色(白色&HFFFFFF,十六进制)
Outline=2 ← 描边宽度(2-3px防遮挡)
Bold=1 ← 加粗
Alignment=2 ← 底部居中(2=下方中间)
MarginV=20 ← 距底部边距(px)
六、工作流程(完整版)
标准流程:单页视频制作
[输入] 用户提供:页面编号+主题+解说词文本+字幕内容
Step 1: 检查素材
检查 HD.mp4 是否存在
检查 static.png 是否存在
Step 2: 生成/确认配音
调用 tts({ text: "[解说词]" })
音频保存路径:/workspace/fmt_pages/p[N]_[主题]/narration.mp3
回复 NO_REPLY
Step 3: 生成SRT字幕
用Python脚本自动生成SRT文件
保存路径:/workspace/fmt_pages/p[N]_[主题]/subtitle.srt
Step 4: 视频合成(ffmpeg可用时)
执行 ffmpeg 命令合并视频+字幕+配音
输出:/workspace/fmt_pages/p[N]_[主题]/final_complete.mp4
Step 5: 检查输出
核查:时长、分辨率、音画同步、字幕显示
检查通过 → 上传CDN → 飞书发送
检查失败 → 降级处理(见降级策略)
Step 6: 发送结果
发送视频CDN链接 + 告知内容
批量流程:多页视频制作
[输入] 用户提供:页面列表 [p1,p2,...pN] + 每页解说词
Step 0: 生成片头(仅1次)
gen_videos → 片头视频 → /workspace/fmt_video_intro.mp4
Step 1: 批量生成配音
遍历页面列表,逐个调用 tts
每页生成 narration.mp3
Step 2: 批量生成字幕
遍历页面列表,逐个生成 SRT 文件
Step 3: 批量视频合成
遍历页面列表,逐个执行 ffmpeg 全合成
Step 4: 片头拼接
遍历页面,逐个拼接片头 + 内容视频
Step 5: 汇总报告
生成汇总报告,包含所有视频CDN链接
七、降级策略
降级1:ffmpeg不可用
触发:ffmpeg -version 返回 command not found
降级动作:
① 尝试安装:apt-get install ffmpeg(或通过其他包管理器)
② 若无法安装:仅输出"视频+字幕"或"视频+配音"分开交付
- 视频文件(HD.mp4)
- 音频文件(narration.mp3)
- 字幕文件(subtitle.srt)
告知用户:用本地视频编辑软件(如剪映/PR)自行合成
降级2:字幕字体缺失
触发:烧录字幕时字体显示异常(方块/乱码)
降级动作:
① 更换字体为系统可用字体(用Python Pillow预渲染文字为图片叠加)
② 或生成ASS格式字幕(ffmpeg对ASS格式字体支持更好)
③ 最终方案:输出 .srt 文件,用户在视频软件中导入
降级3:音画不同步
触发:配音时长与视频时长差异 > 0.5秒
降级动作:
① 计算时长差,调整ffmpeg参数
② 若配音偏短:用 -af "apad=whole_dur=6" 填充静音
③ 若配音偏长:用 -t 6 截断
④ 或告知用户视频为静音版,字幕版可自行添加配音
八、输出规范
| 类型 | 路径 | 说明 |
|---|---|---|
| 完整视频 | fmt_pages/p[NN]/final_complete.mp4 | 含字幕+配音 |
| 仅视频+字幕 | fmt_pages/p[NN]/final_video_subtitle.mp4 | 无配音 |
| 配音音频 | fmt_pages/p[NN]/narration.mp3 | TTS音频 |
| 字幕文件 | fmt_pages/p[NN]/subtitle.srt | SRT格式 |
| 片头视频 | /workspace/fmt_video_intro.mp4 | 仅生成1次 |
| 全流程视频 | fmt_pages/p[NN]/full_with_intro.mp4 | 含片头 |
九、常用命令速查
# 检查ffmpeg
ffmpeg -version 2>&1 | head -1
# 视频+字幕(最常用)
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='FontName=Noto Sans CJK SC,FontSize=36,PrimaryColour=&HFFFFFF,Outline=2'" -c:v libx264 -preset fast -crf 23 -c:a copy output.mp4
# 视频+配音
ffmpeg -i input.mp4 -i audio.mp3 -c:v copy -c:a aac -b:a 192k -shortest output.mp4
# 视频+字幕+配音
ffmpeg -i input.mp4 -i audio.mp3 -vf "subtitles=subtitle.srt" -c:v libx264 -preset fast -crf 23 -c:a aac -b:a 192k -shortest output.mp4
# 拼接片头
ffmpeg -f concat -safe 0 -i <(echo "file 'intro.mp4'"; echo "file 'content.mp4'") -c copy output.mp4
更新于:2026-05-12 v1.0 — 视频合成+字幕+配音+片头片尾全流程