Vídeos Compostos Chroma Key Gerados pelo Usuário com FFMPEG / AVCONV

2

Eu quero criar um sistema em que um usuário possa enviar dois vídeos para um site, um deles tem tela azul em segundo plano, e o site usa AVCONV (ou similar) para criar um vídeo composto dos dois usando o < uma técnica de href="http://en.wikipedia.org/wiki/Chroma_key"> Chroma Key (também conhecida como blue screening).

O AVCONV pode ser usado dessa maneira?

De acordo com este postar no SO uma imagem estática pode ser o Chrome Keyed no plano de fundo. Mas o mesmo pode ser feito com um vídeo?

Também gostaria de saber se os dois vídeos precisariam ter o mesmo tamanho e formato antes de serem mesclados? Existem outras considerações técnicas que eu deveria estar procurando para poder oferecer um serviço como este?

Obrigado antecipadamente.

    
por Jimmery 11.02.2013 / 10:39

3 respostas

2

No momento, o AVconv nem o FFmpeg podem fazer isso - é a principal tarefa de processamento de vídeo que eles não podem fazer.

Essas ferramentas podem sobrepor uma imagem ou vídeo com um plano de fundo transparente sobre outro vídeo ou imagem - o que é a pergunta que você vinculou ao SO desejado. No entanto, o vídeo com o plano de fundo transparente precisa estar em um formato de vídeo que ofereça suporte à transparência (a maioria deles não funciona) - Eu usaria qtrle (codec de animação da Apple). Mas eles não podem fazer a chroma keying (transformando uma determinada cor transparente).

Provavelmente você poderia usar uma solução alternativa envolvendo o avconv e o ImageMagick, mas seria um pouco mais intenso da CPU e não sei quão bons seriam seus resultados. Você precisaria:

  1. Transforme o vídeo que você deseja chroma-key em quadros individuais com avconv
  2. Use a ferramenta de conversão (ou macros) do ImageMagick para fazer a chroma key em cada quadro individual
  3. Costure os quadros novamente com avconv & coloque-o sobre o vídeo de fundo

Você pode simplificar o processo usando pipes.

Para extrair os quadros (produz arquivos que parecem 00001.png, 00002.png, etc):

avconv -i input.mp4 %05d.png

Para juntá-los novamente & colocar em cima de seu vídeo de fundo depois de executar o ImageMagick sobre eles:

avconv -f image2 -r 25 -i %05d.png -i background.mp4 \
-filter_complex '[1:v][0:v]overlay[out]' \
-map [out] -c:v libx264 -crf 23 -preset veryfast output.mp4

-r 25 fornece uma taxa de quadros de 25; Se você quiser outra taxa de quadros, basta usar um número diferente. Certifique-se de usar a mesma taxa de quadros que o vídeo de entrada original. Se você quiser tirar o áudio da sua entrada original, use

avconv -f image2 -r 25 -i %05d.png -i background.mp4 -i input.mp4 \
-filter_complex '[1:v][0:v]overlay[out]' \
-map [out] -map 2:a -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4

Note que algumas versões do AVconv (como a versão no repositório do Ubuntu) não têm suporte para filtros. Se esse for o seu caso, atualize para uma versão mais recente do avconv ou ffmpeg.

Quanto ao estágio 2 ... na verdade, não sei como fazer isso, mas sei que o ImageMagick pode fazer chroma-keying. Aqui estão alguns links que você pode achar úteis:

link
link
link

Devido a diferenças na iluminação, etc. entre as amostras que as pessoas lhe fornecerão, você terá que usar algo para detectar os tons exatos de azul para se livrar. Você provavelmente terá que deixar isso para seus usuários, talvez usando o ffmpeg para criar uma miniatura e, em seguida, usando um conta-gotas para escolher a cor de fundo.

    
por 11.02.2013 / 14:46
3

Você pode fazer isso usando MLT

melt https://archive.org/download/IMB_SF_R35_C8/IMB_SF_R35_C8_512kb.mp4 in=400 \
    -track https://archive.org/download/IMB_SF_R19_C9/IMB_SF_R19_C9_512kb.mp4 in=450 \
    -filter chroma key=0x00ff0000 variance=0.45 \
    -transition composite

Isto reproduz um vídeo de fundo e um clipe de tela verde de um cachorro como uma segunda trilha composta no topo. Ele usa uma chave croma (definida como verde com alguma variação) para aplicar o alfa às áreas verdes, permitindo que o plano de fundo composto seja exibido. Os in=XXX são apenas para truncar algum lixo principal nos clipes de vídeo que estão sendo usados.

    
por 29.06.2014 / 18:08
0

chroma key está disponível no ffmpeg a partir da versão 3.0, antes que você possa usar a opção colorkey

ffmpeg -f mpeg -i input.mp4 -i video.mp4 -shortest -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4

para colorkey no ffmpeg v2.8 ou acima

 ffmpeg -f mpeg -i input.mp4 -i video.mp4 -shortest -filter_complex "[1:v]colorkey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp

Ambos estão trabalhando para mim.

    
por 29.04.2017 / 12:32