Swift合并图片与视频后分享至WhatsApp出现画质模糊问题
以下是你的代码里可能导致分享到WhatsApp后画质模糊的几个关键点:
Core Animation合成带来的二次编码损耗
你使用AVVideoCompositionCoreAnimationTool来叠加图片,这个工具会触发Core Animation对视频每一帧进行重新渲染合成,哪怕选择了最高质量预设,这个过程也会引入额外的编码压缩损耗。同类APP通常会采用更底层的视频帧处理方式(比如直接操作CVPixelBuffer),跳过不必要的二次编码环节,从而保留原视频画质。强制设定帧率与原视频不匹配
你硬把videoComposition.frameDuration固定为30fps,如果原视频的帧率不是30(比如常见的60fps),这种强制转换会导致丢帧或插帧操作,直接影响视频的清晰度和流畅度。正确的做法是复用原视频的帧率:videoComposition.frameDuration = videoTrack.minFrameDuration网络优化选项加剧压缩
exportSession.shouldOptimizeForNetworkUse = true会让系统优先压缩视频体积以适配网络传输,再加上WhatsApp自身的压缩机制,双重压缩会让画质大幅下降。建议关闭这个选项:exportSession.shouldOptimizeForNetworkUse = false图片处理的细节缺失
直接将UIImage的CGImage赋值给CALayer时,没有考虑图片色彩空间与原视频的匹配度;同时默认的CALayer缩放插值算法可能导致高分辨率图片缩放后模糊。可以添加高质量插值设置:imageLayer.magnificationFilter = .linear imageLayer.minificationFilter = .linear另外要确保图片的方向与视频一致,避免因强制旋转产生的画质损失。
导出预设的适配问题
AVAssetExportPresetHighestQuality是系统自动选择的最高质量配置,但不一定完全适配WhatsApp的编码要求。可以尝试使用与原视频分辨率一致的预设(比如原视频是1080p就用AVAssetExportPreset1920x1080),确保输出分辨率与原视频一致,避免系统自动降分辨率。
内容的提问来源于stack exchange,提问作者sohil

