このコードビットは ffmpeg.c で何をしますか、その目的は何ですか?
01562 ist->next_pts = ist->pts = picture.best_effort_timestamp;
01563 if (ist->st->codec->time_base.num != 0) {
01564 int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
01565 ist->next_pts += ((int64_t)AV_TIME_BASE *
01566 ist->st->codec->time_base.num * ticks) /
01567 ist->st->codec->time_base.den;
01568 }
それらは、デコードタイムスタンプ(DTS)とプレゼンテーションタイムスタンプ(PTS)です。ここで説明を見つけることができます チュートリアル内 。
それで、映画があり、フレームが次のように表示されたとしましょう:I B BP。このため、フレームは次のように保存されます:I P BB。これが、各フレームにデコードタイムスタンプとプレゼンテーションタイムスタンプがある理由です。デコードタイムスタンプは、何かをデコードする必要があるときを示し、プレゼンテーションタイムスタンプは、何かを表示する必要があるときを示します。したがって、この場合、ストリームは次のようになります。
PTS: 1 4 2 3 DTS: 1 2 3 4 Stream: I P B B
通常、PTSとDTSは、再生中のストリームにBフレームがある場合にのみ異なります。