Конвертирование mp4 видео в GIF изображение под Ubuntu 14.04
Для конвертирования видео записи в GIF изображение нам необходимы такие утилиты как ffmpeg версии 2.4.2 и convert из пакета imagemagick. Установка ffmpeg описана здесь.
1. Простое и быстрое конвертирование в плохом качестве:
ffmpeg -i video.mp4 -r 4 -y ~/image.gif
2. Конвертирование со сжатием и оптимизацией качества/размера GIF изображения (среднее качество):
ffmpeg -i video.mp4 -r 4 -vf super2xsai,scale=w=iw/2:h=ih/2 frames/f%03d.png
convert -loop 0 ~/frames/f*.png image.gif
convert -layers Optimize image.gif image_optimized_file
Примечание
При -loop 1 мы отключим цикличность анимации и GIF'ка будет отображать кадры только по одному кругу. Опция -r 4 указывает извлекать 4 кадра в сек.
Этапы сборки (компоновки) png изображений и оптимизации качества полученного GIF самые затратные по времени. Также, при оптимизации ухудшается качество GIF анимации.
3. Конвертирование без промежуточных скринов со сжатием и оптимизацией:
ffmpeg -i video.mp4 -vf super2xsai,scale=w=iw/2:h=ih/2 -r 10 -f image2pipe -vcodec ppm - \
| convert -delay $gif_delay -loop 0 - gif:- \
| convert -layers Optimize - image.gif
Примечание
Параметр -delay задает задержку и/или количество кадров в секунду. Я не до конца с ним разобрался, так что могу ошибкаться, но я понял так принцип его работы:
-delay D - (число, например 0.1) это значение задержки между кадрами для GIF анимации, по умолчанию - 100.
-delay FxD - F это задержка, а D - частота кадров.
4. Лучшее качество без сохранения промежуточных кадров и без оптимизации:
ffmpeg -i video.mp4 -r 4 -vcodec ppm -f image2pipe - \
| convert -delay 1x4 -loop 0 - image.gif
Примечание
Размер качественной GIF'ки будет раз в 5 больше чем исходный видео файл. Как ужать размер gif-анимации без потери качества я не знаю.
Заметки
Получить информацию о каждом кадре GIF изображении:
identify image.gif
#mp4 to gif, #covert video to gif, #ffmpeg