LinuxForum.Fans
Тема

Нужна альтернатива VirtualDub под linux

Автор: Linux-GEEK 64 сообщений 4497 просмотров
09.02.2017 17:05 #420058

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

09.02.2017 17:47 #420059

[console]convert -verbose -coalesce sample.gif result.png[/console]
В результате будут файлы result-0.png, result-1.png и т.д.

09.02.2017 18:43 · отредактировано #420061

[console]$ ffmpeg -i input.gif out%d.jpg[/console]
C помощью ffmpeg так же можно собрать обратно.

09.02.2017 19:28 #420065
"xxblx" написал:
В результате будут файлы result-0.png, result-1.png и т.д.

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

09.02.2017 20:50 · отредактировано #420068
"Linux-GEEK" написал:
А как сделать так чтобы были имена 0001.png, 0002.png и т.д.?

Для чего это нужно?
Я как бы уже сказал что есть ffmpeg или его аналог avconv, опции те же самые.
В png качество получается лучше, просто в выше приведенной команде изменить jpg на png.
Собрать обратно можно довольно просто:
[console]$ ffmpeg -framerate 10 -i out%d.png output.gif[/console]

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

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

text
#!/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

скрипт исполняется в каталоге с файлами:
[console]$ ./file.sh out[/console]
где первый параметр скрипта является частью названия файла до нумерации.
После этого файлы out1.png, out2.png примут вид 0001.png, 0002.png и т.д.
convert не очень то красиво делает раскадровку.

09.02.2017 21:15 #420071
"ormorph" написал:
Для чего это нужно?

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

09.02.2017 21:43 · отредактировано #420073

Во просмотрел документацию по ffmpeg, можно без скрипта:
[console]$ ffmpeg -i VID_input.gif %4d.png[/console]
полученные файлы все будут формата 0001.png и т.д.
Обратно в gif:
[console]$ ffmpeg -framerate 10 -i %4d.png output.gif[/console]

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

09.02.2017 21:59 · отредактировано #420078
"ormorph" написал:
ffmpeg -framerate 10 -i %4d.png output.gif

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

09.02.2017 22:05 #420082
"Linux-GEEK" написал:
Только гифка с помехами после конвертации стала. И файл теперь занимает 45K вместо 22K у оригинала. А в остальном всё работает

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

10.02.2017 01:19 · отредактировано #420097

Еще mplayer-ом можно конвертировать:
раскадровка:
[console]$ mplayer -vo png input.gif[/console]
Получение gif:
[console]$ mplayer mf://*.png -vo gif89a:fps=6:output=out.gif[/console]

10.02.2017 22:45 #420124
"ormorph" написал:
mplayer mf://*.png -vo gif89a:fps=6 output=out.gif

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

text
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 легче по синтаксису

10.02.2017 23:46 · отредактировано #420141
"Linux-GEEK" написал:
Выскакивает оишбка

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

А так пересмотрел, все таки лучше использовать для этого convert :D
[console]$ identify file.gif[/console]
Показывает информацию о файлах(количество, размер, длительность и т.д.).
convert без параметров извлекает все файлы, тех размеров которые присутствуют в gif файле.
[console]$ convert input.gif output.png[/console]
Только для обратного конвертирования все таки придется обработать вывод скриптом что выше, так как иначе не поддается сортировке.
Обратно конвертировать:
[console]$ convert -delay 10 *.png file.gif[/console]
В параметре -delay выставляется задержка.
После можно еще применить оптимизацию и уменьшить размер файла:
[console]$ convert input.gif -fuzz 2% -layers Optimize out.gif[/console]
Тут решающую роль играет параметр -fuzz чем больше процент, тем хуже качество и меньше размер.
Можно еще уменьшить битность цвета выходного файла, тем уменьшив размер:
[console]$ gifsicle --colors=128 input.gif > out.gif[/console]
У данной программы есть еще параметры для оптимизации, но они немного портят выходной файл, по этому лучше просто цвет уменьшить.

Если планируется изменить размер всех файлов скриптом, то лучше извлекать командой что предлагал xxblx, так как выводит файлы одного размера, либо так:
[console]$ mplayer -vo png:outdir=dir/ input.gif[/console]
а потом уже обрабатывать скриптом все файлы, для файлового менеджера spacefm есть свой плагин image-tools, который позволяет конвертировать изображения в различные расширения и менять размер файлов, просто выделяешь файлы и выбираешь плагин, после этого запускается скрипт в меню которого выбираешь нужные действия. Но его надо уметь устанавливать, в принципе документация есть как это делать.

11.02.2017 00:33 #420147
"ormorph" написал:
spacefm
"ormorph" написал:
identify file.gif

Гифка размером 100 на 100 но он почемуто разные размеры выдёт.
[console]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[/console]

"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

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

text
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

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

text
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)

11.02.2017 00:36 #420148
"Linux-GEEK" написал:
Гифка размером 100 на 100 но он почемуто разные размеры выдёт.
почему разные то? одинаковые, все правильно

"Linux-GEEK" написал:
[console]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
[/console]
11.02.2017 01:16 #420155
"DiabloPC" написал:
одинаковые

Вот тут лучше видно
[console]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[/console]

11.02.2017 01:21 #420159

"Linux-GEEK" написал:
Вот тут лучше видно
какраз-то там видно лучше)

[console]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[/console]
В гиф-анимациях кадры меняются не полностью.
11.02.2017 01:35 #420164
"DiabloPC" написал:
В гиф-анимациях кадры меняются не полностью.

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

11.02.2017 01:39 #420169

"Linux-GEEK" написал:
там нужны чёткие кадры.
почитай маны на то чем создаешь анимацию, в любом случае там найдется ключик, который это позволит сделать )
11.02.2017 02:01 #420172
"DiabloPC" написал:
почитай маны на то чем создаешь анимацию

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

11.02.2017 04:01 #420174

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

Войдите или зарегистрируйтесь, чтобы ответить.