Я хочу сделать анимацию .gif
из .mp4
видео. Я бы предпочел сделать это из командной строки, поэтому, пожалуйста, перечисляйте только инструменты командной строки.
command-line
mp4
gif
Maythux
источник
источник
Ответы:
ffmpeg
3.4.4 может сделать это прямо на Ubuntu 18.04Вы, вероятно, хотите использовать что-то вроде:
Процедура генерации тестовых данных описана в этом посте .
Более прямой:
также работает, но выходной GIF будет намного больше, чем входное видео, потому что форматы видео сжимаются по кадрам.
Разбивка аргумента:
ulimit -Sv 1000000
: установить максимальный объем памяти 1 Гб для программы.Главным образом я гарантирую, что команда не использует неограниченную память, как некоторые предыдущие попытки.
500 Мб делает ffmpeg не в состоянии загружать разделяемые библиотеки ... время обновить оперативную память?
-ss 00:00:03 -to 00:00:06
: время начала и окончания, чтобы вырезать видео.Нет, GIF-файлы - не лучший способ
пиратскогораспространения видео в Интернете.Смотрите также: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
: сделать выходные512
пиксели по высоте и отрегулировать ширину, чтобы сохранить соотношение сторон.Это частый случай использования изображений в Интернете, которые имеют гораздо меньшее разрешение, чем видео.
Если вы удалите эту опцию, выходной GIF будет иметь ту же высоту, что и входное видео.
Исходную высоту видео можно найти, например, по адресу
ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 и 1024 х 1024 в нашем случае.-r 15
: выборка FPS.Например, исходное видео было 30 FPS, что
-r 15
означает, чтоffmpeg
будет выбирать один кадр из каждых 2 (= 30 / 15
).Однако воспринимаемый выходной FPS настраивается так, чтобы соответствовать входному сигналу, поэтому вы не заметите ускорения, только большую детализацию.
Входной FPS можно найти с помощью
ffprobe
, а общее количество входных кадров можно найти,mediainfo
как объяснено на: https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -в-видео-на-Linux-командная строка / 1044894 # 1044894Я рекомендую эту опцию, потому что видео форматы обычно имеют более высокую частоту кадров из-за большего разрешения. С меньшими GIF-изображениями более низкая частота кадров менее заметна, поэтому мы можем пропускать некоторые кадры и создавать меньшие GIF-изображения.
До pre 18.04:
ffmpeg
+convert
однострочник без промежуточных файловffmpeg
не мог обработать GIF ранее. Лучшее, что у меня было, было кое-что вместе:Объяснение некоторых аргументов:
-loop 0
: добавьте поле количества циклов расширения Netscape Gif к выводу. 0 означает бесконечный цикл, как описано по адресу: http://www.vurdalakov.net/misc/gif/netscape-looping-application-extensioneog
,firefox
а хром все циклы по умолчанию бесконечны даже без него, поэтому я не уверен, насколько это необходимо больше-delay 5
: время ожидания до показа следующего кадра, с точностью до секунды, как описано на: https://en.wikipedia.org/wiki/GIF#Animated_GIF, байт 324. Так100
значит 1 FPS,5
значит1 / 0.5 == 20FPS
.Даже если вы уменьшите высоту и частоту кадров, выходной GIF может все же быть больше, чем видео, поскольку «настоящие» форматы видео, отличные от GIF, сжимают кадры, а GIF сжимает только отдельные кадры.
Прямой:
работал, но чуть не убил мой компьютер из-за переполнения памяти, и произвел выходную мощность в 100 раз больше для моего входного файла 2s 1Mb. Возможно, однажды ImageMagick наверстает упущенное.
Смотрите также: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality
Проверено на Ubuntu 17.10.
источник
scale=320:-1
-r 10
вернет GIF к нормальной скорости.Два шага:
Извлечь изображения из видео
Создайте каталог с именем frames в том же каталоге, что и ваш
.mp4
файл. Используйте команду:источник
Преобразование изображений в GIF
Документы: конвертировать GIF-параметры
В итоге вы получите довольно большой файл, посмотрите руководство по магии изображений, чтобы оптимизировать gif для параметров, которые вы можете добавить к команде второго шага, чтобы получить файл меньшего размера.
источник
frames
папка должна существовать для работы первой команды.-layers Optimize
к последнейconvert
команде перед*.jpg
. Проверьте вывод, хотя, это может повлиять. Для меня это уменьшило размер gif с 5 МБ до 700 КБ без ощутимой потери качества :)ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
,gifify - это универсальная утилита на основе узлов, которая упрощает преобразование. Это зависит от того
nodejs
,npm
,ffmpeg
иimagemagick
которые все доступны в репозиториях.После
npm
установки вы можете выполнитьgifify
глобальную установку с помощью:Видео может быть преобразовано в .GIF с помощью:
Вы также можете дополнительно установить начальную и конечную позицию в видео и добавить текстовую подпись:
Conversion Преобразование может занять несколько минут даже для небольших видео.
источник
gifsicle
, но затем возникает другая проблема: github.com/vvo/gifify/issues/95 Кроме того, не могли бы вы сообщить нам новичкам npm, в каком каталоге запускатьnpm install
и нужно ли запускать его как root или нет? Спасибо!