streamlinkをコマンドから実行する場合は例えばこのように書きます。
streamlink --username=xxxx --password=xxx https://crunchyroll.com/a-crunchyroll-episode-link"
同様のことをjupyterで実行する場合へのパラメータの渡し方は上のような簡便なやり方がわからなかったため、迂遠なやり方を書いておきます。
from streamlink import Streamlink
st=Streamlink()
plugin = st.resolve_url("https://crunchyroll.com/a-crunchyroll-episode-link")
params={"username":"xxxx","password":"xxx"}
plugin.options.update(params)
stream_streamlink =plugin.streams()
resolve_urlはplugin クラスを返すのですが、そこにoptionパラメータを渡してくれる方法が分からなかったのでstreams()を実行する前にupdate(params)をしています。
import streamlink
stream_url = streamlink.streams("https://crunchyroll.com/a-crunchyroll-episode-link")
optionがいらない場合は上記のような書き方で大丈夫です。
import urllib.request
import ffmpeg
stream_url = stream_streamlink['best'].url
try:
urllib.request.urlretrieve(stream_url ,'vod.mp4')
except Exception as e:
print(e)
stream = (
ffmpeg.input('vod.mp4')
.output(stream, r'C:\\path\\to\\save\\file.avi' )
)
try:
ffmpeg.run(stream,capture_stdout=True, capture_stderr=True)
except ffmpeg.Error as e:
print('stdout:', e.stdout.decode('utf8'))
print('stderr:', e.stderr.decode('utf8'))
raise e
そして上記のようにffmpeg等を使うと好きな形式で保存できます。ちなみにpythonのffmpegはいくつか種類があるようですが、pip install ffmpeg-pythonでないとエラーが起きる場合がありました。
ところでexceptの使い方が良くないと指摘されていたサンプルを用いているのですが、元のページを忘れてしまったため修正していません。
また、['best']は時々取得できないときがあるようなので、stream_streamlinkをprintなどで確認して['720p']のように指定してください。