音视频时间戳计算

时间戳

时间戳分为解码时间戳(DTS)和显示时间戳(PTS) 分别表示某一帧解码和显示相对于起始时间的时间戳
通常来说视频不带B帧的情况下 视频的DTS和PTS相同
带B帧的情况下 由于B帧是前后双向参考编码
B帧的解码时间戳可能会晚于它的显示时间戳 这种情况下DTS和PTS不同
音频的DTS和PTS则始终相同

时间戳的计算

计算时间戳时涉及到几个概念

  1. 采样频率 : 表示时间戳的增量单位
    采样频率假设为1000HZ 则表示一秒采样100次 时间戳的单位就是1ms 也即是时间基
    设为90000HZ 则表示一秒采样90000次 时间戳的增量等于1/90ms
    这里的采样频率指的是时间戳的采样频率 和音频的采样频率概念不同
  2. 帧率 : 视频一秒的显示帧数
    常见的有25fps 30fps 60fps这些帧率
  3. 音频采样频率 : 音频一秒的采样次数
  4. 音频采样数 : 某种音频格式一帧的采样次数
    比如一帧AAC包含1024次采样的数据 也就是1k字节的数据
    一帧mp3则包含1152次采样的数据

视频时间戳的计算

视频时间戳计算公式 : video_ts = n * ts_freq / fps;
n : 第n帧视频
ts_freq : 选定的时间戳的采样频率
fps : 视频帧率
  1. 计算时间戳首先需要选定采样频率从而计算出时间基
    ffmpeg选择的时间基是1000 所以ffmpeg的时间戳单位是ms(1s=1000ms)
    RTP则规定视频的时间基必须是90000 这么做是为了兼容25fps 29.97fps 30fps这些帧率
    90000恰好是25,30,60fps的倍数
  2. 时间戳的增量确定后 比如1000hz的采样频率对应增量1
    fps假设为25 那么一帧可以得到40ms的时间显示 时间戳的增量(上一帧和下一帧的间隔)
    就应该等于40 * 1 = 40ms

音频时间戳的计算

音频时间戳计算公式 : audio_ts = n * frame_size * ts_freq / sample_rate
n : 第n帧音频
ts_freq : 选定的时间戳的采样频率
frame_size : 一帧音频的采样数 也即是帧的大小
sample_rate : 音频的采样频率
  1. 音频的时间戳采样频率一般选1000
  2. 音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率(单位为s)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 10,305评论 0 3
  • 本文转自:[FFmpeg 入门(5):视频同步 | www.samirchen.com][2] 视频如何同步 在之...
    SamirChen阅读 7,962评论 0 5
  • ### YUV颜色空间 视频是由一帧一帧的数据连接而成,而一帧视频数据其实就是一张图片。 yuv是一种图片储存格式...
    天使君阅读 8,859评论 0 4
  • [TOC] 音视频&流媒体 是什么促使我要写这一篇音视频入门文章?那是因为和一妹子打赌码率的概念,结果输了;对一个...
    AllenWu阅读 10,447评论 1 24
  • 2017.9.2。晴。参加最后一个舍友的婚礼,几度差点落泪,心情久久不能平静,婚礼并不煽情,但是点点滴滴唤...
    哈喽蔡蔡阅读 3,474评论 0 1

友情链接更多精彩内容