Я хочу зробити анімацію .gif
з .mp4
відео. Я вважаю за краще це робити з командного рядка, тому, будь ласка, перелічіть лише інструменти командного рядка.
Я хочу зробити анімацію .gif
з .mp4
відео. Я вважаю за краще це робити з командного рядка, тому, будь ласка, перелічіть лише інструменти командного рядка.
Відповіді:
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
Процедура тестування даних, описана в цій публікації .
Більш прямий:
sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif
також працює, але вихідний GIF був би набагато більшим, ніж вхідне відео, оскільки формати відео інтелектуально стискаються через кадри.
Розбиття аргументу:
ulimit -Sv 1000000
: встановлення максимального розміру пам’яті 1 Гб для програми.
Переважно я гарантую, що команда не використовує необмежену пам’ять, як певні попередні спроби.
500Mb змушує 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 x 1024 в нашому випадку.
-r 15
: вибірка FPS.
Наприклад, оригінальне відео було 30 кадрів в секунду, тобто -r 15
означає, що ffmpeg
виберіть один кадр кожні 2 ( = 30 / 15
).
Сприйманий вихідний FPS налаштований так, щоб він відповідав вхідному сигналу, тому ви не помітите прискорення, лише більшу деталізацію.
Вхідний FPS можна знайти за допомогою 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
Я рекомендую цей варіант, оскільки у форматів для відео зазвичай більша частота кадрів через більшу роздільну здатність. Що стосується менших GIF, то нижній кадр менш помітний, і тому ми можемо пропустити деякі кадри та зробити менші GIF.
До попереднього 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
: додайте у підсумок поле підрахунку циклу розширення 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 стискає лише окремі кадри.
Прямий:
convert input.mp4 rpi2-bare-metal-blink.gif
працював, але майже не вбив мого комп'ютера через переповнення пам’яті, і створив вихідний вихід на 100 разів більший для мого вхідного файлу 2s 1 Мб Можливо, одного дня 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 до нормальної швидкості.
Два кроки:
Витяг зображень із відео
Створіть каталог з назвою фрейми в одному каталозі з вашим .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
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 за параметрами, які ви можете додати до команди другого кроку, щоб отримати менший файл.
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
глобально за допомогою:
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!'
To Для завершення конверсії може знадобитися кілька хвилин навіть із меншими відео.
Примітка:
ffmpeg
і ,imagemagick
можливо , повинні бути скомпільовані з деякими специфічними бібліотеками (тобто libass і FontConfig відповідно).
gifsicle
, але потім виникає інша проблема: github.com/vvo/gifify/isissue/95 Також ви б не хотіли сказати нам, що npm-новачків у тому каталозі для запуску npm install
та запускати його як root чи ні? Дякую!