用途:在浏览器中原生下载 YouTube 视频,绕过 yt-dlp、客户端伪装和 n-signature 求解。核心思路是让页面照常播放(处理 cookies、poToken、n-signature、SABR 复用、自适应码率),ytdl 只记录播放器交给 video 的媒体分片。
主要能力:支持普通视频与 Shorts(Shorts 会规范化为 watch?v=);可用 -q 指定 360p/480p/720p/1080p/1440p/2160p、best 或 audio;--info 读取标题、时长与可用画质;-o 指定输出名,-d 指定目录。默认输出到 ~/Downloads。
使用方式:命令形如 ytdl "https://www.youtube.com/watch?v=...",可加 -q 360p、-q audio、--info、-o Name -d ~/Videos。脚本位于 scripts/ytdl,scripts/setup 会把 ytdl 与 browser-harness-js 链接到 PATH。
实现要点:通过 Page.addScriptToEvaluateOnNewDocument 注入 MSE 钩子,包装 MediaSource.prototype.addSourceBuffer,并在每个 SourceBuffer 实例上以自有属性记录 appendBuffer 的字节;前台标签页导航到 watch 页,关闭自动连播,强制画质并以 16 倍速静音播放,等待时间线缓冲完成后冻结捕获;播放期间按约 1 秒节奏把缓冲以 base64 分片(256 KB、3 对齐)落盘,最后用 ffmpeg -i video -i audio -c copy -movflags +faststart out.mp4 合并。
限制:需要 ffmpeg 作为封装器(audio 模式不需要);强制画质为尽力而为,SABR 可能忽略;输出为无损流拷贝,可能不被 QuickTime/iOS 支持,需自行转码;不支持直播/Premiere(使用 HLS);长视频受实时/16 倍速限制;后台标签页自动播放不可靠,必须使用前台标签页。