ffmpeg.c что такое оч и дтс?что делает этот блок кода в ffmpeg.c? - PullRequest
47 голосов
/ 18 мая 2011
  • Проще говоря, что такое значения 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    }

1 Ответ

86 голосов
/ 18 мая 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...