Конвертировать OGV видео в GIF анимацию?

40

Я создал О видео с gtk-recordmydesktopScreencasting программы, пытаясь решить эту проблему здесь с брутфорсом над X. Я могу просматривать видео с VLC.

Теперь задача состоит в том, чтобы найти способы конвертировать видео OGV в анимацию GIF, чтобы я мог отображать их на SE. Как я могу это сделать?

Матиас Браун
источник

Ответы:

38

взгляните на это: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast/107735#107735

..... После того, как Desktop Recorder сохранит запись в видео 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
maniat1k
источник
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/...
DAWID Дрозд
Следует отметить, что прямой также 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
luator
источник
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!'
Peter.O
источник
1
Предложите преобразование в PNG, а не в JPEG, больше, но уменьшите артефакты повторного сжатия.
ideasman42