mpv stdout에서 YouTube 비디오 ID를 파일로 인쇄

mpv stdout에서 YouTube 비디오 ID를 파일로 인쇄

이것은 내 스크립트의 일부입니다.

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 동영상 ID ' a-XXr1H1FeI' - Playing: ytdl://' ' 뒤에 있는 것뿐입니다. 각 ID는 수백 개의 재생 목록에 있는 노래이며, 여러 개의 재생 목록이 있습니다.

현재 노래 ID를 파일로 저장하고 싶어요. 이렇게 하면 youtube-dl을 사용하여 노래 제목을 가져오고 conky를 사용하여 표시할 수 있습니다. 노래를 건너뛴 다음 YouTube 재생목록에서 건너뛴 노래를 삭제하여 더 잘 관리할 수 있으며 이를 사용하여 ID를 다른 파일에 인쇄할 수도 있습니다.

여기에서 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

이것은 내가 원하는 ID를 제공하지만 스크립트를 중지할 때까지는 제공되지 않습니다. 노래가 재생될 때 필요합니다.

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단일 현재 ID 대신 생성된 ID 목록을 제공하는 것으로 변경했을 때 일종의 효과가 있었습니다. 나는 이것을 처리할 수 있을 것 같아요. 또한 루프는 "$1" = "q". 무슨 일이 일어나고 있는지 잘 모르겠습니다. 그러나 스크립트를 종료하는 다른 방법을 찾았습니다.

이것이 전체 스크립트입니다. 그대로 사용해도 되지만 좀 헷갈리네요. 며칠 동안 열어두고 아무도 도와주지 않으면 해결되었다고 전화하세요.

`#! /bin/bash

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

케이스 '$1'

################################### 제어
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
    ;;

이삭

~/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

출구

`

답변1

작업하기가 매우 쉽습니다.sed:

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

관련 정보