Проблема кодировки Xuggler H264 FPS - PullRequest
1 голос
/ 21 ноября 2011

Я пытаюсь закодировать серию изображений в видео MP4 с помощью xuggler.Тем не менее, попытка обернуть голову вокруг проблем с временной / кадровой частотой сводит меня с ума!Я не могу получить приличное видео в кодировке.Используя пример Converter.java, у меня есть

IRational num = IRational.make(24, 1);
outStreamCoder.setFrameRate(num);
outStreamCoder.setTimeBase(IRational.make(num.getDenominator(),  num.getNumerator()));

...

long tsOffset = 0;
if (outStream.getStartTime() != Global.NO_PTS && outStream.getStartTime() > 0
            && outStream.getTimeBase() != null)
{
        IRational defTimeBase = IRational.make(1, (int) Global.DEFAULT_PTS_PER_SECOND);
        tsOffset = defTimeBase.rescale(outStream.getStartTime(), outStream.getTimeBase());
}

....

long timeStamp = (3600 * count); // experimenting
IVideoPicture outFrame = converter.toPicture(worksWithXugglerBufferedImage, timeStamp);
if (outFrame.getTimeStamp() != Global.NO_PTS)
    outFrame.setTimeStamp(outFrame.getTimeStamp() - tsOffset);

Для 30 изображений кодированная длительность намного меньше 1 с.Я ожидаю, что это будет чуть более секунды.Может кто-нибудь, пожалуйста, помогите мне, это уже некоторое время меня озадачило!

1 Ответ

0 голосов
/ 23 ноября 2011

Вот и получается, что я идиот!Я назначал кадр timeStamp на основе timebase файла в кодировке H.264: (1/90,000);Мне действительно следовало назначить время в микросекундах с первого кадра.(например, кратное (1e6/fps)).ТАК мой код должен был прочитать:

IRational fps = IRational.make(24, 1);
outStreamCoder.setFrameRate(fps);
outStreamCoder.setTimeBase(IRational.make(fps.getDenominator(),  fps.getNumerator()));

...

long timeStamp = (1e6/fps.getNumerator() * count);
...