FFMPEG 与 mp4

1. FFmpeg 中的 start_timetime_base

  • start_time

    流的起始时间戳(单位:time_base),表示第一帧的呈现时间(Presentation Time)。通常用于同步多个流(如音频和视频)。

  • time_base

    时间基,是一个分数(例如 {1, 1000} 表示毫秒级),用于将时间戳转换为秒:

    复制代码
    时间(秒) = 时间戳 × time_base.num / time_base.den
1.1 MP4 文件中的对应概念

MP4 文件使用 ISO Base Media File Format (ISOBMFF) 结构,时间信息主要存储在以下 box 中:

1.2 time_base 的对应
  • mdhd box(Media Header Box)

    每个媒体轨道(Track)的 mdhd box 包含 timescale 字段,表示该轨道的时间刻度:

    • 含义 :1 秒被分成多少个时间单位(例如 timescale=90000 表示 1/90000 秒为一个单位)。
    • 对应关系 :FFmpeg 的 time_base 通常是 {1, timescale}

    示例

    若 MP4 轨道的 timescale=90000,则 FFmpeg 可能将 time_base 设为 {1, 90000}

1.3 start_time 的对应
  • tfdt box(Track Fragment Decode Time)

    存储每个片段(Fragment)的解码时间,相对于轨道开始时间。

  • ctts box(Composition Time to Sample)

    存储解码时间(DTS)到呈现时间(PTS)的偏移量,影响 start_time 的计算。

  • stts box(Decoding Time to Sample)

    定义样本的解码时间间隔,辅助计算绝对时间。

1.4. 转换关系示例

假设 MP4 文件:

  • 视频轨道 timescale=90000
  • 第一帧的 tfdt 值为 18000(表示 18000/90000 = 0.2 秒)

FFmpeg 读取时:

  • time_base = {1, 90000}
  • time_base = 1 / timescale
  • start_time = 18000(时间戳,单位为 time_base
  • 实际起始时间(秒) = 18000 × (1/90000) = 0.2
  • start_time(起始时间(秒)) = start_time × time_base
相关推荐
刘广睿2 小时前
视频字幕从提取到烧录:SRT/ASS 格式与 ffmpeg 字幕滤镜全流程
ffmpeg·音视频·效率工具·剪辑·字幕
可乐鸡翅yeah_5 小时前
FFmpeg 与浏览器 HLS 播放表现差异,定位跨客户端兼容问题
ffmpeg·音视频·m3u8·m3u8在线·音视频在线播放
刘广睿2 天前
断点续传与分片下载是怎么实现的?Range 请求在视频下载中的工程实践
okhttp·ffmpeg·音视频·下载·python3.11
IvanCodes3 天前
FFmpeg安装与使用教程
ffmpeg
betazhou6 天前
mysql shell8.4.10+mysql 8.4.10搭建MySQL replicaset主从
数据库·mysql·ffmpeg·replicaset·mysql shell
VidDown7 天前
# VP9 还是 H.265?一次压缩选型翻车后的复盘
ffmpeg·音视频·h.265·视频编解码·视频·vp9
heqingchun167 天前
RK3568 交叉编译与部署:MPP + FFmpeg 硬解全流程
ffmpeg·视频编解码
云贝贝贝8 天前
OceanBase 生产运维 7 个高频现场:从连不上到误删兜底
运维·ffmpeg·oceanbase
≮傷£≯√8 天前
ffmpeg 2个图片合并为视频
ffmpeg·音视频
zone_z11 天前
07 · 等待事件与 OWI 方法:从 OSW 到 BUG 的完整破案实录
linux·数据库·oracle·ffmpeg·bug·troubleshooting