Как вычислить правильное значение PTS для кадра перед кодированием в API FFmpeg C?Рассчитать PTS до кодирования кадра в FFmpeg
Для кодирования Я использую функцию avcodec_encode_video2
, а затем напишу ее av_interleaved_write_frame
.
Я нашел несколько формул, но ни один из них не работает.
В doxygen example они используют
frame->pts = 0;
for (;;) {
// encode & write frame
// ...
frame->pts += av_rescale_q(1, video_st->codec->time_base, video_st->time_base);
}
This blog говорит, что формула должна быть такой:
(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;
Какой из них правильный? Думаю, ответ на этот вопрос будет полезен не только для меня.
Это не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав [Ask Question] (http://stackoverflow.com/questions/ask). Вы также можете [добавить щедрость] (http://stackoverflow.com/help/privileges/set-bounties), чтобы привлечь больше внимания к этому вопросу, как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/ Что-репутация). – Nunser
@Nunser Он не может комментировать еще с 1 репутацией или установить щедрость, так что это его единственный способ показать, что он все еще заинтересован в этом, не задавая еще одного вопроса о PTS/DTS. Во всяком случае, я принял удар по нему ниже. – Jack
@Jack Эти комментарии (например, мои) генерируются автоматически, когда мы делаем время в очередях просмотра и ответах с флагом, поэтому я действительно не могу контролировать то, что опубликовано как комментарий от меня. Я понимаю, что он не может комментировать, но по-прежнему не является правильным ответом ... может быть, если он удалит «нашли ли вы решение? Обновите свой пост с ним», что явно не является ответом, то это не будет отмечено , Например, ваш ответ предлагает решение, это один из способов сделать и добавляет ненужные комментарии, которые могут быть недовольны рецензентами. – Nunser