7074

Возвращение правильных «Колобков» в Telegram2

С ходу — контекст.

Чуть больше месяца назад на Пикабу был пост про завершение работы ICQ. В комментариях промелькнуло, что в Телеграме есть набор премиум-эмодзи с Колобками. Он у меня, конечно, был изначально, но это были не те Колобки, потому что я привык к набору из QIP 2005/Infium и хотелось найти именно их. Но оказалось, что их не существует. Существовали только вот такие:

Проблем с этим набором хватает:
1. Здесь не все Колобки из QIP, плюс есть те, которых в QIP не было.
2. Урезанная версия Колобка, который бьётся ап стену.
3. Автор даже не попытался сохранить привычный порядок смайликов.

Короче, надо делать свой набор.

В общем, всё началось с моего коммента:

У меня есть этот набор. Но колобков было сильно больше, чем 51. Порядок не тот. И анимация урезана сильнее, чем доступные в Телеграме 3 секунды.

Крч это натолкнуло меня на мысль сделать более проработанный эмодзи-пак. А это всё не то.

Займусь послезавтра, как выходной будет.

Написан он был больше месяца назад. Я тогда думал, что времени на нормальный набор премиум-эмодзи уйдёт ну три-четыре дня по вечерам. Как же я ошибался!

Во-первых, свободное время: его почти не было. Основная работа, доп. работа, важные дела по дому (пока шла работа над набором эмодзи, я успел заменить свой старый самодельный рабочий стол на новый самодельный рабочий стол).

Во-вторых, производство самого набора эмодзи.

Здесь я столкнулся с кучей проблем. И расскажу я о них уже как о просто процессе производства.


Этап 1

Чтобы сделать набор эмодзи с Колобками из QIP, нужно было скачать QIP. Скачал, установил, в файлах программы нашёл папку с Колобками. Первая проблема: они нарисованы для белого фона. Т.е. по краям каждого смайлика были жуткие белые пиксели, примерно вот так:

Беда в том, что это анимация. А значит, чистить нужно будет каждый кадр отдельно.

Чтобы этим не заниматься, пришлось лезть в интернет и искать для каждого из 105 Колобков вариант для тёмного фона, без белых пикселей. И удалось найти не все. Примерно 75-80 смайликов я найти смог, а ещё около 25 просто не существовали в варианте для тёмного фона. И я занялся удалением белых пикселей. Где с помощью трюка с альфа-каналом в Фотошопе, где просто вручную, правя каждый пиксель на каждом кадре. А кадров порой было много. Плюс преобразование белого цвета в прозрачность иногда удаляло нужные белые пиксели и их также приходилось восстанавливать вручную, рисуя каждый пиксель по отдельности на каждом кадре. И так около 25 раз.

С горем пополам я добился того, что у меня есть 105 очищенных от белого фона анимированных Колобков.


Этап 2

Одно из требований Telegram для премиум-эмодзи: разрешение файла 100×100 пикселей. Окей. Записал в Фотошопе два макроса на увеличение разрешения для вытянутых по горизонтали и по вертикали Колобков. Прощёлкал эти макросы 105 раз. Можно конвертировать в нужный для Telegram формат. Или нет?


Этап 3

И тут наступает абсолютная, невероятная, хтоническая боль.

Ещё требования Telegram для премиум-эмодзи: видеофайл длиной до 3 секунд и с 30 кадрами в секунду.

Я столкнулся с тем, что ни одна программа, ни один онлайн-сервис не умеет по нажатию одной-двух кнопок просто конвертировать GIF в любой видеоформат в 30 fps и ужать его продолжительность до 3 секунд! Везде можно было поменять именно скорость видео, причём в процентах от исходной! Нельзя втупую указать программе, что вот тебе 3 секунды, вжимай в них видео как хочешь.

Честно говоря, поиски способа сделать такое преобразование заняли самое большое количество времени. И для этого мне пришлось изучать Adobe After Effects (до этого я им ни разу не пользовался).
В After Effects я закидывал каждый файл и проделывал одни и те же действия 105 раз:
1. Выставить параметр «Растягивание по времени» на 3 секунды, если анимация длится дольше 3 секунд.
2. Выставить fps композиции на 30 кадров в секунду.
3. Обрезать длительность композиции до 3 секунд.

Если же анимация длится меньше 3 секунд, то приходилось подбирать длительность анимации так, чтобы последний кадр проигрывался полностью. Он почему-то обрезался по времени. Таких смайлов было процентов 30.

Далее — экспорт каждого из 105 смайлов в видеоформат, поддерживающий альфа-канал, т.е. прозрачность. И да, я знаю про плагин Bodymovin-tg, который сам сохраняет файл в готовом для Telegram виде. В моём случае он не работал, потому что он не умеет переваривать сжатые по времени файлы.

Поэтому я воспользовался программкой FormatFactory, которая умеет конвертировать видео в *.webm с кодеком VP9, и просто втупую конвертировал все 105 Колобков.

Результат:

Kolobki QIP 2005 (клик по ссылке для установки)

Полноценный набор премиум-эмодзи «Колобки» прямиком из QIP. Все 105 смайликов. Именно в том порядке, в котором они были изначально. Даже имена файлов я сохранил: aa, ab, ac и так далее.

У некоторых смайлов получилась немного кривая анимация (утеряны паузы) — я переделаю их и заменю уже по факту.
Часть смайлов сильно ускорена — тут ничего не поделаешь, нужно было укладываться в 3 секунды любыми путями.
Также у них прыгают размеры — опять же, нужно было вписываться в квадрат 100×100 пикселей.

В комментариях я тегну всех, кто об этом просил.
Я старался не только для себя — для всех тех, кому хочется хотя бы на чуть-чуть вернуться в славные асечные времена.

P.S.: В скором времени я начну работу над вторым набором эмодзи, потому что есть Колобки, которых не было в QIP, но которые активно использовались на форумах и которых мне тоже не хватает. Запихивать их все в набор из QIP тоже было бы неправильно. Поэтому — будет ещё один.

Вы смотрите срез комментариев. Показать все
10
Автор поста оценил этот комментарий

круто, титаническая работа.

как только увидел пакетную обработку, и проблемы с перекодированием, сразу подумал, что ffmpeg мог бы решить поставленную задачу.

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

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

смотри, я использовал такую команду (в папке с ffmpeg, либо везде, если он в path прописан)


ffmpeg -i animated.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -vf "setpts=0.5*PTS" -r 25 video.mp4

после флага I- название исходного файла,

-vf - фильтры, которые накладываешь.

соответственно, setpts=0.5*PTS - ускорение (коэффициент подбираешь экспериментально)

-r 25 это - 25 кадров в сек.

ну и имя выходного файла в конце.

если нужно обработать кучу файлов, делаешь bat файл, в котором пишешь что то типа


@echo off

for /r %%d in (*.gif) do (


ffmpeg -i "%%~nd%%~xd" -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -vf "setpts=0.5*PTS"  -r 25 "%%~nd.2.mp4"     

)       

соответственно, обрабатываются все gif файлы в тек.папке.

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

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

удачи.

раскрыть ветку (6)
2
Автор поста оценил этот комментарий
Только там проблема в том, что продолжительность цикла анимации в каждой гифке разная и коэффициент надо подбирать к каждой отдельно. Но, может, там есть возможность принудительно выставить длительность в секундах при условии, что гифка длиннее трёх секунд и не сжимать её, если она короче.

Буду разбираться.
раскрыть ветку (4)
0
Автор поста оценил этот комментарий

ага, я уже понял, что пакетная обработка сходу её пойдёт.

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

ша, прямо заинтересовал меня...пока обед, попробую чатжпт поспрашивать

раскрыть ветку (3)
2
Автор поста оценил этот комментарий
Вот мне уже тоже кажется, что проще по отработанной технологии сделать остальные.) У меня-то основное время заняла не обработка файлов, а поиски нормального решения. Когда нашёл рабочий способ, всё сделал за несколько часов.
раскрыть ветку (2)
2
Автор поста оценил этот комментарий

поздно ), уже проверил😁

вот мой запрос

                привет. действуй, как опытный пользователь ffmpeg. я работаю в windows.

у меня есть  50 файлов gif разной длительности (от 4 секунд до 10 секунд).

мне необходимо преобразовать их в файлы mp4 с частотой кадров 25 и длительностью 3 секунды одним bat файлом.

насколько я знаю, ускорение задается параметром


-vf "setpts=0.5*PTS"

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

напиши текст bat файла с таким рассчетом коэффициента ускорения, либо, как пытный знаток ffmpeg, предложи другой вариант

вот ответ:


Привет! Как опытный пользователь FFmpeg, я могу предложить вам решение, которое автоматически рассчитает коэффициент ускорения для каждого GIF-файла и преобразует его в MP4 с нужными параметрами. Вот BAT-файл, который выполнит эту задачу:



@echo off

setlocal enabledelayedexpansion


for %%i in (*.gif) do (

    ffprobe -v error -select_streams v:0 -count_packets -show_entries stream=nb_read_packets -of csv=p=0 "%%i" > temp.txt

    set /p frames=<temp.txt

    del temp.txt


   ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "%%i" > temp.txt

    set /p duration=<temp.txt

    del temp.txt


    set /a "speed_factor=100*!frames!/25/3"

    set "speed_factor=0.!speed_factor!"


    ffmpeg -i "%%i" -vf "setpts=!speed_factor!*PTS,fps=25" -t 3 -c:v libx264 -preset medium -crf 23 -an "%%~ni.mp4"

)


echo Conversion complete!

pause



Этот скрипт делает следующее:


1. Перебирает все GIF-файлы в текущей директории.

2. Для каждого файла:

  - Определяет количество кадров с помощью ffprobe.

  - Определяет длительность файла с помощью ffprobe.

  - Рассчитывает коэффициент ускорения, чтобы получить 3-секундное видео с 25 кадрами в секунду.

  - Использует FFmpeg для конвертации GIF в MP4 с применением рассчитанного коэффициента ускорения.


Особенности этого решения:


- Автоматически рассчитывает нужный коэффициент ускорения для каждого файла.

- Устанавливает частоту кадров 25 fps.

- Ограничивает длительность выходного файла до 3 секунд.

- Использует кодек H.264 с разумными настройками качества.


Чтобы использовать этот скрипт:


1. Сохраните его как .bat файл (например, convert_gifs.bat) в той же папке, где находятся ваши GIF-файлы.

2. Дважды щелкните на файл, чтобы запустить его.


Скрипт обработает все GIF-файлы в папке и создаст соответствующие MP4-файлы с требуемыми параметрами.

проверил, вроде пашет)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Кайф. Потестим, спасибо.)
2
Автор поста оценил этот комментарий
Спасибо большое. Попробую это использовать.)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества