На windows есть очень удобная программа VirtualDub которая может вынуть все кадры из gif анимации и переименовать как 0001.jpg, 0002.jpg и т.д. Нужна программа с такой же возможностью на linux. bc

2

 Консоль:
convert -verbose -coalesce sample.gif result.png

В результате будут файлы result-0.png, result-1.png и т.д.

Fedora GNOME3

3 (09.02.2017 18:44:01 отредактировано ormorph)

 Консоль:
$ ffmpeg -i input.gif out%d.jpg

C помощью ffmpeg так же можно собрать обратно.

4

xxblx пишет:

В результате будут файлы result-0.png, result-1.png и т.д.

А как сделать так чтобы были имена 0001.png, 0002.png и т.д.?

5 (09.02.2017 20:52:05 отредактировано ormorph)

Linux-GEEK пишет:

А как сделать так чтобы были имена 0001.png, 0002.png и т.д.?

Для чего это нужно?
Я как бы уже сказал что есть  ffmpeg или его аналог avconv, опции те же самые.
В png качество получается лучше, просто в выше приведенной команде изменить jpg на png.
Собрать обратно можно  довольно просто:

 Консоль:
$ ffmpeg -framerate 10 -i out%d.png output.gif

Где -framerate 10 указывает сколько кадров в секунду должно проигрываться в gif. соответственно если 10 заменить на 1/2 кадр будет сменяться через две секунды.

А так файлы можно обработать скриптом file.sh:

#!/bin/bash

FIL=$1
ls $FIL[0-9].png 2> /dev/null|while read file
do
  mv $file 000${file##$FIL}
done

ls $FIL[0-9][0-9].png 2> /dev/null|while read file
do
  mv $file 00${file##$FIL}
done

ls $FIL[0-9][0-9][0-9].png 2> /dev/null|while read file
do
  mv $file 0${file##$FIL}
done

ls $FIL[0-9][0-9][0-9][0-9].png 2> /dev/null|while read file
do
  mv $file ${file##$FIL}
done

скрипт исполняется в каталоге с файлами:

 Консоль:
$ ./file.sh out

где первый параметр скрипта является частью названия файла до нумерации.
После этого файлы out1.png, out2.png примут вид 0001.png, 0002.png и т.д.
convert не очень то красиво делает раскадровку.

6

ormorph пишет:

Для чего это нужно?

Мне для того чтобы делать boot анимации для андроид. Скрипт как раз то что нужно

7 (09.02.2017 21:46:52 отредактировано ormorph)

Во просмотрел документацию по ffmpeg, можно без скрипта:

 Консоль:
$ ffmpeg -i VID_input.gif %4d.png

полученные файлы все будут формата 0001.png и т.д.
Обратно в gif:
 Консоль:
$ ffmpeg -framerate 10 -i %4d.png output.gif

где %4d означает четырехзначное число, этот параметр можно изменить.

8 (09.02.2017 22:00:28 отредактировано Linux-GEEK)

ormorph пишет:

ffmpeg -framerate 10 -i %4d.png output.gif

Только гифка с помехами после конвертации стала. И файл теперь занимает 45K вместо 22K у оригинала. А в остальном всё работает bj

9

Linux-GEEK пишет:

Только гифка с помехами после конвертации стала. И файл теперь занимает 45K вместо 22K у оригинала. А в остальном всё работает

Ну тут уже смотреть подробнее параметры ffmpeg, может количество кадров в секунду другое, ну и еще что поменять, смотреть там довольно много параметров. Это уже гугл в помощь, может что получится улучшить.

10 (10.02.2017 22:58:12 отредактировано ormorph)

Еще mplayer-ом можно конвертировать:
раскадровка:

 Консоль:
$ mplayer -vo png input.gif

Получение gif:
 Консоль:
$ mplayer mf://*.png -vo gif89a:fps=6:output=out.gif

11

ormorph пишет:

mplayer mf://*.png -vo gif89a:fps=6 output=out.gif

Выскакивает оишбка

VIDEO:  100x100  25.000 fps    0.0 kbps ( 0.0 kB/s)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
[swscaler @ 0x7f8df0798640]BICUBIC scaler, from rgb24 to yuv420p using MMXEXT
VO: [gif89a] 100x100 => 100x100 RGB 24-bit 
V:   0.3   0/  0 ??% ??% ??,?% 0 0 


Playing output=out.gif.
Cannot open file 'output=out.gif': No such file or directory
Failed to open output=out.gif.


Exiting... (End of file)

Да и ffmpeg легче по синтаксису

12 (10.02.2017 23:52:15 отредактировано ormorph)

Linux-GEEK пишет:

Выскакивает оишбка

Подправил, там нужно было двоеточие, хотя у меня и так работало.

А так пересмотрел, все таки лучше использовать для этого convert  ag

 Консоль:
$ identify file.gif

Показывает информацию о файлах(количество, размер, длительность и т.д.).
convert без параметров извлекает все файлы, тех размеров которые присутствуют в  gif файле.
 Консоль:
$ convert input.gif output.png

Только для обратного конвертирования все таки придется обработать вывод скриптом что выше, так как иначе не поддается сортировке.
Обратно конвертировать:
 Консоль:
$ convert -delay 10 *.png file.gif

В параметре -delay выставляется задержка.
После можно еще применить оптимизацию и уменьшить размер файла:
 Консоль:
$ convert input.gif -fuzz 2% -layers Optimize out.gif

Тут решающую роль играет параметр -fuzz чем больше процент, тем хуже качество и меньше размер.
Можно еще уменьшить битность цвета выходного файла, тем уменьшив размер:
 Консоль:
$ gifsicle --colors=128 input.gif > out.gif

У данной программы есть еще параметры для оптимизации, но они немного портят выходной файл, по этому лучше просто цвет уменьшить.

Если планируется изменить размер всех файлов скриптом, то лучше извлекать командой что предлагал xxblx, так как выводит файлы одного размера, либо так:

 Консоль:
$ mplayer -vo png:outdir=dir/ input.gif

а потом уже обрабатывать скриптом все файлы, для файлового менеджера spacefm есть свой плагин image-tools, который позволяет конвертировать изображения в различные расширения и менять размер файлов, просто выделяешь файлы и выбираешь плагин, после этого запускается скрипт в меню которого выбираешь нужные действия. Но его надо уметь устанавливать, в принципе документация есть как это делать.

13

ormorph пишет:

spacefm

ormorph пишет:

identify file.gif

Гифка размером 100 на 100 но он почемуто разные размеры выдёт.

 Консоль:
identify 1251290045_0_edd3_c6676bb0_l.gif
1251290045_0_edd3_c6676bb0_l.gif[0] GIF 100x100 100x100+0+0 8-bit sRGB 256c 22.2KB 0.000u 0:00.000
1251290045_0_edd3_c6676bb0_l.gif[1] GIF 50x92 100x100+31+5 8-bit sRGB 256c 22.2KB 0.010u 0:00.039
1251290045_0_edd3_c6676bb0_l.gif[2] GIF 64x96 100x100+17+3 8-bit sRGB 256c 22.2KB 0.010u 0:00.039
1251290045_0_edd3_c6676bb0_l.gif[3] GIF 48x94 100x100+32+3 8-bit sRGB 256c 22.2KB 0.010u 0:00.039
1251290045_0_edd3_c6676bb0_l.gif[4] GIF 74x95 100x100+0+4 8-bit sRGB 256c 22.2KB 0.010u 0:00.039
1251290045_0_edd3_c6676bb0_l.gif[5] GIF 74x95 100x100+0+4 8-bit sRGB 256c 22.2KB 0.010u 0:00.039
1251290045_0_edd3_c6676bb0_l.gif[6] GIF 60x98 100x100+17+1 8-bit sRGB 256c 22.2KB 0.010u 0:00.039
1251290045_0_edd3_c6676bb0_l.gif[7] GIF 79x99 100x100+0+1 8-bit sRGB 256c 22.2KB 0.010u 0:00.039

ormorph пишет:

convert -delay 10 *.png file.gif

Хотя этой коммандой запаковывает он без проблем и качество намного лучше чем через ffmpeg.

ormorph пишет:

convert input.gif -fuzz 2% -layers Optimize out.gif

Сжимает всего на 1КБ

ormorph пишет:

тем хуже качество и меньше размер.

Вот теперь сжимает намного сильнее.

ormorph пишет:

gifsicle --colors=128 input.gif > out.gif

А этой программы у меня нет.

ormorph пишет:

mplayer mf://*.png -vo gif89a:fps=6:output=out.gif

Вот теперь начались баги

MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team
Cannot open file '/home/admin/.mplayer/input.conf': No such file or directory
Failed to open /home/admin/.mplayer/input.conf.
Cannot open file '/etc/mplayer/input.conf': No such file or directory
Failed to open /etc/mplayer/input.conf.

Playing mf://*.png.
Detected file format: MF
[mf] search expr: *.png
[mf] number of files: 8 (64)
[demux_mf] file type was not set! trying 'type=png'...
Opening video filter: [scale]
[ass] auto-open
Selected video codec: PNG (Portable Network Graphics) image [libavcodec]
Audio: no sound
Starting playback...
VIDEO:  100x100  25.000 fps    0.0 kbps ( 0.0 kB/s)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
[swscaler @ 0x7fa4fe184640]BICUBIC scaler, from pal8 to yuv420p using MMXEXT
VO: [gif89a] 100x100 => 100x100 RGB 24-bit 
V:   0.0   0/  0 ??% ??% ??,?% 0 0 
VIDEO:  50x92  25.000 fps    0.0 kbps ( 0.0 kB/s)
VO: [gif89a] 50x92 => 50x92 RGB 24-bit 
V:   0.0   0/  0 ??% ??% ??,?% 0 0 
VIDEO:  64x96  25.000 fps    0.0 kbps ( 0.0 kB/s)
VO: [gif89a] 64x96 => 64x96 RGB 24-bit 


MPlayer interrupted by signal 11 in module: check_framedrop
- MPlayer crashed by bad usage of CPU/FPU/RAM.
  Recompile MPlayer with --enable-debug and make a 'gdb' backtrace and
  disassembly. Details in DOCS/HTML/en/bugreports_what.html#bugreports_crash.
- MPlayer crashed. This shouldn't happen.
  It can be a bug in the MPlayer code _or_ in your drivers _or_ in your
  gcc version. If you think it's MPlayer's fault, please read
  DOCS/HTML/en/bugreports.html and follow the instructions there. We can't and
  won't help unless you provide this information when reporting a possible bug.
ormorph пишет:

mplayer -vo png:outdir=dir/ input.gif

Тут тоже ошибка странная

mplayer -vo png:outdir=dir/ 1251290045_0_edd3_c6676bb0_l.gif 
MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team
Cannot open file '/home/admin/.mplayer/input.conf': No such file or directory
Failed to open /home/admin/.mplayer/input.conf.
Cannot open file '/etc/mplayer/input.conf': No such file or directory
Failed to open /etc/mplayer/input.conf.

Playing 1251290045_0_edd3_c6676bb0_l.gif.
Detected file format: GIF
Load subtitles in .

GIF-LIB error: Failed to Read from given file.
Could not parse arguments at the position indicated below:
outdir=dir/
^
Error opening/initializing the selected video_out (-vo) device.


Exiting... (End of file)

14

Linux-GEEK пишет:

Гифка размером 100 на 100 но он почемуто разные размеры выдёт.

почему разные то? одинаковые, все правильно

Linux-GEEK пишет:

 Консоль:
1251290045_0_edd3_c6676bb0_l.gif[0] GIF 100x100 100x100+0+0 8-bit sRGB 256c 22.2KB 0.000u 0:00.000
1251290045_0_edd3_c6676bb0_l.gif[1] GIF 50x92 100x100+31+5 8-bit sRGB 256c 22.2KB 0.010u 0:00.039
1251290045_0_edd3_c6676bb0_l.gif[2] GIF 64x96 100x100+17+3 8-bit sRGB 256c 22.2KB 0.010u 0:00.039
1251290045_0_edd3_c6676bb0_l.gif[3] GIF 48x94 100x100+32+3 8-bit sRGB 256c 22.2KB 0.010u 0:00.039

- Пап, а вирусы под линукс есть?
- Есть, но всего 5, и их сначала нужно откомпилировать под свою систему, дать права на запуск и запустить.
Как сделать и разместить скриншот || Прежде чем создавать тему

15

DiabloPC пишет:

одинаковые

Вот тут лучше видно

 Консоль:
file out-*
out-0.png: PNG image data, 100 x 100, 8-bit colormap, non-interlaced
out-1.png: PNG image data, 50 x 92, 8-bit colormap, non-interlaced
out-2.png: PNG image data, 64 x 96, 8-bit colormap, non-interlaced
out-3.png: PNG image data, 48 x 94, 8-bit colormap, non-interlaced
out-4.png: PNG image data, 74 x 95, 8-bit colormap, non-interlaced
out-5.png: PNG image data, 74 x 95, 8-bit colormap, non-interlaced
out-6.png: PNG image data, 60 x 98, 8-bit colormap, non-interlaced
out-7.png: PNG image data, 79 x 99, 8-bit colormap, non-interlaced

16

Linux-GEEK пишет:

Вот тут лучше видно

какраз-то там видно лучше)

 Консоль:
1251290045_0_edd3_c6676bb0_l.gif[0] GIF 100x100 100x100+0+0 8-bit sRGB 256c 22.2KB 0.000u 0:00.000 //начальное изображение

1251290045_0_edd3_c6676bb0_l.gif[1] GIF 50x92(размер изменяемой зоны) 100x100(размер изображения+31+5(начальные координаты изменяемой зоны) 8-bit sRGB 256c 22.2KB 0.010u 0:00.039


В гиф-анимациях кадры меняются не полностью.

- Пап, а вирусы под линукс есть?
- Есть, но всего 5, и их сначала нужно откомпилировать под свою систему, дать права на запуск и запустить.
Как сделать и разместить скриншот || Прежде чем создавать тему

17

DiabloPC пишет:

В гиф-анимациях кадры меняются не полностью.

Ну для bootanimation это не подходит, там нужны чёткие кадры.

18

Linux-GEEK пишет:

там нужны чёткие кадры.

почитай маны на то чем создаешь анимацию, в любом случае там найдется ключик, который это позволит сделать )

- Пап, а вирусы под линукс есть?
- Есть, но всего 5, и их сначала нужно откомпилировать под свою систему, дать права на запуск и запустить.
Как сделать и разместить скриншот || Прежде чем создавать тему

19

DiabloPC пишет:

почитай маны на то чем создаешь анимацию

ffmpeg всё таки лучшее решение

20

Linux-GEEK
Посмотрел на ваш вывод...
У вас это не mplayer а mplayer2 форк mplayer. Этот проект уже умер, видно linux у вас не такой уж новый.
gifsicle - обычно так же называется и пакет.

21

ormorph пишет:

видно linux у вас не такой уж новый

У меня debian а в нём всегда старые стабильные пакеты. Дистрибутиву всего полгода - 2016-04-08

22 (12.02.2017 09:52:19 отредактировано ormorph)

Linux-GEEK пишет:

У меня debian а в нём всегда старые стабильные пакеты. Дистрибутиву всего полгода - 2016-04-08

Стабильность как правило, это подгонка программных решений под ОС. Выбор Mplayer2 и вырезание Mplayer, непохоже что это был шаг в сторону стабильности, во многих дистрибутивах существовали оба, а тут выпилили. Больше похоже на погоню за новым. Как вариант можно собрать mplayer в каком нибудь домашнем каталоге из исходников и работать с ним. Тут уж на любителя.

Заметил особенность с ffmpeg. Если сначала изображения сконвертировать в mpeg4, а затем в gif, то размер выходного получается в несколько раз меньше:

 Консоль:
$ ffmpeg  -r 10 -i DIR/%4d.png -vcodec mpeg4 -q:v 0 file.mp4
$ ffmpeg -i file.mp4 file.gif

Но это хорошо использовать если делаешь gif из видео:

23

ormorph пишет:

ffmpeg -i DIR/%4d.png -vcodec mpeg4 -r 10 -q:v 0 file.mp4

Файл он сделал хорошего качества и всего 13КБ из гифки размером 163KБ.

ormorph пишет:

ffmpeg -i file.mp4 file.gif

Но вот после этого качество резко упало и размер вырос до 20KБ.
Но команда

 Консоль:
ffmpeg -i %4d.png file.gif

делает качество намного лучше.

24 (12.02.2017 10:10:33 отредактировано ormorph)

Linux-GEEK пишет:

Но вот после этого качество резко упало и размер вырос до 20KБ.

Ну тут я уже сказал, что это хорошо если надо получить gif из видео файла, например если делал захват видео с экрана (например вот тут делал скрипт), и надо его в gif небольшого размера, то самое то. Подправил параметр r -10 не в том месте был. Если использовать -vcodec flv1 то выходной gif еще немного меньше получается.

25 (12.02.2017 10:10:46 отредактировано Linux-GEEK)

ormorph, Последнее что мне нужно узнать, это как улучшить выходное качество gif файла. Пробую ключ -q:a  и вот что выходит

 Консоль:
root#:/home/admin/Downloads/gifka ffmpeg -q:a 1 -i %4d.png file.gif
ffmpeg version N-82492-g605f308 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.9.2 (Debian 4.9.2-10)
  configuration: --enable-libmp3lame --disable-yasm
  libavutil      55. 40.100 / 55. 40.100
  libavcodec     57. 66.103 / 57. 66.103
  libavformat    57. 57.100 / 57. 57.100
  libavdevice    57.  2.100 / 57.  2.100
  libavfilter     6. 67.100 /  6. 67.100
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
Option q:a (use fixed quality scale (VBR)) cannot be applied to input file %4d.png -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.
Error parsing options for input file %4d.png.

-q:v тоже не помогает. Ищу в гугле ничего найти не могу.

26 (12.02.2017 13:02:15 отредактировано ormorph)

Linux-GEEK пишет:

ormorph, Последнее что мне нужно узнать, это как улучшить

Пока самое идеальное что я нашел для создания gif с наиболее хорошим качеством, так это создание APNG(анимированный png), а после этого конвертировать его в gif.
Например создать APNG с задержкой 1/10 сек:

 Консоль:
$ apngasm test.png Atom/*.png 1 10

Конвертировать APNG в gif:
 Консоль:
$ apng2gif test.png

После этого будет создан файл test.gif, довольно неплохого качества.
Основной минус тут это довольно медленно создается  APNG файл. Плюс - это хорошее качество.
После оптимизации gif 7% (смотреть выше) у меня из видеофайла размером 4.5 М(после раскадровки на 92.4 М) был создан файл gif размером 446.6 кб. По качеству довольно не плохое...
Еще бы найти хороший просмотрщик APNG, а то в браузере не очень то удобно просматривать.

27

ormorph пишет:

1 10

По дефолту он это сам выставляет.

ormorph пишет:

apng2gif test.png

Было 163K стало 122K. Только вот никак не могу добится быстрой анимации bu , всё перепробовал. 1 кадр в секунду это слишком мало, хотя качество такое же как и у оригинала.

28

Linux-GEEK пишет:
ormorph пишет:

1 10

Было 163K стало 122K. Только вот никак не могу добится быстрой анимации bu , всё перепробовал. 1 кадр в секунду это слишком мало, хотя качество такое же как и у оригинала.

Быть такого не может, 1 10 это 10 кадров в секунду. 1 25 тогда будет 25 кадров в секунду, у меня работает. Это выставлять при создании apng.

29

ormorph пишет:

1 25 тогда будет 25 кадров в секунду, у меня работает.

Сейчас покажу более наглядно.
Оригинальная гифка
http://s8.hostingkartinok.com/uploads/images/2017/02/cee03838a12132f06322ab6673665463.gif
А вот гифка которая получилось командой apngasm test.png *.png 1 30
http://s8.hostingkartinok.com/uploads/images/2017/02/ce21b21ba867f82da00d791d19541ca8.gif
Сразу видно большую разницу в скорости. be

30

Linux-GEEK пишет:

Сразу видно большую разницу в скорости. be

Хм, у меня с 1 15 вот такое получилось:
Gif
http://s8.hostingkartinok.com/uploads/images/2017/02/2516e767f3bafc5f28314b8e21f9d4df.gif
APNG
http://s8.hostingkartinok.com/uploads/images/2017/02/c4eb947760580f5c42652dbf5a9e8844.png
Можете попробовать мой png файл с конвертировать в gif, что бы узнать точно в чем проблема, в apngasm или в apng2gif.
Версии у меня:
apng2gif 1.7
APNG Assembler 2.7