Converter vídeo OGV em animação GIF?

40

Criei vídeos OGV com o gtk-recordmydesktopprograma de screencasting, tentando resolver esse problema aqui com bruteforce sobre X. Posso ver os vídeos com VLC.

Agora, a tarefa é encontrar algumas maneiras de converter vídeos OGV em animações GIF para que eu possa exibi-los no SE. Como eu posso fazer isso?

Matthias Braun
fonte

Respostas:

38

dê uma olhada no seguinte: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast/107735#107735

..... Depois que o Desktop Recorder salvar a gravação em um vídeo OGV , o MPlayer será usado para capturar capturas de tela JPEG , salvando-as no diretório 'output' .

Em um terminal:

mplayer -ao null <video file name> -vo jpeg:outdir=output

Use o ImageMagick para converter as capturas de tela em gifs animados.

convert output/* output.gif

você pode otimizar as capturas de tela da seguinte maneira:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
maniat1k
fonte
11
Para um grande número de imagens, tive que adicionar -limit map 1para converter (recebi um "matado" caso contrário).
Ax3l
Com um vídeo ogv de 30 segundos, o comando convert levou todo o meu processador e durou mais de 10 minutos antes que eu o parasse. adicionar -limit map 1ao comando não o corrigiu.
precisa saber é o seguinte
11
Tente isso para converter ffmpeg -i output/00000%03d.jpg output.gif unix.stackexchange.com/questions/24014/…
Dawid Drozd
É importante mencionar que o direto também convert output/* -fuzz 10% -layers Optimize optimised.gifé possível e visivelmente mais rápido que o caminho de dois comandos. Além disso, também mplayercria pngcapturas de tela prontamente , o que pode ser preferido para capturas de sites ou GUIs.
Raphael
21

Script simples com boa qualidade

Roteiro:

inputFile=$1

FPS=15
WIDTH=320

#Generate palette for better quality
ffmpeg -i $inputFile -vf fps=$FPS,scale=$WIDTH:-1:flags=lanczos,palettegen tmp_palette.png

#Generate gif using palette
ffmpeg -i $inputFile -i tmp_palette.png -loop 0 -filter_complex "fps=$FPS,scale=$WIDTH:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

rm tmp_palette.png

Código de: https://superuser.com/a/556031/295664

Sem paleta: (231 KB)

insira a descrição da imagem aqui

Com paleta: (573 KB)

insira a descrição da imagem aqui

Dawid Drozd
fonte
4

Este one-liner está trabalhando para mim:

ffmpeg -i video.ogv video.gif
luator
fonte
2
Isso é essencialmente diferente das respostas existentes que usam ffmpeg? Quão?
ilkkachu
11
@ilkkachu Eu estava procurando uma solução muito rápida, simples e fácil de lembrar. As outras respostas são muito mais complicadas e não são fáceis de entender à primeira vista (provavelmente resultando em resultados de maior qualidade).
luator
2
ifile=~/test.ogv

echo '# Determine input WxH and FPS' 
eval "$(ffmpeg -i "$ifile" 2>&1 |sed -nr 's/.*Stream.*Video.* ([0-9]+x[0-9]+),.*[^[0-9.]([0-9.]+).*tbr,.*/WxH=\1;FPS=\2/p')"

echo '# Output multiple images from the input video'
ffmpeg -i "$ifile" -r $FPS -s $WxH -f image2 -vframes 100 -y ~/test-%03d.jpg 2>/dev/null

echo '# use ImageMagic "convert" to generate the animated .gif' 
convert -delay 20 ~/test-[0-9][0-9][0-9].jpg  ~/test.gif 

echo '# remove temp image files'    
rm -f  ~/test-[0-9][0-9][0-9].jpg

echo 'Done!'
Peter.O
fonte
11
Sugira a conversão para PNG, não JPEG, maior, mas reduz artefatos de re-compactação.
ideasman42