Pular para o conteúdo

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

Dica publicada em Linux / Multimídia
Fábio Berbert de Paula fabio
Hits: 1.170 Categoria: Linux Subcategoria: Multimídia
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Minecraft no Debian 10

Como desabilitar o protocolo SSL3 no Nginx

Carteira de Bitcoin Electrum no Linux

Restringindo acesso ao servidor de FTP

Como remover senhas de arquivos PDF por linha de comando

Instalando o PulseEffects no Debian 10 Buster

Instalação do mps-youtube no Fedora

Instalar Popcorn-Time no Linux

Kazam 1.4.5 no Slackware Current

UMPlayer reformulado para o Linux Mint 20

Contribuir com comentário

Entre na sua conta para comentar.