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

如何通过浏览器控制台或Node.js批量上传YouTube视频?

实现文件夹自动上传YouTube视频的JavaScript方案

有两种可行的方案,分别适配浏览器控制台和Node.js环境,具体说明如下:

浏览器控制台方案

浏览器出于安全限制无法直接读取本地文件夹的所有文件,但可以在YouTube Studio上传页面的控制台中运行脚本,配合手动选择文件夹的操作实现批量上传:

  1. 打开YouTube Studio上传页面,按下F12打开控制台。
  2. 运行以下脚本,它会创建支持文件夹选择的输入框,选中文件夹后自动将所有视频文件分批添加到上传队列:
// 创建文件夹选择输入框
const input = document.createElement('input');
input.type = 'file';
input.webkitdirectory = true;
input.accept = 'video/*';

// 监听文件选择事件
input.addEventListener('change', async (e) => {
  const files = Array.from(e.target.files);
  // 筛选视频格式文件
  const videoFiles = files.filter(file => file.type.startsWith('video/'));
  
  // 定位页面上传输入框(页面结构若更新需重新调整选择器)
  const uploadInput = document.querySelector('input[type="file"][accept="video/*"]');
  
  if (!uploadInput) {
    console.error('未找到上传输入框,请检查页面结构');
    return;
  }

  // 按YouTube Studio批量限制(15个/批)分批上传
  for (let i = 0; i < videoFiles.length; i += 15) {
    const batch = videoFiles.slice(i, i + 15);
    // 模拟文件选择操作
    const dataTransfer = new DataTransfer();
    batch.forEach(file => dataTransfer.items.add(file));
    uploadInput.files = dataTransfer.files;
    
    // 触发上传事件
    uploadInput.dispatchEvent(new Event('change', { bubbles: true }));
    
    // 等待当前批次上传完成(根据视频大小调整等待时长)
    await new Promise(resolve => setTimeout(resolve, 60000)); // 示例等待60秒
  }
});

// 触发文件夹选择
input.click();

注意:YouTube Studio的页面结构可能会更新,若脚本失效需重新定位上传输入框的选择器;该方式仍受限于页面的批量上传限制,需等待每批上传完成后再进行下一批。

Node.js环境方案

Node.js有两种实现思路,分别适配不同的需求场景:

1. 基于YouTube Data API v3

使用官方googleapis库实现上传,但受限于API每日6个的配额限制:

const { google } = require('googleapis');
const fs = require('fs');
const path = require('path');

// 初始化OAuth2客户端(需提前在Google Cloud Console创建凭据)
const oauth2Client = new google.auth.OAuth2(
  'YOUR_CLIENT_ID',
  'YOUR_CLIENT_SECRET',
  'YOUR_REDIRECT_URI'
);

// 设置授权凭据(通过OAuth2授权流程获取refresh_token)
oauth2Client.setCredentials({
  refresh_token: 'YOUR_REFRESH_TOKEN'
});

const youtube = google.youtube({
  version: 'v3',
  auth: oauth2Client
});

// 批量上传文件夹内的视频
async function uploadVideosFromFolder(folderPath) {
  const files = fs.readdirSync(folderPath).filter(file => {
    const ext = path.extname(file).toLowerCase();
    return ['.mp4', '.mov', '.avi'].includes(ext);
  });

  for (const file of files) {
    const filePath = path.join(folderPath, file);
    try {
      const response = await youtube.videos.insert({
        part: 'snippet,status',
        requestBody: {
          snippet: {
            title: path.basename(file, path.extname(file)),
            description: '自动上传的视频'
          },
          status: {
            privacyStatus: 'private' // 可改为public/unlisted
          }
        },
        media: {
          body: fs.createReadStream(filePath)
        }
      });
      console.log(`上传成功:${response.data.id}`);
      // 间隔上传避免触发配额限制
      await new Promise(resolve => setTimeout(resolve, 30000));
    } catch (error) {
      console.error(`上传失败 ${file}:`, error.message);
    }
  }
}

// 调用上传函数,传入目标文件夹路径
uploadVideosFromFolder('./your-video-folder');

使用前需在Google Cloud Console创建项目并启用YouTube Data API v3,完成OAuth2授权流程获取相关凭据。

2. 模拟YouTube Studio上传(绕过API配额限制)

使用puppeteer无头浏览器模拟手动上传流程,每次批量上传15个视频:

const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');

async function uploadViaYouTubeStudio(folderPath) {
  const browser = await puppeteer.launch({ headless: false }); // 设为true则无头运行
  const page = await browser.newPage();

  // 跳转至YouTube Studio,手动完成登录
  await page.goto('https://studio.youtube.com/');
  console.log('请在浏览器中完成登录,登录后按回车继续...');
  await new Promise(resolve => process.stdin.once('data', resolve));

  // 读取文件夹内的视频文件
  const files = fs.readdirSync(folderPath)
    .map(file => path.resolve(folderPath, file))
    .filter(file => {
      const ext = path.extname(file).toLowerCase();
      return ['.mp4', '.mov', '.avi'].includes(ext);
    });

  // 按15个/批分批上传
  for (let i = 0; i < files.length; i += 15) {
    const batch = files.slice(i, i + 15);
    await page.goto('https://studio.youtube.com/creation/upload');
    
    // 等待上传输入框加载并上传文件
    const fileInput = await page.waitForSelector('input[type="file"][accept="video/*"]');
    await fileInput.uploadFile(...batch);
    
    // 等待当前批次上传完成(根据视频大小调整等待时长)
    console.log(`等待批次 ${Math.floor(i/15)+1} 上传完成...`);
    await new Promise(resolve => setTimeout(resolve, 120000)); // 示例等待2分钟
  }

  await browser.close();
}

// 调用上传函数
uploadViaYouTubeStudio('./your-video-folder');

注意:首次运行需手动完成登录,若要实现自动登录可通过保存浏览器cookie实现;需根据视频大小调整等待时间,避免未上传完成就开始下一批。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:50:43