已有video_url情况下,可使用浏览器打开视频然后保存,更直接方式是通过request下载。

这里参考网络资料,示例基于python和request下载视频的方法。

1 安装依赖

首先确保安装 requests

pip install requests


如果需要显示进度条,可以安装tqdm

pip install tqdm

2 下载视频

这里分别示例有进度条下载和无进度条下载的代码,并给出注意事项。

2.1 有进度条版本

以下是一个request下载视频的代码示例。

支持流式下载避免占用过多内存,包含错误处理和进度显示。

import requests
import os
from tqdm import tqdm  # 可选,用于显示进度条

def download_video(url, save_path):
    """
    从给定的URL下载视频并保存到本地路径。

    Args:
        url (str): 视频文件的URL(如 .mp4 文件链接)
        save_path (str): 本地保存路径,包括文件名(如 'video.mp4')

    Returns:
        bool: 下载成功返回True,失败返回False
    """
    try:
        # 发送GET请求,启用流式下载
        with requests.get(url, stream=True, timeout=10) as response:
            response.raise_for_status()  # 检查HTTP错误(如404、403等)

            # 获取文件大小(可选,用于进度条)
            total_size = int(response.headers.get('content-length', 0))

            # 以二进制写入模式打开文件
            with open(save_path, 'wb') as file:
                # 使用tqdm显示进度条(如果安装了tqdm)
                with tqdm(total=total_size, unit='B', unit_scale=True, desc=os.path.basename(save_path)) as pbar:
                    for chunk in response.iter_content(chunk_size=8192):
                        file.write(chunk)
                        pbar.update(len(chunk))  # 更新进度条
            return True

    except requests.exceptions.RequestException as e:
        print(f"下载失败:{e}")
        return False

# 使用示例
video_url = "https://example.com/video.mp4"
output_path = "downloaded_video.mp4"

success = download_video(video_url, output_path)
if success:
    print("视频下载完成!")
else:
    print("下载出错,请检查URL或网络连接。")

代码说如下所示

1)参数说明

stream=True确保响应以流的方式读取,而不是一次性加载到内存中,适合大文件下载。

response.iter_content(chunk_size=8192)按块迭代响应内容,每次写入文件,防止内存占用过高。

2)错误处理

response.raise_for_status()会捕获HTTP错误如404;RequestException捕获网络相关问题。
3)进度条

使用 tqdm显示下载进度,如果未安装 tqdm,只需移除相关代码或改用简单的打印。

4)文件大小

通过 `content-length` 获取文件总大小,用于进度条计算。

2.2 无进度条版本

以下是没有安装tqdm的无进度条的版本。

import requests

def download_video_simple(url, save_path):
    try:
        with requests.get(url, stream=True) as response:
            response.raise_for_status()
            with open(save_path, 'wb') as f:
                for chunk in response.iter_content(chunk_size=8192):
                    f.write(chunk)
        return True
    except Exception as e:
        print(f"下载失败:{e}")
        return False

2.3  注意事项

某些视频网站可能检查 `User-Agent`,可以通过 `headers` 参数伪装浏览器请求:

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}
requests.get(url, headers=headers, stream=True)

如果视频来自需要登录或验证的网站,如需要cookies、token,需要额外处理认证信息。

如果是动态生成的视频url,如流媒体网站,这个方法不适用,可以考虑youtube-dl或 pytube。

reference

---

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐