ytDownloader视频信息提取:获取详细元数据的API调用方法
你是否在下载视频时遇到过需要获取标题、时长、分辨率等详细信息的情况?作为内容创作者或视频爱好者,了解视频元数据(Metadata)能帮助你更好地管理媒体库、筛选优质内容。本文将详细介绍如何通过ytDownloader的API接口获取视频详细信息,无需完整下载即可提取关键数据。
元数据提取原理与核心工具
ytDownloader基于yt-dlp实现视频解析功能,通过调用src/playlist.js中的API接口,可在下载前获取视频的完整元数据。核心依赖组件包括:
- yt-dlp-wrap-plus:yt-dlp的Node.js封装库,提供进程管理和事件监听能力
- FFmpeg:用于媒体处理和元数据嵌入,路径配置见src/playlist.js#L46-L69
- Electron IPC:实现渲染进程与主进程的通信,处理文件选择等系统操作
支持的元数据类型
通过API可获取的视频信息包括但不限于:
- 基础信息:标题、作者、发布日期、描述
- 媒体参数:分辨率、帧率、比特率、编码格式
- 扩展数据:缩略图URL、字幕列表、章节信息
完整调用流程
1. 初始化核心组件
首先需要实例化yt-dlp-wrap-plus并配置FFmpeg路径,代码位于src/playlist.js#L2-L12:
const {default: YTDlpWrap} = require("yt-dlp-wrap-plus");
const ytDlp = localStorage.getItem("ytdlp");
const ytdlp = new YTDlpWrap(`"${ytDlp}"`);
// 配置FFmpeg路径
let ffmpegPath;
if (os.platform() === "win32") {
ffmpegPath = `${__dirname}\\..\\ffmpeg.exe`;
} else {
ffmpegPath = `${__dirname}/../ffmpeg`;
}
2. 构建元数据提取参数
使用--print-json参数可获取JSON格式的完整元数据,典型调用参数配置如下(参考src/playlist.js#L469-L488):
const args = [
"--yes-playlist",
"--no-warnings",
"--skip-download", // 跳过实际下载
"--print-json", // 输出JSON格式元数据
"--no-check-certificate",
proxy ? "--proxy" : "",
proxy,
`"${url}"` // 视频URL
].filter(item => item);
3. 执行API调用并处理结果
通过exec方法执行命令并监听事件,完整实现见src/playlist.js#L491-L535:
const metadataProcess = ytdlp.exec(args, {shell: true});
metadataProcess.on("ytDlpEvent", (eventType, eventData) => {
try {
const metadata = JSON.parse(eventData);
console.log("提取的元数据:", {
title: metadata.title,
duration: formatDuration(metadata.duration),
resolution: `${metadata.width}x${metadata.height}`,
format: metadata.ext
});
// 显示元数据到UI
displayMetadata(metadata);
} catch (e) {
console.error("JSON解析错误:", e);
}
});
metadataProcess.on("error", (error) => {
showErrorTxt(error); // 错误处理见[src/playlist.js#L530-L532](https://link.gitcode.com/i/5a9f45824ec7395c7768a605b5518089#L530-L532)
});
实用功能实现
格式化时长显示
视频时长通常以秒为单位返回,可通过以下工具函数转换为分:秒格式(可添加到src/common.js):
function formatDuration(seconds) {
const minutes = Math.floor(seconds / 60);
const remainingSeconds = Math.floor(seconds % 60);
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
}
批量提取播放列表信息
通过添加--yes-playlist参数并设置范围,可批量获取整个播放列表的元数据:
// 提取播放列表第1-20个视频的信息
const args = [
"--yes-playlist",
"--skip-download",
"--print-json",
"-I", "1:20", // 设置提取范围
`"${playlistUrl}"`
];
错误处理与调试
常见错误及解决方案
| 错误类型 | 可能原因 | 解决方法 |
|---|---|---|
| JSON解析失败 | 输出包含非JSON日志 | 添加--no-warnings参数过滤警告 |
| 网络连接超时 | 代理配置错误 | 检查src/playlist.js#L90-L91的代理设置 |
| 不支持的网站 | 站点未被yt-dlp支持 | 更新yt-dlp到最新版本 |
调试技巧
- 启用详细日志:添加
-v参数查看完整请求过程 - 测试URL有效性:使用src/playlist.js#L101-L107的
pasteLink函数验证链接 - 检查依赖路径:通过
localStorage.getItem("ytdlp")确认yt-dlp路径是否正确
界面集成示例
在实际应用中,可通过以下步骤将元数据提取功能集成到UI:
- 添加"获取信息"按钮到下载界面(参考html/index.html)
- 点击按钮时调用元数据提取API
- 使用src/common.js中的
showPopup函数显示结果
总结与扩展应用
通过本文介绍的API调用方法,你可以轻松获取视频的详细元数据,为内容管理和筛选提供支持。该功能基于src/playlist.js中的核心实现,可进一步扩展为:
- 批量元数据导出为CSV文件
- 基于分辨率/时长的自动筛选系统
- 视频质量预览功能
要获取更多功能示例,可查看项目中的html/playlist.html和src/playlist_new.js文件。
如果觉得本文有用,请收藏本页并关注项目更新。下期我们将介绍如何使用ytDownloader的字幕提取API,实现多语言字幕的自动下载与匹配。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



