我有一个AVMutableComposition,有2个音轨和一个视频轨。我正在使用该合成来从.mov文件中串起大约40个不同的视频片段,将每个片段的视频内容放入我的合成视频轨道和音频轨道中的音频。我用于音乐的第二个音轨。 我还有一个标题图形的同步图层。
当我使用AVPlayer播放此合成时,音频慢慢变得不同步。大约需要4分钟才能开始变得明显。看起来如果我只将一小撮较长的剪辑串在一起,问题就不那么明显了,那就是当有很多片段较短的片段(在我的测试中约为40片)时,它变得非常糟糕。
暂停和播放不会重新同步音频,但是请求。换句话说,如果我让视频播放到最后,即使我在整个过程中暂停和播放,唇音同步也会明显关闭,但是,如果我寻找一段时间,音频会恢复同步。 / p>
我现在的hacky解决方案是每分钟左右寻找当前时间+ 1帧。由于搜索操作的延迟,这会在视频中产生令人不快的跳跃,因此不是一个好的解决方案。
使用ExportSession导出不会出现此问题,音频在输出影片中保持同步。
我想知道AVPlayer中的新masterClock属性是否是这个的答案,如果是,它是如何使用的?
答案 0 :(得分:0)
我遇到了同样的问题,并通过以下方式指定了时间范围,从而解决了许多其他音频和视频问题:
CMTime(seconds: my_seconds, preferredTimescale: CMTimeScale(600))
之前,我的时间标度为CMTimeScale(NSEC_PER_SEC)
。在以不同的帧频合成剪辑时,这让我感到紧张不安,再加上Eddy在此处提到的音频不同步。
尽管看起来像魔术数字,但600是24、30、60和120的公倍数。这是出于不同目的的常用帧速率。共同的倍数可以避免在编写多个剪辑时四舍五入的问题。