You need to enable JavaScript to run this app. ffmpeg导出章节时间元数据与ffprobe输出不一致如何处理
优惠活动
大模型
产品
解决方案
定价
更多

ffmpeg导出章节时间元数据与ffprobe输出不一致如何处理

ffmpeg与ffprobe章节时间偏差处理方案

偏差原因

你看到的时间差本质是ffprobe默认对格式化输出的时间字段做了四舍五入,不是两者读取的原始元数据有差异:

  • ffmpeg导出的ffmetadata中START/END是基于章节指定TIMEBASE的原始整数计数,没有任何舍入处理
  • ffprobe输出的start_time/end_time是面向阅读的展示值,默认保留6位小数,会自动对更精细的时间戳做四舍五入,所以和原始值有偏差

正确处理方式

方法1:用原始字段自行计算(无精度损失,优先推荐)

不要直接使用start_time/end_time这两个格式化字段,改用ffprobe输出的原始整数+时间基计算精确时间:

  • 取ffprobe输出的start、end整数字段,结合对应章节的time_base(格式为分子/分母)计算:
    精确时间(秒) = 整数字段值 * 分子 / 分母
    
    以你给出的示例为例,time_base为1/1000时,533975 * 1 / 1000 = 533.975秒,和ffmpeg导出的结果完全一致。
    如果发现ffprobe输出的start/end整数字段和ffmpeg的不匹配,给命令加-keep_chapters 1参数即可保留章节原始时间基,不会做自动转换。

方法2:调整ffprobe参数直接输出无舍入时间

如果需要ffprobe直接输出和ffmpeg对齐的格式化时间,修改命令增加精度参数即可:

ffprobe -i INPUT.mp4 -keep_chapters 1 -show_chapters -print_format json -precision 9

-precision 9会保留9位小数,关闭默认的四舍五入逻辑,输出的start_time/end_time就和ffmpeg的原始时间完全匹配。

方法3:元数据回写适配

如果需要把ffprobe读取的章节信息重新写入ffmetadata格式,直接把ffprobe的start/end整数字段作为START/END的值,把time_base作为TIMEBASE的值即可,不需要额外换算。


内容的提问来源于stack exchange,提问作者loretoparisi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 04:06:05