0

我正在使用 jcodec 库将一系列图像转换为视频,以及诸如淡入淡出/翻转等过渡/动画...

在此转换过程中,我对每个图像使用 SequenceEncoder 类的以下函数。

 public void encodeNativeFrame(Picture pic) throws IOException {
        if (toEncode == null) {
            toEncode = Picture.create(pic.getWidth(), pic.getHeight(), encoder.getSupportedColorSpaces()[0]);
        }

        // Perform conversion
        transform.transform(pic, toEncode);

        // Encode image into H.264 frame, the result is stored in '_out' buffer
        _out.clear();
        ByteBuffer result = encoder.encodeFrame(toEncode, _out);

        // Based on the frame above form correct MP4 packet
        spsList.clear();
        ppsList.clear();
        H264Utils.wipePS(result, spsList, ppsList);
        H264Utils.encodeMOVPacket(result);

        // Add packet to video track
        outTrack.addFrame(new MP4Packet(result, frameNo * 1, (int)FPS, 1, frameNo, true, null, frameNo * 1, 0));
        frameNo++;
        result = null;
    }

每一帧,在这个过程中都需要很长时间(大约一分钟)

特别是,以下语句需要很长时间 -

ByteBuffer result = encoder.encodeFrame(toEncode, _out);

即使将 4 张图像系列转换为带有过渡/动画的视频也至少需要 7 分钟。

需要建议来加快这一进程。

4

1 回答 1

1

对于静态图像的更优化编码(当过渡/动画已经结束时),您可以为每个图像创建一个长帧。您可以将 FPS=1 和持续时间设置为 1 1 秒帧与 1 个图像。

outTrack.addFrame(new MP4Packet(result, frameNo, 1, 1, frameNo, true, null, frameNo, 0));

您还应该创建具有不同时间尺度的轨道

muxer.addTrack(TrackType.VIDEO, 1);
于 2015-05-15T11:27:31.970 回答