← Home

批量下载音视频

2025-12-24

背景:

剪辑音视频时,需下载源文件进行处理,单源文件仅提供了Excel形式的网络链接,需进行下载使用。

使用工具:

本想使用批量下载工具Motrix,提供链接直接进行下载。后发现下载后,文件名为乱码,后续剪辑寻找文件耗费时间。

后经由AI确认,使用Python代码,进行根据Excel文件进行下载,并根据每行名称进行下载文件重命名。

代码:

import pandas as pd
import requests
import os
import time

# ================= 配置区域 =================
# 1. Excel 文件名 (确保文件在旁边)
EXCEL_FILE = "list.xlsx"

# 2. Excel 里的列名 (一定要和 Excel 第一行对应!)
COL_NAME = "名字"  # 你的 A 列标题
COL_LINK = "链接"  # 你的 B 列标题

# 3. 保存文件的文件夹
SAVE_FOLDER = "批量下载结果"

# 4. 伪装头 (防封必加)
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}

# ================= 代码逻辑 =================

def download_from_excel():
    # 1. 检查 Excel 是否存在
    if not os.path.exists(EXCEL_FILE):
        print(f"❌ 找不到文件: {EXCEL_FILE}")
        print("请确保 Excel 文件和代码在同一个文件夹里!")
        return

    # 2. 创建下载文件夹
    if not os.path.exists(SAVE_FOLDER):
        os.makedirs(SAVE_FOLDER)

    print("正在读取 Excel...")
    
    # 3. 读取 Excel 数据
    try:
        df = pd.read_excel(EXCEL_FILE)
    except Exception as e:
        print(f"❌ 读取 Excel 失败: {e}")
        return

    print(f"读取成功!准备下载 {len(df)} 个文件...\n")

    # 4. 循环每一行进行下载
    # index 是行号,row 是这一行的数据
    for index, row in df.iterrows():
        name = str(row[COL_NAME])  # 获取名字
        url = str(row[COL_LINK])   # 获取链接

        # 简单的文件名清洗(去掉非法字符)
        clean_name = "".join(c for c in name if c.isalnum() or c in (' ','.','_','-')).rstrip()
        
        # 自动判断后缀,如果是mp3链接就存为mp3
        if url.endswith(".mp3"):
            filename = clean_name + ".mp3"
        elif url.endswith(".mp4"):
            filename = clean_name + ".mp4"
        else:
            # 如果链接里看不出后缀,就默认给一个
            filename = clean_name + ".mp3" 

        file_path = os.path.join(SAVE_FOLDER, filename)
        
        print(f"[{index+1}/{len(df)}] 正在下载: {filename}")

        # 如果链接是空的(Excel里有空行),跳过
        if not url or url == "nan":
            print("   -> 跳过:链接为空")
            continue

        try:
            res = requests.get(url, headers=HEADERS, stream=True, timeout=30)
            if res.status_code == 200:
                with open(file_path, "wb") as f:
                    for chunk in res.iter_content(chunk_size=1024):
                        f.write(chunk)
                print("   -> ✅ 下载成功")
            else:
                print(f"   -> ❌ 失败: 服务器返回 {res.status_code}")
        except Exception as e:
            print(f"   -> ❌ 出错: {e}")
        
        # 稍微歇一下,防止太快
        # time.sleep(0.5) 

if __name__ == "__main__":
    download_from_excel()
    input("\n全部处理完毕,按回车退出...")

使用步骤:

创建一个文件夹,其内放入Excel文件,分为两列,A列:名字、B列:链接。重命名为:list.xlsx,也可以修改python代码中相应名称。 Windows设备,在该文件夹内,创建一个文本文档,粘贴上述代码,后缀保存为[.py],双击运行即可。