当前位置: 首页 > news >正文

python + streamlink 下载 vimeo 短视频

1. 起因, 目的:

  • 看到一个视频,很喜欢,想下载。
  • https://player.vimeo.com/video/937787642

2. 先看效果

能下载。请添加图片描述
请添加图片描述

3. 过程:

  • 因为我自己没头绪。先看一下别人的例子, 问一下 ai 或是 google
  • 问了几个来回,原来是流式加载的视频。 那么好办, 就使用 streamlink , 之前用过,效果很好的。
下载
import requests
import streamlink
import osdef get_vimeo_stream_url(video_url):# 设置请求头,模拟浏览器headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36","Referer": "https://vimeo.com/"}try:# Step 1: 获取配置 JSONconfig_url = video_url.replace("player.vimeo.com/video/", "player.vimeo.com/video/") + "/config"response = requests.get(config_url, headers=headers)response.raise_for_status()# Step 2: 解析 JSON 数据config_data = response.json()# 优先提取 HLS 链接hls_url = config_data.get("request", {}).get("files", {}).get("hls", {}).get("cdns", {}).get("akfire_interconnect_quic", {}).get("url")if not hls_url:hls_url = config_data.get("request", {}).get("files", {}).get("hls", {}).get("cdns", {}).get("fastly",{}).get("url")if hls_url:print(f"找到 HLS 链接: {hls_url}")return hls_url# 如果没有 HLS,尝试提取 progressive(MP4)链接video_files = config_data.get("request", {}).get("files", {}).get("progressive", [])if video_files:video_files = sorted(video_files, key=lambda x: x.get("height", 0), reverse=True)mp4_url = video_files[0]["url"]print(f"没有 HLS 链接,使用 MP4 链接: {mp4_url}")return mp4_urlprint("未找到可用的流链接!可能是受限视频或需要登录。")return Noneexcept requests.exceptions.RequestException as e:print(f"请求错误: {e}")return Noneexcept (KeyError, IndexError) as e:print(f"解析错误: {e},可能是视频受限或格式不正确")return Nonedef download_with_streamlink(stream_url, output_path="video.mp4"):try:# Step 3: 使用 streamlink 下载streams = streamlink.streams(stream_url)if not streams:print("无法获取视频流,可能是链接无效或需要认证")return False# 选择最佳质量stream = streams.get("best")if not stream:print("未找到最佳质量流")return Falseprint(f"开始下载,质量: {stream}")with stream.open() as stream_data:with open(output_path, "wb") as f:while True:data = stream_data.read(8192)if not data:breakf.write(data)print(f"视频已下载到: {output_path}")return Trueexcept Exception as e:print(f"下载错误: {e}")return False# 示例使用
video_url = "https://player.vimeo.com/video/937787642"
output_file = "downloaded_video.mp4"# 获取流链接
stream_url = get_vimeo_stream_url(video_url)
if stream_url:# 使用 streamlink 下载download_with_streamlink(stream_url, output_file)

4. 结论 + todo

  • 想法: 下载其他视频, 或是批量下载。但是我觉得没意思。

  • 我就是想试试看能不能下载成功。

  • 聊天记录: https://x.com/i/grok?conversation=1923401591656530204

  • vimeo 简介: https://chatgpt.com/c/68275b18-7d68-8002-9197-a84a62128cab


希望对大家有帮助。

相关文章:

  • 【Element UI】表单及其验证规则详细
  • DAY 23 训练
  • Python 3.11详细安装步骤(包含安装包)Python 3.11详细图文安装教程
  • Python 基础之函数命名
  • Nginx应用场景详解与配置指南
  • 【时时三省】(C语言基础)字符数组应用举例2
  • DeepSeek-R1 Supervised finetuning and reinforcement learning (SFT + RL)
  • MATLAB安装常见问题及解决办法
  • 开源项目实战学习之YOLO11:12.4 ultralytics-models-sam-memory_attention.py源码分析
  • 强化学习中,frames(帧)和 episodes(回合)
  • 重排序模型解读 mxbai-rerank-base-v2 强大的重排序模型
  • 我司助力高校打造「智慧创新AI学习中心」
  • 互联网大厂Java求职面试:AI驱动的短视频直播平台架构设计
  • 软件设计师考试结构型设计模式考点全解析
  • 学习深度学习是否要先学习机器学习?
  • 非对称加密算法(公钥加密算法)
  • 常见位运算总结
  • 【Ubuntu】Waydroid-Linux安卓模拟器安装
  • Node.js 实战四:数据库集成最佳实践
  • TC3xx学习笔记-UCB BMHD使用详解(二)
  • 公示资费套餐、规范营销行为,今年信息通信行业将办好这十件实事
  • 中国新闻发言人论坛在京举行,郭嘉昆:让中国声音抢占第一落点
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 俄媒:俄乌伊斯坦布尔谈判将于北京时间今天17时30分开始
  • 雷军内部演讲回应质疑:在不服输、打不倒方面,没人比我们更有耐心
  • 外交部介绍对巴西、阿根廷、智利、秘鲁、乌拉圭等5国试行免签政策