Fluxo com GIF

Como trocar rosto em um GIF localmente sem enviá-lo

Um GIF é uma animação dentro de um contêiner de imagem, e ferramentas de troca de rosto tratam essas duas coisas de forma diferente. Sabendo disso, o caminho local é curto e totalmente repetível.

  • Atualizado em 25 de julho de 2026
  • 10 min de leitura

Resposta rápida: Converta o GIF para MP4, faça a troca de rosto no vídeo e reconstrua um GIF a partir do resultado. Tudo permanece na sua máquina, e as duas conversões são comandos únicos de ffmpeg. Assim você também obtém um GIF melhor do que a maioria dos sites de GIF face swap devolve, porque a paleta e a taxa de quadros ficam nas suas mãos.

Quase todo tutorial começa por um botão de upload. O que realmente decide o resultado são as duas conversões nas pontas, não o modelo de troca.

O que o Deep Face Cam faz com GIF hoje

Deixe a situação clara antes de começar. O seletor de arquivos aceita .gif, mas o caminho de imagem o trata como um quadro estático. Os formatos de exportação de imagem são PNG, JPG e BMP; o vídeo sai em MP4 ou MKV. Importação e exportação de GIF animado não estão disponíveis na build atual, então ainda não existe um modo GIF de um clique. O caminho abaixo é o fluxo local confiável até o suporte nativo chegar.

1. Por que um GIF não é só “um vídeo curto”

Um GIF parece vídeo e se comporta como arquivo de imagem. Esse descompasso é exatamente o motivo de isso exigir um fluxo em vez de um botão.

  • É um contêiner de imagem. Ferramentas que roteiam por extensão costumam mandar o GIF para o caminho de imagem estática e processar só o primeiro quadro.
  • A paleta é limitada a 256 cores por quadro. Esse limite está no próprio formato, e gradientes de pele são justamente o que a quantização de paleta trata pior.
  • Não há faixa de áudio, então nada se perde ao passar por MP4 e voltar.
  • É ineficiente. Um GIF de dez segundos pode pesar várias vezes o mesmo clipe em H.264.
  • A duração é definida por quadro, por isso um GIF convertido muitas vezes não tem uma taxa limpa até você definir uma.

Nada disso é problema quando o GIF vira temporariamente um MP4. A troca de rosto passa a se comportar como qualquer vídeo curto, com o mesmo ajuste e a mesma revisão descritos no guia de troca de rosto em vídeo local.

Use apenas material próprio ou com autorização clara — GIFs de reação costumam ser gravações de pessoas reais e identificáveis. Defina como o resultado será sinalizado como alterado e não use para falsidade ideológica, assédio ou imagens íntimas sem consentimento. Veja a política de uso responsável.

2. O fluxo local com GIF, do início ao fim

Cinco passos, dois deles comandos ffmpeg de uma linha. O Deep Face Cam inclui um binário do ffmpeg nas builds de desktop para a própria cadeia de vídeo; os comandos abaixo executam o ffmpeg direto de um terminal, então instale-o separadamente se ele ainda não estiver no seu PATH.

  • Converta o GIF de origem para MP4.
  • Carregue o MP4 como destino no aplicativo e defina o rosto de origem.
  • Exporte o vídeo com o rosto trocado e revise antes de converter de volta.
  • Gere uma paleta de cores a partir do vídeo resultante.
  • Codifique o GIF final usando essa paleta.

3. Os comandos exatos

Passo 1 — GIF para MP4. O filtro de escala força dimensões pares, exigência do H.264 com yuv420p:

ffmpeg -i input.gif -movflags faststart -pix_fmt yuv420p \
  -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" input.mp4

Passo 2 — troca de rosto. Abra o aplicativo, adicione o retrato de origem, defina input.mp4 como destino e exporte. Nada aqui é específico de GIF; se o clipe tiver mais de uma pessoa, use o fluxo de mapeamento do guia de vários rostos.

Passo 3 — gere uma paleta a partir do resultado, para o GIF receber cores ajustadas a este clipe em vez de uma tabela genérica:

ffmpeg -i swapped.mp4 \
  -vf "fps=15,scale=480:-1:flags=lanczos,palettegen=stats_mode=diff" \
  -y palette.png

Passo 4 — codifique o GIF com essa paleta. Mantenha os valores de fps e scale idênticos aos do passo 3:

ffmpeg -i swapped.mp4 -i palette.png \
  -lavfi "fps=15,scale=480:-1:flags=lanczos,paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle" \
  -y output.gif

ParâmetroO que controlaConselho prático
fps=15Taxa de quadros do GIF e, portanto, a contagem de quadros.O controle de tamanho mais eficaz. 12–15 costuma bastar para um GIF de reação.
scale=480:-1Largura de saída; a altura acompanha automaticamente.Reduzir a largura pela metade deixa a contagem de pixels em um quarto.
flags=lanczosQualidade da reamostragem ao escalar.Mantenha; no tamanho de um GIF o custo é irrelevante.
palettegen=stats_mode=diffPondera a paleta para as áreas que mudam entre quadros.Bom padrão para um rosto em movimento sobre fundo parado.
dither=bayer:bayer_scale=5Intensidade do padrão de dithering ordenado.Arquivos menores e menos ruído entre quadros do que difusão de erro.
diff_mode=rectangleRecodifica apenas o retângulo alterado a cada quadro.Economia real quando o fundo está parado.

4. O custo é a contagem de quadros, e você a escolhe

A troca de rosto é cobrada por quadro, e a contagem de quadros de um GIF é duração vezes taxa. É por isso que definir a taxa antes da troca — e não depois — vale a pena:

ClipeTaxa de quadrosQuadros a processarInferências (1 rosto, aprimorador ligado)
3 s12 FPS36108
3 s15 FPS45135
5 s15 FPS75225
5 s24 FPS120360
10 s15 FPS150450
10 s30 FPS300900

A última coluna conta uma detecção, uma troca e um aprimoramento por quadro. Acrescente uma segunda pessoa e as colunas de troca e aprimoramento dobram, exatamente como no guia de vários rostos. Como GIFs são curtos, isso costuma ser rápido — mas também significa que não faz sentido processar 300 quadros se o GIF final vai mostrar apenas 150.

5. Conseguir um GIF que ainda pareça um rosto

O limite de 256 cores é onde as trocas de rosto em GIF dão errado, e isso não tem relação com o modelo de troca. Pele é um gradiente suave, e quantizar um gradiente suave produz faixas visíveis.

  • Gere a paleta a partir do clipe já trocado, não do original. O que mudou foi o rosto.
  • Corte mais justo antes de converter se o fundo for carregado. Menos cores concorrentes significa mais paleta dedicada ao rosto.
  • Mantenha o aprimoramento conservador. Um rosto muito suavizado perde a textura que melhor sobrevive à quantização — veja o guia de aprimoramento.
  • Não amplie na saída. Um GIF de 480px vindo de uma fonte de 320px só aumenta o arquivo.
  • Avalie o GIF, não o MP4. O vídeo intermediário sempre parecerá melhor; o entregável é o GIF.

6. Por que fazer isso localmente importa mais com GIFs

Ferramentas online de GIF face swap exigem upload, e um GIF raramente é material neutro. GIFs de reação são trechos de pessoas reais, muitas vezes tirados de cinema, televisão ou vídeos pessoais. Enviar isso a um serviço web significa entregar a um terceiro tanto a gravação original quanto o resultado alterado, sob qualquer política de retenção vigente naquele dia.

O fluxo acima nunca sai da sua máquina: o ffmpeg roda local, a troca roda local e a saída cai na pasta que você escolheu. Instaladores e downloads de modelos ainda usam a rede — essa distinção está nas notas de privacidade e no guia de tempo real.

Solução de problemas

SintomaCausaCorreção
Só o primeiro quadro foi processadoO GIF entrou pelo caminho de imagem, não de vídeo.Converta para MP4 primeiro; não carregue o GIF como destino.
A conversão falha por causa das dimensõesH.264 com yuv420p exige largura e altura pares.Use o filtro trunc(iw/2)*2 mostrado acima.
Faixas e manchas na peleQuantização para paleta de 256 cores.Gere a paleta a partir do clipe trocado, corte mais justo, reduza a largura.
O GIF final ficou enormeQuadros demais, largura demais ou dithering agressivo.Reduza fps e scale, mantenha diff_mode=rectangle.
A animação roda rápido ou lenta demaisO GIF de origem tinha atrasos irregulares por quadro.Defina um filtro fps explícito nos passos de paleta e codificação.
As cores oscilam entre quadrosRuído de dithering sobre uma paleta por quadro.Use dithering ordenado (bayer) em vez de difusão de erro.
O rosto piscaÉ problema de qualidade da troca, não do GIF.Corrija na etapa de vídeo; o GIF só deixa mais evidente.

Perguntas frequentes

O Deep Face Cam processa GIF animado diretamente?

Na build atual, não. O seletor aceita .gif, mas o caminho de imagem o trata como quadro estático, e as exportações são PNG, JPG ou BMP para imagem e MP4 ou MKV para vídeo. Use o caminho GIF → MP4 → troca → GIF até o suporte nativo chegar.

Perco qualidade passando por MP4?

Na prática, não. H.264 em um ajuste razoável é muito mais fiel do que o GIF de 256 cores do qual você parte e o de 256 cores no qual vai terminar. A qualidade se decide no passo da paleta, não no MP4.

Como manter o GIF abaixo de um limite de tamanho?

Contagem de quadros, largura e tratamento da paleta, nessa ordem. Reduza a taxa, encurte o clipe, diminua a largura e mantenha dithering ordenado com diff_mode=rectangle.

Dá para trocar vários rostos em um GIF?

Dá. Depois que ele vira MP4, é um trabalho de vários rostos comum. Mapeie cada pessoa ao seu rosto de origem antes de renderizar.

A troca de rosto em GIF é mais lenta que em vídeo?

Geralmente muito mais rápida, porque GIFs são curtos. Um GIF de cinco segundos a 15 FPS tem 75 quadros; um vídeo de um minuto a 30 FPS tem 1.800.

Deixe o GIF, e o original, na sua própria máquina

Converta, troque e reconstrua localmente — sem upload, e com a taxa de quadros e a paleta que realmente decidem a aparência do resultado nas suas mãos.

Guias relacionados