将 YouTube 视频 ID 从 mpv 标准输出打印到文件

将 YouTube 视频 ID 从 mpv 标准输出打印到文件

这是我的脚本的一部分:

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.txtwhich 给我生成的 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

相关内容