如何使用 Xuggler 查找短数组的长度以用音频填充视频?

How to find the length of a short array to fill a video with audio using Xuggler?

我正在尝试将音频添加到视频中,我需要一个短数组来表示音频。我不知道如何获得这个数组的长度。 我发现每毫秒估计有 91 次短路,但我不知道如何获得准确值而不是猜测和检查。 这是相关代码:

IMediaWriter writer = ToolFactory.makeWriter(file.getAbsolutePath());
writer.addVideoStream(0, 0, IRational.make(fps, 1), animation.getWidth(), animation.getHeight());
writer.addAudioStream(1, 0, 2, 44100);

...

int scale = 1000 / 11; // TODO
short[] audio = new short[animation.getLength() * scale];

animation.getLength()是以毫秒为单位的视频长度

尺度变量的计算公式是什么?

之所以需要一个短片列表,是因为这是一个支持在输出视频中添加大量声音的动画库。因此,我遍历所有请求的声音,将声音转换为短列表,然后将它们的值添加到主音频列表中的正确位置。不使用短列表就可以做到,所以我不能将多个声音叠加在一起,从而使计时变得更加困难。

scale 就是所谓的 audio sampling rate,通常以赫兹 (Hz) 为单位测量,对应于“每秒采样数”。

假设数组中的每个元素都是单个音频样本,您可以通过将音频采样率乘以动画持续时间(以秒为单位)来估算数组大小。

例如,如果您的音频采样率为 48,000 Hz:

int audioSampleRate = 48000;
double samplesPerMillisecond = (double) audioSampleRate / 1000;
int estimatedArrayLength = (int) (animation.getLength() * samplesPerMillisecond);