一、环境准备import requestsimport jsonimport reimport subprocess # 调用FFmpeg合并分片需要安装requestsHTTP请求、FFmpeg处理视频流。二、抓包定位接口用F12或Charles抓包聚焦央视App播放视频时的请求。关键发现央视的接口会返回一个 videoList 字段里面包含多个清晰度档位的视频地址列表。核心请求大致是这个结构url “https://api.cntv.cn/video/getVideoInfo”params {“pid”: “视频ID”, # 从页面html或列表接口获取“tsp”: “时间戳”,“vid”: “视频标识”,}headers {“User-Agent”: “CCTV-App/…”, # 模拟App“Referer”: “https://tv.cctv.com/”,}三、解析视频地址请求返回的JSON里videoList 结构通常长这样{“videoList”: [{“name”: “1080P”, “url”: “https://…/index.m3u8”},{“name”: “高清”, “url”: “https://…/index.m3u8”}]}拿到m3u8后读取分片列表再用FFmpeg拉流合并ffmpeg -i “https://…/index.m3u8” -c copy output.mp4四、实测遇到的坑坑1签名参数 vc有些接口会带 vcverify code签名参数用于防爬。实测发现部分档位可以去掉该参数但有些必须带。解决思路是分析签名生成算法通常是 md5(pid 固定盐值 时间戳) 一类。坑2m3u8加密如果m3u8里带有 #EXT-X-KEY 标签说明分片是AES-128加密的需要额外请求key并解密。不过实测央视的多数内容分片未加密可以直接合并。坑3分片数量45分钟视频约几百个分片用FFmpeg -i 拉所有分片合并速度取决于网络。建议本地先缓存再合并避免断流。五、完整代码示例import requests, json, subprocessdef get_video_url(pid):api “https://api.cntv.cn/video/getVideoInfo”params {“pid”: pid, “tsp”: str(time.time())}resp requests.get(api, paramsparams, headersheaders)data resp.json()# 取最高清晰度videos data[“videoList”]videos.sort(keylambda x: x[“url”].count(“_”), reverseTrue)return videos[0][“url”]def download(url, out):cmd [“ffmpeg”, “-i”, url, “-c”, “copy”, out]subprocess.run(cmd, checkTrue)使用示例pid “你的视频PID”m3u8_url get_video_url(pid)download(m3u8_url, “cctv_video.mp4”)六、不想写代码怎么办上面这套流程有一定门槛需要懂Python和FFmpeg。如果不想折腾代码可以直接用封装好的现成工具——CCTV视频下载器v18它内部就是实现了这套解析逻辑图形化界面粘贴链接点解析就能下本质是一样的原理。相关接口分析和工具资料我在盘资源基地cc.ewp.cc有更详细的整理需要深入研究的可以去看看。