音频/视频慢动作中的问题

时间:2013-08-03 04:26:34

标签: ios objective-c avfoundation openal audio-processing

我正在尝试为视频文件执行慢动作以及音频。在我的情况下,我必须执行 Ramped 慢动作(逐渐减速和加速 像抛物线不是“线性慢动作”。

参考:线性慢动作:

enter image description here

Ref:Ramped Slow Motion:

enter image description here

到目前为止我做了什么:

前三张子弹使用的AVFoundation

  1. 从视频文件分隔的音频和视频

  2. 使用AVFoundation api(scaletimeRange)对视频进行慢动作。它真的很好用。

  3. 音频无法正常工作。似乎apple api本身存在一个错误(错误ID:14616144)。相关问题是scaleTimeRange has no effect on audio type AVMutableCompositionTrack

  4. 所以我切换 Dirac 。后来发现Dirac的开源版本存在限制,它不支持动态时间延长。

  5. 最后尝试使用 OpenAL

  6. 我从Apple开发者论坛上采集了一个OpenAL程序示例并执行了它。

    以下是我的问题:

    1. 我可以存储/保存 OpenAl中已处理的音频吗?如果“OpenAl”无法直接处理,可以使用 AVFoundation + OpenAL 吗?

    2. 非常重要的是,如何使用OpenAL进行慢动作或延长时间范围?如果我知道时间伸展,我可以为Ramp慢动作应用逻辑。

    3. 还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

我无法真正与1或2说话,但时间缩放音频可以像重新采样一样简单。如果您以48 kHz采样RAW / PCM音频并希望以半速播放,请重新采样至96 kHz并以48 kHz播放音频。由于您的样本数量是原来的两倍,因此需要花费两倍的时间。一般为:

scaledSampleRate = (orignalSampleRate / playRate);

playRate = (originalSampleRate / scaledSampleRate);

这将影响音轨的音高,但是这可能是期望的效果,因为在“慢动作”音频中预期这种行为有所不同。有更先进的技术可以在缩放时间的同时保留音高。开源软件Audacity实现了这些算法。你可以在那里找到灵感。网上有很多资源可以解释音高变换与时间拉伸之间的权衡。

您可能没有考虑的另一个选项是在慢动作期间静音。这似乎是大多数AV播放实用程序采用的技术。但是,根据您的使用情况,失真的音频确实表示正在操纵时间。

答案 1 :(得分:0)

我已对包含音频的完整视频应用了慢动作,这可能有助于您查看此链接:How to do Slow Motion video in IOS