ffmpeg
+ convert
one-liner sem arquivos intermediários
sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
produziu a saída rapidamente e com um tamanho razoável em comparação com o arquivo de entrada.
Fonte: link
Explicação de alguns dos argumentos:
-
-r 10
: amostragem FPS. Por exemplo, se o vídeo original tiver 30 FPS, -r 10
significa que ffmpeg
escolherá um quadro em cada 3. O FPS de entrada pode ser encontrado com ffprobe
e o número total de quadros de entrada pode ser encontrado com mediainfo
, conforme explicado em: link Um valor relativamente baixo como 10
significará menos quadros de saída e, portanto, GIFs menores. TODO alguns
-
-loop 0
: adicione o campo Contagem de loop da extensão Netscape Gif à saída. 0 significa loop infinito, conforme descrito em: link eog
, firefox
e cromo todo o loop infinitamente por padrão, mesmo sem ele, então não sei mais como é necessário.
-
-delay 5
: o tempo esperado antes de mostrar o próximo quadro, em centésimos de segundo, conforme descrito em: link byte 324. So 100
significa 1 FPS, 5
significa 1 / 0.5 == 20FPS
.
Outros argumentos opcionais que você provavelmente deseja:
-
ffmpeg -vf scale=320:-1
: produza a saída 320
pixels de altura. Este é um caso de uso comum para GIFs para a web. Se você remover essa opção, o GIF de saída terá a mesma altura que o vídeo de entrada. A altura original pode ser encontrada, por exemplo, com ffprobe
: link e a saída com identify
.
-
ffmpeg -ss 00:02:26 -to 00:02:36
: converta o vídeo apenas de 2 a 26 segundos para 02 minutos e 36 segundos. Veja também: link
Mesmo que você reduza a altura e a taxa de quadros, o GIF de saída ainda pode ser maior que o vídeo, pois os formatos de vídeo não-GIF "real" são compactados nos quadros, enquanto o GIF compacta somente quadros individuais.
Um direto:
convert input.mp4 rpi2-bare-metal-blink.gif
funcionou, mas quase matou o meu computador por causa do estouro de memória, e produziu um ouptput 100x maior para o meu arquivo de entrada 2s 1Mb. Talvez um dia o ImageMagick consiga alcançá-lo.
Testado no Ubuntu 17.10.