使用YouTube Data API下载字幕格式异常问题求助
YouTube Data API字幕下载问题解决指南
问题概述
1. 字幕格式异常
通过API下载的SRT字幕格式错乱,示例如下:
1
00:00:00,719 --> 00:00:06,000
{包含所有台词的长文本}2
00:00:03,240 --> 00:00:09,1203
00:00:06,000 --> 00:00:11,219
[后续条目均为空行]
但通过YouTube Studio下载的同语言字幕格式完全正常。
2. 反馈渠道疑问
按Google指引在Stack Overflow带标签提问后,长期无回复,不确定该渠道是否正确。
所用代码
YouTubeService youtubeService = await GetYouTubeService(); // 获取视频可用字幕列表 var captionListRequest = youtubeService.Captions.List("snippet, id", book.BSYouTubeId); var captionListResponse = await captionListRequest.ExecuteAsync(); // 获取第一条字幕轨道 var captionTrack = captionListResponse.Items.FirstOrDefault(); if (captionTrack == null) { context.WriteLine("No caption track found."); return; } // 下载字幕轨道 var captionDownloadRequest = youtubeService.Captions.Download(captionTrack.Id); captionDownloadRequest.Tfmt = "srt"; captionDownloadRequest.Tlang = book.GetShortLanguageCode(); var captionStream = await captionDownloadRequest.ExecuteAsStreamAsync(); // 将字幕读取为字符串 var captionString = new StreamReader(captionStream).ReadToEnd();
解决方案
1. 修复字幕格式问题
核心原因:你下载的是自动生成的草稿字幕(Draft Caption),这类字幕的时间轴与文本未完成对齐,导致文本堆积在首条、后续条目为空。YouTube Studio默认下载的是已发布的正式字幕。
修改代码,筛选已发布的字幕轨道:
// 替换原有的FirstOrDefault(),筛选已发布的字幕 var captionTrack = captionListResponse.Items .FirstOrDefault(item => item.Snippet.Status == "published");
额外排查点:
- 确认
Tlang参数与目标字幕的语言代码完全匹配(比如"en"而非"en-US",取决于字幕轨道的实际设置)。 - 若需排除自动生成草稿,可添加额外过滤条件:
var captionTrack = captionListResponse.Items .FirstOrDefault(item => item.Snippet.Status == "published" && (!item.Snippet.IsDraft.HasValue || !item.Snippet.IsDraft.Value));
2. 关于Stack Overflow反馈渠道
Stack Overflow确实是Google官方推荐的开发者问题反馈渠道,但需注意优化提问细节以提升曝光:
- 标签精准:使用
youtube-data-api、youtube-api、captions、srt这类核心标签。 - 补充关键信息:在问题中添加API返回的字幕轨道元数据(如
snippet.status、snippet.isDraft的值),以及你尝试过的排查步骤。 - 定期更新:若3-5天无回复,可编辑问题补充新的测试结果或排查进展,触发系统重新推送问题。
内容的提问来源于stack exchange,提问作者Onur Topal
相关产品推荐
相关产品推荐

