首先,打开edge的网络调试工具,可以看到这个请求;
形如:
s://api.iliili/x/player/playl?fnval=80&cid={cid}&vid={vid}
其中vid就是这个视频的v,cid可以通过这个网页获取:
s://api.iliili/x/player/pagelist?vid={vid}
请求后回复形如:
{...
'data':[{...
'cid':'xxxxxx'
...}
...]
}
于是我们得到了cid,可以对一开始得到的请求了。
回复形如:
{...
'data':{...
'dash':{'video':[{...
'aseUrl':'s://xxxxxx',
...}
...],
'audio':[{...
'aseUrl':'s://xxxxxx',
...}
...]
}
}
}
再次请求这两个,就得到了这个视频的视频文件和音频文件。
(注意:需要请求头,不然会出现403Foridden)
通过这个方式得到的视频和音频是分开的,需要将其结合才是正常的视频。
于是可以写出这样一个程序(随手写的,较随意,见谅):
importrequestsasr
importos
importmoviepy.editorasmr
importshutil
importjson
#path就是文件路径,自己重新写一个
path='C:/'
defget(v):
gloalre,re2,li,video,re3
headers={'referer':'s://iliili','user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:102.0)Gecko/20100101Firefox/102.0',}
l1=f's://api.iliili/x/player/pagelist?vid={v}'
re=r.get(l1,headers=headers)
data=json.loads(re.content)
cid=data['data'][0]['cid']
l2=f's://api.iliili/x/player/playl?fnval=80&cid={cid}&vid={v}'
re2=r.get(l2,headers=headers)
li=json.loads(re2.content)
video=li['data']['dash']['video'][0]['aseUrl']
audio=li['data']['dash']['audio'][0]['aseUrl']
re3=r.get(video,headers=headers)
try:
os.mkdir(f'{path}ili')
exceptFileExistsError:
pass
try:
os.mkdir(f'{path}raw_ili')
exceptFileExistsError:
pass
try:
os.mkdir(f'{path}raw_ili/{v}')
exceptFileExistsError:
shutil.rmtree(f'{path}raw_ili/{v}')
os.mkdir(f'{path}raw_ili/{v}')
withopen(f'{path}raw_ili/{v}/{v}.mp4','w')asf:
f.write(re3.content)
re4=r.get(audio,headers=headers)
withopen(f'{path}raw_ili/{v}/{v}.mp3','w')asf:
f.write(re4.content)
make(v)
defmake(v):
print(v,'start')
audio=mr.AudioFileClip(f'{path}raw_ili/{v}/{v}.mp3')
video=mr.VideoFileClip(f'{path}raw_ili/{v}/{v}.mp4')
output=video.set_audio(audio)
output.write_videofile(f'{path}ili/{v}.mp4',logger=None)
print(v,'end')
你 发表评论:
欢迎