LINUX.ORG.RU

Минималистичные анимированные обои для X (под wayland возможно тоже..не знаю)

 ,


3

0
Салют

Придумал некий способ, как дешево и легко анимировать рабочий стол. Вот, решился поделиться.

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

Если коротко: берем видео, режем на кадры. Берем Feh. Делаем скрипт смены кадров бесконечным циклом. Ставим на автозагрузку.

Background.

Сижу под Линуксом 1.5 года, что, наверное, считается еще новичком. В общем, не судите строго, пожалуйста.

Мотивация

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

Начнем!

Требования:

  • feh (утилита минималистичная, полагаю, есть на всех дистрах; в общем-то, она нам обойки и рисует;

  • приложение, чтобы разбить видео на отдельные кадры (лично я использовал web, такие приложения гуглятся 10 секунд);

  • в общем то все…

Опционально

  • я лично запускал все из под X и DWM, но лично я не вижу препятствий реализовать это на других DE

Этапы:

  1. Находим видео, режем на короткую, но цикличную версию(в моем случае 7 сек).

  2. Гуглим «Разбивка видео на кадры» у нас получается несколько скриншотов (в моем случае 70; важно и удобно чтоб кадры были пронумерованы по очереди).

  3. открываем VIMVIMwq (любой текстовый редактор) и пишем:

!#/bin/bash
while :
do 
feh --bg-fill(тут параметры фона) /путь/до/картинки1
sleep 0.03
feh --bg-fill(тут параметры фона) /путь/до/картинки2
sleep 0.03
.....
feh --bg-fill(тут параметры фона) /путь/до/последней_картинки
sleep 0.03
done

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

./путь/до/вашего_скрипта.sh & (& делает исполнение цикла фоновым)

  1. Находим способ сделать скрипт фоновым (данных способов много..очень; один из вариантов – добавить скрипт в ваш .xinitrc);
  • vim ~/.xinitrc
{текс..текс..текс..}
exec dwm & slstatus & nohup /home/$USER/путь/до/вашего_скрипта.sh

В моем случае dwm & slstatus, но у вас может быть другое!

Например, i3 & nohup /home/$USER/путь/до/вашего_скрипта.sh)

В целом, наверное, все. Спасибо за внимание

>>> Просмотр (1280x720, 5040 Kb)



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)

Такое бы целиком в gpu делать. А грузить постоянно полноэкранные картинки - жёстко по ресурсам

mittorn ★★★★★
()
Ответ на: комментарий от Blabado

Или я не понимаю

Или нет

По btop/top анологично. Нагрузки ноль практически. Я могу ошибаться

Blabado
() автор топика
Ответ на: комментарий от mittorn

Да уже осознал. Я на иксы посмотрел. По процу ~10% повысилась.

Ну способ да не самый дешевый. Наверное на десктопах такая нагрузка не критична

Blabado
() автор топика
Ответ на: комментарий от Blabado

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

В данном случае вроде профитно.

Blabado
() автор топика
Ответ на: комментарий от Blabado

Вообще постоянное обновление в любом случае повысит нагрузку. Композиторы не обновляют экран если нечего перерисовывать. Но т.к тут обновления редкие, то можно сделать это с относительно небольшим увеличением нагиузки.
Во-первых можно было бы (на x11) запустить это как видео с аппаратным декодированием (некоторые плееры могут рисовать в root). Тогда объём данных, передаваемый в gpu бужет минимальным.
Во вторых такое можно было делать в композиторе. Например, если используетсы compiz или wayfire, сделать для него плагин, который загрузит все кадры в видеопамять и будет отрисовывать текстуру вместо фона. Этот случай будет иметь почти нулевой оверхед по gpu и оверхед размером со всю анимацию в видеопамяти (но кого волнует эта пара мегабайт?)
Ну или как промежуточный вариант между ними - специальное приложение, рисующееся в root и так же держащее всю анимацию в памяти.

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

Я согласен, 100% есть способы более интересные и правильные с точки зрения нагрузки. Но которые сложнее реализовать. Это на 100% тупой и прямой способ. Который наверное имеет право существовать.

(Первый способ звучит интересно. Я пропробую.)

(Второй лично для меня неподъемный)

В любом случае каждый нагружает ОС и железо как хочет

Blabado
() автор топика
Ответ на: комментарий от Blabado

Ну по поводу третьего - наверняка есть уже что-то готовое

mittorn ★★★★★
()
Ответ на: комментарий от Blabado

https://git.disroot.org/mittorn/glxanim

gcc glxanim.c -lm -lX11 -lGL -o glxanim


GLXANIM_PERIOD=10000 GLXANIM_WIDTH=1920 GLXANIM_HEIGHT=1080 path/to/xwinwrap -b -s -fs -st -sp -nf -ov -fdt  -- sh path/to/glxanim.sh WID /path/to/*.png

GLXANIM_FILTER=1 - включение фильтрации (мыльное масштабирование)
GLXANIM_COMPAT=1 - включение compatibility профиля
GLXANIM_DOUBLEBUFFER=1 - включение double buffer (по умолчанию используется single buffer, возможен тиринг)
GLXANIM_PERIOD=N - период анимации в микросекундах
Даже на 1000 микросекундах уже нагрузка на процессор небольшая
Используется glBlitFramebuffer, так что нагрузка на gpu тоже небольшая

P.S
На картинке из поста (нашёл тут широкий gif: https://vk.com/doc12004966_466201489) какое-то кривое разрешение, которое не принимается нормально то ли stbi, то ли opengl, потому стоит кропнуть так (желательно пересчитать кратную 8 ширину под aspect ratio):
ffmpeg -i bg.gif -vf crop=864:384 bg/%d.png

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)

Кажется я где-то здесь видел пост, как делали анимированный фон с помощью mpv. Но уже не найду, наверное. Mpv так-то и аппаратное ускорение поддерживает, и видео крутит.

mshewzov ★★★
()
Последнее исправление: mshewzov (всего исправлений: 1)
Ответ на: комментарий от mshewzov

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

mittorn ★★★★★
()

Минималичтичные анимированный обои

Дальше не читал.

dataman ★★★★★
()
Ответ на: комментарий от mittorn

Простите, я олдскул X11 юзер, ещё когда оно всё работало не через 3D... Сейчас я для ускорения окон пользуюсь Glamor, а есть ли аналогичный вариант для видеооверлея - чтобы без композиторов в root окно выводить тот же mplayer только за счёт видеокарты?

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

ну так xwinwrap -ov или xwinwrap -ovr
+ я вчера ночью по быстрому накидал утилиту, рисующую через opengl карьтнки. Через glamor это должно быть достаточно быстро

mittorn ★★★★★
()
Ответ на: комментарий от Dr64h

Создание скринсейвера на базе mpv и swayidle

Точно! Эта идея мне показалась более функциональной.

mshewzov ★★★
()

Лет 15 назад я сюда выкладывал скриншот с телевизором в место обоев, но народ как то не оценил :(

Rodegast ★★★★★
()

Жесть! А как же плавность и 100500фпс?

kirill_rrr ★★★★★
()

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

Зашёл поразиться, почему автор просто mpv с парочкой ключей не запустил, а вижу уже здравые идеи нашли путь ему в мозг. Медленно, но неуклонно формируется во мне мысль, что наряду с виндовозами страдать должны также вялые. И уефаны. Ну ещё кедерасы, гномосеки всякие...

Разрешение совершенно шакалье, если уж заморачиваться с таким, то разве что в хайрезе, н уж точно не таким заковыристым образом.

piyavking ★★★★★
()
Последнее исправление: piyavking (всего исправлений: 5)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.