僕の世界観を変えてみる

文系男子が趣味でプログラミングを勉強していくブログです。他にも日常で起きたどうでもいいことや愚痴を書いていきたいです。座右の銘は和を以て貴しとなすです。仲良くやろうよ。

【YouTube】YouTubeの動画をダウンロードする方法その1

f:id:htmllifehack:20190121141459j:plain

こんにちは。

Youtubeの動画をダウンロードする方法第2弾です。

今回もpytubeは使わないでダウンロードしていきたいと思います。

pytubeに関してはこちらの記事をご覧くださいませ。

www.htmllifehack.xyz

流れとしては音声のみのデータと動画のみのデータの2種類をダウンロードし、最後にffmpegで結合し1つの動画にします。

よろしくお願いします。

※はじめに言っておきますがこれから紹介する方法は全て自己責任でお願いいたします。損害が発生しても当サイトでは一切責任を負いません。

デベロッパツールで動画のリンクを探す

前回の記事と同様、動画データもデベロッパツールを使ってURLを探します。

ダウンロードしたい動画のページでF12を押してデベロッパツールを起動。

次にツールの画面のタブをNetworkに変え、F5かctrl+Rでページを更新します。

f:id:htmllifehack:20190118092437p:plain
デベロッパーツール

このままだといろんな情報が表示されて見づらいのでフィルターをかけてXHRだけ表示するように変更します。

XHRとはなにか

XHRとはJavaScriptからHTTP通信を行う仕組みのこと。

僕らがサイトを見るときはサーバにリクエストを送っていて、サーバからレスポンスが返ってくるとサイトが表示される仕組みになっている。

それをJavaScriptで行えるのがXHR

そうするとvideoplayback~という文字列がずらっと表示されるのでちょっと見てみます。

おそらくですがこの文字列の中にあるrange=の部分が分割された動画データを表しているんじゃないかと。

確かめるために適当に上のほうの文字列をクリックします。

f:id:htmllifehack:20190118122602p:plain
デベロッパーツール

画面右側にURLが表示されるはずです。

表示されなければすこし上にあるタブがHeadersになっているか確認してください。

さらにこのURLを見てみるとitag=という文字が含まれていることがわかります。

itagとは?

おそらくitagとは動画の画質や音声データを管理するタグです。

pytubeのstreams.all()メソッドでitagの一覧を表示できます。

f:id:htmllifehack:20190116124253p:plain
itag

ピンクの枠のところがitagで、22がmp4 720pの動画データ、140がmp4 128kbpsの音声データと言うように分けられています。

またpyutubeが保存されているGithubでも一覧は見られます。

▼pytubeのリンクpytube/itags.py at master · nficano/pytube · GitHub

僕の場合は1080pで表示しているのでitag=137になっています。

itagの数字は画質によって異なるので随時変換して読んでください。

ではまずitag=135の文字が含まれているURLをコピーしてページに飛んでみてください。

この状態だと動画は再生できないのでURLを変更します。

先に述べたようにrange=という文字があるのでそこを適当に変更します。

例えばrange=0-99999999とかにしてエンターを押してみてください。

するとどうでしょう、動画が流れるではありませんか。

ただし音はないですけどね。

あとは・・・をクリックしてダウンロードするだけです。

f:id:htmllifehack:20190118140052p:plain

音声データも同様にしてダウンロードしてください。

やり方は前回の記事を参照してください。

【お手軽?】YouTubeから音楽をダウンロードしてみる【自己責任】 - 僕の世界観を変えてみる

ffmpegで結合する

もはやここまできたらffmpegである必要はなく、動画編集ソフトで合わせちゃえばいいだけですね。

ffmpegは無料ですしコマンド操作なので動作も軽くて早いので今回はffmpegを使用します。

> ffmpeg -i audio.webm -i video.webm -vcodec -copy -acodec copy nogizaka.mp4

ffmpegはiオプション(おそらくimportのi)でファイルを指定します。

これで2つのファイルをインポートできました。

次にコーデックの指定をします。

コーデックとは

動画や音声はアナログデータです。

それをパソコンでも理解できるようにエンコードしてデジタルデータに変換します。

人間にわかるようにするためにはデジタルデータをアナログデータに変換するためにデコードを行います。

このエンコードデコードする仕組みをコーデックと言います。

MPEG-4やH.264でエンコードするとmp4になり、Xdivでエンコードするとaviになります。

デコードする際はエンコードする際に用いたコーデックを使用する必要があります。

vcodecとはおそらくvideoのコーデック、acodecはaudioのコーデックです。

これは両方とも元のデータのコーデックを使用するのでcopyを使います。

最後に完成したファイル名を入れて拡張子を指定すれば終了です。

まとめ

ここまで書いといて何ですけど需要ありますかね?

YouTubeの動画ダウンロードするサイトもありますしそっちのが手軽だなんて百も承知なんです。

あ、でもサイトでも動画によってはダウンロードできなかったりもするので必要か。

最後に一応言っておきますけどダウンロードを助長するために書いたものではなりません。

動画を再生するために必要な通信や技術を確認するためにおこなった行為です。

自己責任でやってくださいね。