Как сгенерировать gif из avi с помощью ffmpeg?

Я пытаюсь извлечь часть видео в анимированный gif, используя следующую команду:

ffmpeg -i video.avi -t 5 out.gif

Он генерирует анимированный gif, но качество безумное. Однако, когда я создаю изображение gif, используя:

ffmpeg -i video.avi -t 10 out%d.gif

Генерирует изображения в формате gif приемлемого качества. Как я могу создать анимированный gif, используя первую команду, но с тем же качеством, что и вторая команда?


person Marconi    schedule 21.05.2011    source источник
comment
Это может быть удобно blog.pkh.me/p/ 21-высококачественный-gif-с-ffmpeg.html   -  person Matthew Lock    schedule 18.03.2015


Ответы (2)


У меня была похожая проблема при попытке создать высококачественный анимированный gif из серии изображений, извлеченных из фильма.

По некоторым причинам анимированный gif, сгенерированный с помощью ffmpeg, содержит только 103 цвета, которые можно предположить с использованием фиксированной цветовой палитры из 256 уровней, что приводит к ужасающему результату. Мое решение было вместо этого

ffmpeg -i video.avi -t 10 out%02d.gif

тогда

gifsicle --delay=10 --loop *.gif > anim.gif

Тогда качество вполне хорошее. Вы можете найти gifsicle здесь

Изменить: пост обновлен, чтобы отразить предложения Алекса Кана.

person Tommy Strand    schedule 10.05.2012
comment
Благодарю вас! Одно дополнение: используйте out%02d.gif. Это дополняет число в имени файла, чтобы они были в правильном алфавитном порядке. В противном случае порядок получается таким: 1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23... что придает полученному gif странный эффект пропуска. - person Alex Kahn; 17.12.2012
comment
Вы также можете иметь ffmpeg выходные PNG вместо GIF, чтобы избежать дрянного качества. FWIW, вот хорошая статья о создании GIFS в Bash: blog.room208.org/post/48793543478< /а> - person Mathias Bynens; 30.09.2013
comment
Это прекрасно работает. Еще одна вещь, которую вы, возможно, захотите сделать, это пропускать кадры: используя seq -f %02g.gif start skip stop вместо *.gif в команде gifsicle, вы можете пропустить skip кадров, начиная с start и заканчивая stop кадрами. Довольно полезно. Например: gifsicle --delay=10 --loop seq -f %02g.gif 1 3 156 › anim.gif Начнется с 1 кадра, пропустит 3 кадра и остановится на 156 кадре. - person funkaster; 04.03.2014
comment
кроме того, я предлагаю следующий шаг: convert -layers Optimize anim.gif anim_opt.gif - person Marat Buharov; 14.05.2014
comment
gifsicle вообще не работает. говорит gifsicle.EXE: *.gif: недопустимый аргумент в ответ на вашу команду - person Dims; 12.06.2014
comment
для меньшего размера GIF-файла можно настроить частоту кадров, например (5FPS): ffmpeg -i input.mp4 -vf fps=fps=5 out%04d.gif; gifsicle --delay=20 --loop out*.gif > anim.gif; rm out*.gif; В случае ffmpeg, если указать более низкую частоту кадров, количество файлов будет уменьшено. В случае с gifsicle вам потребуется дополнительная задержка, чтобы компенсировать недостающие кадры. gifscile использует шкалу 1/100 с, что означает 20/100 5 кадров в секунду. - person lepe; 08.12.2014
comment
Совет: gifsicle -O3 прекрасно оптимизирует GIF-файлы. - person wchargin; 23.12.2014

Раньше я не делал анимированных GIF, но вы можете попробовать использовать параметр битрейта для указания качества, несмотря на то, что это изображение (и, предположительно, не имеющее скорости). Качество миниатюры соответствует параметру -b. Если под безумием вы подразумеваете «безумно плохо», вы можете указать очень высокий битрейт и допустимый битрейт (не уверен, используете ли вы источник vbr или cbr). (или сделайте наоборот, если вы имеете в виду, что это слишком хорошо, и вы хотите ограничить размер)

'-b', '10000000','-bt', '20000000'

В качестве альтернативы вы также можете изменить размеры с помощью параметра -s, который примет обычное представление размеров, например «1920X1200».

Это действительно зависит от битрейта и сжатия вашего исходного материала и от того, на что, как вы надеетесь, будет похожа гифка. Возможно, вы захотите предоставить больше информации, чем «безумие», но я полагаю, что это даст вам хорошее начало в любом случае. Удачи

person Profane    schedule 21.05.2011
comment
Спасибо за ваш ответ. Однако я обнаружил, что ffmpeg не очень хорошо справляется с обработкой изображений gif, поэтому я использовал его для извлечения изображений, а затем использовал imagemagick для создания gif. - person Marconi; 22.05.2011
comment
Не уверен, почему я получаю здесь много отрицательных голосов. Я заранее заявил, что не делал анимированных гифок. Пытался указать человеку с вопросом на другие соответствующие параметры. Старый проект FFMPEG, казалось, славился тем, что многие его параметры были скрыты за пределами документации. Может, меня минусуют за то, что я раскрываю его ужасные темные тайны? - person Profane; 09.08.2011