Вот часть моего скрипта:
mpv https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > data.txt
Вот пример того, что выводится в файл:
Playing: https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji
Playing: ytdl://a-XXr1H1FeI
(+) Audio --aid=1 --alang=eng (*) (vorbis 2ch 44100Hz)
AO: [pulse] 44100Hz stereo 2ch float
Все, что мне нужно, это идентификатор видео на YouTube «a-XXr1H1FeI
» — то есть после «Playing: ytdl://
». Каждый id — это одна песня из сотен плейлистов, а у меня несколько плейлистов.
Я хотел бы иметь идентификатор текущей песни в файле. Это позволит мне получить название песни с помощью youtube-dl и отобразить его с помощью conky. Я также могу использовать его для печати идентификатора в другом файле, если я пропущу песню, а затем удалю пропущенные песни из своих плейлистов на YouTube и поэтому лучше их курирую.
Я попробовал решения sed и grep отсюда: Возвращать только часть строки после совпадающего шаблона, и они ничего не печатали.
Я использую плейлисты; поэтому это решение: Заставить mpv отображать имя ссылки на YouTube при воспроизведении только аудио не работает.
Вот что я пытался сделать с помощью sed:
Это ничего не дает.
mpv https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo | sed -n 's~^Playing: ytdl://\(.*\)~\1~p' > data.txt
Это дает мне нужные идентификаторы, но не раньше, чем я остановлю скрипт. Они нужны мне, пока играют песни.
mpv https://www.youtube.com/playlist?list=PLNQL50H--29o5FarbAFHBaUNRu2ipp4th --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > data.txt
sed -n 's~^Playing: ytdl://\(.*\)~\1~p' data.txt > out.txt
Обновление: На самом деле это не работает, но я думаю, что это близко.
mpv $url --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > ~/data.txt &
until [ "$1" = "q" ]
do
sed -n 's~^Playing: ytdl://\(.*\)~\1~p' ~/data.txt > ~/out.txt
> ~/data.txt
sleep 5
done
Обновление:
Это работает, когда я изменяю data.txt > out.txt
на ~/data.txt >> ~/out.txt
, что дает мне список сгенерированных идентификаторов , а не единственный текущий идентификатор. Я мог бы работать с этим, я полагаю. Кроме того, кажется, что цикл не останавливается, когда "$1" = "q"
. Я не уверен, что происходит с этим. Однако я нашел другой способ убить сценарий.
Вот и весь сценарий. Я могу работать с ним как есть, но это своего рода кладж. Я оставлю это на пару дней, а затем назову это решенным, если никто не поможет.
`#! /bin/bash
myfifo=~/.config/mpv/mpv-fifo
case "$1" in
################################### Контроль
r) echo add volume 10 > $myfifo
;;
q) echo stop > $myfifo ; pkill pymp
;;
p) echo pause > $myfifo
;;
n) echo playlist-next > $myfifo
;;
l) echo add volume -10 > $myfifo
;;
################################# Плейлисты
### Sleep & Meditation ###
S) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29pkOIBTq6tsWSqdY8ur7Xms
;;
### Epic Trailer Music ###
E) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji
;;
### Virtuoso Instrumental Guitar ###
G) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29o5FarbAFHBaUNRu2ipp4th
;;
### Old-time Blues ###
B) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29pth2mWWKcBQd7YbVClBvea
;;
### Jazz Noir ###
J) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29pagSz1i0BG7-30knwiUNXH
;;
### Classic Rock ###
R) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29rjmhFC4SqiTQa4jp-NEUN8
;;
esac
~/out.txt
mpv $url --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > ~/data.txt &
until [ "$1" = "q" ]
do
sed -n 's~^Playing: ytdl://\(.*\)~\1~p' ~/data.txt >> ~/out.txt
> ~/data.txt
sleep 5
done
exit
`
Довольно просто с sed :
sed -n 's~^Playing: ytdl://\(.*\)~\1~p' yourfile
a-XXr1H1FeI