Chrome拡張機能を使ってダウンロードする方法を書きました!

2018/09/10 仕様変更に対応しました。不具合等ありましたらコメントください。
今回は以前、こちらで紹介したAvgleのm3u8ファイルから動画をダウンロードするスクリプトのWindows版を作りました!
前の記事では、m3u8からtsのURLを読み込みcurlでダウンロードするスクリプト(Python)を書きました。今回はそのWindows版を作りましたので必要なPython環境の導入方法なども一緒に紹介します。
iPhoneでAvgleの動画をダウンロードする方法も書きました。
2018/10/06) AndroidでのAvgleダウンロード方法も書きました。
2018/09/07) 本スクリプトに基づいたGUIアプリ(Mac/Win対応)をリリースしました!

※注意 著作権は遵守すること!また、本記事を参考とする際は自己責任でお願いします。
はじめに
必要なものは下記のとおりです。
- Chrome
- 動画ゲッター(Link)
curl- Python
大まかな手順は下記のとおりです。動作環境構築が必要ない場合は「スクリプトを使用して動画をダウンロード」まで飛んでください。
- Python環境を整える
curlの導入※curlは必要なくなりました。- スクリプトの作成
- スクリプトを実行して動画を保存
Python環境を整える
Pythonインストーラをダウンロード
まず下記サイトにアクセスして「Downloads」→「Download for Windows」からPythonをダウンロードしてください。
The official home of the Python Programming Language
Pythonをインストール
ダウンロードが完了したらPythonインストーラを実行してください。 まず、画面下の「Add Python 3.6 to PATH」にチェックをしてから「Install Now」を押してください。
完了したら下図のようになりますので「Close」を押してインストーラを閉じてください。
動作確認
Pythonが使えるかどうか確認します。まず「コマンドプロンプト」を開いてください。
次に下記のコマンドを入力してください。インストールが正常に成功していると下図のようにPythonのバージョンが表示されます。
python --version
curlの導入
curlは必要なくなりましたので「スクリプトを使用して動画をダウンロード」まで飛んでください。
curlのダウンロード
curlを配置してpathを通す
動作確認
スクリプトを使用して動画をダウンロード
m3u8をダウンロード
まず、動画のm3u8ファイルをダウンロードします。m3u8ファイルをダウンロードするにはChromeの拡張機能である「動画ゲッター(Link)」を用いるのが簡単です。
実際に動画ページで動画ゲッターのボタンを押すと下図のようにm3u8をダウンロードできます。
※ m3u8が古いと403が出ますので注意してください。
スクリプトの作成
下記のスクリプトをコピーしてメモ帳などに貼り付け、.py形式のスクリプトファイルを適当なディレクトリ(例えばデスクトップ)に作成してください。この時、文字コードは「UTF-8」にしてください!Shift-JISでは動かない可能性があります。下図はメモ帳での例です。
2018/08/31 追記)簡単のためm3u8.pyを用意しました→ダウンロードはこちら。
import argparse import os import re import urllib.request import subprocess # cmd arg parser = argparse.ArgumentParser() parser.add_argument("path", help="m3u8 file path", type=str, default=None) parser.add_argument("-o", help="Output dir", type=str, default="~/Downloads") args = parser.parse_args() # make save dir file_name = args.path.split('\\')[-1].replace('.m3u8', '') dir = os.path.expanduser(args.o + "\\" + file_name) if not os.path.exists(dir): os.makedirs(dir) # load m3u8 opener = urllib.request.build_opener() with open(args.path) as f: os.chdir(dir) i = 0 authority = "" for line in f: if 'https://' in line: line = line.rstrip() print("Downloading of " + line) if authority == "": res = re.search('https:\/\/(.*?)\/', line) authority = res.group(1) opener.addheaders = { ("Origin", "https://avgle.com"), ("Accept-Encoding", "gzip, deflate, br"), ("Accept-Language", "ja,en-US;q=0.9,en;q=0.8"), ("Accept", "*/*"), ("Referer", "https://avgle.com/video/"), ("Connection", "keep-alive") } urllib.request.install_opener(opener) urllib.request.urlretrieve(line, "{:0>10}_out.ts".format(str(i))) i += 1 # merge ts files subprocess.call('copy /b *_out.ts "{}.ts"'.format(file_name), shell=True) subprocess.call('del *_out.ts', shell=True)
スクリプトを実行して動画をダウンロード
コマンドプロンプトを開き上記スクリプトを実行します。(デスクトップにスクリプトを保存した場合「cd Desktop」と入力してデスクトップをカレントディレクトリにすると良いと思います。)
下記のようにコマンド実行すればダウンロードが開始されます。デフォルトでは保存先は「ホームフォルダ/Downloads」です。
python m3u8.py m3u8へのパス
保存先を変える場合は次のように指定してください。保存先へのパスは絶対パス(C:\Users\ユーザー名\Videosといったような感じ)での入力をおすすめします。
python m3u8.py m3u8へのパス -o 保存先のパス
おわりに
今回はWindowsでPythonスクリプトを利用してAvgle動画をダウンロードする方法を紹介しました。
冗長な処理や稚拙なコードが存在しますので、適宜改変してご使用いただければと思います。
最後のcopyコマンドを使って結合するところは、ffmpegなどを使って結合させたほうが安定してるかもしれないです。
コメント
> Windowsのcopyコマンドでは連番のファイル名が正しく処理されないと思います。
> 0,1,10,11,2,20,21,22,23,3のように処理されていきます。
すみません、たしかにその通りでした。
出力ファイルの名前の付け方を変えてみました。
ご指摘ありがとうございました。
>次に「python –versions」と入力してください。インストールが正常に成功していると下図のようにPythonのバージョンが表示されます。
コマンドは「python –versions」ではなく「python –version」では?
> >次に「python –versions」と入力してください。インストールが正常に成功していると下図のようにPythonのバージョンが表示されます。
>
> コマンドは「python –versions」ではなく「python –version」では?
仰る通りですね。
ご指摘ありがとうございます!
Python 3.6.5
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
「 the installed libcurl version doesn’t support this」となってしまいます。
> Python 3.6.5
> curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
>
> 「 the installed libcurl version doesn’t support this」となってしまいます。
すみません、詳しい原因はわかりませんが、おそらく、curlのバージョンが古いからかもしれないです。
私が試したバージョンはcurl v7.60.0ですので、それを試してみてはいかがでしょうか。
あと、スクリプトの38行目にある「–compressed」がlibcurl/7.55.1では対応していない可能性もあります。
これを消してみるのも手かもしれません。
最後のコマンドのところがよくわかりません。pyスクリプトファイル(m3u9.py)とm3u8ファイル(Avgle.m3u8)がデスクトップにある場合、コマンドは
C:\Users\(ユーザー名)>python./C:\Users\(ユーザー名)\Desktop\m3u8.py"C:\Users\(ユーザー名)\Desktop\Avgle.m3u8"
で宜しいのでしょうか?これを打つとエラーコード22が出て実行できません。素人なので宜しければご教授お願いします。
> 最後のコマンドのところがよくわかりません。pyスクリプトファイル(m3u9.py)とm3u8ファイル(Avgle.m3u8)がデスクトップにある場合、コマンドは
>
> C:\Users\(ユーザー名)>python./C:\Users\(ユーザー名)\Desktop\m3u8.py"C:\Users\(ユーザー名)\Desktop\Avgle.m3u8"
>
> で宜しいのでしょうか?これを打つとエラーコード22が出て実行できません。素人なので宜しければご教授お願いします。
おそらく次のようにすれば動くと思われます。スペースの追加と不要な「./」を削除してみました。
C:\Users\(ユーザー名)>python C:\Users\(ユーザー名)\Desktop\m3u8.py "C:\Users\(ユーザー名)\Desktop\Avgle.m3u8"
「C:\Users\(ユーザー名)>cd Desktop」のようにcdコマンドを使えば、デスクトップで実行可能になり、次のように実行できると思います。
C:\Users\(ユーザー名)\Desktop>python m3u8.py Avgle.m3u8
ご参考になりましたら幸いです。
ご教示の通り実行したところ成功しました!ありがとうございます!
PHEXCEL様
お世話になります。
最後のコマンドを実行したところ、下記エラーが発生してしまいました。
お時間のある時に、対応方法をご教授いただけないでしょうか。
SyntaxError: Non-UTF-8 code starting with ‘\x83’ in file m3u8.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
curl –versionと入力するとバージョンが表示されるのですが、pythonのコマンドを実行すると"curl"は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。となってしまいます
何故でしょうか…
> PHEXCEL様
>
> お世話になります。
> 最後のコマンドを実行したところ、下記エラーが発生してしまいました。
> お時間のある時に、対応方法をご教授いただけないでしょうか。
>
> SyntaxError: Non-UTF-8 code starting with ‘\x83’ in file m3u8.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
スクリプトファイルの文字コードが「UTF-8」以外になっていると思います。m3u8.pyファイルを作るときに文字コードを「UTF-8」を選択すると動くようになると思います。メモ帳では保存ダイアログボックス内の「文字コード:」の欄で設定できます。
なお、スクリプトの「# 〜」で書かれてるコメント部分は不要ですので、もし動かないようなら消してみてください。
> curl –versionと入力するとバージョンが表示されるのですが、pythonのコマンドを実行すると"curl"は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。となってしまいます
> 何故でしょうか…
おそらく、Windows標準のcurlを使っているのではないでしょうか。
最新のWin10には標準のcurlが入ったのですが、そのcurlですとスクリプトからの実行ができないみたいです(確認中)。
ダウンロードしたcurlのパスがしっかり通っているか確認してみてください。
「where curl」でcurlのパスを確認できます。「C:\Windows\System32\curl.exe」だとしたら[太字]ユーザー環境変数[/太字]にしっかりパスが書いてない可能性が高いです。
他の可能性としてはcurlのバージョンが古いことが挙げられますかね。v7.60.0が最新だと思います。
PHEXCEL様
うまく動きました。
ありがとうございました。
python m3u8.py m3u8へのパス
を実行すると、以下のようなエラーが出ます。
指定されたファイルが見つかりません。
0 個のファイルをコピーしました。
C:\Users\(ユーザー名)\Downloads\Avgle\*_out.ts が見つかりませんでした。
どう対応したらよいか教えてもらえませんか?
> python m3u8.py m3u8へのパス
> を実行すると、以下のようなエラーが出ます。
>
> 指定されたファイルが見つかりません。
> 0 個のファイルをコピーしました。
> C:\Users\(ユーザー名)\Downloads\Avgle\*_out.ts が見つかりませんでした。
>
> どう対応したらよいか教えてもらえませんか?
ダウンロードフォルダに動画保存用のフォルダが正しく作成されてますでしょうか?
エラーメッセージから察するに43行目のcopyコマンドがうまくうごいていない可能性が高いです。
おそらくスクリプトがフォルダをうまく参照できていないかもしれません。(動画タイトルに環境依存文字が入っているなど?)
試しにm3u8ファイルの名前を変更してみてください。
あと、44行目のdelコマンドの行を削除すれば分割された動画が残るようになると思います。それらをcopy /bコマンドやffmpegでtsファイルを結合するのもひとつの手かもしれません。
こんにちは。ド素人ですが最後の所まで行ったところで躓いています。
コメント欄に記載されている、
C:\Users\(ユーザー名)>python C:\Users\(ユーザー名)\Desktop\m3u8.py "C:\Users\(ユーザー名)\Desktop\Avgle.m3u8"
を入力したところ、C:\Users\(ユーザー名)は内部コマンドまたは外部コマンド、操作可能なプログラム、バッチファイルとして認識されてません。といった例のメッセージが表示されます。
Pythonのバージョン表示(3.6.5)、curlのバージョン表示(7.60)は出来ております。
自分の入力したコマンドがどこか間違っているのでしょうか。。
宜しくお願いします。
> こんにちは。ド素人ですが最後の所まで行ったところで躓いています。
>
> コメント欄に記載されている、
> C:\Users\(ユーザー名)>python C:\Users\(ユーザー名)\Desktop\m3u8.py "C:\Users\(ユーザー名)\Desktop\Avgle.m3u8"
> を入力したところ、C:\Users\(ユーザー名)は内部コマンドまたは外部コマンド、操作可能なプログラム、バッチファイルとして認識されてません。といった例のメッセージが表示されます。
>
> Pythonのバージョン表示(3.6.5)、curlのバージョン表示(7.60)は出来ております。
> 自分の入力したコマンドがどこか間違っているのでしょうか。。
> 宜しくお願いします。
C:\Users\(ユーザー名)で切れているようなので、ユーザー名にスペースが入ってるような気がします。
スクリプトファイルへのパスをダブルクォーテーションで囲って
python "C:\Users\(ユーザー名)\Desktop\m3u8.py" "C:\Users\(ユーザー名)\Desktop\Avgle.m3u8"
というふうに実行してみてください。
2018/06/09 (Sat) 07:59に書き込みしたものです。
最後の行に書いていただいた対処法でうまくいきました。
ありがとうございました。
Avgleというサイトを見つけて、動画をダウンロードすることができないのかなと思い検索していてここに辿り着きました。やり方は自分には難しくてよくわかりませんでしたが、きっとこの方法ならダウンロードできるのですね。検索しても、他にダウンロード方法を開発してくれている日本人はいませんでした。あなたのような人がいるおかげで、僕らは助かってます。僕らの神です。貴方がいなくなったらきっとこのサイトのダウンロードはできなくなってしまうので、これからも頑張ってください。
もし、いつか、ダウンローダーのようなソフトとか、ブラウザの拡張機能で気軽にダウンロードできるようになったら、もっと嬉しいです。贅沢なお願いで恐縮ですが。。。
こんにちは
最後のところのcd Desktopを打った後にpython m3u8.py Avgle.m3u8
を打つと
‘python’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とでます
どこが間違ってるのか教えてもらえないでしょうか
> こんにちは
> 最後のところのcd Desktopを打った後にpython m3u8.py Avgle.m3u8
> を打つと
> ‘python’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
> とでます
> どこが間違ってるのか教えてもらえないでしょうか
pythonのパスが通っていないと思われます。
通常は記事の「Python環境をインストール」のところで「Add Python 3.6 to PATH」にチェックをいれずに
インストールしてしまった可能性があります。「Add Python 3.6 to PATH」にチェックをいれてpythonを再インストールすれば解決出来ると思います。
なお、自分でパスを追加する場合はユーザー環境変数に次の2つを追加すれば大丈夫だと思います。
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python36-32\
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python36-32\Scripts
windows 10でcurlの場所をユーザー環境変数に追加しているのですが、上手く動きません。
上記のwhere curlを実行すると、デフォルトで入っているcurlが参照され、自分で追加したcurlから読み取ってくれません。
申し訳ありませんが、ご教授いただけませんか?
> windows 10でcurlの場所をユーザー環境変数に追加しているのですが、上手く動きません。
> 上記のwhere curlを実行すると、デフォルトで入っているcurlが参照され、自分で追加したcurlから読み取ってくれません。
>
> 申し訳ありませんが、ご教授いただけませんか?
コマンドプロンプト(またはPowerShell)を再起動してもだめでしょうか?
だめなようなら、パスの指定ミスが原因かもしれません。
Windowsではユーザー環境変数にパスが記述されている場合はそちらのものが優先的に使用されるようになっている
ようになっているので、パスが正しくしていなかったり、システム環境変数にパスを指定してしまった可能性があります。もう一度お確かめください。
手っ取り早い解決手段としてはスクリプトの30行目の「subprocess.call(‘curl "{}"・・・」のcurlを絶対パスで指定することです。
例えば、curl.exeがC\:binにあるなら「subprocess.call(‘c\:bin\curl.exe "{}"」とすれば正しくcurlが参照されるはずです。
お返事ありがとうございます。
curlを絶対パスで指定したところ、実行させることはできました。
しかし、"ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。"と出てダウンロードができません。
m3u8ファイル名、保存先には、環境依存文字等は入っておりません。
申し訳ありませんが、もう一度お願いできませんか?
> お返事ありがとうございます。
> curlを絶対パスで指定したところ、実行させることはできました。
>
> しかし、"ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。"と出てダウンロードができません。
> m3u8ファイル名、保存先には、環境依存文字等は入っておりません。
>
> 申し訳ありませんが、もう一度お願いできませんか?
申し訳ありません。
前の回答で「subprocess.call(‘c\:bin\curl.exe "{}"」と書いてしまいましたが、これは間違いでした。
正しくは[太字]「subprocess.call(‘c:\\bin\\curl.exe "{}"」[/太字]です。
文字列中のバックスラッシュはエスケープをしなければならないことを忘れておりました。
申し訳ありませんが、[太字]「subprocess.call(‘c\\:bin\\curl.exe "{}"」[/太字]で再実行してみてください。
いつも記事を拝見させて頂いております。
本記事の方法を試したのですが、
30kb程度のtsファイルしかダウンロードできませんでした。
手順等に間違いはないと思うのですが、何か考えられる可能性はありませんでしょうか?
curlはpathを通してもデフォルトの物を見てしまったため、絶対参照で見ています。
お手数をお掛けいたしますが、よろしくお願いいたします。
> いつも記事を拝見させて頂いております。
> 本記事の方法を試したのですが、
> 30kb程度のtsファイルしかダウンロードできませんでした。
> 手順等に間違いはないと思うのですが、何か考えられる可能性はありませんでしょうか?
> curlはpathを通してもデフォルトの物を見てしまったため、絶対参照で見ています。
> お手数をお掛けいたしますが、よろしくお願いいたします。
おそらく、403(Forbidden)エラーが発生しているため正しいtsが落とせていないのだと思います。
403が出る理由はいくつかありますが、まずm3u8ファイルが古くなっていることが挙げられます。
avgleからダウンロードしたm3u8は時間が経つとすぐにダメになる印象です。
もう一度、m3u8をダウンロードし直して試してみてください。
2018/06/27に質問した者です。
無事ダウンロードできました。
勉強になります。。。
ありがとうございました。
curlのことについて質問したものです。
正しく動作いたしました。
面倒な質問に答えていただきありがとうございました。
Windows7でもできますでしょうか?
Windows7で環境変数の設定を開き、PATHを追加しようとしているのですが、win10のように変数PATHに対して複数のディレクトリを追加する項目がでません。PATHの編集をするとpythonへのpathが消えてしまうようです。何か解決策があればご教授いただけませんでしょうか?
cmdでwhere curlと打ったところ、system32にあるcurlと新たにダウンロードしたcurlの2つが出てきました。
最後のm3u8.py Avgle.m3u8を実行しても、ダウンロードできません。
pathは通ってると思います。
ご教授願います。
すみません、where curlの問題は解決しました!
ダウンロードはできているのですが、速度が300バイト程度しかありません…
本文の写真ではkbの速度が出ているのですが、これを改善する方法はなにかありますでしょうか。
よろしくお願いいたします。