0

Here's part of my script:

mpv https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo  > data.txt

Here's an example of what's printed to file:

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

All I want is the youtube video id 'a-XXr1H1FeI' - that is after 'Playing: ytdl://'. Each id is one song from a playlist of hundreds and I have several playlists.

I would like to have the current song id in a file. This will allow me to grab the song title with youtube-dl and display it with conky. I can also use it to print the id to another file if I skip a song and then later delete the skipped songs from my youtube playlists and so better curate them.

I tried the sed and grep solutions from here: Return only the portion of a line after a matching pattern and they would print nothing.

I'm using playlists; so this solution: Make mpv display name of youtube link when playing just audio doesn't work.

Here's what I've tried to do with sed:

This produces nothing.

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

This gives me the ids I want, but not until I stop the script. I need them while the songs are playing.

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

Update: This doesn't actually work but I think it's close.

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

Update: It sort of works when I change data.txt > out.txt to ~/data.txt >> ~/out.txt which gives me a list of the ids that have generated, not the single current id. I could work with that I suppose. Also, the loop doesn't seem to stop when "$1" = "q". I'm not sure what's going on with that. I've found another way to kill the script though.

Here's the entire script. I can work with it as is, but it's kind of a kludge. I'll leave it for a couple of days and then call it solved if no one helps.

`#! /bin/bash

myfifo=~/.config/mpv/mpv-fifo

case "$1" in

################################### Control

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
        ;;

################################# Playlists

### 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

`

1 Answers1

1

Quite easy with sed:

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