Bec*_*yer 1 avfoundation ios swift
我正在开发一个应用程序,它允许您将从用户的照片库中选择的照片和视频合并为一部电影。到目前为止,我的应用程序可以轻松处理常规视频、实时照片(作为视频)和静态照片。但是,我在慢动作视频(和时间流逝,就此而言)方面遇到了很多麻烦。
我的主要问题是:慢动作视频的慢动作片段中的音频极度失真(例如,听起来有点嗡嗡声、机器人和断断续续的声音)。视频显示正常。
根据这个问题的答案,我决定首先使用 AVAssetExportSession 和最高质量预设将慢动作视频的 AVComposition 导出到临时目录,然后使用生成的文件创建一个 AVURLAsset 以用于我的合成。我可以确认这个最初导出的视频也有音频失真。我正在做的就是尝试导出我从 PHAsset 获取的 AVAsset 而不做任何更改。
我的问题是:如何从用户的库中获取慢动作视频并将其作为 .mov 文件导出到临时目录,以便按预期播放,慢动作片段的音频正确音高变化而不会极度失真?
AVAssetExportSession 只是不能处理这个问题吗?我应该改用 AVAssetWriter 吗?我不确定发布任何代码会有所帮助,因为我所做的只是设置一个临时目录路径和一个 AVAssetExportSession 来导出成功的 AVComposition。
我的应用程序是用 Swift 编写的,但我会用 Objective C 来回答。
小智 5
我的一个应用程序遇到了类似的问题,将过滤器应用于从库中选择的视频,然后将它们导出。正如您所说,慢动作视频上的音频严重失真。我想我已经找到了适合我的案例的解决方案,希望它对您有所帮助。
TLDR 检查应用程序中任何 AVPlayer 上的audioTimePitchAlgorithm,尤其是 AVAssetExportSession 的任何实例 - 确保将其设置为 .varispeed
根据文档,在 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**
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助,
皮特
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |