Я хочу зробити .gif
анімаційну картинку з заданого набору .jpg
малюнків.
Я вважаю за краще робити це з командного рядка, тому інструменти командного рядка були б дуже раді.
Я хочу зробити .gif
анімаційну картинку з заданого набору .jpg
малюнків.
Я вважаю за краще робити це з командного рядка, тому інструменти командного рядка були б дуже раді.
Відповіді:
Ви можете використовувати пакет ImageMagick . Встановіть його за допомогою команди:
sudo apt-get install imagemagick
Тепер ви можете створити gif
з числа зображень ( jpg
), використовуючи:
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%
.
-deconstruct
. Я також з’ясував, що ImageMagick дуже голодний на пам’ять, дивіться орієнтири: askubuntu.com/a/1102183/52975
convert -delay 0 -loop 0 *.tif myanimated.gif
добре працював, на 720 файлах tif
Щоб заповнити @Maythux відповідь:
-resize
опцією:У моєму випадку я маю 4608x3456 зображень, а генерований GIF склав більше 300 М для 32 зображень
convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif
або
convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif
*.jpg
забирає трохи під час роботи з числовими значеннями, ви можете створити gif з несортованими зображеннями.
$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg // <--- should be here
21-33-28_2.jpg
21-33-28_3.jpg
...
Оскільки знімки були зроблені дуже швидко (10 / с), всі вони мають однаковий час модифікації, і, наприклад, ви не можете їх обдурити ls -t
. У ubuntu ви можете використовувати ls -v
натомість щось на кшталт:
convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif
Сортування чисельних даних є досить складним на Mac OS X, хоча, я думаю, вам знадобиться створити спеціальний сценарій.
find
, sort
розширення брекетів тощо. ls
Інструмент , як відомо , непридатний для такого роду речі. Використовуйте find
. Існує трохи кривої навчання, але воно того варте.
Ви можете легко зробити це за допомогою GIMP. Спочатку встановіть його, якщо він уже не встановлений
sudo apt-get install gimp
Від GIMP перейдіть до Файл -> Відкрити як шари, щоб відкрити всі PNG на власному шарі.
Звідси ви можете виконувати правки на шарах і, виконавши їх, перейдіть до Файл -> Експорт як . У діалоговому вікні обов'язково встановіть тип файлу GIF.
Звідти ви перейдете до варіантів експорту GIF. Поставте прапорець " Як анімація " та встановіть потрібні параметри.
ffmeg розчин + дані тесту
Щодо Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8, я виявив, що ffmpeg набагато швидше і використовує набагато менше пам'яті .
Найпростіша команда перетворення:
ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
-r 15 \
-vf scale=512:-1 \
out.gif \
;
Ви можете отримати мої тестові дані за допомогою:
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
Дані тесту були створені за допомогою: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 та містить 256 зображень PNG 1024x1024.
Ось ще одна тестова інформація, яку ви можете генерувати прямо у своєму браузері прямо зараз! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718
Важливі ffmpeg
варіанти, які я хочу виділити:
-pattern_type glob
: зручний спосіб вибору зображень
-framerate 60
: припустимо 60 FPS для вхідних зображень і виведіть ту саму FPS.
ffmpeg
не може знати інакше, оскільки немає даних FPS, є у зображеннях, як є у відеоформатах.
256 вхідних кадрів займають приблизно 4 секунди.
-r 15
: необов’язково. Вибирайте кожне 4 зображення, щоб зменшити розмір ( 4 == 60 / 15
).
З ним identify out.gif
говориться, що GIF містить лише 64 кадри.
На відтворення все ще потрібно 4 секунди, тому затримка змінюється, щоб все збігалося.
-vf scale=512:-1
: необов’язково. Встановлюйте пропорційно ширину, висоту масштабу, як правило, для зменшення розміру та економії місця.
Щоб змусити ImageMagick працювати, спершу довелося змінити обмеження його диска та пам'яті за /etc/ImageMagick-6/policy.xml
адресою: https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pages
Дивитися також:
Тест ImageMagick vs ffmpeg
Я порівняв команди:
/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
out-ffmpeg.gif \
;
Команди були побудовані для отримання максимально близьких результатів, щоб зробити порівняння дійсним:
/usr/bin/time -v
: використовується для пошуку максимального використання пам'яті, як пояснено на веб-сторінці : https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process
-deconstruct
: GIF-зображення можуть містити лише мінімально модифікований прямокутник з попереднього кадру, щоб зменшити GIF.
ffmpeg
обчислює ті, які відрізняються за замовчуванням, але ImageMagick не робить, якщо -deconstruct
не використовується.
Ви в основному хочете використовувати цю опцію кожен раз із ImageMagick.
Ми можемо спостерігати різницю за допомогою:
identify out.gif
У стислій версії всі кадри мають менші розміри, ніж початковий, наприклад:
out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
У цьому прикладі другий кадр розміщується лише 516x516
замість повних 1024x1024 і розміщується в зсуві 252+257
. Тому він містить лише середній трикутник.
Дивіться також: як я можу змінити розмір анімованого файлу GIF за допомогою ImageMagick?
-delay
: значення, що відповідає 60FPS ffmpeg
. Це не має значення для ефективності конверсії, але я не хочу ризикувати.
Вихідні GIF мають приблизно однаковий розмір і виглядають візуально однаково.
Ми отримуємо для ImageMagick:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856
і для ffmpeg:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172
з якого ми бачимо, що:
Тест обладнання: ноутбук Lenovo ThinkPad P51 , Intel Core i7-7820HQ, 32 ГБ (16 + 16) DDR4 2400 МГц SODIMM, 512 Гб SSD PCIe TLC OPAL2.
-r
і -v
команди, все ж вихідний gif має набагато нижчу якість, ніж оригінальні файли png. Як зберегти таку саму якість gif, як дані файлів png?
-framerate 60 -r 60
. Перегляньте створені GIF та вхідні зображення за допомогою інструментів ImageMagick, як identify
спробувати зрозуміти, що відбувається.
Ви можете використовувати програму з назвою перетворити, включену в пакет Imagemagick. Це керований командним рядком, але дуже простий у використанні. Встановіть його через програмний центр або перейдіть до командного рядка та введіть
sudo apt-get install imagemagick
Тепер створити .gif.
convert -delay 100 -size 100x100 xc:SkyBlue \
-page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-loop 0 animation.gif
* Зауважте, що наведений вище приклад прямо з зображень Magic Examples
convert -delay 20 -loop 0 *.png out.gif
робить циклічний GIF.