TransWikia.com

Расчет pts dts и duration FFmpeg и C++

Stack Overflow на русском Asked by ZeusBios on February 28, 2021

есть вектор, который содержит кадры и временные метки, соответствующие кадру:

std::vector<std::pair<QByteArray, int64_t>> rawData;

Кадры это просто QImage.
Временные метки получаются так:

const int64_t timestamp = QDateTime::currentMSecsSinceEpoch();

Настройка контекста:

pCodecCxt->time_base = AVRational{1, m_fps};
pCodecCxt->framerate = AVRational{m_fps, 1};

как правильно вычислить с учетом временных меток кадра?:

pkt.pts = ?;
pkt.dts = ?;
pkt.duration = m_currentFrameTimestamp - m_previousFrameTimestamp;

UPD:

Итак, зная метки кадров, я могу вычислять продолжительность кадра и начало каждого кадра.

int64_t frameTime;
int64_t frameDuration;
int count = m_frameCounter++;

frameDuration = m_currentFrameTimestamp - m_previousFrameTimestamp;
frameTime = count * frameDuration;

pkt.pts = frameTime;
pkt.dts = pkt.pts;
pkt.duration = frameDuration;

Остался вопрос по поводу настройки контекста tame_base. Так как временные метки в миллисекундах, то видимо должно быть так:

pCodecCxt->time_base = AVRational{1000, m_fps};

UPD:
Это по прежнему не работает.

int64_t frameTime;
int64_t frameDuration;
int count = m_frameCounter;

frameDuration =  (m_currentFrameTimestamp - m_previousFrameTimestamp) / (1000 / 60);
frameTime =  count * frameDuration;

pkt.pts = frameTime;
pkt.dts = pkt.pts;
pkt.duration = frameDuration;

One Answer

time_base - задает базовую единицу измерения времени как дробь, где в числителе стоит количество тактов, а в знаменателе - частота тактового генератора (например 2997);

pts - Presentation Time Stamp - время показа кадра в базовых единицах;

dts - Decoding Time Stamp - время декодирования опорного кадра (который требуется для отображения текущего) в базовых единицах; может совпадать с pts если текущий кадр - опорный;

duration - продолжительность отображения кадра в базовых единицах;

Correct answer by user7860670 on February 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP