通过抓包工具找到了视频的存放地址的m3u8文件,爬取到了m3u8文件下面的所有视频
加密的参数是#EXT-X-KEY:METHOD=AES-128,URI="https://ndvideo-key.ykt.eduyun.cn/v1/resource_keys/422b105193e64952831a5d5007880cf8%22,IV=0x00000000000000000000000000000000
现在通过url想找key,key是一个随机变化的,如何拿到key
爬取网站下的视频资源
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek
如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞
-
关键点分析:
- 已经获取到视频的m3u8文件地址及加密参数。
- 需要按照m3u8文件中的链接顺序依次下载视频片段,并进行解密(因为视频片段加密)。 -
解决方案:
- 下载视频片段:- 可以使用Python的
requests库来下载m3u8文件中的每个视频片段链接。 - 示例代码如下:
- 可以使用Python的
import requests m3u8_url = 'your_m3u8_file_url' response = requests.get(m3u8_url) m3u8_content = response.text # 解析m3u8文件,获取视频片段链接 segment_urls = [] lines = m3u8_content.split('\n') for line in lines: if line.startswith('http'): segment_urls.append(line) # 下载视频片段 for i, url in enumerate(segment_urls): segment_response = requests.get(url) with open(f'segment_{i}.ts', 'wb') as f: f.write(segment_response.content)- 解密视频片段:
- 对于AES - 128加密,需要使用
cryptography库。 - 首先安装
cryptography库:pip install cryptography。 - 示例代码如下:
- 对于AES - 128加密,需要使用
from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding # 获取加密密钥等信息(这里假设已经从m3u8文件中解析出正确的密钥等) key_uri = 'https://ndvideo-key.yk' key_response = requests.get(key_uri) key = key_response.content iv = b'\x00' * 16 # 初始化向量,假设固定为16字节0 # 对每个视频片段进行解密 for i in range(len(segment_urls)): segment_file = f'segment_{i}.ts' with open(segment_file, 'rb') as f: encrypted_segment = f.read() cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) decryptor = cipher.decryptor() unpadder = padding.PKCS7(128).unpadder() decrypted_segment = decryptor.update(encrypted_segment) + decryptor.finalize() decrypted_segment = unpadder.update(decrypted_segment) + unpadder.finalize() with open(f'decrypted_segment_{i}.ts', 'wb') as f: f.write(decrypted_segment)- 合并视频片段:
- 可以使用
ffmpeg命令行工具来合并解密后的视频片段。 - 示例命令:
ffmpeg -i "concat:decrypted_segment_0.ts|decrypted_segment_1.ts|..." -c copy output.mp4(这里...替换为所有解密后的片段文件名)。 - 也可以使用Python的
moviepy库来实现合并,示例代码如下:
- 可以使用
from moviepy.editor import concatenate_videoclips, VideoFileClip clips = [] for i in range(len(segment_urls)): clip = VideoFileClip(f'decrypted_segment_{i}.ts') clips.append(clip) final_clip = concatenate_videoclips(clips) final_clip.write_videofile('output.mp4')-
多种解决方案优缺点:
- 使用requests库下载和cryptography库解密:- 优点:纯Python实现,不需要额外安装复杂的命令行工具,代码相对灵活,易于理解和修改。
- 缺点:性能可能相对较低,尤其是在处理大量视频片段时。
- 使用
ffmpeg合并视频片段: - 优点:
ffmpeg是一个强大且高效的工具,处理视频合并等任务速度快,功能丰富。 - 缺点:需要安装
ffmpeg命令行工具,并且在代码中调用命令行可能会增加一些复杂性。 - 使用
moviepy库合并视频片段: - 优点:纯Python库,使用方便,代码简洁。
- 缺点:对于复杂的视频处理可能不如
ffmpeg功能全面,并且性能上可能也稍逊一筹。
-
总结:
- 爬取网站下加密的视频资源,首先要获取m3u8文件及加密参数,然后依次下载视频片段并解密,最后合并视频片段。可以使用Python的requests、cryptography、moviepy等库以及ffmpeg工具来完成整个过程。不同的实现方式各有优缺点,可根据具体需求和场景选择合适的方法。
希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。
解决 无用评论 打赏 举报-