音频漂移问题。在java中以编程方式创建视频帧并与midi/音频同步

音频漂移问题。在java中以编程方式创建视频帧并与midi/音频同步,java,audio,video,ffmpeg,midi,Java,Audio,Video,Ffmpeg,Midi,我想创建一个视频,更改midi文件上的注释。我正在录制midi,然后将其输出为wav 在java中,我读取midi文件,根据播放的音符创建图像。我正在计算音符之间的时间间隔,并使用此值确定此代码的帧数: for(int i = 0; i < noteImages.size(); i++) { for(int j = 0; j < frameRate * (noteLengths.get(i) / 1000); j++) { videoF

我想创建一个视频,更改midi文件上的注释。我正在录制midi,然后将其输出为wav

在java中,我读取midi文件,根据播放的音符创建图像。我正在计算音符之间的时间间隔,并使用此值确定此代码的帧数:

    for(int i = 0; i < noteImages.size(); i++) {
        for(int j = 0; j < frameRate * (noteLengths.get(i) / 1000); j++) {
            videoFrames.add(noteImages.get(i));
            frameCount++;
        }
    }

音频开始正常,然后逐渐失去同步。如果我在创建图像时使用更高的fps,那么效果就不那么明显了,但是我需要使用至少300fps来接近它,这仍然不太正确。任何关于如何修正的想法?

除以1000将导致舍入误差,除非长度已经是1000的倍数

必须仅在计算的最后一步进行舍入(以便误差始终小于一帧):

j<(帧率*记事长度.get(i))/1000

如果值可能大于2×109,请使用长乘法。

您的音符持续时间是否一致?有两种不同的音符持续时间,一种是另一种音符持续时间的两倍。一个是666.667ms,长一点的是1333.334mms谢谢,这很有效。我犯了一个错误,没有转换成整数,所以如果结果是40.01,它会增加一个额外的帧。
ffmpeg -r 60 -f image2 -i pic%05d.png -itsoffset 3 -i audio.wav -c:v libx264 -c:a aac -pix_fmt yuv420p -crf 23 -r 24 -shortest -y output.mp4 
j < (frameRate * noteLengths.get(i)) / 1000