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?

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

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


4

One-liner ini berfungsi untuk saya:

ffmpeg -i video.ogv video.gif

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!'

1
Sarankan konversi ke PNG, bukan JPEG, lebih besar tetapi mengurangi artefak kompresi ulang.
ideasman42
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.