Створення GIF-анімації з файлів PNG


83

Чи є інструмент для створення gifанімації з набору pngфайлів?

Я спробував convertкоманду з набору ImageMagick , але це не завжди вдається. Також у мене є кілька питань з цим:

  1. Я не можу сказати, у чому прогрес.
  2. Що б я не намагався, -delayпрапор не змінює частоту кадрів анімації gif.
  3. convertвизначає порядок кадру на основі алфавітного порядку імен файлів. Це означає, що name500.pngбуде розміщено відразу після, name50.pngа не після того, як name450.pngя можу це виправити, додавши 0, але це дратує.

[Новини] Існує велике перекриття між Ubuntu Stackexchange і Unix Stackexchange. Я спробував тут класифікувати деякі теми .
hhh

Щодо пункту 3., ви все одно можете використовувати їх convertпісля сортування файлів. Можливо, щось подібне працюєfiles=$(ls name*png | sort -n -tname -k1); convert $files animation.gif
altroware

Для пункту 1: у перетворення є -monitorпараметр, який відстежує процес
Curlew

Відповіді:


50

Новіші версії ffmpeg не мають -sameq ( див. Faq ), але вони мають підтримку GIF.

ffmpeg -i %03d.png output.gif

Де% 03d - ідентифікатор кадру в 3 цифрах.

Ви також можете спробувати використовувати ffmpegфільм із послідовності зображень, а потім перетворити фільм у анімацію GIF (знову з використанням ffmpeg).

# cf. http://pages.uoregon.edu/noeckel/MakeMovie.html

# first convert an image sequence to a movie
ffmpeg -sameq -i %03d.jpg output.mp4

# ... and then convert the movie to a GIF animation
ffmpeg -i output.mp4 -pix_fmt rgb24 -s qcif -loop_output 0 output.gif

10
Ця інструкція застаріла.
високе обслуговування

3
sameqВаріант не доступний. Крім того, для мене це перезаписує оригінальні файли зображень і не створює дійсний файл фільму.
Лоде

Який сенс залишати -sameqкод там? Чому ви навіть хочете використовувати втрачений формат відео ( output.mp4) як тимчасовий? І якщо так, то чому "така ж якість", що і вхід, замість дуже високого бітрейта? Артефактування від цього просто погіршить ситуацію для кодера GIF. Якщо вам потрібно було використовувати відео як тимчасове, ви хочете використовувати щось без втрат, як huffyuv. Або MJPEG без перекодування, просто перейміть вхідні jpegs в MJPEG. ( -codec:video copy).
Пітер Кордес

80

convertце зручний інструмент командного рядка для цього. cdдо папки, що містить ваші png -файли, і запустіть цю команду:

convert -delay 10 -loop 0 *.png animation.gif

Джерело: http://ubuntuforums.org/showthread.php?t=1132058


5
Питання згадує convertі деякі проблеми з його використанням. Ваша відповідь не стосується жодної з них.
Мат

3
Щодо версії ImageMagick, 6.8.7-4 2013-11-02 Q16це працювало для мене.
Руді Матела

7
Це працює, але 10означає 10 * 10 мс, так досить швидко. Затримка a 100- 1 секунда.
Енн ван Россум

7
скористайтеся опцією -dispose previousабо -dispose 2якщо ви працюєте з прозорими PNG
Hải Phong

4
зауважте собі: розширення дужок може бути корисним для визначення списку зображень як аргументів, наприклад, pic_{0..20..2}.pngдо розширення pic_0.png, pic_2.pngаж доpic_20.png
Ібо Ян

19

Параметр convert's --delayзастосовується лише до наступного зображення в командному рядку. Так convert -delay 10 *буде встановлено лише затримку першого кадру на 0,1 секунду. Варіант потрібно повторити:

convert $(for a in *; do printf -- "-delay 10 %s " $a; done; ) result.gif

Для вашої потреби в сортуванні перетворення не сортує кадри, як *це робиться глобалізація оболонок . Якщо ви знаєте, що ваші кадри пронумеровані від 0 до 700, ви можете просто обчислити числа:

convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif

5
Я не відчуваю такої поведінки convert, для мене convert -delay 1000 -loop 0 *.png animation.gifдодається затримка на 10 секунд між кожним зображенням.
Лоде

1
Ви також можете використовувати версію свого роду в lsкоманді. Тобто:convert -delay 1000 $(ls -v name*png) output.gif
erik

7

Оновлення:

Використовуйте convertдля png-to-gif, а потім використовуйте gifsicle для анімації. Це не одне рішення для виконання цього додатка, але, безумовно, сценарій.


GIMP може створювати анімовані gif-файли та забезпечує керування часом / затримкою та повтором тощо


3
Я знаю про gimp, але не знаю, як її скриптувати. Крім того, використовувати gimp для створення анімації - це як вбити муху гармати
Йотам

1
Це погана ідея; якість буде жахливою, оскільки кожен кадр буде квантований окремо.
Clément

2

ImageMagick може створити якісну gif-анімацію. Перевірте це відео - http://www.youtube.com/watch?v=OFusYizJ-bA


6
Ласкаво просимо до Unix & Linux! Як правило, нам подобаються відповіді на сайті, щоб мати можливість самостійно стояти - Посилання чудові, але якщо це посилання коли-небудь перерветься, відповідь повинна мати достатньо інформації, щоб вона все-таки була корисною. Будь ласка, подумайте про редагування своєї відповіді, щоб включити більше деталей. Див. Поширені запитання для отримання додаткової інформації.
slm

Чим корисний коментар вище ....
Лука

convert -delay 200 -loop 0 *.jpg output.gif
Лука

2

ffmeg важливі параметри 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
ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i 'tmp.*.png' \
  -r 15 \
  -vf scale=512:-1 \
  out.gif \
;

Дані тестів були створені за допомогою: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292

Важливі ffmpegваріанти, які я хотів виділити:

  • -patter_type glob: зручний спосіб вибору зображень
  • -framerate 60і -r 15: припустимо 60 FPS для вхідних зображень ( ffmpegне можу знати інакше, оскільки відсутні дані FPS у зображеннях, як у відеоформатах), вибирайте одне кожні 4 зображення, щоб зменшити розмір ( 4 == 60 / 15)
  • -vf scale=512:-1: встановити ширину, висоту масштабу пропорційно, як правило, для зменшення розміру та економії місця

Дивитися також:

Тестовано в Ubuntu 18.10, ffmpeg 4.0.2.


-1

Що стосується пункту 2

У мене версія "відображення" ImageMagick (ImageMagick 6.7.2-7 2017-01-12) ігнорує встановлену частоту кадрів, використовуючи команду конвертувати для створення анімаційного gif. Спробуйте іншу програму, щоб переглянути анімаційний gif, як firefox.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.