Como adiciono uma imagem estática a uma avomposição?
-
28-09-2019 - |
Pergunta
eu tenho um AVMutableComposition
Com uma faixa de vídeo e eu gostaria de adicionar uma imagem estática na faixa de vídeo, a ser exibida por algum tempo. A imagem estática é simplesmente um PNG. Eu posso carregar a imagem como um ativo, mas é isso, porque o ativo resultante não tem nenhuma faixa e, portanto, não pode ser simplesmente inserido usando o insertTimeRange…
métodos.
Existe uma maneira de adicionar imagens estáticas a uma composição? Parece que a resposta está em algum lugar na animação central, mas a coisa toda parece estar um pouco acima da minha cabeça e eu apreciaria uma amostra de código ou algumas indicações de informação.
Solução
OK. Há um ótimo vídeo chamado Editando mídia com AV Foundation a partir de WWDC Isso explica muito. Você não pode inserir imagens diretamente para o AVComposition
Linha do tempo, pelo menos eu não encontrei nenhuma maneira de fazer isso. Mas ao exportar ou jogar um ativo, você pode se referir a um AVVideoComposition
. Talvez não seja um nome perfeito para a classe, pois permite que você misture entre várias faixas de vídeo no ativo, muito parecido AVAudioMix
faz para áudio. E a AVVideoComposition
tem um animationTool
Propriedade que permite lançar camadas principais de animação (CALayer
) na mistura. CALayer
tem um contents
propriedade que pode ser atribuída um CGImageRef
. Não ajuda no meu caso, pode ajudar outra pessoa.
Outras dicas
Eu também preciso de imagens paradas na minha composição. Minha linha de pensamento é um pouco diferente. Insira os filmes de preto no lugar de quando as imagens devem aparecer (possivelmente um desses vídeos seria suficiente). Adicione uma referência de dicionário a cada uma dessas inserções, vinculando faixas de tempo de composição às imagens desejadas de boa-fé. Quando o intervalo de tempo correto chegar ao meu compositor personalizado em tempo integral, retire a imagem desejada e pinte isso no buffer de pixel de saída, ignorando os quadros pretos que chegam da composição. Eu acho que seria outra maneira de fazer isso.