IT系の話題を幅広く取り扱います。iPhone、Mac、アプリ開発、ダウンロード方法など。
新着記事

[2018/09版]PythonでAvgleの動画をダウンロードする(Windows)

Windows

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

Chrome拡張機能である「ストリームレコーダー」を使ってAvgleの動画を簡単にダウンロードする方法を紹介します。 「ストリームレコーダー...

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対応)をリリースしました!

随分おまたせをいたしましたが、この度「Abuguru Downloader」を公開いたします。 Abuguru DownloaderはAv...

※注意 著作権は遵守すること!また、本記事を参考とする際は自己責任でお願いします。

スポンサーリンク

はじめに

必要なものは下記のとおりです。

  • Chrome
  • 動画ゲッター(Link
  • curl
  • Python

大まかな手順は下記のとおりです。動作環境構築が必要ない場合は「スクリプトを使用して動画をダウンロード」まで飛んでください。

  1. Python環境を整える
  2. curlの導入※curlは必要なくなりました。
  3. スクリプトの作成
  4. スクリプトを実行して動画を保存

Python環境を整える

Pythonインストーラをダウンロード

まず下記サイトにアクセスして「Downloads」→「Download for Windows」からPythonをダウンロードしてください。

Welcome to Python.org

The official home of the Python Programming Language

2018-05-2121-53.jpg

Pythonをインストール

ダウンロードが完了したらPythonインストーラを実行してください。 まず、画面下の「Add Python 3.6 to PATH」にチェックをしてから「Install Now」を押してください。
2018-05-2121-56.jpg

Pythonのインストールが始まります。
2018-05-2121-57.jpg

完了したら下図のようになりますので「Close」を押してインストーラを閉じてください。
2018-05-2121-59.jpg

動作確認

Pythonが使えるかどうか確認します。まず「コマンドプロンプト」を開いてください。
スクリーンショット 2018-05-21 180141

次に下記のコマンドを入力してください。インストールが正常に成功していると下図のようにPythonのバージョンが表示されます。

python --version

2018-05-2122-06.jpg

curlの導入

curlは必要なくなりましたので「スクリプトを使用して動画をダウンロード」まで飛んでください。

curlのダウンロード

次にcurlを導入します。まず、下記サイトにアクセスしてcurlをダウンロードします。32bit版と64bit版があります。64bitの方は「Win64 x86_64 zip」を、32bitの方は「Win32 zip」を選択すれば問題ないです。

2018-05-2122-28.jpg  

ダウンロードが完了したらzipファイルを展開してください。展開すると「curl-7.60.0-win64-mingw\bin」に「curl.exe」などが入ってると思います(バージョンによって異なります)。
2018-05-2122-47.jpg

curlを配置してpathを通す

curlを後述のスクリプトと同ディレクトリに配置すればスクリプトは動きますが、ここではパスを通して使う方法を紹介します。
上記の「curl.exe」を適当なディレクトリに配置してください。例えば「C:\bin\curl.exe」。
2018-05-2122-53.jpg
 「環境変数」画面を開いてください。Win10の場合スタートバーの検索バーに「環境変数を編集」と入力すれば出てくると思います。
2018-05-2123-03.jpg
開いたらユーザー環境変数の「Path」を選択して「編集」を押してください。
2018-05-2123-02.jpg
開いたら「新規」を押してcurl.exeのあるディレクトリを加えて「OK」を押します。
2018-05-2123-01.jpg

動作確認

コマンドプロンプトを開いて「curl –version」と入力してください。curlのバージョンが表示されたら大丈夫です。
以上でスクリプトを実行する準備が完了しました。

スクリプトを使用して動画をダウンロード

m3u8をダウンロード

まず、動画のm3u8ファイルをダウンロードします。m3u8ファイルをダウンロードするにはChromeの拡張機能である「動画ゲッター(Link)」を用いるのが簡単です。

実際に動画ページで動画ゲッターのボタンを押すと下図のようにm3u8をダウンロードできます。
m3u8.png

※ m3u8が古いと403が出ますので注意してください。

スクリプトの作成

スポンサーリンク

下記のスクリプトをコピーしてメモ帳などに貼り付け、.py形式のスクリプトファイルを適当なディレクトリ(例えばデスクトップ)に作成してください。この時、文字コードは「UTF-8」にしてください!Shift-JISでは動かない可能性があります。下図はメモ帳での例です。

スクリーンショット 2018-05-22 0_38_59

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へのパス

スクリーンショット_2018-05-28_1_23_10

保存先を変える場合は次のように指定してください。保存先へのパスは絶対パス(C:\Users\ユーザー名\Videosといったような感じ)での入力をおすすめします。

python m3u8.py m3u8へのパス -o 保存先のパス

おわりに

今回はWindowsでPythonスクリプトを利用してAvgle動画をダウンロードする方法を紹介しました。

冗長な処理や稚拙なコードが存在しますので、適宜改変してご使用いただければと思います。

最後のcopyコマンドを使って結合するところは、ffmpegなどを使って結合させたほうが安定してるかもしれないです。

コメント

  1. PHEXCEL says:

    > Windowsのcopyコマンドでは連番のファイル名が正しく処理されないと思います。
    > 0,1,10,11,2,20,21,22,23,3のように処理されていきます。
    すみません、たしかにその通りでした。
    出力ファイルの名前の付け方を変えてみました。
    ご指摘ありがとうございました。

  2.   says:

    >次に「python –versions」と入力してください。インストールが正常に成功していると下図のようにPythonのバージョンが表示されます。
    コマンドは「python –versions」ではなく「python –version」では?

  3. PHEXCEL says:

    > >次に「python –versions」と入力してください。インストールが正常に成功していると下図のようにPythonのバージョンが表示されます。
    >
    > コマンドは「python –versions」ではなく「python –version」では?
    仰る通りですね。
    ご指摘ありがとうございます!

  4.   says:

    Python 3.6.5
    curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
    「 the installed libcurl version doesn’t support this」となってしまいます。

  5. PHEXCEL says:

    > 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では対応していない可能性もあります。
    これを消してみるのも手かもしれません。

  6. 匿名 says:

    最後のコマンドのところがよくわかりません。pyスクリプトファイル(m3u9.py)とm3u8ファイル(Avgle.m3u8)がデスクトップにある場合、コマンドは
    C:\Users\(ユーザー名)>python./C:\Users\(ユーザー名)\Desktop\m3u8.py"C:\Users\(ユーザー名)\Desktop\Avgle.m3u8"
    で宜しいのでしょうか?これを打つとエラーコード22が出て実行できません。素人なので宜しければご教授お願いします。

  7. PHEXCEL says:

    > 最後のコマンドのところがよくわかりません。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
    ご参考になりましたら幸いです。

  8. 匿名 says:

    ご教示の通り実行したところ成功しました!ありがとうございます!

  9. 匿名 says:

    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

  10. 匿名 says:

    curl –versionと入力するとバージョンが表示されるのですが、pythonのコマンドを実行すると"curl"は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。となってしまいます
    何故でしょうか…

  11. PHEXCEL says:

    > 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」を選択すると動くようになると思います。メモ帳では保存ダイアログボックス内の「文字コード:」の欄で設定できます。
    なお、スクリプトの「# 〜」で書かれてるコメント部分は不要ですので、もし動かないようなら消してみてください。

  12. PHEXCEL says:

    > curl –versionと入力するとバージョンが表示されるのですが、pythonのコマンドを実行すると"curl"は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。となってしまいます
    > 何故でしょうか…
    おそらく、Windows標準のcurlを使っているのではないでしょうか。
    最新のWin10には標準のcurlが入ったのですが、そのcurlですとスクリプトからの実行ができないみたいです(確認中)。
    ダウンロードしたcurlのパスがしっかり通っているか確認してみてください。
    「where curl」でcurlのパスを確認できます。「C:\Windows\System32\curl.exe」だとしたら[太字]ユーザー環境変数[/太字]にしっかりパスが書いてない可能性が高いです。
    他の可能性としてはcurlのバージョンが古いことが挙げられますかね。v7.60.0が最新だと思います。

  13. 匿名 says:

    PHEXCEL様
    うまく動きました。
    ありがとうございました。

  14. 匿名 says:

    python m3u8.py m3u8へのパス
    を実行すると、以下のようなエラーが出ます。
    指定されたファイルが見つかりません。
    0 個のファイルをコピーしました。
    C:\Users\(ユーザー名)\Downloads\Avgle\*_out.ts が見つかりませんでした。
    どう対応したらよいか教えてもらえませんか?

  15. PHEXCEL says:

    > python m3u8.py m3u8へのパス
    > を実行すると、以下のようなエラーが出ます。
    >
    > 指定されたファイルが見つかりません。
    > 0 個のファイルをコピーしました。
    > C:\Users\(ユーザー名)\Downloads\Avgle\*_out.ts が見つかりませんでした。
    >
    > どう対応したらよいか教えてもらえませんか?
    ダウンロードフォルダに動画保存用のフォルダが正しく作成されてますでしょうか?
    エラーメッセージから察するに43行目のcopyコマンドがうまくうごいていない可能性が高いです。
    おそらくスクリプトがフォルダをうまく参照できていないかもしれません。(動画タイトルに環境依存文字が入っているなど?)
    試しにm3u8ファイルの名前を変更してみてください。
    あと、44行目のdelコマンドの行を削除すれば分割された動画が残るようになると思います。それらをcopy /bコマンドやffmpegでtsファイルを結合するのもひとつの手かもしれません。

  16. 匿名 says:

    こんにちは。ド素人ですが最後の所まで行ったところで躓いています。
    コメント欄に記載されている、
    C:\Users\(ユーザー名)>python C:\Users\(ユーザー名)\Desktop\m3u8.py "C:\Users\(ユーザー名)\Desktop\Avgle.m3u8"
    を入力したところ、C:\Users\(ユーザー名)は内部コマンドまたは外部コマンド、操作可能なプログラム、バッチファイルとして認識されてません。といった例のメッセージが表示されます。
    Pythonのバージョン表示(3.6.5)、curlのバージョン表示(7.60)は出来ております。
    自分の入力したコマンドがどこか間違っているのでしょうか。。
    宜しくお願いします。

  17. PHEXCEL says:

    > こんにちは。ド素人ですが最後の所まで行ったところで躓いています。
    >
    > コメント欄に記載されている、
    > 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"
    というふうに実行してみてください。

  18. 匿名 says:

    2018/06/09 (Sat) 07:59に書き込みしたものです。
    最後の行に書いていただいた対処法でうまくいきました。
    ありがとうございました。

  19. 通りすがり says:

    Avgleというサイトを見つけて、動画をダウンロードすることができないのかなと思い検索していてここに辿り着きました。やり方は自分には難しくてよくわかりませんでしたが、きっとこの方法ならダウンロードできるのですね。検索しても、他にダウンロード方法を開発してくれている日本人はいませんでした。あなたのような人がいるおかげで、僕らは助かってます。僕らの神です。貴方がいなくなったらきっとこのサイトのダウンロードはできなくなってしまうので、これからも頑張ってください。
    もし、いつか、ダウンローダーのようなソフトとか、ブラウザの拡張機能で気軽にダウンロードできるようになったら、もっと嬉しいです。贅沢なお願いで恐縮ですが。。。

  20. 匿名 says:

    こんにちは
    最後のところのcd Desktopを打った後にpython m3u8.py Avgle.m3u8
    を打つと
    ‘python’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    とでます
    どこが間違ってるのか教えてもらえないでしょうか

  21. PHEXCEL says:

    > こんにちは
    > 最後のところの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

  22. 匿名 says:

    windows 10でcurlの場所をユーザー環境変数に追加しているのですが、上手く動きません。
    上記のwhere curlを実行すると、デフォルトで入っているcurlが参照され、自分で追加したcurlから読み取ってくれません。
    申し訳ありませんが、ご教授いただけませんか?

  23. PHEXCEL says:

    > 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が参照されるはずです。

  24. 匿名 says:

    お返事ありがとうございます。
    curlを絶対パスで指定したところ、実行させることはできました。
    しかし、"ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。"と出てダウンロードができません。
    m3u8ファイル名、保存先には、環境依存文字等は入っておりません。
    申し訳ありませんが、もう一度お願いできませんか?

  25. PHEXCEL says:

    > お返事ありがとうございます。
    > curlを絶対パスで指定したところ、実行させることはできました。
    >
    > しかし、"ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。"と出てダウンロードができません。
    > m3u8ファイル名、保存先には、環境依存文字等は入っておりません。
    >
    > 申し訳ありませんが、もう一度お願いできませんか?
    申し訳ありません。
    前の回答で「subprocess.call(‘c\:bin\curl.exe "{}"」と書いてしまいましたが、これは間違いでした。
    正しくは[太字]「subprocess.call(‘c:\\bin\\curl.exe "{}"」[/太字]です。
    文字列中のバックスラッシュはエスケープをしなければならないことを忘れておりました。
    申し訳ありませんが、[太字]「subprocess.call(‘c\\:bin\\curl.exe "{}"」[/太字]で再実行してみてください。

  26. 匿名 says:

    いつも記事を拝見させて頂いております。
    本記事の方法を試したのですが、
    30kb程度のtsファイルしかダウンロードできませんでした。
    手順等に間違いはないと思うのですが、何か考えられる可能性はありませんでしょうか?
    curlはpathを通してもデフォルトの物を見てしまったため、絶対参照で見ています。
    お手数をお掛けいたしますが、よろしくお願いいたします。

  27. PHEXCEL says:

    > いつも記事を拝見させて頂いております。
    > 本記事の方法を試したのですが、
    > 30kb程度のtsファイルしかダウンロードできませんでした。
    > 手順等に間違いはないと思うのですが、何か考えられる可能性はありませんでしょうか?
    > curlはpathを通してもデフォルトの物を見てしまったため、絶対参照で見ています。
    > お手数をお掛けいたしますが、よろしくお願いいたします。
    おそらく、403(Forbidden)エラーが発生しているため正しいtsが落とせていないのだと思います。
    403が出る理由はいくつかありますが、まずm3u8ファイルが古くなっていることが挙げられます。
    avgleからダウンロードしたm3u8は時間が経つとすぐにダメになる印象です。
    もう一度、m3u8をダウンロードし直して試してみてください。

  28. 匿名 says:

    2018/06/27に質問した者です。
    無事ダウンロードできました。
    勉強になります。。。
    ありがとうございました。

  29. 匿名 says:

    curlのことについて質問したものです。
    正しく動作いたしました。
    面倒な質問に答えていただきありがとうございました。

  30. 匿名 says:

    Windows7でもできますでしょうか?
    Windows7で環境変数の設定を開き、PATHを追加しようとしているのですが、win10のように変数PATHに対して複数のディレクトリを追加する項目がでません。PATHの編集をするとpythonへのpathが消えてしまうようです。何か解決策があればご教授いただけませんでしょうか?

  31. nanasi says:

    cmdでwhere curlと打ったところ、system32にあるcurlと新たにダウンロードしたcurlの2つが出てきました。
    最後のm3u8.py Avgle.m3u8を実行しても、ダウンロードできません。
    pathは通ってると思います。
    ご教授願います。

  32. nanasi says:

    すみません、where curlの問題は解決しました!
    ダウンロードはできているのですが、速度が300バイト程度しかありません…
    本文の写真ではkbの速度が出ているのですが、これを改善する方法はなにかありますでしょうか。
    よろしくお願いいたします。