Печать идентификатора видео YouTube в файл из mpv stdout

Вот часть моего скрипта:

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

`

0
12.06.2017, 02:54
1 ответ

Довольно просто с sed :

sed -n 's~^Playing: ytdl://\(.*\)~\1~p' yourfile
a-XXr1H1FeI
1
28.01.2020, 02:45

Теги

Похожие вопросы