Как создать анимированный GIF из видео MP4 через командную строку?

Я хочу, делают анимированное .gif от .mp4 видео. Я предпочел бы делать это из командной строки, поэтому только перечислите инструменты командной строки.

125
задан 22 April 2018 в 10:23

4 ответа

Два шага:

  • Изображения Извлечения от Видео

    Создают каталог вызванные кадры в том же каталоге с Вашим .mp4 файл. Команда Use:

    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 на опциях, которые можно добавить к второй команде шага для получения меньшего файла.

113
ответ дан 22 November 2019 в 22:55

gifify является единой основанной на узле утилитой, которая упрощает преобразование. Это зависит от nodejs, npm, ffmpeg, и imagemagick, которые все доступны в repos.

, После того как Вы имеете 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 соответственно).

13
ответ дан 22 November 2019 в 22:55

ffmpeg 3.4.4 может сделать это непосредственно на Ubuntu 18.04

Вы, вероятно, хотите использовать что-то как:

sudo apt-get install ffmpeg
wget -O opengl-rotating-triangle.mp4 https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.mp4?raw=true
ulimit -Sv 1000000
ffmpeg \
  -i opengl-rotating-triangle.mp4 \
  -r 15 \
  -vf scale=512:-1 \
  -ss 00:00:03 -to 00:00:06 \
  opengl-rotating-triangle.gif

Процедура поколения данных тестирования описана на этом сообщении.

Или если Вы хотите видеть качество результата видео видеокамеры из Викисклада с подобной командой:

wget https://upload.wikimedia.org/wikipedia/commons/f/f9/STS-132_Liftoff_Space_Shuttle_Atlantis.ogv
ffmpeg -i STS-132_Liftoff_Space_Shuttle_Atlantis.ogv -r 15 -vf scale=512:-1 -ss 00:00:17 -to 00:00:22 STS-132_Liftoff_Space_Shuttle_Atlantis.gif

enter image description here

Более прямое:

sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif

также работы, но вывод, GIF был бы путем, больше, чем входное видео, потому что форматы видео сжимаются разумно через кадры.

Разбивка аргумента:

  • ulimit -Sv 1000000: установите максимальную емкость памяти на 1 ГБ для программы.

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

    500 МБ заставляют ffmpeg не удаться загрузить совместно использованные библиотеки... время для обновления RAM?

  • -ss 00:00:03 -to 00:00:06: запустите и время окончания для вырезания видео из.

    Нет, GIFs не являются лучшим способом к пирату, распределяют видео онлайн.

    См. также: 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 x 1024 в нашем случае.

  • -r 15: выборка кадр/с.

    Например, исходное видео составляло 30 кадр/с, таким образом, -r 15 средства это ffmpeg выберет один кадр в каждых 2 (= 30 / 15).

    Воспринятый выходной кадр/с корректируется для соответствия входу однако, таким образом, Вы не заметите ускорение, только большая гранулярность.

    Входной кадр/с может быть найден с ffprobe, и общее количество входных кадров может быть найдено с mediainfo как объяснено в: https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames-in-a-video-on-the-linux-command-line/1044894#1044894

    Я рекомендую эту опцию, потому что форматы видео обычно имеют более высокое framerate должное к большему разрешению. С меньшим GIFs ниже framerate менее примечателен, и таким образом, мы можем пропустить некоторые кадры и сделать меньший GIFs.

Прежде пред 18,04: ffmpeg + convert острота без промежуточных файлов

ffmpeg не мог обработать GIF ранее. Лучшее, которое я имел, было чем-то вперед:

sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
  convert -delay 5 -loop 0 - output.gif

Объяснение некоторых аргументов:

  • -loop 0: добавьте поле количества Цикла расширения Gif Netscape к выводу. 0 бесконечных циклов средств, как описано в: http://www.vurdalakov.net/misc/gif/netscape-looping-application-extension eog, firefox и хром весь цикл бесконечно по умолчанию даже без него, таким образом, я не уверен, насколько необходимый это больше.

  • -delay 5: время ожидало прежде, чем показать следующий кадр, в hundreths вторых, как описано в: https://en.wikipedia.org/wiki/GIF#Animated_GIF байт 324. Так 100 средства 1 кадр/с, 5 средства 1 / 0.5 == 20FPS.

Даже если Вы уменьшаете высоту и framerate, вывод, GIF может все еще быть больше, чем видео, начиная с "реального" non-GIF сжатия форматов видео через кадры, в то время как GIF только сжимает отдельные кадры.

Прямое:

convert input.mp4 rpi2-bare-metal-blink.gif

обработанный, но почти уничтоженный мой компьютер из-за переполнения памяти, и произведенный ouptput 100x больше в течение моих 2 с 1 МБ вводит файл. Возможно, однажды ImageMagick нагонит.

См. также: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality

Протестированный на Ubuntu 17.10.

135
ответ дан 22 November 2019 в 22:55

Я начал собирать инструмент, чтобы обеспечить упрощенный интерфейс для обычных действий.

Вы можете преобразовать MP4 в GIF следующим образом:

$ npm install @mountbuild/mouse -g
$ mouse convert input.mp4 -o output.gif -s 00:00:00 -e 00:00:03

Вы можете изменить время начала и окончания, а также --fps и --ширину.

Требуется установленный ffmpeg.

Если ничего другого нет, загляните в исходный код и узнайте, как написать собственный скрипт для этого на JavaScript.

0
ответ дан 23 July 2020 в 10:50

Другие вопросы по тегам:

Похожие вопросы: