天天看點

ffmpeg時間基種類及轉換

  1. 時間基相關結構
  2. 時間基種類
  3. 時間基轉換函數
  4. ffmpeg中時間基特殊使用

一、ffmpeg中時間基相關資料結構:

  1. ​typedef struct AVRational{​

  2. ​int num; ///< numerator​

  3. ​int den; ///< denominator​

  4. ​} 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為機關。

繼續閱讀