如何计算mp4视频的开始时间?

How to calculate the start time of mp4 video?

我正在研究mp4视频结构。我在读取以下 mp4 video

的开始时间值时遇到问题

我已阅读此答案

而且说Edit atom可以修改开始时间

使用 ffprobe 我有以下输出:

    "start_time": "0.033333",
    "duration_ts": 327,
    "duration": "10.900000",
    "bit_rate": "9420949",

使用 mp4dumper 我有以下原子结构,证明缺少编辑原子文件:

ftyp (24 @ 0)
free (8 @ 24)
moov (7034 @ 32)
  mvhd (108 @ 40)
  trak (2883 @ 148)
      tkhd (92 @ 156)
      mdia (2783 @ 248)
          mdhd (32 @ 256)
          hdlr (52 @ 288)
          minf (2691 @ 340)
              smhd (16 @ 348)
              dinf (36 @ 364)
                  dref (28 @ 372)
                      url  (12 @ 388)
              stbl (2631 @ 400)
                  stsd (91 @ 408)
                      mp4a (75 @ 424)
                  stts (24 @ 499)
                  stsc (304 @ 523)
                  stsz (2056 @ 827)
                  stco (148 @ 2883)
  trak (4035 @ 3031)
      tkhd (92 @ 3039)
      mdia (3935 @ 3131)
          mdhd (32 @ 3139)
          hdlr (52 @ 3171)
          minf (3843 @ 3223)
              vmhd (20 @ 3231)
              dinf (36 @ 3251)
                  dref (28 @ 3259)
                      url  (12 @ 3275)
              stbl (3779 @ 3287)
                  stsd (163 @ 3295)
                      avc1 (147 @ 3311)
                  stts (24 @ 3458)
                  ctts (1960 @ 3482)
                  stsc (40 @ 5442)
                  stsz (1328 @ 5482)
                  stco (148 @ 6810)
                  stss (108 @ 6958)
mdat (13096745 @ 7066)

如何ffprobe计算0.033333开始时间值?

在此文件中,视频轨道时基为1/30,没有编辑列表,第一个视频样本在ctts中的偏移量为1 table。因此,第一个视频样本的 pts 是 0 的 dts + 1 的 ctts = 1,以 TB 为单位,绝对时间为 1 * 1/30 = 0.03333。没有较早点的帧,所以这是轨道开始时间。