# 测试方案:系统使用视频配音版生成 测试方案文档路径:`工程分析/测试方案-2026-05-21-15-50-21.md` ## 静态检查 - 检查原始视频是否存在且可被 `ffprobe` 识别。 - 检查 `ffmpeg`、`ffprobe`、`python3`、TTS 工具是否可用。 - 检查输出目录不覆盖原始视频。 ## 构建检查 - 本次不涉及前端或后端构建。 - 以音视频合成为构建动作,检查 `ffmpeg` 命令是否成功退出。 ## 关键业务场景验证 - 5 分钟版视频生成带配音成片。 - 10 分钟版视频生成带配音成片。 - 原视频音轨被替换,不出现原声与旁白叠加。 - 最终视频能被 `ffprobe` 识别为 H.264/AAC MP4。 ## 医学影像数据相关边界验证 - 配音内容围绕 DICOM 影像、STL 模型、逆向分割映射、构件层级、位姿调整、项目库、导出和系统管理等功能展开。 - 不在配音中暗示该演示系统已经完成真实临床诊断或自动诊断结论。 ## 音视频对齐验证 - 读取原始视频时长。 - 读取原始 TTS 音频时长。 - 读取对齐后音频时长。 - 读取最终配音视频时长。 - 要求最终视频和最终音频流时长误差控制在 0.1 秒以内。 ## 部署验证 - 本次不重新部署 WebSite。 - 如需服务状态佐证,可读取当前健康接口。 ## Git/Gitea 备份验证 - 只提交本次工程分析文档和经验记录。 - 不把大体积 MP4/音频产物加入 Git。 ## 风险与回归关注点 - 若 TTS 音频明显短于视频,通过 `apad` 补齐会在结尾产生无声段;需尽量让配音稿长度接近视频时长。 - 若 TTS 音频长于视频,则通过 `atrim` 裁切会截断尾句;生成后需检查原始音频与目标时长差。 - 合成后必须确认音频流存在,不能只检查视频文件存在。 ## 实际验证结果 - 已确认 `ffmpeg`、`ffprobe`、`python3` 可用。 - 当前环境未配置 `XF_APPID`、`XF_APIKEY`、`XF_APISECRET`,无法直接调用讯飞 TTS;本机已安装 `edge-tts`,本次使用 `zh-CN-XiaoxiaoNeural` 作为替代中文 TTS 引擎。 - 已抽样生成并阅览 contact sheet: - `视频配音/00_review_frames/5min_contact.jpg` - `视频配音/00_review_frames/10min_contact.jpg` - 已生成配音稿与 TTS 文本: - `视频配音/01_scripts/配音稿-5min版.md` - `视频配音/01_scripts/配音稿-10min版.md` - `视频配音/01_scripts/配音文本-5min版.txt` - `视频配音/01_scripts/配音文本-10min版.txt` - 原始视频信息: - 5min 版:视频流 `297.500s`,容器 `297.600s`,`1920x1080`,`50fps`。 - 10min 版:视频流 `594.980s`,容器 `595.072s`,`1920x1080`,`50fps`。 - 原始 TTS 音频: - 5min 版:`298.080s`,使用 `edge-tts --rate=-1%`。 - 10min 版:`592.632s`,使用 `edge-tts --rate=+1%`。 - 为避免视频流结束后仍有声音,最终以视频流时长作为对齐目标,而不是容器时长: - 5min 版 `atempo=1.00194958`,对齐后音轨 `297.500s`。 - 10min 版 `atempo=0.99605365`,对齐后音轨 `594.980s`。 - 已生成最终配音视频: - `视频配音/05_outputs/基于模型逆向体素化及DICOM分割标注系统-使用视频-5min版-配音版.mp4` - `视频配音/05_outputs/基于模型逆向体素化及DICOM分割标注系统-使用视频-10min版-配音版.mp4` - `ffprobe` 校验最终视频: - 5min 版:H.264 视频流 `297.500s`,AAC 音频流 `297.500s`,误差 `0.000s`。 - 10min 版:H.264 视频流 `594.980s`,AAC 音频流 `594.980s`,误差 `0.000s`。 - `ffmpeg -v error -f null -` 解码检查: - 5min 版通过。 - 10min 版通过。 - 已写入校验记录: - `视频配音/06_reports/配音生成校验-2026-05-21-15-50-21.md` - 本次仅生成视频配音产物,不修改 WebSite 服务代码;因此不重启服务,避免影响当前 Docker 访问。