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.487 ]

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

Script em Xdialog para montar / desmontar dispositivos

Inicializando os serviços de OmniBus

funçõeszz no zsh

Manutenção de Endereços

squidclean.sh


  

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