Рассчитать 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;

Какой из них правильный? Думаю, ответ на этот вопрос будет полезен не только мне.

Ответы на вопрос(2)

Ваш ответ на вопрос