まずはm3u8なりmpdなりのアドレス探しから。
やっぱり探すにはpcからが一番ラク。
配信URLは https://www.instagram.com/userID/live なので、Chromeの開発者ツールのNetworkタブを眺める。
HLSではなくMPEG-DASHの模様。
mpdのアドレスの取得方法は、お手軽にselenium + pythonでできそうだ。
<instalive-dl.py>
#-*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
caps = DesiredCapabilities.CHROME
caps["goog:loggingPrefs"] = {"performance": "ALL"}
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-gpu')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--headless')
chargs = ["hide_console", ]
###
batファイルの引数なんやかんや
###
driver = webdriver.Chrome(executable_path=str(chromepath), service_args=chargs,options=options, desired_capabilities=caps)
driver.implicitly_wait(5)
#####
なんやかんやログインして
#####
driver.get(https://www.instagram.com/userID/live)
time.sleep(2)
netLog = driver.get_log("performance")
def process_browser_log_entry(entry):
response = json.loads(entry['message'])['message']
return response
events = [process_browser_log_entry(entry) for entry in netLog]
events = [event for event in events if 'Network.response' in event['method']]
url = []
for item in events:
if "response" in item["params"]:
if "url" in item["params"]["response"]:
stream = item["params"]["response"]["url"]
if re.search(r'/live-dash/dash-hd/', stream):
url.append(stream)
if len(url) == 0:
log.info('放送されていません')
driver.close()
driver.quit()
sys.exit()
mpd = url[0]
mpdアドレスをffmpegに投げて終わり。
と思ったら、配信終了後のHTTP 410でループする。ctrl + cで強制的に止めるとmoov atom not foundになってしまい再生不可能。他に色々粘って見たけどうまく行かず。
そこで、他にmpdに対応したツールが無いかと考え、ダメ元でyoutube-dlに投げるも失敗。
次にstreamlinkに投げてみたら、あっさり録画が始まってきちんと止まることが判明。
ということで
####続き
outfile = #適当にファイル名#
cmd = 'streamlink "{0}" best -o "{1}"'.format(mpd,outfile)
subprocess.run(cmd)
driver.close()
driver.quit()
sys.exit()
おわり。
もう少し手間を減らしたいのでbatファイルを作る。
<userID.bat>
@echo off
instalive-dl.py %~n0 myaccount pass
以上。
<参考>
0 件のコメント:
コメントを投稿