コマンドラインで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