Ios 导出的慢动作视频存在音频问题
我正在开发一个应用程序,可以将从用户照片库中选择的照片和视频合并到一部电影中。到目前为止,我的应用程序可以轻松处理常规视频、作为视频的实时照片和静态照片。然而,就这一点而言,我在慢动作视频和延时方面遇到了很多麻烦 我的主要问题是:慢mo视频的慢动作部分的音频非常失真,听起来有点嗡嗡、机器人和起伏。这段视频看起来应该是这样的 根据对的回答,我决定首先使用AVAssetExportSession和最高质量预设将慢动作视频的AVComposition导出到临时目录,然后使用生成的文件创建一个AVURLAsset以用于我的合成。我可以确认这个最初导出的视频也有音频失真。我所做的只是尝试导出我从PHAsset获取的AVAsset,而不做任何更改 我的问题是:如何从用户的库中获取慢动作视频,并将其作为.mov文件导出到临时目录中,以便它按预期播放,同时慢动作片段的音频正确地进行音调偏移,而不会出现极端失真 AVAssetExportSession不能正确处理这个问题吗?我应该改用AVAssetWriter吗?我不确定发布任何代码是否有帮助,因为我所做的只是设置一个临时目录路径和一个AVAssetExportSession来导出AVComposition,成功了Ios 导出的慢动作视频存在音频问题,ios,swift,avfoundation,Ios,Swift,Avfoundation,我正在开发一个应用程序,可以将从用户照片库中选择的照片和视频合并到一部电影中。到目前为止,我的应用程序可以轻松处理常规视频、作为视频的实时照片和静态照片。然而,就这一点而言,我在慢动作视频和延时方面遇到了很多麻烦 我的主要问题是:慢mo视频的慢动作部分的音频非常失真,听起来有点嗡嗡、机器人和起伏。这段视频看起来应该是这样的 根据对的回答,我决定首先使用AVAssetExportSession和最高质量预设将慢动作视频的AVComposition导出到临时目录,然后使用生成的文件创建一个AVURL
我的应用程序写得很快,但我会在目标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**
希望这有帮助
皮特