web-dev-qa-db-ja.com

ffmpeg.c ptsおよびdtsとは何ですか?このコードブロックはffmpeg.cで何をしますか?

  • 簡単に言えば、pts値とdts値は何ですか?
  • [decode-encode]ビデオをトランスコードする際に重要なのはなぜですか?

このコードビットは 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    }
47
Aditya P

それらは、デコードタイムスタンプ(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フレームがある場合にのみ異なります。

87
Bart