- 時間基相關結構
- 時間基種類
- 時間基轉換函數
- ffmpeg中時間基特殊使用
一、ffmpeg中時間基相關資料結構:
-
typedef struct AVRational{
-
int num; ///< numerator
-
int den; ///< denominator
-
} AVRational;
二、時間基有如下幾種:
不同時間基機關:
1、InputStream: 時間基 1:1000000(機關:us)
2、AVStream:時間基 1:90000(機關:s)- 根據mpeg的協定,壓縮後或解壓前的資料,pts和dts是90kHz時鐘的采樣值
3、AVCodecContext:時間基 1:framerate (機關:s)
不同結構使用的時間基種類:
1、AVPacket:使用AVStream時間基
2、AVFrame:pts使用AVCodecContext時間基;pkt_pts、pkt_dts使用AVStream時間基
3、InputStream:使用InputStream時間基
四、時間基轉換函數
1、
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;
其中:a為待轉換時間;bq為待轉換時間依賴的時間基;cq為目标時間基。
上述公式等同于:
a * bq / cq
2、
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);
其中:pkt為編碼後資料包;src為原始時間基;dst為目标時間基
五、時間基擴充
AVFrame->pts和AVPacket->pts、AVPacket->dts的值,在解碼/編碼後,會經曆短暫的time_base不比對的情況:
1、解碼後,decoded_frame->pts的值使用AVStream->time_base為機關,後在AVFilter裡面轉換成以AVCodecContext->time_base為機關。