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

関連情報