Бот Телеграмм сделать гиф

Всё началось с дискуссии в чатике Telegram-разработчиков о грядущей фиче:

Мужик сказал — мужик сделал! Первый прототип на Pillow и svgwrite, разбирающий GIF’ку на пиксели и преобразующий их в векторные квадратики с предпросмотром в SVG, был написан за один выходной.

Веселье началось дальше…

JSON — открытый формат, говорили они…

Доселе с форматами в Telegram то и дело хитрили. Сделали поддержку GIF-анимаций — на самом деле они конвертируются в MP4-видео. Сделали поддержку стикеров — выгружаются они в PNG, но преобразуются в WebP. В этот раз всё честнее: что на входе, то и на выходе.

Для анимированных стикеров в Telegram используется не GIF, не видео, и даже не какой-нибудь устоявшийся формат векторной графики типа SVG или — упаси Ктулху! — Flash. В нём задействован новомодный формат, вышедший из-под крыла Airbnb — Lottie. Доселе он имел некоторую известность в среде мобильных разработчиков, но благодаря Telegram, возможно, обретёт бо́льшую популярность.

Как сделать гифку (GIF) для Telegram и любой другой площадки

По сути своей, файлы Lottie являются сериализованными в JSON проектами Adobe After Effects, по максимуму реализующими все возможности этой программы. С отображением, увы, всё не так радужно. Хотя готовых «официальных» реализаций библиотеки для рендеринга Lottie и много, как раз под покрываемые Telegram платформы: Android, iOS, Qt и Web — лишь часть из возможностей формата реализована во всех из них. В Telegram пошли ещё дальше и ограничили перечень поддерживаемых возможностей, а также «придумали» свой формат, который отличается от обычного Lottie всего лишь упаковкой в GZip и параметром «tgs»: 1 . Кажется, я знаю, где сейчас работает Денис Попов!

И если с документацией на библиотеки для разных платформ всё довольно неплохо, то найти хоть какое-то описание устройства формата, увы, не удалось — только JSON-схему в исходниках lottie-web. Пришлось попутно ковыряться в существующих анимациях, дабы понять общие концепции формата. Также обнаружились расхождения реальных файлов со схемой: в частности, в слоях типа 4, согласно схеме, вложенные объекты хранятся в свойстве «it» — однако в реальных файлах ключ называется «shapes» , а «it» не работает.

Выясненные нюансы формата:

  • Файл состоит из слоёв. В отличие от GIF, здесь у каждого слоя может быть произвольное время начала и конца отображения. К слою можно (точнее, нужно) применять различные трансформации: масштабирование, повороты, изменение прозрачности и т.д. Слои могут быть даже трёхмерными (запрещено для Telegram).
  • Слой состоит из «фигур» (shapes). Типов у них много, некоторе нельзя использовать в Telegram. На практике, чтобы слой отобразился, он должен включать три фигуры: контур (в готовых анимациях это обычно тип «sh» — кривые Безье; конвертер пока использует только тип «rc» — прямоугольники), заливка (тип «fl» ) и трансформация (тип «tr» ).
  • Можно даже включать растровые элементы, создавать текстовые слои, устанавливать взаимосвязи параметров слоёв и фигур через выражения. Вся эта вкуснотища также запрещена в Telegram.

Отсюда прямо следует первая проблема: избыточность. Хотя в JSON-схему недавно добавлены значения по умолчанию для параметров трансформаций — в библиотеках они не реализованы. Так что задавать их в явном виде всё равно нужно.

Как сделать гифку в телеграме в 1 клик I Как сделать гифку из видео I Gif

Казалось бы, это и не проблема вовсе? Даже простенький GZip неплохо справляется со сжатием вопиюще повторяющихся данных, и 1 МБ сырого JSON магическим образом превращается в пару десятков килобайт, которые спокойно пролезают в заявленное ограничение в 64 кБ. Не тут-то было!

Загружаю я, значит, пухленькую анимацию, которая спокойно отображается lottie-web, в Telegram — и тут вместо условно красивого пиксель-арта на меня смотрит статическое размазанное вот это:

Что такое?! А оказалось, на разжатые данные тоже есть явно не указанное ограничение в 1 МБ. Представитель команды Telegram оперативно подтвердил его и сообщил о грядущем поднятии лимита до 2 МБ.

Еще по теме:  Бот для знакомств ТГ создать

Даже если эти проблемы решат — стикеры, выходящие за пределы 1 МБ несжатых данных и не содержащие трансформаций, окажутся недоступными для пользователей старых версий Telegram. Так что придётся, видимо, соблюдать ограничения и впредь.

Прозрачность — это важно

Pillow, наряду с OpenCV, можно назвать индустриальным стандартом для обработки изображений в Python. Мало того, он неплохо заточен и под особенности GIF: поддерживает индексированные цвета, даёт доступ к палитре. Поддерживает преобразование пиксельной карты в NumPy-массив, что важно для продуктивной обработки. Даже статистику по цветам собирает! Но обнаружились и минусы:

  1. Не нашлось задокументированного способа получить индекс прозрачного цвета. Пришлось в качестве временного решения подразумевать, что прозрачный цвет — самый распространённый, но в реальных GIF’ках это не всегда так.
  2. То же самое с задержкой между кадрами: Pillow отдаёт только сами кадры как последовательность изображений, без информации о задержках.
  3. Иногда некорректно накладываются частичные кадры.

Посему пришлось искать замену. В качестве неё выступил модуль gif2numpy. Он «заточен» под особенности GIF и предоставляет доступ ко всем техническим свойствам как изображения, так и отдельных кадров, в том числе GCE . Таким образом, проблему считывания задержек он решает.

Прозрачность, как оказалось, gif2numpy не поддерживает вообще: цвета сразу преобразуются в три канала с разрядностью в байт, без учёта разрядности и сохранения индексов цветов. Благо, модуль состоит из одного файла, так что не составило труда включить его в проект и доработать, зарезервировав под прозрачность цвет #FE00FE .

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

Сожми меня сильнее

Квадратики — это хорошо, но с такими ограничениями нужно проявить больше фантазии, иначе в Telegram не «пролезают» даже миниатюрные GIF’ки.

Первым в ход пошло нечто похоже на RLE : соседние по горизонтали квадратики одного цвета объединяются в один прямоугольник.

Далее — черёд эксплуатации особенностей Lottie. Поскольку каждый слой имеет произвольное время начала и конца — можно применить технику, которая давным-давно используется видеокодеками, и отчасти в самом GIF: квадратики, которые остаются на одном месте в течение нескольких кадров, можно слить в один слой, во время отображения которого сменяется несколько других. Что и реализовано, пока только для пар соседних слоёв.

Планы по развитию

Идей, которые здесь можно применить, навалом:

  • Распознавать одноцветные области любого размера. Можно разбивать их на набор прямоугольников, для чего есть неплохой алгоритм. Также целесообразно преобразовывать их в контур, но это омрачается необходимостью указывать все точки кривых Безье в Lottie — прямоугольниками в некоторых случаях может быть выгоднее.
  • Распознавать движение. Техника, опять-таки, издревле применяющаяся в видеокодеках. Если один и тот же контур не меняет форму от кадра к кадру, но лишь координаты — стоит вместо дублирования на нескольких слоях поместить его на один слой с трансформацией.
  • Распознавать «накрытие» одних областей другими. Пример:
    .
    .O..O.
    .
    .OOOO.
    .

    На прямоугольник одного цвета накладываются пиксели другого цвета. Вместо того, чтобы разбивать этот прямоугольник на кучу мелких, или пребразовывать в контур сложной формы — можно просто наложить их поверх целого прямоугольника.

  • Векторизация кривых и эллипсов, распознавание градиентов. Это испортит пиксельный шарм, зато на порядки улучшит сжимаемость некоторых GIF’ок. Градиенты есть даже в допотопных «колобках», я гарантирую это!
  • Сжатие с потерями. В первую очередь — устранение дизеринга, да и в излишне сглаженных картинках не помешает цвета поумерить. С этим наверняка справится вышеупомянутый gifsicle.

Ссылки

  • Исходники. Местами страшные.
  • Канал, на котором я выкладываю паки успешно сконвертированных GIF’ок.

Источник: mailsgun.ru

Чат-бот Telegram Python — ответ с анимированной гифкой

Я использую стартовый комплект Telebot (https://github.com/yukuku/telebot), который обрабатывает отвечает как:

elif ‘who are you’ in text: reply(‘telebot starter kit, created by yukuku: https://github.com/yukuku/telebot’)

Мне удалось заставить его ответить изображением:

elif ‘Test1’ in text: reply(img=urllib2.urlopen(‘https://i.ytimg.com/vi/VC8H5B2YVCY/maxresdefault.jpg’).read())

Но нельзя отправлять анимированные гифки. При отправке как img, как указано выше, используется статическая sendPhoto.

Я уверен, что это должен быть случай добавления класса InlineQueryResultGif и вызова его внутри ответа (), но я пробовал много и много способов сделать это, но я не добился никакого прогресса

ИЗМЕНИТЬ, чтобы показать несколько попыток:

Сначала я попытался отредактировать аргумент elif, который уже был на месте для отправки img:

elif gif: gif = multipart.post_multipart(BASE_URL + ‘InlineQueryResultGif’, [ (‘chat_id’, str(chat_id)), (‘reply_to_message_id’, str(message_id)), ], [ (‘gif’, ‘image.gif’, gif), ])

А затем просто измените ответ на:

elif ‘Test4’ in text: reply(gif=urllib2.urlopen(‘http://www.reactiongifs.us/wp-content/uploads/2014/08/popcorn_indiana_jones.gif’).read())

Затем я попытался добавить сам класс InlineQueryResultGif:

class InlineQueryResult: pass class InlineQueryResultGif(InlineQueryResult): «»» Represents a link to an animated GIF file. By default, this animated GIF file will be sent by the user with optional caption. Alternatively, you can provide message_text to send it instead of the animation. Attributes: id (str) :Unique identifier of this result gif_url (str) :A valid URL for the GIF file. File size must not exceed 1MB gif_width (int) :*Optional.* Width of the GIF gif_height (int) :*Optional.* Height of the GIF thumb_url (str) :*Optional.* URL of a static thumbnail for the result (jpeg or gif) title (str) :*Optional.* Title for the result caption (str) :*Optional.* Caption of the GIF file to be sent message_text (str) :*Optional.* Text of a message to be sent instead of the animation parse_mode (str) :*Optional.* Send “Markdown”, if you want Telegram apps to show bold, italic and inline URLs in your bot’s message. disable_web_page_preview (bool) :*Optional.* Disables link previews for links in the sent message «»» def __init__(self, id, gif_url, gif_width=None, gif_height=None, thumb_url=None, title=None, caption=None, message_text=None, parse_mode=None, disable_web_page_preview=None): self.type = ‘gif’ self.id = id self.gif_url = gif_url self.gif_width = gif_width self.gif_height = gif_height self.thumb_url = thumb_url self.title = title self.caption = caption self.message_text = message_text self.parse_mode = parse_mode self.disable_web_page_preview = disable_web_page_preview

И попытался вызвать это внутри ответа:

elif ‘Test2’ in text: reply(InlineQueryResultGif(‘http://www.reactiongifs.us/wp-content/uploads/2014/08/popcorn_indiana_jones.gif’))

И множество разных версий вышеизложенного. Ничего не получается

Источник: question-it.com

Inline Телеграм бот для отправки GIF-изображений из ВКонтакте

VKGIFSBot — удобный бот для отправки GIF-изображений из ВКонтакте в Телеграмe. Работает это очень просто: бот получает токен ВКонтакте API и делает запрос docs.get , который возвращает доступные документы пользователя. Происходит отобор GIF-изображений и они возвращаются ботом через Inline. Для токенов я создал своё Standalone-приложение ВКонтакте, которое запрашивает доступ ТОЛЬКО к файлам. Это важно, потому что бот не лезет куда-то дальше, а значит ваши сообщения в безопасности.

InlineQuery в Телеграме может возвращать только 50 элементов, поэтому пришлось добавить кнопку «Следующие 50 GIF». При нажатии на неё пользователь отправляет боту /start .

Но на самом деле отправляется /start next — это называется Deep linking. Это полезно знать разработчикам ботов для Телеграма, поэтому я оставлю ссылку.

Слишком большие GIF-изображения также не отображаются.

Зачем я использую базу данных?

В проекте предусмотрена база данных для сохранения конфигов (токенов) пользователей в случае неисправности сервера.

Введите телеграм токен в dockerfile и выполните:

docker build -t vkgifsbot . docker run -d —name vkgifs -v /local/path/to/rep/db:/usr/src/app/db —rm vkgifsbot

  • Поиск по GIF-изображениям

Можете поставить звёздочку или поддержать через Киви, мне будет очень приятно!

You might also like.
Telegram bot untuk mencari jawaban dibrainly, support inline juga

Brainly-Telebot Bot Untuk Mencari Jawaban Dibrainly Jika ingin clone. Boleh kok Dibuat dengan python menggunakan MTproto Library. Yaitu Pyrogram Bot y

7 Mar 17, 2022

An Inline Telegram YouTube Downloader bot with custom, permanent thumbnail support and cancel upload facility. Make your fork now.

Inline-Tube-Mate (YouTube Downloader) An Inline Telegram bot that can download YouTube videos with permanent thumbnail support Bot need to be in Inlin

41 Dec 14, 2022

A Sublime Text plugin that displays inline images for single-line comments formatted like `// ![](example.png)`.

A Sublime Text plugin that displays inline images for single-line comments formatted like `// ![](example.png)`.

Inline Images Sometimes ASCII art is not enough. Sometimes an image says more than a thousand words. This Sublime Text plugin can display images inlin

8 Jul 1, 2022

⬇️ Telegram Bot to download TikTok videos without watermark in a snap with Inline mode support.

⬇️ Telegram Bot to download TikTok videos without watermark in a snap with Inline mode support.

⬇️ Tokmate — Telegram Bot to download TikTok videos ⛲ Features Superfast and supports all type of TikTok links Download any TikTok videos without mate

35 Jan 5, 2023

An inline real-time media searching robot without any database.

MediaBuddy A Telegram Inline media searching robot without any database. About mediaBuddy is an inline media searching robot. If you have so many movi

28 Oct 21, 2022

Обертка для мини-игры «рабы» на python

Slaves API Библиотека для игры Рабы на Python. Большая просьба Поставьте звездочку на репозиторий. Это много для меня значит. Версии Т.к. разработчики

13 Mar 31, 2021

Asynchronous wrapper для Gismeteo.ru.

aiopygismeteo Асинхронная обёртка для Gismeteo.ru. Синхронная версия здесь. Установка python -m pip install -U aiopygismeteo Документация https://aiop

6 Dec 8, 2022

Набор утилит для Discord с использованием языка программирования Python.

Discord Tools v0.1 Functions: WebHook spamer Spotify account generator (What?) QR Code Token stealer Token generator Discord nitro gen/check Discor to

3 Aug 23, 2022

Mmr image postbot — Бот для создания изображений с новыми релизами в сообщество ВК MMR Aggregator

Mmr image postbot — Бот для создания изображений с новыми релизами в сообщество ВК MMR Aggregator

3 Jan 7, 2022

Бот - Гуль для твоего телеграм аккаунта

Бот — Гуль для твоего телеграм аккаунта

Я — Гуль (бот), теперь работает в чатах Отблагодарить автора за проделанную работу можно здесь Помощь с установкой тут Установка на Андроид После уста

57 Nov 6, 2022

Бот для мини-игры «Рабы» («Рабство») ВКонтакте.

vk-slaves-bot Бот для мини-игры «Рабы» («Рабство») ВК Группа в ВК, в ней публикуются новости и другая полезная информация. У группы есть беседа, в кот

80 Dec 17, 2022

ВКонтакте бот для управления Sugar кошельком

Sugarchain VK ВКонтакте бот для управления Sugar кошельком Установка Установить зависимости можно командой: pip install -r requirements.txt Запуск (из

4 Jun 6, 2021

Модуль для создания скриптов для ВКонтакте | vk.com API wrapper

vk_api vk_api – Python модуль для создания скриптов для ВКонтакте (vk.com API wrapper) Документация Примеры Чат в Telegram Документация по методам API

1.2k Jan 4, 2023

Телеграм бот решающий задания ЦДЗ, написанный на библиотеке libmesh.

MESHBot-Telegram Телеграм бот решающий задания ЦДЗ. Описание: Бот написан с использованием библиотеки libmesh. Для начала работы отправьте ему ссылку

2 Jun 19, 2022

Xmas-Tree-GIF-Tool — Convert any given animated gif file into an animation in GIFT CSV format

This repo is made to participate in Matt Parker’s XmasTree 2021 event. Convert a

2 Dec 30, 2021

Video-to-GIF-Converter — A small code snippet that can be used to convert any video to a gif

Video to GIF Converter Project Description: This is a small code snippet that ca

3 Jun 22, 2022

Gif-caption — A straightforward GIF Captioner written in Python

Broksy’s GIF Captioner Have you ever wanted to easily caption a GIF without havi

3 Apr 9, 2022

Бот Telegram для Школы в Капотне (ЦО № 1858)

Бот Telegram для Школы в Капотне (ЦО № 1858)

co1858 Telegram Bot Активно разрабатывался в 2015-2016 году как учебный проект, с целью научиться создавать ботов для Telegram. Бот автоматически парс

4 Aug 30, 2022

Бот для скачивания треков с Deezer используя ISRC и UPC коды

deez_robot Запуск Установите необходимые библиотеки pip install -r requirements.txt Создайте файл config.py и поместите туда токен бота и ARL-токен De

Источник: pythonrepo.com

Рейтинг
( Пока оценок нет )
Загрузка ...