`youtube-dl`でYouTube動画のURLを取得すると、動画をダウンロードせずに遅い


10

youtube-dlを使用してURLを取得し-g、ビデオをダウンロードしない「シミュレート」オプションを取得したい。

だから私は次のコマンドを与えました:

youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg

7〜8秒後に次の出力が得られました

https://r20---sn-cvh7zn7d.googlevideo.com/videoplayback?initcwndbps=1113000&mt=1408702970&requiressl=yes&ipbits=0&sver=3&fexp=901454%2C902408%2C919145%2C924626%2C927622%2C927904%2C931330%2C931983%2C934024%2C934030%2C934804%2C945118%2C945308%2C946023%2C951914&ratebypass=yes&signature=38F111D46D72FFC50B47D50B3C9A631099BF5F83.FA134C91F407989B95ACADC1F1F6946B8F18C158&upn=tU0u5t7A2Uw&sparams=id%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Cmm%2Cms%2Cmv%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mm=31&expire=1408724634&id=o-AJNPuDp9TKMKiwzUwvSk76W7JdA0cx0bRSum9mPJJ7Vo&mv=u&source=youtube&ms=au&key=yt5&ip=115.113.1.50&itag=18

しかし問題は、URLのクエリに約7〜8秒かかることです。
より速くなる方法はありますか?


「シミュレート」とはどういう意味ですか?
Volker Siegel 14

オプション-gの後にyoutube-dlを指定すると、出力として言及したように、URLが生成(シミュレーション)されます。
bharath kumar reddy bojja 14

回答:


9

時間は仕事をして過ごすことです

コマンドはハングしたり、時間の浪費を待ったりするものではなく、
実際には時間のかかる作業を行います。おそらく、複数の小さなネットワーク遅延を合計することで時間がかかります。しかし、YouTube側で遅延が発生していることも考えられます。

必要なHTMLをダウンロードするのにかかる時間です。
コマンドは、少なくとも2つのHTTP要求を次々に、そしておそらくそれ以上行う必要があります。

したがって、何かが遅い場合は、すでにリクエスト数が掛けられます。

私にとっては、非常に速い回線で1.5秒かかります。それは8秒からそれほど遠くないです。


調べる方法

私が見つけるために使用したコマンドを示します。

例をより整然とするために、URLに変数を使用します。

$ u="https://www.youtube.com/watch?v=k4JGSAmu4lg"

コマンドの継続時間を測定したい。コマンドを使用するtimeときは、コマンドと組み込みシェルを混同しないように注意する必要があります。行を短くするために小さな関数を使用します:

$ t(){/usr/bin/time -f 'Time: %es' "$@";}

コマンドはビデオファイルのURLを書き出します(80列に切り捨て)。

$ youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823

コンピューターでの実行にかかる時間を測定してみましょう。

$ t youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
Time: 1.44s

はい、1.5秒です。問題よりも高速ですが、それほど高速ではありません。しかし、それはどのように時間を費やしていますか?多分それはいくつかの隠された方法でビデオをダウンロードしてそれを破棄しますか?動画は360pで11分です。オプションなしでダウンロードするだけで約13秒から10倍かかります。
詳細オプションを使用して、詳しく調べる必要があります-v

$ t youtube-dl -v -g "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-g', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?sparams=id%2Cinitcwn
Time: 1.40s

ああ、 '[debug]'行が出力されるまでに多少の遅延があります。youtube-dlそれはそれ自身の構成設定のためにいくらかの時間を費やしているように見えます。それは1/4秒程度であり、私たちが求めている遅延ではありません。しかし、そこから学べることは、youtube-dl実装自体が遅い可能性があるということです。
メッセージの後、結果のURLが出力されるまで何も起こりません。したがって、私たちはまだ興味深い部分を見ていません。
オプション-gは、その半秘密のURLを見つけるという複雑な部分を実行して印刷するという意味で、ビデオのダウンロードを「シミュレート」することですが、最後に実際のダウンロードをスキップします。-sURLを出力しない同様のオプションがあり、それ以外は同様に見えます。ほぼ同じ時間がかかる場合、それは十分に類似していると仮定しましょう。それを確認する必要があります。

$ t youtube-dl -v -s "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-s', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
[youtube] Setting language
[youtube] k4JGSAmu4lg: Downloading webpage
[youtube] k4JGSAmu4lg: Downloading video info webpage
[youtube] k4JGSAmu4lg: Extracting video information
Time: 1.45s

OK、-sと同じ時間がかかる-gので、テストのために置き換えても問題ありません。
さらに興味深いのは、出力が増えたことです。そして、それは興味深いタイミングで印刷されます:行はお互いに同じような遅延で印刷されます。したがって、それらは実際に私たちが探している時間を費やしているアクションに関するものであるようです。
メッセージから、少なくとも2つのWebページがダウンロードされます。しかし、「ページ」という言葉は単一のHTTPリクエストと単一のHTMLドキュメントを意味しないと想定できます。

何を学びましたか?

重要な点は、プログラムの作業には実際には時間がかかることであり、何かを待ったり、ハングアップしたりすることはありません。
また、複数のステップで同様の時間がかかることもわかります。計算するものはそれほど多くないので、ネットワークの往復は何らかの形で加算されます。
つまり、接続のレイテンシはここでのみ重要です。接続のスループットは無関係です。

あなたがインターネット接続をより高速にしてデータを2倍の速度で転送できるようにするなら-それはまったく役に立たないでしょう。しかし、より良いping時間を得ることができれば、それはそれをはるかに速くします。
ただし、インターネットサービスプロバイダーに「ping」する時間ではありません。YouTubeへのping時間は重要です。変更することはできません。

興味深いことに、次のステップであるビデオのダウンロードでは、高速回線の要件は正反対です。遅延はまったく関係なく、スループットが本当に重要です。


まだ疲れていませんか?

時間が本当に実際に費やされているものを理解するためにさらに詳細が必要ですか?
次のステップは、HTTP接続をトレースすることです。たとえば、リダイレクトの場合、2回よりもはるかに多くのラウンドトリップが表示されるのではないかと思います。wireshark、またはロギングHTTPプロキシを使用するか、strace接続または書き込みのシステムコールをカウントするだけです。

今日、私たちは2人ともネットワークのうさぎの穴を十分に調べました。


それで、そのような長い時間の理由は何でしょうか?ネットワーク接続が遅いためですか?
bharath kumar reddy bojja 14

それがどれほど遅いかに依存します-質問は何ですか?私の例の詳細を少し待ってください、私はそれらを書いています。
Volker Siegel、

私の質問は次のとおりです。遅延は遅いネットワーク接続が原因ですか?
bharath kumar reddy bojja 14

はい、部分的に。質問は思ったより単純ではありません;)それは接続のスループットについてではありません。ここではレイテンシが重要です。私が知ることができることから、少なくとも3つのHTTPラウンドトリップがありますが、それ以上かもしれません。すべての遅延はこの数で乗算され、合計されます。私はあなたのつながりについて何も知りません。YouTube側では遅く、測定せずに判断するのは難しいかもしれません。速度がわかっているネット上で他のことを試して、速度が遅いのか、それとも正常かを確認します。
Volker Siegel 14

だから、私はいくつかの詳細を追加しました:)
Volker Siegel '22

6

ただ行う:

youtube-dl -j --flat-playlist 'https://www.youtube.com/watch?v=k4JGSAmu4lg' | jq -r '.id' | sed 's_^_https://youtube.com/v/_'

ソース


1

別の理由があるかもしれません。youtube-dl圧縮されたPythonアプリケーションとして配布されます。実行するたびに、抽出して実行します。

unzipコマンドで手動で抽出できます。次に、実行する__main__.pyように実行しますyoutube-dl。Piのような低電力のコンピューターでは、パフォーマンスが著しく向上します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.