将视频与我自己的音频 PCM 轨道混合
Mux video with my own audio PCM track
使用 Android
MediaMuxer
,将我自己的 PCM 音轨添加为最终电影中的音轨的合适方法是什么?
在电影中,在某个时间,我正在放慢速度、停止、然后加速并重新开始播放视频。对于视频部分,很容易直接影响演示时间,但对于音频,有一个逐块的过程,使得处理音轨中的减速、停止和开始不太直观。
目前,当遍历我从源接收到的缓冲区时,为了减慢整个轨道,我这样做:
// Multiply by 3 the presentation time.
audioEncoderOutputBufferInfo.PresentationTimeUs =
audioEncoderOutputBufferInfo.PresentationTimeUs * ratio);
// I expand the sample by 3. Damn, just realized I haven't
// respected the sample alignment but anyway, the problem is not about white noise...
encoderOutputBuffer = Slowdown(encoderOutputBuffer, 3);
// I then write it in the muxer
muxer.WriteSampleData(outputAudioTrack, encoderOutputBuffer, audioEncoderOutputBufferInfo);
但这就是不能播放。当然,如果 MediaFormat
从源复制到目标,那么它的持续时间将比实际音频数据短 3 倍。
我可以从一个输入中取出整个 PCM
,编辑 byte[] 数组,然后将其作为轨道添加到 MediaMuxer
中吗?
如果您想放慢音频样本的速度,您需要在对它们进行编码之前执行此操作,因此在对音频编解码器的输入缓冲区进行排队之前。
根据我的经验,大多数播放器都会忽略音频演示时间戳(我用 VLC 和 ffplay 尝试过)。如果您想确保音频和视频保持同步,您必须确保您实际上有足够的音频样本来填充 to pts 之间的间隙,否则播放器将只开始播放后面的样本,而不管它们的 pts。
此外,您不能只使用 MediaMuxer 混合 PCM 样本,您需要先对它们进行编码。
使用 Android
MediaMuxer
,将我自己的 PCM 音轨添加为最终电影中的音轨的合适方法是什么?
在电影中,在某个时间,我正在放慢速度、停止、然后加速并重新开始播放视频。对于视频部分,很容易直接影响演示时间,但对于音频,有一个逐块的过程,使得处理音轨中的减速、停止和开始不太直观。
目前,当遍历我从源接收到的缓冲区时,为了减慢整个轨道,我这样做:
// Multiply by 3 the presentation time.
audioEncoderOutputBufferInfo.PresentationTimeUs =
audioEncoderOutputBufferInfo.PresentationTimeUs * ratio);
// I expand the sample by 3. Damn, just realized I haven't
// respected the sample alignment but anyway, the problem is not about white noise...
encoderOutputBuffer = Slowdown(encoderOutputBuffer, 3);
// I then write it in the muxer
muxer.WriteSampleData(outputAudioTrack, encoderOutputBuffer, audioEncoderOutputBufferInfo);
但这就是不能播放。当然,如果 MediaFormat
从源复制到目标,那么它的持续时间将比实际音频数据短 3 倍。
我可以从一个输入中取出整个 PCM
,编辑 byte[] 数组,然后将其作为轨道添加到 MediaMuxer
中吗?
如果您想放慢音频样本的速度,您需要在对它们进行编码之前执行此操作,因此在对音频编解码器的输入缓冲区进行排队之前。 根据我的经验,大多数播放器都会忽略音频演示时间戳(我用 VLC 和 ffplay 尝试过)。如果您想确保音频和视频保持同步,您必须确保您实际上有足够的音频样本来填充 to pts 之间的间隙,否则播放器将只开始播放后面的样本,而不管它们的 pts。 此外,您不能只使用 MediaMuxer 混合 PCM 样本,您需要先对它们进行编码。