【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しスクリプトを実行してみるといいかも。
以上。