これらの「YouTubeからビデオを保存する」サービスはすべてどのように機能しますか?


62

つまり、一般的にどのように機能しますか?(Flashプレーヤーを含むページだけでなく)ビデオストリーム自体へのリンクをどのように受け取りますか?

Webで検索しましたが、役に立つものは見つかりませんでした(すべてのリンクはそのようなサービスを指しますが、どのサービスが実際に実装されているかはわかりません)。

回答:


51

非常に人気のあるオープンソースのコマンドラインダウンローダーがありyoutube-dl、まさにそれを実行します。指定されたYouTubeリンクから、またはVimeo、Yahoo!ビデオ、uStreamなど。

それがどのように行われるかを確認するには、YouTubeエクストラクタをご覧ください。ここで示すには多すぎます。より簡単なサイトには他のエクストラクターが存在します。Steven PennyにはYouTube用のシンプルなJavaScriptダウンローダーもありますが、これはもう少し簡単です。

ただし、基本的に、Flashビデオプレーヤーの場合は、JavaScriptを使用して初期化し、構成する必要があります。簡単に言えば、Flashオブジェクトのプレーヤーは、ロードするビデオストリームのURLを受け取ります。

ビデオストリームを見つけるには、ビデオページのHTMLおよびJSコードを解析して関連する初期化コードを見つけ、そこから実際のMP4ファイルへのリンクを見つけなければなりません。プレーンテキストである場合もありますが、特定のダウンロードトークンを使用してオンザフライで生成することもできます。多くの場合、JavaScriptは難読化されて、再設計が難しくなります。または、ビデオ情報は、JSによって非同期にロードされるXMLファイルに含まれている場合があります。

HTML5プログレッシブダウンロードビデオの場合、実際のソースファイルは通常sourcevideoタグの子で直接言及されているため、ページを検索するmp4か、同様のものを探します。たとえば、ドイツのニュース番組Tagesschau 100では、次のことがわかります。

<source src="http://media.tagesschau.de/video/2014/0626/TV-20140626-1649-5801.webl.h264.mp4" type="video/mp4">

MPEG DASHやAppleのHTTPライブストリーミング(HLS)などのより高度な再生技術の場合、メタ情報ファイルを解析して実際のビデオストリームを取得する必要があります。メタファイル(.mpdたとえば、DASHや.m3u8HLSの場合)には、ビデオとオーディオのセグメントへのリンクが含まれます。これらは後で再生可能なファイルを取得するために結合する必要があります。

これに対する一般的な解決策はありません。ターゲットサイトの注意深い検査とデバッグが必要です。


3
1つの質問、これに関するYoutube / Googleのポリシーは何ですか?彼らはこれで大丈夫ですか?
JMK 14年

31
§5.1.L のYouTube 利用規約では、ストリーミング以外の手段によるコンテンツの使用は許可されていないため、理論的には許可されていません。実際には、彼らはそれを強制することはできません。ダウンローダーは、ストリーミングであるということを多少なりともシミュレートできます。
slhck 14年

2
@StevenPenny縮小版以外のバージョンはありますか?
TankorSmash 14年

5
@slhck Flashは、それ自体でHTTP要求を行うこともできます。代わりに、ブラウザのHTTPエンジンを使用します。Flash自体がリクエストを行った場合、それらはブラウザに「表示」されません。確かに広告主にとっては素晴らしいことです。;)
ダニエルB 14年

3
@slhckはプログラムでそれを強制することはできませんが、弁護士チームを解任した場合、法的に強制することはできますか?
ランチャー14年

35

YouTubeブックマークレット

これは私がJavaScriptでそれをやった方法です

ytplayer.config.argsオブジェクトから始めます。これには、ビデオのすべてのURLが含まれます。に分かれています

url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts              // DASH: contains video or audio stream

これらはそれぞれ、「ストリームオブジェクト」と呼ばれるコンマ区切りの配列です。各「ストリームオブジェクト」には、次のような値が含まれます。

url  // direct HTTP link to a video
itag // code specifying the quality
s    // signature, security measure to counter downloading

各URL はエンコードされるため、デコードする必要があります。今トリッキーな部分。

YouTubeには、動画に少なくとも3つのセキュリティレベルがあります

unsecured // as expected, you can download these with just the unencoded URL
s         // see below
RTMPE     // uses "rtmpe://" protocol, no known method for these

RTMPEビデオは通常、公式のフルレングスの映画で使用され、SWF検証タイプ2で保護されています。これは 2011年以来で あり、リバースエンジニアリングはまだ行われていません。

タイプ「s」のビデオは、実際にダウンロードできる最も難しいものです。通常、これらはVEVOビデオなどで表示されます。彼らは次のような署名で始まります

AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5

次に、このような関数で署名がスクランブルされます

function mo(a) {
  a = a.split("");
  a = lo.rw(a, 1);
  a = lo.rw(a, 32);
  a = lo.IC(a, 1);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 44);
  return a.join("")
}

この関数は動的であり、通常は毎日変更されます。より難しくするために、関数は次のようなURLでホストされます。

http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js

これにより、Same-originポリシーの問題が発生し ます。基本的に、www.youtube.comこれらは異なるドメインであるため、このファイルをダウンロードできません。この問題の回避策は CORSです。CORSでは、 s.ytimg.comこのヘッダーを追加できます

Access-Control-Allow-Origin: http://www.youtube.com

JavaScriptがからダウンロードできるようにしますwww.youtube.com。もちろん、彼らはこれをしません。この回避策の回避策は、CORSプロキシを使用することです。これは、すべてのリクエストに次のヘッダーで応答するプロキシです

Access-Control-Allow-Origin: *

したがって、JSファイルをプロキシし、関数を使用して署名をスクランブルしたので、クエリ文字列でそれを使用してビデオをダウンロードできます。


1
YouTubeプレーヤーがメディア表現から要求されるバイト範囲をどのように決定するか(DASH再生の場合)を知っていますか?MPDファイルにはセグメントのみがリストされます。
slhck

2
正確ではありません。ビデオとオーディオ用の単一ファイルがありますが、YouTubeはバイト範囲でいくつかのチャンクでそれらを要求します。別の品質に切り替えると、バイト範囲も変更されます。プレイヤーがどの秒がどのバイトオフセットに対応するかをどのように知っているのか疑問に思うだけです。
slhck

1
sタイプビデオとRTMPEタイプビデオの例を挙げることができますか?
クロエ

ここ@SurajJainは新しいページです-私は今、さまざまな方法で使用して、私はこの答えを書き換えることになるgithub.com/svnpenn/umber/blob/master/bmklet/youtube/download.js
スティーヴン・ペニー

リンクから404が表示されます。レポを削除しましたか?
darksoulsong

1

私の答え:2019年1月22日から、ユーザー情報もリンクせずにバイパスしようとすると、これらのメソッドを使用するとキャッチされる可能性があります。

どうして?私はこのプラットフォームの新規ユーザーなので、@ Daniel-Bで指定されたルールにコメントすることはできません。YouTubeの新しいToS(私はドイツにいるのでドイツ語。翻訳してください)によると、$ 6.1 G $ 未満の場合:

自動化システム(ロボット、スパイダー、オフラインリーダーを含むがこれらに限定されない)を使用して、YouTubeが合理的に同じ期間内に公開されており、変更されていない標準のWebブラウザを使用している人間。

これで、各リクエストの期間を確認し、違反しているかどうかを追跡できます。VPNを使用してユーザーの詳細をサービスにリンクせずに自分自身を保護する場合でも、このシナリオと外部IPアドレスがわかれば、どのように可能になりますか。


1
未来から歓迎旅行者...これが著者の質問に答えるかは明らかではない
Ramhound

特定の回答に関して著者に警告したい場合は、コメントを投稿し、後に続く可能性のある法的な問題のために役に立たないと思われる回答はすべて却下する必要があります。この回答は、ディスカッションフォーラムの投稿にあるものに似ています。スーパーユーザーは、ディスカッションフォーラムではありません
Ramhound
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.