Visualizar capas de álbuns de músicas no MPD/MPC/NCMPCPP

Publicado por João Gabriel (última atualização em 03/02/2021)

[ Hits: 1.517 ]

Download ncmpcpp-album




O NCMPCPP é um cliente do MPD, interativo, e com uma interface muito boa. O NCMPCPP tem um problema, porém: não é possível ver a capa do álbum da música que você está escutando. Esse script usa o Ueberzug (um visualizador de imagens no terminal) para mostrar as imagens da capa do álbum da música que estiver tocando no momento.

Esse script é uma versão modificada de um script criado pelo GeorgeHJ no GitHub.

P.S.: esse script deve ser rodado por uma nova instância de um terminal, não diretamente, senão não vai funcionar!

P.S.: esse script depende de ffmpeg, mpd, mpc e ueberzug.

  



Esconder código-fonte

#!/usr/bin/bash

## All credits to GeorgeHJ on github, thank you!
## Requires mpd, mpc, ueberzug, bash, ffmpeg and diffutils


# This should be the root of mpd
musicDir="/home/goll/media/music"

tmpImgDir="/tmp/ncmpcpp-album"

# Default Dimensions
WIDTH=32
HEIGHT=32
X=0
Y=0


mkdir "$tmpImgDir"

mpdRunCheck() {
    while true; do
        mpc -q 2>/dev/null && break || sleep 2
    done
}

updArt() {
    oldFilename="$filename"
    getCoverArt
}

getCoverArt() {
    local curFile; local tmpImgFile #; local curDIr

    curFile=$(mpc current -f "%file%")

    [ -n "$curFile" ] && {
        tmpImgFile=$(mktemp -p "$tmpImgDir" --suffix=.png)
        ffmpeg -i "$musicDir/$curFile" "$tmpImgFile" -y

        if ! cmp -s "$filename" "$tmpImgFile"; then
            filename=$tmpImgFile
        fi

        find "$tmpImgDir" -name "tmp.*.png" 2>/dev/null | grep -v "$filename" | xargs -r rm
    }
}

showArt() {
    # shellcheck disable=2154
    { declare -Ap add_commnand=([action]="add" [identifier]="albumArt" [x]="$X" [y]="$Y" [width]="$WIDTH" [height]="$HEIGHT" [path]="$filename")
        checkChanged
    } | ueberzug layer --parser bash
}


checkChanged() {
    while true; do
        mpc idle player update >/dev/null
        updArt

        if ! cmp -s "$oldFilename" "$filename"; then
            oldFilename="$filename" && break
        fi
    done
}

quit() {
    # shellcheck disable=2154
    {
        declare -Ap remove_command=([action]="remove" [identifier]="albumArt")
    } | ueberzug layer --parser bash

    tput cnorm

    find "$tmpImgDir" -name "tmp.*.png" -delete 2>/dev/null

    exit 0
}


# Main

tput civis

trap quit SIGINT

while true; do
    mpdRunCheck
    updArt
    clear
    showArt
done 2>/dev/null

Scripts recomendados

Minha solução para monitorar múltiplos termômetros no Slackware

Informação sobre partições montadas em Xdialog

Antiprotetor de links

Localizador não interativo do Mozilla Firefox para Slackware

script testador de ips para rede wireless


  

Comentários
[1] Comentário enviado por maurixnovatrento em 04/02/2021 - 11:47h


Bom trabalho.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts