# 自动转码

自动转码是指在每段录制完成后,自动调用 ffmpeg 把录制文件转换成你需要的格式/编码(例如统一转成 H.264 编码的 MP4,方便剪辑或二次开发)。适合对录制文件有明确编码、封装、体积要求的进阶用户。

# 这是什么、和时间轴修复是什么关系

DDTV 在每段录制完成后会执行一次 ffmpeg 处理,执行的参数由配置项 AutomaticRepair_Arguments 决定:

  • 默认参数是 -y -i "{before}" -c copy "{after}",只做转封装 + 时间轴修复(详见时间轴修复),不重新编码;
  • 把这段参数改成带编码选项的 ffmpeg 参数,这一步就变成了真正的转码

也就是说"时间轴修复"和"自动转码"是同一个开关、同一个流程,区别只在你填的参数。

# 怎么开启

配置文件 ./Config/DDTV_Config.ini(也可在 Desktop 设置页 / WEBUI 设置中修改):

配置项 默认值 说明
AutomaticRepair true 总开关,true 时每段录制完成后自动执行
AutomaticRepair_Arguments -y -i "{before}" -c copy "{after}" 执行的 ffmpeg 参数,{before} 会被替换为源文件路径、{after} 替换为输出文件路径
DeleteOriginalFileAfterRepair true 转码成功后删除源文件
TranscodeFileDifference 0.05 输出文件允许比源文件小的最大比例(默认 5%),小得更多时判定异常并保留源文件
UsingCustomFFMPEG 自定义 ffmpeg 路径,如 D:/tools/ffmpeg.exe

ffmpeg 查找顺序(Windows):UsingCustomFFMPEG./Plugins/ffmpeg/ffmpeg.exe./Plugins/Plugins/ffmpeg/ffmpeg.exe;Linux/macOS 使用系统 PATH 中的 ffmpeg,需自行安装。

# 参数怎么写

参数中的两个占位符:

  • {before}:录制完成的源文件(xxx_original.mp4xxx_original.flv
  • {after}:输出文件,固定为 xxx_fix.mp4

示例 1:转成 H.264 + AAC 的通用 MP4(适合剪辑软件兼容性要求高的场景):

-y -i "{before}" -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 192k "{after}"

示例 2:视频直接复制、只把音频转成 AAC(快,体积几乎不变):

-y -i "{before}" -c:v copy -c:a aac "{after}"

# 注意事项

WARNING

  • 输出扩展名固定为 _fix.mp4,所以参数里请不要输出非 MP4 封装格式(如 MKV),否则文件名与实际封装不符。
  • 转码是逐段进行的:如果开启了自动切割,每个分段录制完成后都会各自转码一次。
  • 真正的转码(重新编码)比较吃 CPU,长时间录制结束后转码会持续一段时间,低配机器(尤其是 NAS、软路由)请评估性能,或改用 -c:v copy 类的轻量参数。
  • 转码后文件比源文件小超过 TranscodeFileDifference 的比例时,会判定结果异常而保留源文件。压缩率较高的转码参数(如高 CRF)很容易触发这个保护,建议把 TranscodeFileDifference 调大(如 0.5)或关闭 DeleteOriginalFileAfterRepair
  • 转码失败时会在源文件旁生成 xxx_fix日志.log(ffmpeg 完整输出),配置了邮件通知时会收到失败提醒邮件。