【2018/10~】Avgleの動画をダウンロードする(Python)
概要
Pythonで、Avgleの動画をダウンロードできるスクリプトを書いてみる。
注意
Avgleには有償著作権物のアップロードもある。それらをダウンロードすることは違法であり、「2年以下の懲役もしくは200万円以下の罰金、またはこれの併科」になる。
目次
環境
ソフトウェア
ハードウェア
- 特になし
スポンサードリンク
コード
基本的に上からコピペしていけば動くようになるはず。
C:\sample\avgle_downloader.py
ファイルとします。
宣言部分
import argparse # 引数を使用するのに必要 import os import urllib.request # Webアクセスに必要 import subprocess # ffmpegを実行する際に必要
m3u8ファイルから動画のURLを取得する
def get_video_urls(file_path): """ Parameters file_path : m3u8ファイルのフルパス Returns video_urls : tsファイルのURLのリスト """ video_urls = [] # m3u8を開き"https://"の行を集める with open(file_path) as f: video_urls = [line.strip() for line in f if "https://" in line] return video_urls
動画をダウンロードする
def download_videos(video_urls): """ Parameters video_urls : tsファイルのURLのリスト Returns file_list : ダウンロードした一時ファイル名のリスト """ # Webアクセスの準備 opener = urllib.request.build_opener() 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) file_list = [] for i, video_url in enumerate(video_urls): print("Downloading : " + video_url) file_list.append("tmp_{:0>10}.ts".format(str(i))) urllib.request.urlretrieve(video_url, file_list[i]) # 動画をダウンロード return file_list
ffmpegで動画を結合する
def exec_ffmpeg(file_name, file_list): """ Parameters file_name : 結合後のファイル名 file_list : 結合するtsファイル名の一覧 """ # ffmpegに渡すListファイルを作成 with open("DLlist.txt","w") as f: for line in file_list: f.write("file '{}'\n".format(line)) result = subprocess.check_output(["ffmpeg.exe", # ffmpgeのフルパスを記述する "-f", "concat", "-safe", "0", "-i", "DLlist.txt", "-c", "copy", file_name + ".mp4" ]) print(result)
main
if __name__ == "__main__": # 引数を利用する準備 parser = argparse.ArgumentParser() parser.add_argument( "file_path", help="m3u8 file path", type=str, default=None ) parser.add_argument( "folder_path", help = "folder path", type = str, default = "C:\\Users\\~\\Downloads" ) args = parser.parse_args() os.chdir(args.folder_path) # 動画をダウンロードする file_list = download_videos(get_video_urls(args.file_path)) # 中間ファイルを結合する exec_ffmpeg(os.path.splitext(os.path.basename(args.file_path))[0], file_list) # 中間ファイルを削除する for file in file_list: os.remove(file)
実行
以下のコマンドでスクリプトを実行できる。
python C:\sample\avgle_downloader.py <m3u8ファイルのフルパス> <保存フォルダ>
Avgleのm3u8ファイルの期限は短い。1日持たないと思う。
urllib.error.HTTPError: HTTP Error 403: Forbidden
が発生したら、再度m3u8をDLしスクリプトを実行してみるといいかも。
以上。