您需要一个API来以编程方式将YouTube视频转换为音频文件,并在本周内交付。通过本文,您将获得可以从YouTube URL或ID返回直接MP3下载链接的curl和Python代码,并且您将知道如何将其集成到您的媒体管道中,使用Zyla API Hub。
此API的功能(以及它对媒体集成的重要性)
YouTube到音频API将YouTube视频转换为音频文件,并返回直接下载链接以及有用的元数据(标题、持续时间、文件大小)。它公开了两个简单的端点:一个接受YouTube视频ID;另一个接受完整的YouTube URL。这非常适合:
- 播客或讲座摄取:提取MP3以进行下游转录或摘要。
- 音频剪辑工作流:获取音频以剪切片段、归一化或混合。
- 内容管理:存档视频内容的音频版本以便于内部搜索或合规。
- 代理工具:让AI代理在用户放入YouTube链接时提取音频。
您将通过HTTPS调用端点,使用Zyla API Hub上的单个密钥,该密钥可以在市场中重复使用。
在Zyla API Hub上开始
打开YouTube到音频API的API页面并订阅。该中心使用订阅+配额模型,而不是按调用付费。没有免费计划;第一个API通常提供7天的试用或50个请求,以便您解除阻塞。订阅后,您将收到一个API密钥。本文中的所有请求都使用Authorization: Bearer YOUR_API_KEY头。
请访问此处开始:开始7天的YouTube到音频API试用。您还可以在Zyla API Hub市场上浏览超过10,000个公共API,使用一个帐户和一个API密钥。
您将使用的端点
该API在Zyla API Hub上公开了两个GET端点。两者都需要Authorization头。仅支持下面列出的参数。
1)获取音频(按YouTube视频ID)
- 方法:GET
- URL:https://zylalabs.com/api/381/youtube-to-audio-api/8884/get-audio
- 必需参数:id(字符串)— YouTube视频ID。
- 描述:提供YouTube视频ID以接收直接的MP3链接和元数据。
curl示例(复制粘贴):
curl -s -X GET "https://zylalabs.com/api/381/youtube-to-audio-api/8884/get-audio?id=xFYQQPAOz7Y" \
-H "Authorization: Bearer YOUR_API_KEY"
官方示例响应:
{
"msg": "success",
"link": "https://theta.123tokyo.xyz/get.php/d/fa/xFYQQPAOz7Y.mp3?n=Eminem%20-%20Lose%20Yourself&uT=R&uN=QWxlam9aeWxhTGFicw%3D%3D&h=TcO7xrzRPZ9cGbw2wXP93w&s=1784312338&uT=R&uN=QWxlam9aeWxhTGFicw%3D%3D",
"status": "ok",
"duration": 327.49718169275,
"title": "Eminem - Lose Yourself",
"progress": 100,
"pc": 0,
"filesize": 4181397
}
您实际使用的字段说明:
- link:生成的MP3的直接URL;您可以流式传输或下载它。
- title:视频标题(有助于文件名默认值)。
- duration:音频长度(以秒为单位,浮点数)。
- filesize:音频文件的大小(以字节为单位)。
- status和msg:操作状态;用于简单的成功检查。
2)下载音频(按完整YouTube URL)
- 方法:GET
- URL:https://zylalabs.com/api/381/youtube-to-audio-api/22174/download-audio
- 必需参数:url(字符串)— 完整的YouTube URL。
- 描述:提供完整的YouTube URL以检索可下载的音频URL。
curl示例(复制粘贴):
官方示例响应:
字段说明:
- downloadUrl:您可以GET以下载提供的YouTube视频的音频的URL。
何时使用每个端点
- 已经有视频ID(例如,“xFYQQPAOz7Y”)?使用获取音频。您将获得直接的MP3链接以及持续时间、标题、进度和文件大小。
- 有完整的YouTube URL(例如,https://www.youtube.com/watch?v=_Yhyp-_hX2s)?使用下载音频。您将获得该资源的可下载URL。
如果您需要元数据(持续时间/标题/文件大小)与链接一起,优先使用带ID的获取音频。如果您的输入是用户粘贴的URL,请从下载音频开始,以最小化预处理。
一个有效的Python示例
此Python示例演示了如何调用获取音频端点,验证响应,并使用返回的链接将MP3下载到磁盘。将YOUR_API_KEY替换为您从API页面获得的密钥。
import os
import sys
import json
import time
import urllib.parse
import requests
API_KEY = os.getenv("ZYLALABS_API_KEY", "YOUR_API_KEY")
VIDEO_ID = "xFYQQPAOz7Y" # 示例ID;在生产中替换
def get_audio_by_id(video_id: str):
url = "https://zylalabs.com/api/381/youtube-to-audio-api/8884/get-audio"
params = {"id": video_id}
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get(url, headers=headers, params=params, timeout=60)
resp.raise_for_status()
return resp.json()
def download_file(file_url: str, out_path: str):
with requests.get(file_url, stream=True, timeout=300) as r:
r.raise_for_status()
with open(out_path, "wb") as f:
for chunk in r.iter_content(chunk_size=1_048_576): # 1MB
if chunk:
f.write(chunk)
def main():
data = get_audio_by_id(VIDEO_ID)
# 基本检查基于文档字段
if data.get("status") != "ok" or data.get("msg") != "success":
print("转换不成功:", json.dumps(data, indent=2))
sys.exit(1)
link = data.get("link")
title = data.get("title") or VIDEO_ID
duration = data.get("duration")
size_bytes = data.get("filesize")
if not link:
print("未返回下载链接:", json.dumps(data, indent=2))
sys.exit(1)
# 创建安全文件名
safe_title = "".join(c for c in title if c.isalnum() or c in (" ", "-", "_")).strip()
filename = f"{safe_title or VIDEO_ID}.mp3"
print(f"正在下载:{title}({duration:.2f}s,{size_bytes}字节)")
download_file(link, filename)
print(f"已保存到{filename}")
if __name__ == "__main__":
main()
注意:
- 两个端点都需要Authorization头。
- 持续时间是以秒为单位的浮点数。
- filesize是字节;用于进度条或磁盘配额检查。
- 流式传输大文件以避免将整个文件加载到RAM中。
实用提示和集成细节
- 重试策略:对第三方下载链接的网络跳转可能会出现间歇性故障。将最终文件下载包装在带有指数退避的重试中。
- 文件名安全:使用返回的标题,但进行清理以避免无效的文件系统字符。
- 缓存:如果您重复处理相同的YouTube资源,请在您的侧面缓存最终的MP3,以视频ID为键,以节省时间和配额。
- 元数据持久性:将持续时间和文件大小与您的资产记录存储在一起,以支持用户体验元素,如估计下载时间。
- 后台作业:异步运行转换和下载,以保持API延迟不影响您的请求路径。
您本周可以交付的常见媒体工作流
- 转录管道:在粘贴的YouTube URL上使用下载音频,获取MP3,然后将其交给您的语音转文本工具。
- 片段生成器:使用获取音频提取音频和元数据,然后剪切30-60秒的预告片以进行社交分发。
- 知识摄取:定期将长篇教育内容转换为MP3,以便于下游索引和语义搜索。
- 代理交接:让聊天机器人接受YouTube URL,调用API,并返回音频链接供用户下载。
通过MCP从AI代理调用此API
每个Zyla API都可以从支持模型上下文协议(MCP)的AI代理调用。将您的MCP兼容客户端指向MCP端点,并将您的密钥作为查询参数: https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY。从那里,您的代理可以发出与上述YouTube到音频API端点相同的HTTPS调用。有关代理配置的详细信息,请参阅MCP资源。
代理的典型流程:
- 接受用户输入(YouTube URL或ID)。
- 选择相应的端点(ID使用获取音频;完整URL使用下载音频)。
- 将最终的MP3下载链接返回给用户或链中的下一个工具。
故障排除
- 401 未授权:确保Authorization头存在,并且承载令牌是您从市场获得的有效密钥。
- 缺少或无效参数:每个端点都需要恰好一个参数(获取音频的id,下载音频的url)。验证格式和查询字符串的URL编码。
- 下载缓慢:流式传输文件,如果将资产重新分发给许多用户,请考虑在您的侧面使用CDN。
- 配额规划:市场使用订阅+配额。监控您的使用情况,并选择一个覆盖您每周转换量的计划。检查API页面以获取当前访问选项和定价。
安全和合规提醒
- 在转换和存储音频时,尊重内容权利和条款。
- 根据需要重新生成下载链接,而不是硬编码可能会过期的第三方URL。
- 仅存储您需要的内容:缓存音频和最少的元数据(标题、持续时间、文件大小)以满足您的用例。
复制粘贴:最小JavaScript获取代码片段
如果您更喜欢JavaScript,这里有一个小示例,针对按ID获取音频并记录直接的MP3链接:
const API_KEY = "YOUR_API_KEY";
const videoId = "xFYQQPAOz7Y";
async function getAudioLinkById(id) {
const url = new URL("https://zylalabs.com/api/381/youtube-to-audio-api/8884/get-audio");
url.searchParams.set("id", id);
const resp = await fetch(url.toString(), {
method: "GET",
headers: { "Authorization": `Bearer ${API_KEY}` }
});
if (!resp.ok) {
throw new Error(`HTTP ${resp.status}`);
}
const data = await resp.json();
if (data.status !== "ok" || data.msg !== "success" || !data.link) {
throw new Error(`转换未准备好或失败:${JSON.stringify(data)}`);
}
return {
mp3Url: data.link,
title: data.title,
durationSec: data.duration,
sizeBytes: data.filesize
};
}
getAudioLinkById(videoId)
.then(info => {
console.log("MP3 URL:", info.mp3Url);
console.log("标题:", info.title);
console.log("持续时间(秒):", info.durationSec);
console.log("大小(字节):", info.sizeBytes);
})
.catch(err => {
console.error("错误:", err);
});
交付清单
对于批量摄取作业
- 输入规范化:在需要元数据时,将任何粘贴的YouTube URL转换为ID(获取音频),或按原样传递URL(下载音频)。
- 并行性:限制并发转换和下载,以匹配您的计算和网络能力。
- 存储密钥:在您的系统中使用YouTube视频ID作为规范资产密钥。
- 错误处理:在瞬态故障时,重试最终文件下载;在4xx错误时,记录并跳过。
对于用户触发的下载按钮
- 服务器调用:从服务器端调用端点,而不是从浏览器,以保护您的API密钥。
- 临时URL:在单击时获取新链接,以避免过期的URL。
- 进度UI:使用文件大小计算进度和持续时间,以估算“剩余时间”。
回顾:使用的确切端点
- GET https://zylalabs.com/api/381/youtube-to-audio-api/8884/get-audio?id=YOUR_VIDEO_ID — 返回链接、标题、持续时间、进度、文件大小。
- GET https://zylalabs.com/api/381/youtube-to-audio-api/22174/download-audio?url=YOUR_YOUTUBE_URL — 返回提供的视频URL的downloadUrl。
两个端点的身份验证头:Authorization: Bearer YOUR_API_KEY。
常见问题解答
问:我需要完整的URL还是仅视频ID?
答:如果您有视频ID并希望获取带有MP3链接的元数据,请使用获取音频。如果您有完整的YouTube URL,请使用下载音频。
问:文件大小代表什么?
答:它是MP3的字节大小。使用它来估算带宽需求并渲染进度条。
问:我可以从AI代理调用这个吗?
答:可以。将您的MCP兼容客户端指向MCP端点(https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY),并让代理调用上述相同的API URL。
问:如何处理计费?
答:Zyla使用订阅+配额模型,而不是按调用付费。没有免费计划。第一个API通常提供7天的试用或50个请求以开始。检查API页面以获取当前访问选项和定价。
问:我需要什么头?
答:在每个请求中包含Authorization: Bearer YOUR_API_KEY。
准备好实现您的媒体流了吗?获取您的密钥并立即开始将视频转换为MP3:开始7天的YouTube到音频API试用。