web-dev-qa-db-fra.com

ffmpeg.c que sont les pts et les dts? que fait ce bloc de code dans ffmpeg.c?

  • En termes simples, quelles sont les valeurs pts et dts?
  • Pourquoi sont-ils importants lors du transcodage [décoder-encoder] des vidéos?

Que fait ce bit de code dans ffmpeg.c , quel est son but?

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

Il s'agit de l'horodatage de décodage (DTS) et de l'horodatage de présentation (PTS). Vous pouvez trouver une explication ici à l'intérieur d'un tutoriel .

Disons que nous avions un film et que les images étaient affichées comme suit: I B B P. Maintenant, nous devons connaître les informations dans P avant de pouvoir afficher l’une des images B. Pour cette raison, les images peuvent être stockées comme ceci: I P B B. C'est pourquoi nous avons un horodatage de décodage et un horodatage de présentation sur chaque image. L'horodatage de décodage nous indique quand nous devons décoder quelque chose, et l'horodatage de la présentation nous indique quand nous devons afficher quelque chose. Donc, dans ce cas, notre flux pourrait ressembler à ceci:

   PTS: 1 4 2 3
   DTS: 1 2 3 4
Stream: I P B B

Généralement, le PTS et DTS ne différeront que lorsque le flux que nous lisons contient B images.

87
Bart