如何以最少的重新压缩将新创建的 AVMutableComposition 写入磁盘?

How do I write a newly-created AVMutableComposition to disk with minimal recompression?

我构建了一个带有视频轨道和音频轨道的 AVMutableComposition,并连接(顺序插入)AVAssets 来自我从磁盘加载到的一堆 .mp4 文件它。

现在我想将生成的合成写到磁盘,使用与源完全相同的设置 material(它们都是由同一个应用程序生成的,一个安全摄像头系统)。

AVAssetExportSession 需要命名预设。我可以只选择 AVAssetExportPresetHEVCHighestQuality 之类的东西,但这意味着重新编码,我觉得应该有一种方法可以以更无损的方式做到这一点。

当我检查与我的作品兼容的预设时,我得到

["AVAssetExportPreset1920x1080", "AVAssetExportPresetLowQuality", "AVAssetExportPresetAppleM4V720pHD", "AVAssetExportPresetAppleM4VAppleTV", "AVAssetExportPresetAppleM4A", "AVAssetExportPresetHEVCHighestQuality", "AVAssetExportPreset640x480", "AVAssetExportPresetAppleProRes422LPCM", "AVAssetExportPreset3840x2160", "AVAssetExportPresetHEVC3840x2160", "AVAssetExportPresetAppleM4VWiFi", "AVAssetExportPresetHighestQuality", "AVAssetExportPresetAppleM4VCellular", "AVAssetExportPreset1280x720", "AVAssetExportPresetMediumQuality", "AVAssetExportPresetAppleM4V1080pHD", "AVAssetExportPresetAppleM4V480pSD", "AVAssetExportPreset960x540", "AVAssetExportPresetAppleM4ViPod", "AVAssetExportPresetHEVC1920x1080"]

有没有更好的方法?

尝试使用 AVAssetExportPresetPassthrough。 正如文档所述,它不会出现在 exportPresetsCompatibleWithAsset 的结果中(出于未提及的原因),但它通常在从兼容的源资产编写 mp4 或 movs 时有效,并且它只是收集和写入样本数据而没有任何重新编码。