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

Next.js结合youtube-dl-exec部署Vercel出现500错误求助

问题分析与解决方案

问题核心原因

Vercel Serverless Functions的运行环境默认未安装Python3,而你使用的youtube-dl-exec依赖的yt-dlp是Python脚本,必须依赖Python环境才能执行——这就是本地环境正常,但部署到Vercel后出现500错误的根本原因。

解决方案

方案1:改用纯Node.js视频解析库

放弃依赖Python的youtube-dl-exec,使用纯Node.js实现的ytdl-core,它无需Python环境,更适配Serverless场景。

修改后的pages/api/video/info.js代码:

import ytdl from 'ytdl-core';

export default async function handler(req, res) {
  const { videoLink } = req.query;
  if (!videoLink) {
    return res.status(400).json({
      code: 400,
      message: 'Bad request: the video link is missing.'
    });
  }

  try {
    const videoInfo = await ytdl.getInfo(videoLink);
    res.status(200).json({
      code: 200,
      data: {
        title: videoInfo.videoDetails.title,
        author: videoInfo.videoDetails.author.name,
        lengthSeconds: videoInfo.videoDetails.lengthSeconds,
        viewCount: videoInfo.videoDetails.viewCount,
        thumbnailUrl: videoInfo.videoDetails.thumbnails.at(-1).url,
        description: videoInfo.videoDetails.description,
        formats: videoInfo.formats
      }
    });
  } catch (error) {
    console.error(error);
    res.status(500).json({
      code: 500,
      message: "couldn't get video information",
      error: error.message
    });
  }
}

注意:ytdl-core可能因YouTube API更新出现解析失效,需及时更新包版本。

方案2:为youtube-dl-exec指定预编译yt-dlp二进制

若坚持使用youtube-dl-exec,可通过预编译二进制文件规避Python依赖:

  1. 下载适配Linux环境的yt-dlp预编译二进制文件,重命名为yt-dlp后放入项目的bin目录(如./bin/yt-dlp),本地执行chmod +x ./bin/yt-dlp赋予执行权限,再提交至Git。
  2. 修改接口代码,指定yt-dlp的本地路径:
import youtubedl from 'youtube-dl-exec';
import path from 'path';

export default async function handler(req, res) {
  const { videoLink } = req.query;
  if (!videoLink) {
    res.status(400).json({
      code: 400,
      message: 'Bad request: the video link is missing.'
    });
    return;
  }

  try {
    const videoInfo = await youtubedl(videoLink, {
      dumpSingleJson: true,
      noWarnings: true,
      preferFreeFormats: true,
      // 指向本地预编译的yt-dlp二进制
      path: path.join(process.cwd(), 'bin', 'yt-dlp')
    });
    res.status(200).json({
      code: 200,
      data: {
        title: videoInfo.title,
        author: videoInfo.uploader,
        lengthSeconds: videoInfo.duration,
        viewCount: videoInfo.view_count,
        thumbnailUrl: videoInfo.thumbnail,
        description: videoInfo.description,
        formats: videoInfo.formats,
      },
    });
  } catch (error) {
    console.log(error);
    res.status(500).json({
      code: 500,
      message: "couldn't get video information",
      error: error.message,
    });
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:35:17