# 时间轴修复
时间轴修复是 DDTV 在每段录制完成后自动执行的"修复 + 转封装"流程,用来解决录出来的视频无法拖动进度条、时长显示错误、部分播放器打不开等问题。该功能默认开启,普通用户无需任何设置即可享受;本页主要解释它的工作原理,以及出问题时怎么手动处理。
# 为什么录出来的文件需要修复
DDTV 录制时是把网络上的直播流数据直接写入本地文件的:
- HLS 模式(默认):把 fMP4 分片(m4s)逐个追加写入
_original.mp4 - FLV 模式:把 FLV 流追加写入
_original.flv
这种方式快且省资源,但直播流的时间戳由主播端推流决定——主播网络卡顿、断线重推、PK 连线切换时,时间戳可能跳变或重置,直写出来的文件缺少正确的索引信息,播放器就会无法拖动进度条或显示错误时长。
# DDTV 的处理方法
每段录制结束后,DDTV 会自动调用 ffmpeg 对原始文件做一次转封装处理:
-y -i "{before}" -c copy "{after}"
-c copy 表示不重新编码,只是重新封装并按正确顺序重建索引/时间轴,速度快、无画质损失。处理完成后:
- 原始文件:
xxx_original.mp4(HLS)或xxx_original.flv(FLV) - 修复后文件:
xxx_fix.mp4
修复成功且文件大小符合预期时,源文件会被自动删除,最终你得到的就是一个可以正常播放、正常拖动的 xxx_fix.mp4。
# 相关配置
配置文件 ./Config/DDTV_Config.ini(也可在 Desktop 设置页 / WEBUI 设置中修改):
| 配置项 | 默认值 | 说明 |
|---|---|---|
AutomaticRepair | true | 录制完成后自动修复/转码总开关 |
AutomaticRepair_Arguments | -y -i "{before}" -c copy "{after}" | 修复时执行的 ffmpeg 参数({before}/{after} 为占位符),想做真正的转码见自动转码 |
DeleteOriginalFileAfterRepair | true | 修复成功后删除 _original 源文件 |
TranscodeFileDifference | 0.05 | 修复后文件允许的最大体积误差比例(默认 5%)。修复后文件比源文件小超过这个比例时,判定为异常,保留源文件 |
DetectErroneousFilesFixThem | false | 检测到修复结果异常时,改用 MKVToolNix 尝试高级修复(需要 MKVToolNix) |
UsingCustomFFMPEG | 空 | 自定义 ffmpeg 路径,如 D:/tools/ffmpeg.exe |
RecordingMode | 1 | 录制模式:1=Auto(优先 HLS,无 HLS 流时自动降级 FLV 兜底)、2=FLV_Only、3=HLS_Only |
ffmpeg 路径优先级(Windows):UsingCustomFFMPEG 自定义路径 → ./Plugins/ffmpeg/ffmpeg.exe → ./Plugins/Plugins/ffmpeg/ffmpeg.exe;非 Windows 系统直接使用系统 PATH 中的 ffmpeg,因此 Linux/macOS 用户需要先自行安装 ffmpeg 并加入环境变量,否则修复/转码无法执行。
# 修复结果异常时会发生什么
- 修复后的文件比源文件小超过
TranscodeFileDifference设定的比例:判定修复结果异常,不删除源文件;若开启了DetectErroneousFilesFixThem,会再尝试用 MKVToolNix 修复一次。配置了邮件通知时会收到"放弃转码"提醒邮件。 - 修复过程本身出错(如 ffmpeg 不存在、参数错误):会在源文件旁生成
xxx_fix日志.log记录 ffmpeg 的完整输出,配置了邮件通知时会收到"修复或转码失败"邮件,方便排查。
# 手动修复 fMP4 文件
如果某个 HLS 录制的 _original.mp4 在自动修复前就损坏了(例如录制中程序异常退出导致文件结构断裂),Desktop(桌面版)的"更多工具"页面提供了 fMP4 结构修复工具:它会扫描文件的 box 结构,提取所有有效的音视频分片(moof+mdat)重新封装成新文件,能救回大部分断裂的录制文件。