Imprima o ID do vídeo do youtube para arquivar a partir do mpv stdout

0

Aqui está parte do meu script:

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

Veja um exemplo do que é impresso no arquivo:

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

Tudo que eu quero é o ID do vídeo do youtube ' a-XXr1H1FeI ' - depois de ' Playing: ytdl:// '. Cada id é uma música de uma lista de reprodução de centenas e eu tenho várias listas de reprodução.

Eu gostaria de ter o id da música atual em um arquivo. Isso me permitirá pegar o título da música com o youtube-dl e exibi-lo com conky. Eu também posso usá-lo para imprimir o id para outro arquivo se eu pular uma música e, em seguida, apagar as músicas puladas das minhas playlists do youtube e, portanto, melhor selecioná-las.

Eu tentei as soluções sed e grep aqui: Retorna apenas a parte de uma linha após um padrão de correspondência e eles não imprimem nada.

Estou usando playlists; então esta solução: Faça o nome de exibição do mpv do link do youtube ao reproduzir apenas o áudio não funciona.

Veja o que tentei fazer com o sed:

Isso não produz nada.

mpv https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo | sed -n 's~^Playing: ytdl://\(.*\)~~p' > data.txt

Isso me dá os ids que eu quero, mas não até que eu pare o script. Eu preciso deles enquanto as músicas estão tocando.

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://\(.*\)~~p' data.txt > out.txt

Atualização: Isso não funciona, mas acho que está próximo.

mpv $url --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > ~/data.txt &


    until [ "$1" = "q" ]
        do

            sed -n 's~^Playing: ytdl://\(.*\)~~p' ~/data.txt > ~/out.txt
            > ~/data.txt
            sleep 5

        done

Atualização: Isso funciona quando eu altero data.txt > out.txt para ~/data.txt >> ~/out.txt , o que me dá uma lista dos IDs gerados, não o ID único atual. Eu poderia trabalhar com isso, suponho. Além disso, o loop não parece parar quando "$1" = "q" . Eu não tenho certeza do que está acontecendo com isso. Eu encontrei outra maneira de matar o script embora.

Este é o script inteiro. Eu posso trabalhar com isso como é, mas é meio que um kludge. Vou deixar por alguns dias e depois resolvê-lo se ninguém ajudar.

'#! / bin / bash

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

caso "$ 1" em

################################### Ao controle
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
        ;;
################################# Listas de reprodução
### 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://\(.*\)~~p' ~/data.txt >> ~/out.txt
            > ~/data.txt
            sleep 5

        done

sair

'

    
por user57649 10.06.2017 / 00:28

1 resposta

1

Muito fácil com sed :

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