Como converter um vídeo MP4 para um GIF para publicar no README.md do seu repositório Github

Publicado por Fábio Berbert de Paula em 07/06/2025

[ Hits: 229 ]

Blog: https://fabio.automatizando.dev

 


Como converter um vídeo MP4 para um GIF para publicar no README.md do seu repositório Github



Para essa dica usarei um exemplo da vida real. Eu gravei um vídeo de cerca de 35 segundos para demonstrar um projeto de código aberto que estou desenvolvendo. Gostaria de publicar esse vídeo no README.md do meu repositório Github, mas o Github não aceita vídeos MP4. Então, a solução é converter o vídeo para um GIF.

Eis o vídeo:

ls -lh ssh-copilot-bot.mp4
-rw-r--r-- 1 fabio vboxusers 15M jun 7 14:00 /home/fabio/ssh-copilot-bot.mp4

Vamos nos aprofundar nas informações do vídeo:

ffprobe ssh-copilot-bot.mp4
ffprobe version 4.4.2-0ubuntu0.22.04.1+esm7 Copyright (c) 2007-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1+esm7 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/fabio/obs/ssh-copilot-bot.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.76.100
  Duration: 00:00:37.16, start: 0.000000, bitrate: 3343 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1080x1920 [SAR 1:1 DAR 9:16], 3329 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]

O objetivo principal é reduzir drasticamente o tamanho do arquivo (de 15MB para algo abaixo de 5MB, idealmente) e as dimensões, mantendo uma boa qualidade visual. Um GIF de 1080x1920 com 60fps seria gigantesco e lento para carregar.

A melhor maneira de fazer isso com ffmpeg é um processo de duas etapas que cria uma paleta de cores otimizada para o seu vídeo específico. Isso resulta em um GIF com qualidade muito superior e tamanho menor do que uma conversão direta.

Passo 1: Gerar a Paleta de Cores Otimizada

Este comando primeiro analisa o vídeo, reduzindo a taxa de quadros (FPS) e a resolução, e depois gera um arquivo "palette.png" contendo as cores ideais para a criação do GIF.

ffmpeg -i ssh-copilot-bot.mp4 -vf "fps=12,scale=480:-1:flags=lanczos,palettegen" palette.png

O que este comando faz:
  • -i ~/obs/ssh-copilot-bot.mp4: Define o seu vídeo como entrada.
  • -vf "...": Aplica uma cadeia de filtros de vídeo:
  • fps=12: Reduz a taxa de quadros de 60 para 12. É um ótimo equilíbrio entre fluidez e tamanho do arquivo para um README.
  • scale=480:-1: Redimensiona o vídeo para ter 480 pixels de largura. O -1 faz com que a altura seja calculada automaticamente, mantendo a proporção original (ficará 480x854).
  • flags=lanczos: Usa um algoritmo de redimensionamento de alta qualidade.
  • palettegen: O filtro principal que gera o arquivo palette.png.

Verificando:

file palette.png
palette.png: PNG image data, 16 x 16, 8-bit/color RGBA, non-interlaced

Passo 2: Criar o GIF Final Usando a Paleta

Agora, o ffmpeg usará o vídeo original e o palette.png para construir o GIF final.

ffmpeg -i ssh-copilot-bot.mp4 -i palette.png -lavfi "fps=12,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" ssh-copilot-bot.gif

O que este comando faz:

  • -i ~/obs/ssh-copilot-bot.mp4: Define seu vídeo como a primeira entrada.
  • -i palette.png: Define a paleta gerada como a segunda entrada.
  • -lavfi "...": Usa um filtro complexo: Aplica os mesmos filtros fps e scale da etapa anterior; [x];[x][1:v]paletteuse: Pega o resultado do vídeo filtrado e aplica a paleta (paletteuse) para criar o GIF.
  • ssh-copilot-bot.gif: O nome do seu arquivo de saída.

Ao final, você terá um arquivo ssh-copilot-bot.gif com um tamanho muito mais adequado para o GitHub. Não se esqueça de apagar o palette.png, que não será mais necessário.

ls -lh ssh-copilot-bot.gif -rw-r--r-- 1 fabio vboxusers 25M jun 7 14:13 ssh-copilot-bot.gif

Opções para Personalizar

  • Para um GIF menor (em dimensões e tamanho): Altere o valor de scale. Por exemplo, scale=360:-1 para uma largura de 360 pixels.
  • Para um GIF mais suave (e maior): Aumente o fps para 15. Não recomendo mais do que isso.

Agora, o GIF está pronto para ser adicionado ao seu README.md. Você pode fazer isso com a seguinte sintaxe Markdown:

![Descrição do GIF](ssh-copilot-bot.gif)

Ah, e se quiser conferir meu projeto SSH Copilot Bot, está convidado! Trata-se de um bot que roda via Telegram que acessa e gerencia seus servidores Linux através de conexões SSH, tudo de forma segura e prática. Confira o repositório para mais detalhes e como contribuir: https://github.com/fberbert/ssh-copilot-bot.

Outras dicas deste autor

Skype Call Recorder - Como gravar áudio de chamadas do Skype

O comando grep

ffmpeg - Como aumentar ou reduzir o volume de um áudio ou video via linha de comando

O comando tail

Como fazer a cópia (clonar) de um HD para outro

Leitura recomendada

Conversor de áudio para Ubuntu e Debian

Como compartilhar áudio do sistema/programas em reuniões online com o SoundUX

Assistindo vídeos do YouTube em máquinas fracas

Atualizando K3B e Outros Pacotes no Sabayon Linux

ExMplayer no Linux Mint 20

  

Comentários
[1] Comentário enviado por maurixnovatrento em 08/06/2025 - 20:00h

Outra dica boa que vou salvar.
______________________________________________________________________
Inscreva-se no meu Canal: https://www.youtube.com/@LinuxDicasPro
Repositório GitHub do Canal: https://github.com/LinuxDicasPro
Grupo do Telegram: https://t.me/LinuxDicasPro



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts