Konversi video OGV ke animasi GIF?

40

Saya membuat video OGV dengan gtk-recordmydesktopprogram screencasting, mencoba untuk mengatasi masalah ini di sini dengan bruteforce over X. Saya dapat melihat video dengan VLC.

Sekarang, tugasnya adalah menemukan beberapa cara untuk mengkonversi video OGV menjadi animasi GIF sehingga saya dapat menampilkannya di SE. Bagaimana saya bisa melakukan itu?

Matthias Braun
sumber

Jawaban:

38

lihat ini: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast/107735#107735

..... Setelah Desktop Recorder menyimpan rekaman ke dalam video OGV , MPlayer akan digunakan untuk mengambil screenshot JPEG , menyimpannya ke direktori 'output' .

Di terminal:

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

Gunakan ImageMagick untuk mengonversi tangkapan layar menjadi gif animasi.

convert output/* output.gif

Anda dapat mengoptimalkan tangkapan layar dengan cara ini:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
maniat1k
sumber
1
Untuk sejumlah besar gambar, saya harus menambahkan -limit map 1untuk mengonversi (mendapat "Dibunuh" sebaliknya).
Ax3l
Dengan video ogv 30 detik, perintah convert mengambil semua cpu saya dan berjalan lebih dari 10 menit sebelum saya menghentikannya. menambahkan -limit map 1ke perintah tidak memperbaikinya.
maks pemohon
1
Coba ini untuk mengonversi ffmpeg -i output/00000%03d.jpg output.gif unix.stackexchange.com/questions/24014/...
Dawid Drozd
Perlu disebutkan bahwa direct convert output/* -fuzz 10% -layers Optimize optimised.gifjuga dimungkinkan, dan terasa lebih cepat daripada jalur dua-perintah. Juga, mplayersiap membuat pngtangkapan layar juga, yang mungkin lebih disukai untuk menangkap situs web atau GUI.
Raphael
21

Script sederhana dengan kualitas bagus

Naskah:

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

Kode dari: https://superuser.com/a/556031/295664

Tanpa palet: (231 KB)

masukkan deskripsi gambar di sini

Dengan palet: (573 KB)

masukkan deskripsi gambar di sini

Dawid Drozd
sumber
4

One-liner ini berfungsi untuk saya:

ffmpeg -i video.ogv video.gif
luator
sumber
2
Apakah ini pada dasarnya berbeda dari jawaban yang ada yang digunakan ffmpeg? Bagaimana?
ilkkachu
1
@ilkkachu Saya mencari solusi yang sangat cepat, sederhana dan mudah diingat. Jawaban lain jauh lebih rumit dan tidak begitu mudah dimengerti pada pandangan pertama (mungkin menghasilkan hasil yang lebih berkualitas).
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
sumber
1
Sarankan konversi ke PNG, bukan JPEG, lebih besar tetapi mengurangi artefak kompresi ulang.
ideasman42