2026-05-21-15-50-21 记录系统使用视频配音生成
This commit is contained in:
55
工程分析/实现方案-2026-05-21-15-50-21.md
Normal file
55
工程分析/实现方案-2026-05-21-15-50-21.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# 实现方案:系统使用视频配音版生成
|
||||||
|
|
||||||
|
实现方案文档路径:`工程分析/实现方案-2026-05-21-15-50-21.md`
|
||||||
|
|
||||||
|
## 修改目标
|
||||||
|
|
||||||
|
生成 5 分钟版和 10 分钟版系统使用视频的中文配音成片,并保证音视频最终时长一致。
|
||||||
|
|
||||||
|
## 涉及路径
|
||||||
|
|
||||||
|
- `视频配音/基于模型逆向体素化及DICOM分割标注系统-使用视频-5min版.mp4`
|
||||||
|
- `视频配音/基于模型逆向体素化及DICOM分割标注系统-使用视频-10min版.mp4`
|
||||||
|
- `视频配音/配音生成工作流-Ubuntu-Agent.md`
|
||||||
|
- `视频配音/Tools_scripts_XunFei-Ubuntu/`
|
||||||
|
- `视频配音/01_scripts/`
|
||||||
|
- `视频配音/02_audio/`
|
||||||
|
- `视频配音/04_intermediate/`
|
||||||
|
- `视频配音/05_outputs/`
|
||||||
|
|
||||||
|
## 技术路线
|
||||||
|
|
||||||
|
1. 使用 `ffprobe` 获取两个视频的准确时长、分辨率、帧率和音轨信息。
|
||||||
|
2. 抽样生成 contact sheet,快速阅览视频内容与操作流程。
|
||||||
|
3. 根据画面内容分别撰写 5 分钟和 10 分钟配音稿。
|
||||||
|
4. 优先检查讯飞 TTS 环境变量;当前环境缺少讯飞凭证时,使用已安装的 `edge-tts` 生成中文 MP3。
|
||||||
|
5. 将 TTS 音频规范化为 48kHz stereo WAV。
|
||||||
|
6. 使用 `ffmpeg` 通过 `apad` 与 `atrim` 将旁白音频严格对齐视频时长。
|
||||||
|
7. 将原视频静音并合入新旁白,输出 H.264/AAC MP4。
|
||||||
|
8. 使用 `ffprobe` 校验最终视频格式、音轨和时长差。
|
||||||
|
|
||||||
|
## 执行步骤
|
||||||
|
|
||||||
|
- 创建配音工作子目录。
|
||||||
|
- 写入 `配音稿-5min.md` 与 `配音稿-10min.md`。
|
||||||
|
- 对配音稿做 TTS 干跑或等效段落检查。
|
||||||
|
- 使用 `edge-tts` 分别生成原始旁白音频。
|
||||||
|
- 根据视频时长生成对齐后的 WAV 音轨。
|
||||||
|
- 用 `ffmpeg -map 0:v:0 -map 1:a:0 -shortest` 合成配音版视频。
|
||||||
|
- 对原始视频、旁白音频、对齐音频和最终视频做时长比对。
|
||||||
|
|
||||||
|
## 兼容性与回滚方案
|
||||||
|
|
||||||
|
- 原始视频不修改,输出文件单独放在 `05_outputs/`。
|
||||||
|
- 如后续提供讯飞凭证,可复用配音稿重新运行 `Tools_scripts_XunFei-Ubuntu` 的讯飞脚本生成更接近指定工作流的音色。
|
||||||
|
- 若用户希望调整语气或文案,只需改 `01_scripts/` 下对应配音稿并重新生成音频与合成视频。
|
||||||
|
|
||||||
|
## 预计文件变更
|
||||||
|
|
||||||
|
- 新增视频配音脚本、音频、最终视频和校验记录。
|
||||||
|
- 新增三份工程分析文档并追加 `经验记录.md`。
|
||||||
|
|
||||||
|
## 提交与部署策略
|
||||||
|
|
||||||
|
- 本次不需要重新部署 WebSite,因为不修改程序服务。
|
||||||
|
- 按工作流提交工程分析文档备份,避免把大体积视频产物混入 Git 提交。
|
||||||
84
工程分析/测试方案-2026-05-21-15-50-21.md
Normal file
84
工程分析/测试方案-2026-05-21-15-50-21.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# 测试方案:系统使用视频配音版生成
|
||||||
|
|
||||||
|
测试方案文档路径:`工程分析/测试方案-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 访问。
|
||||||
18
工程分析/经验记录.md
18
工程分析/经验记录.md
@@ -1567,3 +1567,21 @@ C. 解决问题方案
|
|||||||
D. 后续如何避免问题
|
D. 后续如何避免问题
|
||||||
|
|
||||||
后续同一版本存在多个部署形态、系统架构或环境模板时,优先使用“一个 Release + 多个命名附件”的发布模型;只有当版本号、功能内容或源码状态确实不同,才拆成多个 Release。删除旧 Release 前必须先确认新 Release 的附件数量、名称和大小均已从 Gitea API 读回,避免页面清理造成发布物短暂缺失。
|
后续同一版本存在多个部署形态、系统架构或环境模板时,优先使用“一个 Release + 多个命名附件”的发布模型;只有当版本号、功能内容或源码状态确实不同,才拆成多个 Release。删除旧 Release 前必须先确认新 Release 的附件数量、名称和大小均已从 Gitea API 读回,避免页面清理造成发布物短暂缺失。
|
||||||
|
|
||||||
|
## 2026-05-21-15-50-21 视频配音应以视频流时长对齐而非容器时长
|
||||||
|
|
||||||
|
A. 具体问题
|
||||||
|
|
||||||
|
用户要求为 5 分钟版和 10 分钟版系统使用视频生成配音版,并明确不能出现视频结束后仍有声音,或声音结束后视频继续播放。原始 MP4 的容器时长与视频流时长存在约 0.1 秒差异,如果直接按容器时长对齐音频,末尾可能出现极短的音频尾巴。
|
||||||
|
|
||||||
|
B. 产生问题原因
|
||||||
|
|
||||||
|
MP4 容器时长通常取所有流的最大持续时间,原始录屏中音频流和容器时长略长于视频流。配音合成时如果只读取 `format=duration`,会把旁白音轨拉到容器时长;播放器显示上虽然总时长一致,但最后一帧之后仍可能存在很短音频区间,不符合“视频结束不要还有声音”的交付要求。
|
||||||
|
|
||||||
|
C. 解决问题方案
|
||||||
|
|
||||||
|
先用 `ffprobe` 分别读取视频流时长、容器时长和音频时长,再以 `v:0` 视频流时长作为最终目标。TTS 原始音频与目标时长差距较小时,使用 `ffmpeg atempo` 做小幅伸缩,并用 `apad + atrim` 精确裁定到视频流时长。最终合成时只映射原视频流和新配音音轨,去除原始音轨,并再次用 `ffprobe` 验证视频流和音频流时长完全一致。
|
||||||
|
|
||||||
|
D. 后续如何避免问题
|
||||||
|
|
||||||
|
后续生成配音、字幕或二次包装视频时,不能只看 MP4 容器总时长;必须同时检查视频流和音频流时长。若目标是避免片尾空声,应以视频流时长为准;若目标是保留完整旁白,则需要明确允许画面补帧或拉伸。大幅时长差不要依赖静音填充,应优先调整文案长度和 TTS 语速,再做细微 `atempo` 对齐。
|
||||||
|
|||||||
57
工程分析/需求分析-2026-05-21-15-50-21.md
Normal file
57
工程分析/需求分析-2026-05-21-15-50-21.md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# 需求分析:系统使用视频配音版生成
|
||||||
|
|
||||||
|
开始时间:2026-05-21-15-50-21
|
||||||
|
|
||||||
|
## 原始需求摘要
|
||||||
|
|
||||||
|
用户要求阅读 `视频配音/` 中两个当前系统使用视频:
|
||||||
|
|
||||||
|
- `基于模型逆向体素化及DICOM分割标注系统-使用视频-5min版.mp4`
|
||||||
|
- `基于模型逆向体素化及DICOM分割标注系统-使用视频-10min版.mp4`
|
||||||
|
|
||||||
|
并参考 `配音生成工作流-Ubuntu-Agent.md` 生成带配音的最终视频。要求配音文本、音频与视频长度一致,避免出现视频结束后仍有声音,或声音结束后视频继续播放的情况。
|
||||||
|
|
||||||
|
## 业务目标
|
||||||
|
|
||||||
|
- 为 5 分钟版和 10 分钟版系统使用视频生成中文旁白。
|
||||||
|
- 输出两个带配音的 MP4 成片。
|
||||||
|
- 最终成片音轨与画面时长严格对齐。
|
||||||
|
- 生成过程保留配音稿、音频和校验记录,便于后续复用与调整。
|
||||||
|
|
||||||
|
## 输入与输出
|
||||||
|
|
||||||
|
输入:
|
||||||
|
|
||||||
|
- 两个原始系统使用视频。
|
||||||
|
- `视频配音/配音生成工作流-Ubuntu-Agent.md`。
|
||||||
|
- `视频配音/Tools_scripts_XunFei-Ubuntu/` 中的配音与合成工具。
|
||||||
|
|
||||||
|
输出:
|
||||||
|
|
||||||
|
- 5 分钟版配音稿、音频和配音成片。
|
||||||
|
- 10 分钟版配音稿、音频和配音成片。
|
||||||
|
- 本次工程分析记录与测试结果。
|
||||||
|
|
||||||
|
## 影响范围
|
||||||
|
|
||||||
|
- 新增 `视频配音/` 下的配音稿、音频、中间文件和最终视频。
|
||||||
|
- 新增本次 `工程分析/` 文档,追加经验记录。
|
||||||
|
- 不修改 WebSite 业务代码。
|
||||||
|
|
||||||
|
## 关键约束
|
||||||
|
|
||||||
|
- 不覆盖原始视频。
|
||||||
|
- 最终视频需去除原视频声音,只保留新旁白。
|
||||||
|
- 音频总时长必须和输出视频时长一致。
|
||||||
|
- 当前环境没有 `XF_APPID`、`XF_APIKEY`、`XF_APISECRET`,若无法调用讯飞 TTS,则使用本机可用中文 TTS 方案完成交付,并记录偏差。
|
||||||
|
|
||||||
|
## 风险点
|
||||||
|
|
||||||
|
- TTS 服务网络或凭证不可用导致无法按讯飞流程生成。
|
||||||
|
- 旁白文案长度与视频长度差距过大,会导致音频拉伸或静音过多。
|
||||||
|
- 大视频合成耗时较长,需用 `ffprobe` 校验最终时长和音轨。
|
||||||
|
|
||||||
|
## 默认假设
|
||||||
|
|
||||||
|
- 允许在讯飞凭证缺失时使用本机已有 `edge-tts` 作为替代 TTS 引擎。
|
||||||
|
- 输出视频可放在 `视频配音/05_outputs/`,无需覆盖原始视频。
|
||||||
Reference in New Issue
Block a user