从 SharePoint 下载录像视频,并使用 Amazon Transcribe 进行转译。
by Kiro

iaun 1813add462 first commit 1 сар өмнө
sp-transcribe-service 1813add462 first commit 1 сар өмнө
.gitignore 1813add462 first commit 1 сар өмнө
README.md 1813add462 first commit 1 сар өмнө
simplify_transcript.py 1813add462 first commit 1 сар өмнө
sp-stream-helper.user.js 1813add462 first commit 1 сар өмнө
sp_video_dl.py 1813add462 first commit 1 сар өмнө

README.md

SharePoint Stream 视频下载器

从 SharePoint Online / Microsoft Stream 下载会议录像等视频。

原理

SharePoint Stream 使用 DASH 协议播放视频:

  1. 前端通过 videomanifest API 获取 MPD manifest(包含视频/音频分段信息)
  2. 认证方式:x-spopactoken(PAC token)用于 manifest,FedAuth HttpOnly cookie 用于 segment
  3. 每个 segment 使用 AES-128-CBC 加密,密钥从 VideoProtectionKey API 获取
  4. 视频和音频分开下载,最后用 ffmpeg 合并

依赖

pip install requests pycryptodome

合并音视频需要 ffmpeg

使用步骤

1. 获取 videomanifest cURL

  • 打开视频页面,按 F12 打开 DevTools
  • 切到 Network 标签,Filter 输入 videomanifest
  • 播放视频,会出现两个同名请求:
    • OPTIONS(预检)— 不要复制这个
    • GET(实际请求)— 复制这个
  • 右键 GET 请求 → Copy → Copy as cURL (bash)
  • 保存到 curl_command.txt

2. 导出 Cookie

SharePoint 的 FedAuth/rtFa 是 HttpOnly cookie,document.cookie 拿不到。

  • 安装浏览器扩展 Cookie-Editor
  • 在视频页面点击扩展图标 → Export → JSON
  • 保存为 cookies.json

3. 下载

python sp_video_dl.py curl_command.txt -c cookies.json -o my_video

参数

参数 说明
input cURL 命令文件路径,或交互模式粘贴
-c, --cookie Cookie JSON 文件或字符串
-o, --output 输出目录(默认 output
-w, --workers 并发线程数(默认 4)
--dry-run 仅解析 manifest,不下载

常见问题

复制了错误的请求(OPTIONS preflight)

脚本会自动检测并提示。确保复制的是 Method 为 GET 的请求(headers 里有 x-spopactoken: v1.eyJ...)。

下载到一半 401

缺少 HttpOnly cookie。用 Cookie-Editor 扩展导出 JSON,通过 -c cookies.json 传入。

Cookie 过期

SharePoint cookie 有效期通常几小时。过期后重新从浏览器导出。

ffmpeg 合并失败

视频和音频文件已分别保存在输出目录,手动合并:

ffmpeg -y -i my_video/video.mp4 -i my_video/audio.mp4 -c copy my_video/final.mp4

输出文件

文件 说明
final.mp4 合并后的完整视频
video.mp4 视频轨道
audio.mp4 音频轨道
transcript.json 原始转录数据 (JSON)
transcript.srt SRT 字幕文件
transcript.txt 纯文本转录 (带说话人和时间戳)
manifest.mpd DASH manifest