ffmpeg时间戳计算
ffmepg中的时间戳,是以微秒为单位,关乎timebase变量,它是作为dts、pts的时间基准粒度,数值会很大。
static intmpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
{
。。。
constint64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE) * 2;
//开始时,pkt->dts为0,pkt->pts为7200。
int64_tdts = pkt->dts, pts = pkt->pts;
if(ts->copyts < 1) {
if (pts != AV_NOPTS_VALUE)
pts += delay; //pts为133200
if (dts != AV_NOPTS_VALUE)
dts += delay; //dts为126000
}
。。。
}
视频
编码前,会设置帧率,如1秒25帧, 按90000的时间基,一帧就是3600。
avcodec_encode_video2成功后(如ffmpeg.c中do_video_out),pkt->pts被设置成帧序号,如33帧。
紧接着是av_packet_rescale_ts(&pkt, enc->time_base, ost->st->time_base);这个函数的分析如下:
void av_packet_rescale_ts(AVPacket *pkt,
AVRational src_tb, //这个是个时间基,就是我们设置的帧率(num=1,den=25)
AVRational dst_tb) //这个是视频的时间基,就是(num=1,den=90000)
{
if (pkt->pts != AV_NOPTS_VALUE)
pkt->pts = av_rescale_q(pkt->pts, src_tb, dst_tb); //帧序到时间的转换
if (pkt->dts != AV_NOPTS_VALUE)
pkt->dts = av_rescale_q(pkt->dts, src_tb, dst_tb);
if (pkt->duration > 0)
pkt->duration = av_rescale_q(pkt->duration, src_tb, dst_tb);
......
}
最终ptk->pts变成了118800,除以3600刚好就是33。
音频
音频帧的DTS/PTS计算:
一个音频帧(对于AAC来说, 是1024个采样点),
相对于音频采样率(如 44100个采样点/second = 44.1KHz)来说,
累加上每帧的增量(1024*1000/44100 = 23.219ms/frame)
1024*1000/48000= 21.333ms/frame
mp3 每帧均为1152个字节, 则:
frame_duration = 1152 * 1000 / sample_rate
例如:sample_rate = 44100HZ时,计算出的时长为26.122ms,这就是经常听到的mp3每帧播放时间固定为26ms的由来。
问题:
Queue input is backward in time
Non-monotonous DTS in output stream 0:1; previous: 359040, current: 0; changing to 359041. This may result in incorrect timestamps in the output file.
*** dropping frame 100 from stream 0 at ts 0
.....
*** dropping frame 100 from stream 0 at ts 97
[hls @ 0x23015c0] Non-monotonous DTS in output stream 0:1; previous: 359227, current: 359040; changing to 359228. This may result in incorrect timestamps in the output file.
此问题由于音频突然出现了错误,导致输出音频的DTS变为0,这样为了保证音视频同步,再来的视频帧先丢掉,知道音视频DTS接近。
ffmpeg时间戳计算相关推荐
- ffmpeg time_base、FFmpeg时间戳整理、 ffmpeg 时间戳问题汇总
转自:http://www.cnitblog.com/luofuchong/archive/2014/11/28/89869.html https://www.suninf.net/2018/02/f ...
- 自定义起始时间的时间戳计算(个人代码记录)
个人代码记录,这个时间戳计算,由于项目数据特殊需求,自己设置的时间戳起始时间为2019年1月1日开始, 然后根据时间戳数据计算出现在时间,具体使用如下,这里setFullYear的月份是0到11,所以 ...
- android 时间差 秒_Android进阶之使用时间戳计算时间差
本文实例为大家分享了Android使用时间戳计算时间差的具体代码,供大家参考,具体内容如下 因当前项目需要计算时间差,进行数据处理,所以在Csdn上找了一下,之后修修补补是可以用的,建议大家如果用到项 ...
- 面试题:根据Unix时间戳计算时间
根据Unix时间戳计算时间,不分年月大小,每月三十天,每年按360天计算.开始时间1970/01/01 00:00:00,输入秒数,显示时间 思路一:进位,60秒进1分钟,60分进1小时,24小时进1 ...
- go 的时间与时间戳计算
unix时间戳 unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数. go计算unix 时间戳 timestamp := time.Now().Unix() fmt.Prin ...
- SHELL脚本下获取文件时间转换时间戳,使用时间戳计算日期差
SHELL脚本下获取文件时间使用时间戳计算日期差 获取时间戳按秒计算 获取 LINUX获取当前时间的时间戳 获取文件的时间戳 计算 获取时间戳按秒计算 获取 LINUX获取当前时间的时间戳 #确认时间 ...
- 在线时间戳计算时间差
在线时间戳计算时间差 在线时间戳计算时间差 Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒.Unix时间戳(英文为Unix epoch, Unix time, ...
- ExoPlayer 中的音频时间戳计算
ExoPlayer 中的音频时间戳计算 ExoPlayer 中的音频时间戳计算 一 Audio 时间戳的计算 1.1 handleBuffer 1.2 AudioTrackPositionTracke ...
- 根据时间戳计算具体持续时间(天 时 分 秒)
c_continueDateTime(timeStamp){// 根据时间戳计算具体持续时间,天 时 分 秒let totalTime = timeStamp;console.log(totalTim ...
- 通过时间戳计算天数结果为负值
1.问题:通过时间戳计算天数结果为负值 2.原因:使用了int类型接收时间戳的差值,int类型最大值为2147483648,即天数大于24.85...天会变为负值 3.解决方式:使用long类型接收时 ...
最新文章
- 记一次mapreduce读取不到输入文件的问题
- 多种方式测量AMP328频率响应
- Gesture Based TableView
- curl wget之间的区别 以及推荐SimpRead插件
- Insightface项目爬坑指南+使用本地数据集训练流程(MXNET版)
- 面试官:你知道哪几种事务失效的场景?
- 基于以太坊的去中心化宠物商店构建教程
- sap IUT255 Integration of SAP CRM and SAP IS-U_EN_Col62.pdf
- oracle分片键,数据库SQL语句及性能优化
- js 异步执行_JS异步执行机制——事件循环(Event Loop)
- python哪个国家的品牌_Python之初识Web,打造属于你的个人品牌!
- PLSQL 的简单命令之三
- dz php表单发送邮件,php 发送邮件
- Android Palette吸色原理及源码解析
- 基础IT必备知识(一)
- 基于Labview开发TestStand用户界面时ConnectCommand List
- 使用IDEA工具配置和运行vue项目(详细其中的坑)
- 操作系统和指弹吉他的联系
- Android P+通过反射调用系统API实现高级功能
- MathType7安装使用及please restart word to load mathtype addin properly的问题。
热门文章
- 自动对比度、灰阶调整
- android 4 时间限制,Android触摸精灵
- python与环境统计学--两样本均值的差异显著性检验之z检验,t检验和对应例题代码展示(一)
- Linux上层关机和reboot流程
- 【寻找最佳小程序】11期:车来了——时时公交就在你身边,到站准确率可控制在90%以上...
- css过度效果及动画效果
- python中pass语句的作用是什么_Python中pass语句的作用
- PeopleSoft
- 视频分割合并软件哪个好用:试试Fast Video Cutter Joiner吧
- AI 让已故歌手重聚,再发4首原创新歌