【问题标题】:Exported slow motion video has audio issues导出的慢动作视频有音频问题
【发布时间】:2019-08-21 22:42:55
【问题描述】:

我正在开发一个应用程序,该应用程序允许您将从用户的照片库中选择的照片和视频合并到一个电影中。到目前为止,我的应用程序可以轻松处理常规视频、实时照片(作为视频)和静态照片。但是,我在慢动作视频(以及时间流逝,就此而言)遇到了很多麻烦。

我的主要问题是:慢动作视频的慢动作片段中的音频非常失真(例如,它听起来有点嗡嗡声、机械声和断断续续的声音)。视频按原样显示。

根据this question 的答案,我决定首先使用 AVAssetExportSession 和最高质量预设将慢动作视频的 AVComposition 导出到临时目录,然后使用生成的文件创建一个 AVURLAsset 用于我的合成。我可以确认这个最初导出的视频也有音频失真。我所做的只是尝试导出我从 PHAsset 获取的 AVAsset,而不做任何更改。

我的问题是:如何从用户的库中获取慢动作视频并将其作为 .mov 文件导出到临时目录,以便它按预期播放,并且慢动作片段的音频正确地改变了音高而没有极度失真?

难道 AVAssetExportSession 不能正确处理这个问题吗?我应该改用 AVAssetWriter 吗?我不确定发布任何代码是否会有所帮助,因为我所做的只是设置一个临时目录路径和一个 AVAssetExportSession 来导出 AVComposition,这会成功。

我的应用是用 Swift 编写的,但我会用 Objective C 来回答。

【问题讨论】:

    标签: ios swift avfoundation


    【解决方案1】:

    我的一个应用程序也遇到了类似的问题,将过滤器应用于从库中选择的视频,然后将它们导出。正如您所说,慢动作视频中的音频严重失真。我想我已经找到了适合我的情况的解决方案,希望它对你的情况有所帮助。

    TLDR 检查您应用中任何 AVPlayer 上的 audioTimePitchAlgorithm,尤其是任何 AVAssetExportSession 实例 - 确保将其设置为 .varispeed

    根据documentation,在 AVPlayer 或 AVAssetExportSession 的任何实例上,audioTimePitchAlgorithm 的默认值是 .spectral,这是最高质量的,但会保持恒定的音调。我认为在慢动作视频中保持恒定音高的尝试会产生不必要的失真效果。切换到 .varispeed 会按预期生成导出的视频,并带有音高偏移的音频。

    这是我为此目的实例化 AVAssetExportSession 的代码:

        let compatiblePresets = AVAssetExportSession.exportPresets(compatibleWith: asset)
        var preset: String = AVAssetExportPresetPassthrough
        if compatiblePresets.contains(outputQuality) { preset = outputQuality }
        let session = AVAssetExportSession.init(asset: asset, presetName: preset)
        session?.audioTimePitchAlgorithm = **.varispeed**
    

    希望这会有所帮助,

    皮特

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多