Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Gifsicle локальные таблицы цветов и прозрачность  (Прочитано 1022 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн guzich

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Использую утилиту gifsicle для разбора анимированного gif по кадрам
в резултате получаю предупреждения типа:

warning: GIF too complex to unoptimize
  (The reason was local color tables or complex transparency.
  Try running the GIF through ‘gifsicle --colors=255’ first.)

gifsicle:/users/cok/docs/temp/frames/1.gif.000: warning: trivial adaptive palette (only 185 colors in source)

кадры получаются битые
как видно проблема заключается либо в прозрачности либо в локальных таблицах цветов каждого кадра
во вложении 3 кадра по номерам:
0-й получается не битый, при этом значение transparent 210
10-й получается битый совсем немного, при этом значение transparent 25
остальные совсем битые, у них transparent 0
(что конкретно означает число transparent пока не разобрался)

видимо нужно какие-то параметры еще в команде прописывать, но не могу понять какие
те что warning выдает (--colors=255) никакого эффекта не дают

как я понимаю изображение оптимизировано таким образом что в кадре пиксели которые не изменились по отношению к предыдущему кадру - пустые, и видимо при выдергивании кадра так и остаются пустыми, хотя попробовал открыть в фотошопе, там каждый слой показывается нормально.

Исходное изображение: https://www.dropbox.com/s/rqjr89w4s75aij5/input.gif?dl=0
0-й кадр: https://www.dropbox.com/s/pu3010n9btpr1aw/0.gif?dl=0
10-й кадр: https://www.dropbox.com/s/agejb6v9xk4pjos/10.gif?dl=0
8-й кадр: https://www.dropbox.com/s/9p9svto2bqm564s/8.gif?dl=0

gifsicle -I
https://www.dropbox.com/s/iq45m9a0zh2jf6q/colors.txt?dl=0

gifsicle --cinfo
https://www.dropbox.com/s/90jw5siq4pa9azh/info.txt?dl=0

Вот, кстати, если удалить 0-й кадра, вот что получится:
https://www.dropbox.com/s/hsyhsaov6br62zj/-0.gif?dl=0, то есть догадки подтверждаются, а на 10-м кадре как раз картинка меняется, потому он и менее битый, так как очень мало неповторяющихся пикселей


В мануале есть опция --unoptimize, после применения которой, каждый кадр должен выглядеть так как его видит пользователь, но этого не происходит
gifsicle  --unoptimize 2.gif "#8" > 1.gif
gifsicle: 2.gif: warning: GIF too complex to unoptimize
  (The reason was local color tables or complex transparency.
  Try running the GIF through ‘gifsicle --colors=255’ first.)
В чем причина, как я вижу:
8-й кадр содержит пиксели различных цветов (цветов не более 256) и прозрачные пиксели (ну или 255 и прозрачный, точно не знаю ,это тонкости)
через эти прозрачные пиксели видны пиксели предыдущих кадров ( 0-7) и в каждом по 256 цветов, и не факт что они совпадают, то есть на самом деле в 8 кадре гораздо больше чем 256 цветов, а сохранить отдельный кадр можно только с 256 цветами, сохранение идет с локальной цветовой таблицей данного кадра скорее всего, а нужно, видимо, создать одну таблицу для всех кадров

выполняем команду
gifsicle --colors=256 2.gif > 1.gif
и получаем анимашку которая использует всего 256 цветов
https://www.dropbox.com/s/luv8w2962f5crrp/255colors.gif?dl=0
с красными разводами, ну а куда деваться, цветов мало

а теперь из нее извлекаем например 8-й кадр
gifsicle  --unoptimize 1.gif "#8"  > 8_.gif

https://www.dropbox.com/s/khcqrccaty8bx1s/8_.gif?dl=0
Ну видимо это максимально возможный результат которого можно достичь ( ну если быть точным то можно поочередно удалять из исходника последующие кадры ( 9, 10 и тд)) и приводить к 256 цветам анимашку из меньшего кол-ва кадров, таким образом, чем ближе кадр к началу тем лучше будет его качество)

Вот, как то так сами и оветил на свой вопрос

Но нет, все таки это не решение. Есть программка под винду
http://www.easy2convert.com/gif2jpg/ - она отлично сохраняет каждый кадр в jpeg без потерь цвета, да и в фотошопе, как я уже писал, каждый кадр отображается нормально, значит и с помощью Linuxовых утилит как-то можно это сделать.
« Последнее редактирование: 02 Февраля 2015, 09:34:26 от guzich »

Оффлайн guzich

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.