Рассчитать PTS до кодирования кадра в FFmpeg
Как рассчитать правильное значение PTS для кадра до кодирования в FFmpeg C API?
Для кодирования ям, используя функциюavcodec_encode_video2
и затем напишите это.av_interleaved_write_frame
Я нашел некоторые формулы, но никто из них не делаетт работа.
Впример с кислородом они используют
frame->pts = 0;
for (;;) {
// encode & write frame
// ...
frame->pts += av_rescale_q(1, video_st->codec->time_base, video_st->time_base);
}
Этот блог говорит, что формула должна быть такой:
(1 / FPS) * частота дискретизации * номер кадра
Кто-то использует только номер кадра для установки очков:
frame->pts = videoCodecCtx->frame_number;
Или альтернативный способ:
int64_t now = av_gettime();
frame->pts = av_rescale_q(now, (AVRational){1, 1000000}, videoCodecCtx->time_base);
И последний:
// 40 * 90 means 40 ms and 90 because of the 90kHz by the standard for PTS-values.
frame->pts = encodedFrames * 40 * 90;
Который правильный? Думаю, ответ на этот вопрос будет полезен не только мне.