Перетворити OGV відео в анімацію GIF?


40

Я створив відеоролики OGV за допомогою gtk-recordmydesktopпрограми screencasting, намагаючись вирішити цю проблему тут грубою формою за X. Я можу переглянути відео з VLC.

Тепер завдання полягає в тому, щоб знайти деякі способи перетворення OGV відео в анімацію GIF, щоб я міг їх відображати в SE. Як я можу це зробити?

Відповіді:


38

подивіться на це: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast/107735#107735

..... Після того як настільний рекордер збереже запис у відео OGV , MPlayer буде використовуватися для зйомки скріншотів JPEG , зберігаючи їх у каталозі 'output' .

На терміналі:

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

Використовуйте ImageMagick для перетворення знімків екрана в анімовані gif-файли.

convert output/* output.gif

ви можете оптимізувати знімки екрана таким чином:

convert output.gif -fuzz 10% -layers Optimize optimised.gif

1
Для великої кількості зображень мені довелося додати -limit map 1для перетворення (отримано "Убито" в іншому випадку).
Ax3l

З 30-секундним відеозаписом ogv команда конвертувати зайняла весь мій процесор і тривала понад 10 хвилин, перш ніж я зупинив його. додавання -limit map 1до команди не виправило.
максимальний прихильник

1
Спробуйте це для перетворення ffmpeg -i output/00000%03d.jpg output.gif unix.stackexchange.com/questions/24014/…
Давід Дрозд

Слід зазначити, що і прямий convert output/* -fuzz 10% -layers Optimize optimised.gifможливий, і помітно швидше, ніж двокомандний шлях. Крім того, mplayerлегко створюються pngскріншоти, які можна віддати перевагу для захоплення веб-сайтів або графічних інтерфейсів.
Рафаель

21

Простий сценарій з хорошою якістю

Сценарій:

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

Код від: https://superuser.com/a/556031/295664

Без палітри: (231 КБ)

введіть тут опис зображення

З палітрою: (573 КБ)

введіть тут опис зображення


4

Цей одноразовий працює для мене:

ffmpeg -i video.ogv video.gif

2
Це суттєво відрізняється від існуючих відповідей, які використовує ffmpeg? Як?
ilkkachu

1
@ilkkachu Я шукав дуже швидке, просте і легко запам’ятоване рішення. Інші відповіді набагато складніші і не такі легкі для розуміння на перший погляд (однак, мабуть, це призводить до більш високих результатів якості).
луатор

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
Запропонуйте перетворення в PNG, а не JPEG, більшого розміру, але зменшує артефакти повторного стиснення.
ideaman42
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.