gpt4 book ai didi

android - MediaCodec-故意向音频轨道添加静音

转载 作者:行者123 更新时间:2023-12-02 22:38:13 29 4
gpt4 key购买 nike

我设法将多个视频与音轨组合在一起,但是后来我意识到,如果将多个视频与其中一个没有音轨组合在一起,则必须为组合的音轨添加静音。

那么,我该怎么做呢?我应该对带时间戳的0填充的ByteBuffer进行静音编码吗?

最佳答案

So, how do I go about doing it? Should I encode a ByteBuffer filled with 0s with timestamps for silence?



本质上是。我正在使用下面的功能在特定的演示时间编码静音。
对于没有音频的视频长度,您应该定期对无声进行编码。我确定间隔应与之前的音频匹配。因此,在我的情况下,我的第一个视频的音频演示时间之间的时间间隔为21333 us。

使用该信息,我开始对静音进行编码:
从第一部影片的最后呈现时间+ 21333开始,
间隔为21333,直到我编码了足够的静音以使完整视频

我仍在尝试找出如何使用无音频的视频(作为第一个视频),然后再使用有音频的视频。如果知道了,我将更新我的答案。
private byte[] zerodArray = new byte[2048];// Used to encode silent audio... Not really sure how big this should be ......

private void encodeSilenceForFrame(long presentationTime){
//mAudioEncoder is the audio encoder you are using to combine the other videos' audio.
final int TIMEOUT_USEC = 10000;
int encoderInputBufferIndex = mAudioEncoder.dequeueInputBuffer(TIMEOUT_USEC);
if (encoderInputBufferIndex == MediaCodec.INFO_TRY_AGAIN_LATER) {
if (VERBOSE) Log.d(TAG, "no audio encoder input buffer");
}
if (VERBOSE) {
Log.d(TAG, "audio encoder: returned input buffer: " + encoderInputBufferIndex);
}
ByteBuffer encoderInputBuffer = mAudioEncoder.getInputBuffer(encoderInputBufferIndex);
encoderInputBuffer.position(0);
encoderInputBuffer.put(zerodArray);
Log.d(TAG, "audio silence: pending buffer for time " + presentationTime);


mAudioEncoder.queueInputBuffer(
encoderInputBufferIndex,
0,
zerodArray.length,
presentationTime,0);

}

关于android - MediaCodec-故意向音频轨道添加静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40478223/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com