ffmpeg時間換算,對於seek播放有幫助

根據pts來計算一楨在整個視頻中的時間位置:  ide

timestamp(秒) = pts * av_q2d(st->time_base)  函數

計算視頻長度的方法:  指針

time(秒) = st->duration * av_q2d(st->time_base)    視頻

這裏的st是一個AVStream對象指針。  對象

時間基轉換公式  io

timestamp(ffmpeg內部時間戳) = AV_TIME_BASE * time(秒)  ffmpeg

time(秒) = AV_TIME_BASE_Q * timestamp(ffmpeg內部時間戳)  方法

因此當須要把視頻跳轉到N秒的時候能夠使用下面的方法:  im

int64_t timestamp = N * AV_TIME_BASE;   時間戳

av_seek_frame(fmtctx, index_of_video, timestamp, AVSEEK_FLAG_BACKWARD);  

ffmpeg提供了不一樣時間基之間的轉換函數:  

int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)  

這個函數的做用是計算a * bq / cq,來把時間戳從一個時基調整到另一個時基。

在進行時基轉換的時候,應該首選這個函數,它能夠避免溢出的狀況發生

相關文章
相關標籤/搜索