воскресенье, 6 ноября 2011 г.

Conky VLC

Добавляем информацию из VLC плеера в conky.
(Поддерживает http трансляцию, локальные аудио и видео файлы)
Пишем небольшой скрипт ~/scripts/echovlc:


if ps aux | grep vlc | grep -v grep >> /dev/null
then
    vvv1=`qdbus org.mpris.vlc /Player GetMetadata | grep artist: | cut -d : -f2`
    vvv2=`qdbus org.mpris.vlc /Player GetMetadata | grep title: | cut -d : -f2`
    vvv3=`qdbus org.mpris.vlc /Player GetMetadata | grep nowplaying | cut -d : -f2`
   
    if [[ "$vvv3" == "" ]]
      then
if [[ "$vvv1" == "" ]]
 then
vvv=`qdbus org.mpris.vlc /Player GetMetadata | grep location | cut -d : -f3- | cut -d \/ -f3- | cut -d . -f1-5`
v5="Смотрю - $vvv"
else
v5="Слушаю $vvv1 - $vvv2"
fi
   else
v5="Слушаю радио - $vvv3"
   fi
   echo $v5
 fi
Результат:
 

Небольшое описание:
Проверяем, запущен ли vlc
Получаем информацию о файле
Проверяем, есть ли в выводе строчка nowplaying, если есть, значит проигрывается радио,
выводим
слушаю композицию
Сверяем, если есть метаданные artist и title,  значит это аудио файл, следовательно выводим: слушаю трек
Если метаданных нет, то выводим имя файла, и видимо это видео файл, а значит выводим:
смотрю файл


В конфиг коньков (~/.conkyrc) пишем:
{execi 40 bash ~/scripts/echovlc | cut -d ":" -f 2 | cut -d "-" -f1 }
{execi 40 bash ~/scripts/echovlc | cut -d ":" -f 2 | cut -d "-" -f2 }
Получится как то так:





Значек  ▶  или ■  выводится другим скриптом (~/scripts/playstopconky):
 if [ -n "`~/scripts/echovlc | cut -d ":" -f2 | grep ' - '`" ]
then
     echo "▶";
else
     echo "■";
fi
В ~/.conkyrc этот скрипт подключается так:
${execi 10 /home/userhome/scripts/playstopconky}

13 комментариев:

Анонимный комментирует...

Hi

This is exactly what I was looking for!

Can you please help me to add support for webfiles and duration? metadata for this should be "nowplaying" and "time"

Really Thanks!

Alexey Kostryukov комментирует...

Добрый день, что вы подразумеваете под webfiles ?

это проигрывание по протоколу http ?

Если /Player GetMetadata вернет эти данные, то можно их вставить в conky.
Иначе ничего не получится к сожалению.

Опишите подробнее что вы хотите, постараюсь помочь))

Анонимный комментирует...

hi, it's still me

yes http

to get Artist and Title in a stream:

$ qdbus org.mpris.vlc /Player GetMetadata | grep "nowplaying:" | cut --complement -d - -f2 | cut --complement -c1-12


$ qdbus org.mpris.vlc /Player GetMetadata | grep "nowplaying:" | cut -d - -f2


Try it e.g. with this stream:
vlc http://scfire-ntc-aa08.stream.aol.com:80/stream/1010


and for Duration, sadly in seconds not in minutes (and only local file, non streaming):


$ qdbus org.mpris.vlc /Player GetMetadata | grep -w "time:" | cut --complement -c1-6


I can put it in .conkyrc, but i prefer a script that detects if playing local or web and then get metadata.
The problem is... just i don't know how and what put in the script, i'm not so good in scripting :P


ah btw, playstopconky script doesn't work for me, it sais:

playstopconky.sh: line 3: echoradio: command not found

Thanks

Alexey Kostryukov комментирует...

Извиняюсь, ошибся.

в скрипте playstopconky.sh
Нужно заменить echoradio на echovlc
где echovlc это скрипт описанный выше, и нужно сделать на него ссылку в /usr/bin/ либо писать полный путь до него.
И конечно он должен быть исполняемым (chmod +x)

Пример:
if [ -n "`/home/username/scripts/echovlc | cut -d ":" -f2 | grep ' - '`" ]
then
echo "▶";
else
echo "■";
fi


По поводу потока(http) отвечу, как буду дома)

Alexey Kostryukov комментирует...

qdbus org.mpris.vlc /Player GetMetadata | grep nowplaying | cut -d : -f2
выводит:
Paul Brown - Hello Again

Если отдельно Исполнителя и композицию то:
Artist:
qdbus org.mpris.vlc /Player GetMetadata | grep nowplaying | cut -d : -f2 | cut -d - -f1

Title:
qdbus org.mpris.vlc /Player GetMetadata | grep nowplaying | cut -d : -f2 | cut -d - -f2

Вот вся информация, которая доступна:

qdbus org.mpris.vlc /Player GetMetadata
genre: Soft Smooth Jazz
location: http://scfire-ntc-aa08.stream.aol.com:80/stream/1010
nowplaying: Elan Trotman - Heaven In Your Eyes
status: 1
title: Absolutely Smooth Jazz - S K Y . F M - the world's smoothest jazz 24 hours a day

Alexey Kostryukov комментирует...

upd:
Обновил первый скрипт, чтобы правильно отображал данные получаемые по http

Анонимный комментирует...

Thanks man, you're good

I've slightly modified your script (hopefully without errors):

#!/bin/bash

if ps aux | grep vlc | grep -v grep >> /dev/null
then
vvv1=`qdbus org.mpris.vlc /Player GetMetadata | grep artist: | cut -d : -f2`
vvv2=`qdbus org.mpris.vlc /Player GetMetadata | grep title: | cut -d : -f2`
vvv3=`qdbus org.mpris.vlc /Player GetMetadata | grep nowplaying | cut -d : -f2`

if [[ "$vvv3" == "" ]]
then
if [[ "$vvv1" == "" ]]
then
vvv=`qdbus org.mpris.vlc /Player GetMetadata | grep location | cut -d : -f3- | cut -d \/ -f3- | cut -d . -f1-5`
v5="$vvv - $vvv"
else
v5="$vvv1 - $vvv2"
fi
else
v5="$vvv3 - $vvv3"
fi
echo $v5
fi



and then added this to .conkyrc:

${color #3994FF}VLC ${color}${color #FF7B39}${hr 2}${color}
§ Status:${alignc}${color #96FF00}${execi 5 ~/.exec/playstopconky.sh}${color}
§ Artist:${alignr}${color #96FF00}${execi 3 bash ~/.exec/echovlc.sh | cut -d ":" -f 2 | cut -d "-" -f1 }${color}
§ Title:${alignr}${color #96FF00}${execi 3 bash ~/.exec/echovlc.sh | cut -d ":" -f 2 | cut -d "-" -f2 } ${color}
§ Total Length:${alignr}${color #96FF00}${execi 10 qdbus org.mpris.vlc /Player GetMetadata | grep -w "time" | cut -d : -f2} sec. ${color}


Now some images:

conky vlc local file with metadata
http://imageshack.us/photo/my-images/507/conkyvlclocalmetadata.png/

conky vlc stream with metadata
http://imageshack.us/photo/my-images/210/conkyvlcstreammetadata.png/

Perfect, what i wanted!

just a little problem with local file without metadata
http://imageshack.us/photo/my-images/266/conkyvlclocalnometadata.png/

How can I hide the path? is too long and not usefull info for me


Anyway, great!

Alexey Kostryukov комментирует...

хорошо хорошо)

а путь можно обрезать, например по слешам /
как то так:
cut -d \/ -f3-

Анонимный комментирует...

Ok it seems to work quite well :D

http://imageshack.us/photo/my-images/220/conkyvlclocalnometadata.png/

See you! ;)

Alexey Kostryukov комментирует...

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

qdbus org.mpris.vlc /Player GetMetadata | grep -w "time" | awk '$1 ~ /:/ {print $2/60}' | cut -c1-4

так привычнее )

Анонимный комментирует...
Этот комментарий был удален администратором блога.
Анонимный комментирует...

OOOops sorry for the double (now triple -_-) post

Alexey Kostryukov комментирует...

Я может не так перевел, но по мойму ваш комментарий повторяет мой топик?)

п.с. я ухожу от аплетов, зачем кнопки на экране монитора, когда перед вами целая панель с кнопками (клавиатура)