首页 > 解决方案 > AVAsynchronousVideoCompositionRequest sourceFrameByTrackID nil 用于带有 alpha 的视频

问题描述

我正在尝试将一些透明动画视频添加到我的合成中作为过渡,但是在我的自定义合成器(AVVideoCompositing)中,当我尝试通过 AVAsynchronousVideoCompositionRequest.sourceFrame它获取像素缓冲区时返回 nil。如果我使用非透明 H.264 (mp4) 视频,它可以工作。透明视频 (mov) 使用时间码和 Apple ProRes 4444 编码。

我应该尝试使用 HEVC 吗?我已经看到一些建议在非透明视频上使用 Chroma CIFilter 来删除背景,但我不确定这是否是正确的方法。

可以在此处看到所需的动画过渡效果。

标签: iosswiftavfoundationavvideocompositionavcomposition

解决方案


iOS 上实际上不支持 ProRes。但是,您应该能够CMVideoCodecType.hevcWithAlpha用于您的用例。

要获取可用编码器的列表,您可以执行以下操作:

import VideoToolbox

var encoders: CFArray?
VTCopyVideoEncoderList(nil, &encoders)
print(encoders!)

推荐阅读