Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 导出的慢动作视频存在音频问题_Ios_Swift_Avfoundation - Fatal编程技术网

Ios 导出的慢动作视频存在音频问题

Ios 导出的慢动作视频存在音频问题,ios,swift,avfoundation,Ios,Swift,Avfoundation,我正在开发一个应用程序,可以将从用户照片库中选择的照片和视频合并到一部电影中。到目前为止,我的应用程序可以轻松处理常规视频、作为视频的实时照片和静态照片。然而,就这一点而言,我在慢动作视频和延时方面遇到了很多麻烦 我的主要问题是:慢mo视频的慢动作部分的音频非常失真,听起来有点嗡嗡、机器人和起伏。这段视频看起来应该是这样的 根据对的回答,我决定首先使用AVAssetExportSession和最高质量预设将慢动作视频的AVComposition导出到临时目录,然后使用生成的文件创建一个AVURL

我正在开发一个应用程序,可以将从用户照片库中选择的照片和视频合并到一部电影中。到目前为止,我的应用程序可以轻松处理常规视频、作为视频的实时照片和静态照片。然而,就这一点而言,我在慢动作视频和延时方面遇到了很多麻烦

我的主要问题是:慢mo视频的慢动作部分的音频非常失真,听起来有点嗡嗡、机器人和起伏。这段视频看起来应该是这样的

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

我的问题是:如何从用户的库中获取慢动作视频,并将其作为.mov文件导出到临时目录中,以便它按预期播放,同时慢动作片段的音频正确地进行音调偏移,而不会出现极端失真

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


我的应用程序写得很快,但我会在目标C中回答。

我的一个应用程序也有类似的问题,对从库中选择的视频应用过滤器,然后将其导出。正如你所说,slo mo视频中的音频严重失真。我想我已经为我的案子找到了解决办法,希望对你的案子有所帮助

TLDR 检查应用程序中任何AVPlayer上的AudioTimePitch算法,尤其是AVAssetExportSession的任何实例上的AudioTimePitch算法-确保其设置为.varispeed

根据,AVPlayer或AVAssetExportSession的任何实例上的audioTimePitchAlgorithm的默认值为.spectral,这是最高质量,但将保持恒定的音高。我认为试图在slo mo视频中保持恒定的音调会产生不必要的失真效果。切换到。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**
希望这有帮助


Pete

我的一个应用程序也遇到了类似的问题,对从库中选择的视频应用过滤器,然后将其导出。正如你所说,slo mo视频中的音频严重失真。我想我已经为我的案子找到了解决办法,希望对你的案子有所帮助

TLDR 检查应用程序中任何AVPlayer上的AudioTimePitch算法,尤其是AVAssetExportSession的任何实例上的AudioTimePitch算法-确保其设置为.varispeed

根据,AVPlayer或AVAssetExportSession的任何实例上的audioTimePitchAlgorithm的默认值为.spectral,这是最高质量,但将保持恒定的音高。我认为试图在slo mo视频中保持恒定的音调会产生不必要的失真效果。切换到。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**
希望这有帮助

皮特