【问题标题】:Xuggler H264 FPS encoding issueXuggler H264 FPS 编码问题
【发布时间】:2011-11-21 19:02:37
【问题描述】:

我正在尝试使用 xuggler 将一系列图像编码为 MP4 视频。然而,试图解决时基/帧率问题会让我发疯!我似乎无法获得像样的视频编码。 使用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 张图片,编码时长远小于 1s。我希望它会超过一秒钟。谁能帮帮我,这让我困惑了一段时间!

【问题讨论】:

    标签: java h.264 frame-rate xuggle


    【解决方案1】:

    原来我是个白痴!我根据 H.264 编码文件的timebase 为框架分配了timeStamp:(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);
    

    【讨论】:

      猜你喜欢
      • 2014-07-03
      • 2016-11-10
      • 2012-11-30
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2011-08-24
      相关资源
      最近更新 更多