Я хочу зробити .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.