YouTubeビデオを検索して表示/ダウンロードするためのCLIユーティリティ

YouTubeビデオを検索して表示/ダウンロードするためのCLIユーティリティ

コマンドラインでYouTubeを検索して次のことを行うためのユーティリティはありますか?よりまたはダウンロードユーザー入力に基づく検索結果?

$ youtube-search madonna

1 Madonna - Hung Up (Official Music Video)
madonna ♩ 180M views 9 years ago
https://www.youtube.com/watch?v=EDwb9jOVRtU
"Hung Up" by Madonna from Confessions On A Dance Floor, available now.

2 Madonna - Like A Prayer (Official Music Video)
madonna ♩ 69M views 9 years ago
https://www.youtube.com/watch?v=79fzeNUqQbQ
2006 WMG Like A Prayer.

etc.

その後、次のように入力できます。

  • 「v1」ビデオ1を見る(VLCなどを使用)
  • 「d1-3」はビデオ1-3をダウンロードします(youtube-dlなどを使用)。
  • 検索結果の次のページを表示するには、「n」

私が今まで試したこと:

Googleの従業員YouTubeでは部分的に機能しますが、何らかの理由で「Madonna」を検索すると、検索結果が2つだけ表示されます。また、表示とダウンロードから選択する方法はありません。

YouTube-DL検索機能がありますが、検索結果を印刷したり、ユーザー入力を受け付けないようです。youtube-dl -j ytsearch:madonna検索結果のメタデータを一覧表示しますが、必須のビデオリンク、タイトル、説明は含まれていないようです。

ベストアンサー1

まず、結果についてytsearchN:尋ねる必要があります。N次に、最新バージョンであることを確認してくださいyoutube-dl(以前のバージョンではいくつかの問題がありました)。

次の基本スクリプトは5つの結果を取得し、タイトルとURLを表示し、どの結果をダウンロードするかを尋ねます。 「vN」および「dN」コマンドに応答することは簡単です(「dN」は実際にはすでに実装されています)。しかし、次の結果ページをどのように取得できるかわかりません。

#!/bin/bash

tempfile=$(mktemp)
youtube_dl_log=$(mktemp)

youtube-dl -j "ytsearch5:$*" > $tempfile

# workaround for lack of mapfile in bash < 4
# https://stackoverflow.com/a/41475317/6598435
while IFS= read -r line
do
    youtube_urls+=("$line")
done < <(cat $tempfile | jq '.webpage_url' | tr -d '"' )
# # for bash >= 4
# mapfile -t youtube_urls < <(cat $tempfile | jq '.webpage_url' | tr -d '"' )

cat $tempfile | jq '.fulltitle, .webpage_url'

while :
do
    echo "Enter video number to download."
    read i
    # don't download anything if you just press enter
    if [ ! x"$i" == x"" ]
    then
        # to make numbering of videos more intuitive (start from 1 not 0)
        youtube-dl --no-progress ${youtube_urls[$i - 1]} &
    fi
done

これは役に立つと考えられますが、出力をファイルyoutube-dl(または)にリダイレクトすることもできます。/dev/null

おすすめ記事