После нескольких часов безуспешного поиска я сделал решающий шаг и бросил все это вместе.
Просто на голову любому, кто планирует использовать это - я сомневаюсь, что это очень эффективно, и я уверен, что есть лучший способ - но это прекрасно работает для меня.
Если эффективность является проблемой, возможно, это не лучший способ для вас.
Лично у меня есть эта настройка запуска по горячей клавише в моем оконном менеджере (CTRL + Shift + Z), и она прекрасно работает! :)
Примечание: требуются xclip, lsof и ffmpeg.
Вывод: np: A Perfect Circle - The Noose.flac [801 kb/s] in vlc
#!/bin/sh
mediaplayers="vlc totem rhythmbox banshee mplayer gnome-mplayer"
# path to ffmpeg
ffmpeg=$(which ffmpeg)
[ -z "$ffmpeg" ] && echo "ffmpeg not installed" && exit 1
for mediaplayer in $mediaplayers
do
pat="([^\w-]$mediaplayer)"
if ps ux | grep -P $pat | grep -vq grep; then
#mediaplayer detected
file=`lsof -F n -c "$mediaplayer" | egrep -i "^.*\.(mp3|flac|m4a)$" | sed 's/^n//g'`
if [ ! -z "$file" ]; then
if echo $file | grep -q m4a; then
bitrate=`ffmpeg -i "$file" 2>&1 | grep -v Estimating | grep bitrate | sed 's/^.*[*:].//g'`
# crazy bash string manipulation (my m4a's have no metadata -- unsure if yours do)
echo -n "np: ${file##*/} [$bitrate] in $mediaplayer" | xclip -selection clipboard
exit 1
fi
if echo $file | grep -q mp3; then
# mp3 metadata
perf=`ffmpeg -i "$file" 2>&1 | grep -v album_artist | grep artist | sed 's/^.*[*:].//g'`
title=`ffmpeg -i "$file" 2>&1 | grep -v Image | grep -v cover | grep title | sed 's/^.*[*:].//g'`
bitrate=`ffmpeg -i "$file" 2>&1 | grep -v Estimating | grep bitrate | sed 's/^.*[*:].//g'`
if [ ! -z "$title" ] && [ ! -z "$perf" ]; then
echo -n "np: $perf - $title.mp3 [$bitrate] in $mediaplayer" | xclip -selection clipboard
exit 1
fi
fi
if echo $file | grep -q flac; then
# flac metadata
perf=`ffmpeg -i "$file" 2>&1 | grep ARTIST | sed 's/^.*[*:].//g'`
title=`ffmpeg -i "$file" 2>&1 | grep -v Image | grep TITLE | sed 's/^.*[*:].//g'`
bitrate=`ffmpeg -i "$file" 2>&1 | grep bitrate | sed 's/^.*[*:].//g'`
echo File: "$file"
if [ ! -z "$title" ] && [ ! -z "$perf" ]; then
echo -n "np: $perf - $title.flac [$bitrate] in $mediaplayer" | xclip -selection clipboard
exit 1
fi
fi
fi
else
echo -n "No music playing or no player detected..." | xclip -selection clipboard
fi
done
К вашему сведению, я «заклятый враг». Я не мог вспомнить детали своего аккаунта, когда задавал вопрос.