如何通过YouTube Data API发布YouTube Shorts?附常规视频上传代码
能否通过YouTube Data API发布YouTube Shorts?
答案是肯定的,但你之前尝试的标题/描述加#Shorts、更换分类ID的方法不是核心——YouTube判定Shorts的关键是视频本身的格式属性,再配合API参数的正确设置。
核心要求与修改方案
- 视频格式必须符合Shorts标准:视频必须是9:16竖屏比例(推荐分辨率1080x1920),这是YouTube识别为Shorts的前提,光靠标签无法触发。
- 在API请求中添加Shorts标签:在视频元数据的
snippet.tags数组里加入'Shorts',这会帮助YouTube更快识别内容类型(标题/描述里加#Shorts可以作为补充,但不是必须)。 - 分类ID无需特意更换:原代码里的分类ID
42(娱乐类)完全可以用于Shorts,分类不是判定Shorts的因素。
修改后的代码示例
static async uploadVideo(auth, videoTitle, videoDescription, videoUrl, is_private,publishDate) { const youtube = google.youtube({ version: 'v3', auth }); const status = {privacyStatus: is_private ? 'private' : 'public'}; if (publishDate) { status.publishAt = publishDate } const videoMetadata = { snippet: { title: videoTitle || 'Default Video Title', description: videoDescription || 'Default Video Description', categoryId : '42', // 添加Shorts标签,帮助平台识别 tags: ['Shorts'], // 可选:设置语言参数(非必须) defaultAudioLanguage: 'zh-CN', defaultLanguage: 'zh-CN' }, status }; const videoStream = await this.fetchVideoStream(videoUrl); if (videoStream) { const res = await youtube.videos.insert( { part: 'snippet,status', requestBody: videoMetadata, media: { body: videoStream, }, }, { onUploadProgress: (event) => { const progress = (event.bytesRead / event.totalBytes) * 100; console.log(`Upload progress: ${progress.toFixed(2)}%`); }, } ); return { title: res.data.snippet.title, id: res.data.id, }; } else { console.log('VIDEO STREAM FAILED',videoStream); } }
额外注意事项
- 上传完成后,YouTube可能需要几分钟到几十分钟的时间完成内容识别,才会将视频标记为Shorts,不是即时生效。
- 如果仍未成功,优先检查视频文件本身:用视频工具确认比例是9:16,分辨率符合要求,没有黑边等问题。
内容的提问来源于stack exchange,提问作者gmanIL
相关产品推荐
相关产品推荐

