我有一个带有 2 个音频轨道和 1 个视频轨道的 AVMutableComposition。我使用该合成从 .mov 文件中串接大约 40 个不同的视频剪辑,将每个剪辑的视频内容放入合成的视频轨道中,将音频放入音轨中。我用于音乐的第二个音轨。
我还有一个用于标题图形的同步层。
当我使用 AVPlayer 播放这段乐曲时,音频慢慢变得不同步。大约需要 4 分钟才能开始变得明显。看起来,如果我只将少数较长的剪辑串在一起,问题就不那么明显了,但当有许多较短的剪辑时(在我的测试中约为 40 个),情况就会变得非常糟糕。
暂停和播放不会重新同步音频,但查找会重新同步音频。换句话说,如果我让视频播放到最后,即使我暂停并播放整个视频,在接近尾声时,口型同步也会明显消失,但是,如果我寻求接近尾声的时间,音频就会恢复同步。
我现在的解决方案是每分钟左右寻找 currentTime + 1 帧。由于查找操作的滞后,这会在视频中产生令人不快的跳跃,因此这不是一个好的解决方案。
使用 ExportSession 导出不会出现此问题,音频在输出影片中保持同步。
我想知道 AVPlayer 中新的 masterClock 属性是否是这个问题的答案,如果是,它是如何使用的?
我遇到了同样的问题,并通过以下方式指定时间时间尺度来修复它以及许多其他音频和视频问题:
CMTime(seconds: my_seconds, preferredTimescale: CMTimeScale(600))
之前,我的时间尺度是CMTimeScale(NSEC_PER_SEC)
。这让我在以不同的帧速率编写剪辑时感到紧张,再加上 Eddy 在这里提到的音频不同步。
尽管看起来像一个神奇的数字,600 是 24、30、60 和 120 的公倍数。这些是用于不同目的的常见帧速率。公倍数可以避免在合成多个剪辑时出现舍入问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)