admin管理员组

文章数量:1660164

【FFmpeg编程进阶】(18)估算AVStream的时长 estimate_timings 代码分析

    • 一、estimate_timings()
      • 1.1 estimate_timings_from_pts(ic, old_offset)
      • 1.2 fill_all_stream_timings(ic)
      • 1.3 estimate_timings_from_bit_rate(ic)

PTS(Presentation timestamp)即显示时间戳,就是一副图片或音频帧显示或播放的时间。
DTS(Decompressiontimestamp)即解码时间戳,就是一副图片或音频帧解码的时间。

一、estimate_timings()

  1. 计算文件数据大小 file_size
  2. 从代码中可以看出,总共有三种计算时长的方法
  • (1)、从显示时间 pts 来估算总时长
    该方法调用estimate_timings_from_pts()
    读取视音频流中的结束位置AVPacket的PTS和起始位置AVPacket的PTS,两者相减得到时长信息。

  • (2)、 通过已知流的时长
    该方法调用fill_all_stream_timings()
    当有些视音频流有时长信息的时候,直接赋值给其他视音频流

  • (3)、通过bitrate(码率)
    该方法调用estimate_timings_from_bit_rate()
    获得整个文件大小,以及整个文件的bitrate,两者相除之后得到时长信息。

本文标签: 进阶时长代码ffmpegestimatetimings