web-dev-qa-db-ja.com

youtube-dl;プレイリストのみをダウンロードし、ファイルはダウンロードしない

再生リストのコンテンツ(600以上のエントリである必要があります)のみをURLから取得しようとすると、次のようになります。

youtube-dl -i -v --flat-playlist --skip-download https://www.youtube.com/watch?v=CNotezuR73g&list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr

マニュアルページによると、ファイルのダウンロードを防止しながら、プレイリストのエントリをリストする必要があります。

代わりに、この出力を生成した後にハングします。

~ $ youtube-dl -i -v --flat-playlist --skip-download https://www.youtube.com/watch?v=CNotezuR73g&list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr  
[1] 4531  
~ $ [debug] System config: []  
[debug] User config: []  
[debug] Custom config: []  
[debug] Command-line args: ['-i', '-v', '--flat-playlist', '--skip-download', 'https://www.youtube.com/watch?v=CNotezuR73g']  
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8  
[debug] youtube-dl version 2018.07.10  
[debug] Python version 3.6.6 (CPython) - Linux-4.17.6-1-Arch-x86_64-with-Arch  
[debug] exe versions: ffmpeg 4.0.1, ffprobe 4.0.1, rtmpdump 2.4  
[debug] Proxy map: {}  
[youtube] CNotezuR73g: Downloading webpage  
[youtube] CNotezuR73g: Downloading video info webpage  
[debug] Default format spec: bestvideo+bestaudio/best  

どうすればよいですか?

11
user985675

彼のコメントで提案されているページwysiwigを読みましたか? (@ wysiwigに感謝!

youtube-dlでYoutubeプレイリストをリスト

とにかく、ここであなたが何ができるかを説明しようと思います(前のWebサイトから抜粋)

次のコマンドを使用してみてください:

youtube-dl -j --flat-playlist "https://<yourYoutubePlaylist>" | jq -r '.id' | sed 's_^_https://youtu.be/_' > result.log

これにより、result.logに次のような出力が生成されます。

https://youtu.be/0gvUCLL-UGE
https://youtu.be/CPV7zcUy4J0
https://youtu.be/4wyZNwIrH9I
...

これはあなたが必要とするものでなければなりません(YTビデオへの個別のリンクのリスト))。

コマンドの説明-jオプションを指定すると、youtube-dlは、渡されたリンクに関するすべての情報を含むJSON出力(この場合)。

次に、このJSON出力はjq JSONプロセッサに渡されます(事前にインストールする必要があります JQ Webサイトを参照 )。JSON出力に含まれるすべての「id」キーを検索します(0gvUCLL-UGE 、CPV7zcUy4J0、4wyZNwIrH9I、...)。次に、これらの「ID」をsedに渡します。これにより、それぞれの前にhttps://youtu.be/が付けられ、前に示した結果が得られます。

注1:JQをインストールするには、単純にSudo apt-get install jqを使用します。

注2:この方法は Youtube でのみ機能します。

19
radiolondra

@wysiwigのメソッドはLinuxで出力を生成しますが、私が求めたものは生成しません。

$ youtube-dl --flat-playlist --skip-download https://www.youtube.com/playlist?list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr  

出力:

[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:ウェブページをダウンロード
[ダウンロード]プレイリストのダウンロード:フルアートハウス映画
[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:ダウンロードページ#1
[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:ダウンロードページ#2
[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:ダウンロードページ#3
[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:ダウンロードページ#4
[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:ダウンロードページ#5
[youtube:playlist] PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr:ダウンロードページ#6
[youtube:playlist]再生リストフルアートハウス映画:636本の動画をダウンロードしています
[ダウンロード] 636ビデオのダウンロード1
[download]ダウンロード動画2 of 636
[ダウンロード]ビデオのダウンロード3 of 636
...

私が本当にプレイリストから取得したかったのは、ダウンロードしたいものだけを選択できるように、ビデオ名です。

$ youtube-dl -i --get-filename --skip-download https://www.youtube.com/playlist?list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr  

出力:

ウェイターズ(フルの長さの映画、長編映画全体、フル映画)_無料でフル映画を観る-CNotezuR73g.mp4
マルコムX(MORGAN FREEMAN、フルムービー、エングリッシュ、フルの長さのフィルム)_無料でフルムービーを見る-3C8j1C7HMj8.mp4
アリゾナ・キッド-ロイ・ロジャース主演の西部劇、フルムービー、長編映画、クラシック映画-8McZ6G2Uud8.mp4
Desperado Man aka Sagebrush Trail(Western Movie、Full Length Movie、Feature Film、Classic Movie)-7udmB5M6IIE.mp4
...

2
user985675

URLを引用していないようです。 Always引用URL。任意のオペレーティングシステム。

あなたの例では、問題ははっきりと見えています:

~ $ youtube-dl -i -v --flat-playlist --skip-download https://www.youtube.com/watch?v=CNotezuR73g&list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr
[1] 4531

[1] 4531は、ジョブ(ID 1)が開始され、PID 4531で実行されていることを意味します。

このコマンドラインは、ほぼ以下と同等です。

youtube-dl -i -v --flat-playlist --skip-download https://www.youtube.com/watch?v=CNotezuR73g &
list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr

末尾のアンパサンドは、行1がバックグラウンドで実行されることを意味します。シェルに接続されたままなので、出力が表示されます。おそらくハングしておらず、終了したばかりです。結局のところ、これはビデオへのリンクにすぎません。

行2はBashの変数割り当てです。 listという変数がまだ存在しない場合は、それが定義されます。次のように使用できます。

~ $ echo $list
PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr

使用する正しいコマンドラインは次のとおりです。

youtube-dl -i -v --flat-playlist --skip-download "https://www.youtube.com/watch?v=CNotezuR73g&list=PLm9l7EEbJuhyDYNuItj3sG8h3xAZbjIxr"
1
Daniel B