Конвертирование mp4 видео в GIF изображение под Ubuntu 14.04

Категория: Linux

Для конвертирования видео записи в 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

категория: Linux