【发布时间】:2012-12-12 00:42:01
【问题描述】:
我有一个线程使用java.awt.Robot 进行屏幕截图,然后使用 Xuggler 在循环中将它们编码为视频。
循环对图像进行编码,然后根据帧速率使线程休眠一段时间。
到目前为止一切都很好。当我尝试对音频进行编码时,就会出现问题。
具体来说,保持采样率和大小
我正在使用TargetDataLine 将数据读入byte[]。此数据已采用 BigEndian 格式。
神奇之处在于在适当的时间提供适当数量的数据。
我的AudioFormat 看起来像这样:
假设 10fps 和 44000Hz 采样率,我需要提供
byte[] 的大小应该是多少?
short 衡量,因为这是 Xuggler 想要的)encodeAudio() 方法?我的意思是经过 10 次循环或 5 次循环等。其他:
社区成员 Alex 我给了我这个公式:
shortArray.length == ((timeStamp - lastTimeStamp) / 1e+9) * sampleRate * channels;
一个粗略的计算让我得到了 4782 短裤一秒钟的答案。
我知道当您传递要编码的音频时必须持续一整秒
所以我必须每遍捕获 480 条短裤,然后在第 10 遍之后最终对其进行编码。
请告诉我这个推导是否正确?
【问题讨论】:
-
您希望每个视频帧都有特定的音频部分吗?
-
如果您有 16 位(两个字节),采样率为 44,000 Hz,即每秒 88,000 字节。如果你有立体声,它是两倍。在 1/10 秒内,您需要其中的 1/10。
-
@PeterLawrey 将其发布为答案,以便我接受
-
您确定您的频率是 44000 Hz 而不是 44100 Hz? 44000 是不寻常的,但 44100 是标准的。