Konwertuj wideo OGV na animację GIF?

40

Tworzyłem filmy OGV z gtk-recordmydesktopprogramem do screencastingu, próbując rozwiązać ten problem tutaj z bruteforce nad X. Mogę oglądać filmy z VLC.

Teraz zadaniem jest znalezienie niektórych sposobów konwersji filmów OGV na animacje GIF, aby można je było wyświetlać w SE. Jak mogę to zrobić?

Matthias Braun
źródło

Odpowiedzi:

38

spójrz na to: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast/107735#107735

..... Po zapisaniu nagrania przez Desktop Recorder w wideo OGV , MPlayer będzie używany do przechwytywania zrzutów ekranu JPEG i zapisywania ich w katalogu „wyjściowym” .

Na terminalu:

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

Użyj ImageMagick, aby przekonwertować zrzuty ekranu na animowane gify.

convert output/* output.gif

możesz zoptymalizować zrzuty ekranu w ten sposób:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
maniat1k
źródło
1
W przypadku dużej liczby zdjęć musiałem dodać -limit map 1do konwersji (inaczej „Zabiłem”).
Ax3l
W przypadku 30-sekundowego wideo ogv polecenie konwersji zajęło wszystkie moje procesory i działało przez ponad 10 minut, zanim je zatrzymałem. dodanie -limit map 1do polecenia nie naprawiło tego.
max pleaner
1
Spróbuj tego, aby przekonwertować ffmpeg -i output/00000%03d.jpg output.gif unix.stackexchange.com/questions/24014/…
Dawid Drozd
Należy wspomnieć, że bezpośrednie convert output/* -fuzz 10% -layers Optimize optimised.gifjest również możliwe i zauważalnie szybsze niż ścieżka dwóch poleceń. Również mplayerłatwo tworzy pngzrzuty ekranu, które mogą być preferowane do przechwytywania stron internetowych lub GUI.
Raphael,
21

Prosty skrypt o dobrej jakości

Scenariusz:

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

Kod z: https://superuser.com/a/556031/295664

Bez palety: (231 KB)

wprowadź opis zdjęcia tutaj

Z paletą: (573 KB)

wprowadź opis zdjęcia tutaj

Dawid Drozd
źródło
4

Ten liner działa dla mnie:

ffmpeg -i video.ogv video.gif
luator
źródło
2
Czy to zasadniczo różni się od istniejących odpowiedzi, które wykorzystują ffmpeg? W jaki sposób?
ilkkachu
1
@ilkkachu Szukałem bardzo szybkiego, prostego i łatwego do zapamiętania rozwiązania. Inne odpowiedzi są znacznie bardziej skomplikowane i nie tak łatwe do zrozumienia na pierwszy rzut oka (prawdopodobnie jednak skutkują lepszymi wynikami).
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
źródło
1
Sugeruj konwersję do formatu PNG, a nie JPEG, większego, ale zmniejsza artefakty ponownej kompresji.
ideasman42