Подтвердить что ты не робот

Ffmpeg.c что такое pts и dts? что делает этот блок кода в ffmpeg.c?

  • Проще говоря, каковы значения pts и dts?
  • Почему они важны при перекодировании видео [декодировать-кодировать]?

Что делает этот код в 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    }
4b9b3361

Ответ 1

Это отметка времени декодирования (DTS) и метка времени представления (PTS). Вы можете найти объяснение здесь внутри учебника.

Итак, скажем, у нас был фильм, и кадры были показаны как: я B B P. Теперь нам нужно знать информацию в P, прежде чем мы сможем отобразить либо B-кадров. Из-за этого кадры могут храниться следующим образом: я P B B. Вот почему у нас есть временная метка декодирования и временная метка представления для каждого кадра. Временная метка декодирования сообщает нам, когда нам нужно что-то декодировать, а время печати указывает нам, когда нам нужно что-то отображать. Итак, в этом случае наш поток может выглядеть так:

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

Как правило, PTS и DTS будут отличаться только тогда, когда в потоке, который мы играем, есть B-кадры.