从 Facebook 下载视频,最难的部分不是技术上的拦截,而是让 Facebook 交出 HD 源地址。这个平台刻意只向未认证或刚加载的会话暴露 SD 变体,只有在已登录的浏览器中播放器加载了 HD 之后,才会附上 HD 源地址。那些只解析一次页面、去找 .mp4 链接的工具,始终只会带回 SD —— 哪怕这个视频在 facebook.com 上明显是以 HD 播放的。HD 地址确实存在,但它只在播放器完成特定的一连串动作之后才可见。
这一点值得记住,因为它重新界定了本平台最常见的那句抱怨。“下载工具只给了我 SD”几乎从来不是在描述下载环节的限制,而是在描述页面提供了什么。实际的结论是一条顺序规则:先登录,打开视频自己的页面而不是嵌入播放器或信息流预览,让播放器切换到 HD,然后再保存。少走任何一步,无论换什么工具,得到的都是同一个 SD 文件。
第二件要确认的事,是你手里实际拿到的是哪个地址。Facebook 会用几种不同形式呈现同一个视频 —— Watch 播放器、主页的视频固定链接、fb.watch 短链接,以及移动端域名。它们不是等价的起点:短链接和嵌入可能解析到一个受限的上下文,而视频自己的固定链接才是能拿到完整播放器状态(包括 HD)的那个页面。
直播还多出一个其他情形没有的时间维度。直播进行时,Facebook 以 DASH 形式实时传输相互独立的自适应音频轨和视频轨。直播结束后,回放并不会立刻就绪 —— Facebook 会在随后的几分钟到几小时内发布点播版本,在这期间同一个地址可能返回一个不完整的回放。是否等到回放能从头播到尾,就是完整存档与被截断存档的区别。
无论哪种情况,都请检查结果。把保存文件的高度与播放器当时显示的画质对比,把它的时长与原片对比。这两种偏差在文件夹列表里都很容易被忽略,而打开文件花上十秒就能确认。