音频漂移问题。以编程方式创建视频帧并与java

时间:2017-09-06 08:35:59

标签: 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++) {
            videoFrames.add(noteImages.get(i));
            frameCount++;
        }
    }

然后我使用ffmpeg使用此命令从带有音频的图像创建视频:

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 

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

1 个答案:

答案 0 :(得分:1)

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

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

j < (frameRate * noteLengths.get(i)) / 1000

如果值可能大于2×10 9 ,请使用long乘法。

相关问题