Я хочу сделать анимированный .gif
из .mp4
видео. Я бы предпочел сделать это из командной строки, поэтому, пожалуйста, перечислите только инструменты командной строки.
Я хочу сделать анимированный .gif
из .mp4
видео. Я бы предпочел сделать это из командной строки, поэтому, пожалуйста, перечислите только инструменты командной строки.
Два шага:
Извлечь изображения из видео
Создайте каталог с фреймами в том же каталоге с файлом .mp4
.
Использовать команду:
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.jpg'
-r 5 stands for FPS value
for better quality choose bigger number
adjust the value with the -delay in 2nd step
to keep the same animation speed
%03d gives sequential filename number in decimal form
источник р>
Преобразование изображений в gif
cd frames
convert -delay 20 -loop 0 *.jpg myimage.gif
-delay 20 means the time between each frame is 0.2 seconds
which match 5 fps above.
When choosing this value
1 = 100 fps
2 = 50 fps
4 = 25 fps
5 = 20 fps
10 = 10 fps
20 = 5 fps
25 = 4 fps
50 = 2 fps
100 = 1 fps
in general 100/delay = fps
-loop 0 means repeat forever
Документы: конвертировать варианты gif
В конечном итоге вы получите довольно большой файл, посмотрите на руководство по настройке изображения для оптимизации gif на параметры, которые вы можете добавить ко второму шагу для получения меньшего файла.
ffmpeg
+ convert
однострочный без промежуточных файлов
sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
быстро и с разумным размером производили вывод, чем у входного файла.
Источник: Ссылка
Объяснение некоторых аргументов:
-r 10
: выборка FPS. Например, если исходное видео имеет 30 FPS, -r 10
означает, что ffmpeg
будет выбирать один кадр в каждом 3. Входной FPS можно найти с ffprobe
, а общее количество входных кадров можно найти с помощью mediainfo
, как описано в: Ссылка Относительно низкое значение, например 10
, будет означать меньшее количество выходных кадров и, следовательно, меньшие GIF. TODO some
-loop 0
: добавьте поле вывода цикла Netscape Gif к выходу. 0 означает бесконечный цикл, как описано в: Ссылка eog
, firefox
и хром все цикл бесконечно по умолчанию, даже без него, поэтому я не уверен, насколько это необходимо.
-delay 5
: время ожидания перед показом следующего кадра в hundreths второго, как описано в: Ссылка byte 324. Таким образом, 100
означает 1 FPS, 5
означает 1 / 0.5 == 20FPS
.
Дополнительные необязательные аргументы, которые вы, скорее всего, захотите:
ffmpeg -vf scale=320:-1
: вывести выход 320
пикселей по высоте. Это распространенный вариант использования GIF для Интернета. Если вы удалите эту опцию, выходной GIF будет иметь ту же высоту, что и входное видео. Исходную высоту можно найти, например, с помощью ffprobe
: Ссылка и вывод с identify
.
ffmpeg -ss 00:02:26 -to 00:02:36
: конвертировать видео только с 02 минут 26 секунд до 02 минут 36 секунд. См. Также: Ссылка р>
Даже если вы уменьшаете высоту и частоту кадров, выходной GIF может по-прежнему быть больше, чем видео, поскольку "реальные" видеоролики, отличные от GIF, сжимаются между кадрами, а GIF только сжимает отдельные кадры.
Прямое:
convert input.mp4 rpi2-bare-metal-blink.gif
работал, но почти убил мой компьютер из-за переполнения памяти и выпустил около 100 раз больше для моего входного файла 2s 1Mb. Возможно, однажды ImageMagick наверстает упущенное.
Протестировано на Ubuntu 17.10.
gifify - это универсальная утилита на узле, упрощающая преобразование. Это зависит от nodejs
, npm
, ffmpeg
и imagemagick
, которые все доступны в репозиториях.
После установки npm
вы можете установить gifify
глобально с помощью
npm install -g gifify
Видео можно преобразовать в .GIF с помощью:
gifify video.mp4 -o video.gif
Вы также можете установить начальную и конечную позицию в видео и добавить текст:
gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'
❗️ Для завершения конвертации может потребоваться несколько минут даже при меньших видео.
ПРИМЕЧАНИЕ.
ffmpeg
иimagemagick
, возможно, необходимо скомпилировать с некоторыми конкретными библиотеками (то есть libass и fontconfig соответственно). Р>