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


希望對大家有幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81287.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81287.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript【6】事件

1.概述: 在 JavaScript 中,事件(Event)是瀏覽器或 DOM(文檔對象模型)與 JavaScript 代碼之間交互的一種機制。它代表了在瀏覽器環境中發生的特定行為或者動作,比如用戶點擊鼠標、敲擊鍵盤、頁面…

【Java ee初階】HTTP(2)

一、HTTP的方法 方法 說明 支持的HTTP協議版本 GET 獲取資源 1.0、1.1 POST 傳輸實體主體 1.0、1.1 PUT 傳輸文件 1.0、1.1 HEAD 獲得報文首部 1.0、1.1 DELETE 刪除文件 1.0、1.1 OPTIONS 詢問支持的方法 1.1 TRACE 追蹤路徑 1.1 CONNECT 要求用隧道…

文件名是 ?E:\20250512_191204.mp4, EV軟件錄屏,未保存直接關機損壞, 如何修復?

去github上下載untrunc 工具就能修復 https://github.com/anthwlock/untrunc/releases 如果訪問不了 本機的 hosts文件設置 140.82.112.3 github.com 199.232.69.194 github.global.ssl.fastly.net 就能訪問了 實在不行,從這里下載,傳上去了 https://do…

騰訊 CodeBuddy 殺入 AI 編程賽道,能否撼動海外工具霸主地位?

在 AI 編程助手領域,海外的 Cursor 等工具風頭正勁,如今騰訊帶著 CodeBuddy 隆重登場,國產 AI 編程助手能否借其之力崛起?讓我們一探究竟。 官網: 騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 實戰安裝教程 …

PySide6 GUI 學習筆記——常用類及控件使用方法(常用類顏色常量QColorConstants)

文章目錄 一、概述二、顏色常量表標準 Qt 顏色SVG 顏色(部分) 三、Python 代碼示例四、代碼說明五、版本兼容性六、延伸閱讀 一、概述 QColorConstants 是 Qt for Python 提供的一個預定義顏色常量集合,包含標準Qt顏色和SVG規范顏色。這些常…

MATLAB 自然語言處理入門教程

文章目錄 前言環境配置一、MATLAB NLP 工具箱概述二、核心功能與 API1. 文本數據準備2. 特征提取3. 文本分類(傳統機器學習)4. 深度學習文本分類(LSTM) 三、實戰案例:情感分析四、高級應用1. 命名實體識別(…

C++ deque雙端隊列、deque對象創建、deque賦值操作

在deque中,front()是頭部元素,back()指的是尾部元素。begin()是指向頭部的迭代器,end()是指向尾部的下一個元素的迭代器。 push_front 頭部進行插入 pop_front 尾部進行刪除 push_back 尾部進行插入 pop_back 尾部進行刪除 deque如果同時…

java每日精進 5.15【分頁實現】

1. 什么是對象轉換和數據翻譯? 對象轉換 對象轉換是指將一種類型的對象(如數據庫實體 UserDO)轉換為另一種類型的對象(如前端響應對象 UserVO 或服務層 DTO)。例如,一個 UserDO 包含用戶 ID、姓名和部門 …

什么是API接口?API接口的核心價值

隨著互聯網技術的蓬勃發展,API 接口作為不同應用程序之間的關鍵紐帶,其重要性愈發凸顯。本文將從專業視角,深入剖析 API 接口的分類、原理、請求方式以及安全機制等核心要素,助力讀者全面理解這一數字化基礎設施。 一、API 接口及…

Linux_ELF文件

目錄 前言: 一、ELF文件的類型 二、ELF文件的組成格式 1. ELF頭部(ELF Header) 2. 節頭表(Section Header Table) 3. 程序頭表(Program Header Table) 4. 節(Sections)與段(Segments) 三、ELF文件從形成到加載輪廓 1、ELF可執行文件形成過程 2、 可執行文…

Go語言語法---輸入控制

文章目錄 1. fmt包讀取輸入1.1. 讀取單個值1.2. 讀取多個值 2. 格式化輸入控制 在Go語言中,控制輸入主要涉及從標準輸入(鍵盤)或文件等來源讀取數據。以下是幾種常見的輸入控制方法: 1. fmt包讀取輸入 fmt包中的Scan和Scanln函數都可以讀取輸入&#xf…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】附錄-C. 常用SQL腳本模板

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 附錄C. 常用SQL腳本模板速查表一、數據清洗與預處理模板二、數據聚合與分析模板三、窗口函數應用模板四、性能優化與監控模板五、數據備份與恢復模板六、權限管理與安全模板七、事務與錯誤處理模板八、時…

51單片機課設基于GM65模塊的二維碼加條形碼識別

系統組成 主控單元:51單片機(如STC89C52)作為核心控制器,協調各模塊工作。 掃描模塊:GM65條碼掃描頭,支持二維碼/條形碼識別,通過串口(UART)與單片機通信。 顯示模塊&a…

【OpenGL學習】(二)OpenGL渲染簡單圖形

文章目錄 【OpenGL學習】(二)OpenGL渲染簡單圖形OpenGL渲染圖形流程頂點,圖元和片元VAO,VBO ,EBO著色器示例:使用OpenGL渲染三角形 【OpenGL學習】(二)OpenGL渲染簡單圖形 OpenGL渲…

基于STM32的INA226電壓電流檢測儀

系統總體框圖 功率檢測裝置原理圖功能及模塊連接說明 一、系統功能概述 該裝置以STM32F103C8T6微控制器為核心,集成功率檢測、數據交互、狀態顯示和用戶提示功能,通過模塊化設計實現穩定運行。 二、各模塊功能及連接方式 按鍵模塊 功能&#xff1a…

YOLOv2目標檢測算法:速度與精度的平衡之道

一、YOLOv2的核心改進:從V1到V2的蛻變 YOLOv2作為YOLO系列的第二代算法,在繼承V1端到端、單階段檢測的基礎上,針對V1存在的小目標檢測弱、定位精度低等問題進行了全方位升級,成為目標檢測領域的重要里程碑。 (一&am…

將嵌入映射到 Elasticsearch 字段類型:semantic_text、dense_vector、sparse_vector

作者: Andre Luiz 討論如何以及何時使用 semantic_text、dense_vector 或 sparse_vector,以及它們與嵌入生成的關系。 通過這個自定進度的 Search AI 實踐學習親自體驗向量搜索。你可以開始免費云試用,或者在本地機器上嘗試 Elastic。 多年來…

uniapp取消瀏覽自動填充

為了防止瀏覽器自動將記住的密碼回填進type"password"輸入框&#xff0c;所以在type"password"輸入框上面加了兩行代碼&#xff0c;使瀏覽器將密碼填充到新加的輸入框里&#xff0c;并將這兩個input隱藏掉 <input type"password" autocomple…

從數據包到可靠性:UDP/TCP協議的工作原理分析

之前我們已經使用udp/tcp的相關接口寫了一些簡單的客戶端與服務端代碼。也了解了協議是什么&#xff0c;包括自定義協議和知名協議比如http/https和ssh等。現在我們再回到傳輸層&#xff0c;對udp和tcp這兩傳輸層巨頭協議做更深一步的分析。 一.UDP UDP相關內容很簡單&#xf…

顯卡、Cuda和pytorch兼容問題

這里寫目錄標題 驅動與CUDA版本兼容性問題1. **驅動與CUDA版本兼容性問題**2. **任務特性與硬件適配差異**3. **優化策略與框架配置差異**4. **散熱與功耗限制**5. **數據傳輸與CPU瓶頸**排查建議總結 查詢PyTorch中實際使用的CUDA版本**1. 查詢PyTorch中實際使用的CUDA版本***…