AVAsynchronousVideoCompositionRequest sourceFrameByTrackID nil для видео с альфа-каналом

Я пытаюсь добавить несколько прозрачных анимационных видео в свою композицию в качестве перехода, но в моем пользовательском композиторе (AVVideoCompositing), когда я пытаюсь получить пиксельный буфер через AVAsynchronousVideoCompositionRequest.sourceFrame, он возвращает ноль. Если я использую непрозрачное видео H.264 (mp4), оно работает. Прозрачное видео (mov) закодировано с помощью Timecode и Apple ProRes 4444.

Должен ли я попробовать с HEVC? Я видел несколько предложений по использованию Chroma CIFilter на непрозрачном видео для удаления фона, но я не уверен, что это правильный подход.

Желаемый эффект анимированных переходов можно увидеть здесь .


person mijokaliger    schedule 09.06.2021    source источник
comment
Обычно здесь делается встраивание альфа-канала в формат, не поддерживающий альфа-канал (например, h264), рядом/выше/выше/ниже цветовых каналов, а затем с помощью графического процессора создается выход RGBA, подходящий для возврата из AVAsynchronousVideoCompositionRequest.sourceFrame.   -  person Rhythmic Fistman    schedule 10.06.2021


Ответы (1)


ProRes на самом деле не поддерживается на iOS. Однако вы должны иметь возможность использовать CMVideoCodecType.hevcWithAlpha для своего варианта использования.

Чтобы получить список доступных кодировщиков, вы можете сделать следующее:

import VideoToolbox

var encoders: CFArray?
VTCopyVideoEncoderList(nil, &encoders)
print(encoders!)
person Frank Schlegel    schedule 10.06.2021