Я использую LibAV для мультиплексирования аудио и видео в реальном времени. По этому вопросу я имею в виду файл output.c из примеров LibAV. Если я записываю 250 кадров со скоростью 25 кадров в секунду с использованием AV_CODEC_ID_MPEG4
, тогда выходной видеофайл будет составлять ровно 10 секунд. Но если я использую AV_CODEC_ID_H264
для 250 кадров со скоростью 25 кадров в секунду, то выходной видеофайл будет примерно 8,86 секунды.Ошибка кодирования H264 с использованием LibAV
У меня есть рабочий код, который использует PortAudio и LibAV для мультиплексирования в режиме реального времени. В настоящее время я использую MPEG-4, но качество видео уступает H264. Если это возможно, я предпочел бы использовать H264.
Мой вопрос: Как я могу заставить H264 записывать 10 секунд видео для 250 кадров со скоростью 25 кадров в секунду?
Спасибо.
avcodec.c рассчитывает задержку после того, как были записаны определенные кадры. Мой код записывает кадры в реальном времени, количество кадров и продолжительность видео не предопределены. – zindarod
Нет. Это не про вычисление задержки, а в том, чтобы сбрасывать эти задержанные кадры, отправив NULL-кадры для кодирования, пока вы все еще получили выход из этого. Если бы вы не сделали этого, когда фактические кадры закончились (независимо от того, было ли это в реальном времени или нет), чем вы можете потерять около 40 кадров. Другим способом вы можете настроить libx264 для использования настройки нулевой последовательности, которая удалит всю эту буферизацию за счет качества/сжатия. – nobody555
Итак, когда кадры перестают поступать с камеры, я выполняю цикл, чтобы дать NULL кадра кодеру? Мне жаль, что я не понял реальной концепции процесса кодирования в LibAV. – zindarod