Vídeo Chroma-Filtering usando GPUImage?
Eu estou tentando exibir um arquivo de vídeo com transparência dentro do meu aplicativo usando uma chave de transparência (RGB: 0x00FF00
ou totalmente verde) usando o incrível @ BradLarsonGPUImage kit de ferramentas. No entanto, estou tendo algumas dificuldades com oGPUImageChromaKeyFilter
filtro, e eu não entendo muito bem o porquê.
Meu arquivo de vídeo de origem está disponível na minha caixa de depósitoAqui (12 KB, 3 segundos de duração, fundo verde completo, apenas um quadrado na tela),
E eu usei o projeto de amostra intituladoSimpleVideoFilter
.
Este é o código que eu tentei usar (eu simplesmente substitui-viewDidLoad
):
NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
filter = [[GPUImageChromaKeyFilter alloc] init];
[filter setColorToReplaceRed:0 green:1 blue:0];
[filter setEnabled:YES];
[movieFile addTarget:filter];
GPUImageView *filterView = (GPUImageView *)self.view;
[filter addTarget:filterView];
[movieFile startProcessing];
De acordo com a documentação (que é esparsa), estadevemos tem o efeito de substituir todo o verde no vídeo. Em vez disso, eu entendo isso como uma saída:
O que me diz que o vídeo está sendo reproduzido (e, portanto, está copiando para o aplicativo), mas não parece estar fazendo nenhum chroma key. Por que isso seria? Preciso definir manualmente os valores e limites de suavização? Eu não deveria, porque a fonte contém apenas duas cores (0x00FF00
e0x000000
).
Eu testei isso no dispositivo também, sem sucesso. Quase todos os outros filtros que eu tento usar funcionam, comoGPUImageRGBFilter
, GPUImageSepiaFilter
etc. PoderiaGPUImageChromaKeyFilter
ser apenas quebrado?
Qualquer ajuda com isso seria apreciada, já que neste momento eu estou raspando o fundo do barril para transparência em um vídeo.