如何修改YouTube API查询以筛选特定语言字幕并区分人工/自动翻译
针对YouTube字幕查询需求的代码修改方案
没问题!咱们可以直接基于你现有的YouTube Data API查询代码来修改,完美实现你要的两个目标,还能区分转录/翻译字幕、人工/自动翻译类型。下面我一步步给你拆解:
目标1:查找带有指定语言转录字幕的视频
转录字幕是和视频原语言匹配的字幕(可能是自动生成的,也可能是人工上传的),咱们可以通过API的字段筛选来精准定位:
实现步骤
- 先通过
Search.list接口筛选带有字幕的视频(用videoCaption=closedCaption参数缩小范围) - 对每个返回的视频,调用
Captions.list接口,筛选出符合「指定语言」且「是转录字幕」的条目
修改后的代码片段(PHP)
// 初始化YouTube客户端(你原来的代码应该已经有这部分了) // $youtube = new Google_Service_YouTube($client); // 1. 先搜索带字幕的视频,可按需添加关键词 $searchResponse = $youtube->search->listSearch('id,snippet', [ 'q' => '可选:你的搜索关键词', 'type' => 'video', 'videoCaption' => 'closedCaption', // 只返回带字幕的视频 'maxResults' => 50 // 单次查询最大数量,可调整 ]); // 配置你要找的目标语言,比如英语=en,简体中文=zh-CN $targetTranscriptLang = 'en'; $matchedVideos = []; // 遍历每个视频,检查字幕情况 foreach ($searchResponse['items'] as $searchResult) { $videoId = $searchResult['id']['videoId']; // 获取该视频的所有字幕资源 $captionsResponse = $youtube->captions->listCaptions('snippet', [ 'videoId' => $videoId ]); // 查找目标语言的转录字幕 foreach ($captionsResponse['items'] as $caption) { $snippet = $caption['snippet']; // 核心判断:语言匹配 + 是转录字幕 if ($snippet['language'] === $targetTranscriptLang && $snippet['isTranscript']) { $matchedVideos[] = [ '视频ID' => $videoId, '视频标题' => $searchResult['snippet']['title'], '字幕类型' => $snippet['trackKind'] === 'autoGenerated' ? '自动转录' : '人工上传转录' ]; break; // 找到符合条件的就不用继续检查这个视频的其他字幕了 } } } // 输出结果 print_r($matchedVideos);
目标2:查找带有Lang A转录字幕 + Lang B翻译字幕的视频(区分人工/自动翻译)
这个需求需要同时满足两个条件:有原语言(Lang A)的转录字幕,且有目标语言(Lang B)的翻译字幕,还要区分翻译是人工还是自动生成的。
实现步骤
- 同样先搜索带字幕的视频
- 对每个视频,先确认存在Lang A的转录字幕
- 再检查是否存在Lang B的翻译字幕,并通过字段区分翻译类型
修改后的代码片段(PHP)
// 配置语言:Lang A是原语言转录,Lang B是目标翻译语言 $sourceLang = 'en'; // 示例:英语原语言 $targetTranslateLang = 'zh-CN'; // 示例:简体中文翻译 $dualCaptionVideos = []; foreach ($searchResponse['items'] as $searchResult) { $videoId = $searchResult['id']['videoId']; $captionsResponse = $youtube->captions->listCaptions('snippet', [ 'videoId' => $videoId ]); $hasSourceTranscript = false; $translationDetails = []; // 第一步:检查是否有Lang A的转录字幕 foreach ($captionsResponse['items'] as $caption) { $snippet = $caption['snippet']; if ($snippet['language'] === $sourceLang && $snippet['isTranscript']) { $hasSourceTranscript = true; break; } } // 没有原语言转录的视频直接跳过 if (!$hasSourceTranscript) { continue; } // 第二步:查找Lang B的翻译字幕,区分人工/自动 foreach ($captionsResponse['items'] as $caption) { $snippet = $caption['snippet']; // 翻译字幕的标记:isTranscript为false,且语言是目标翻译语言 if ($snippet['language'] === $targetTranslateLang && !$snippet['isTranscript']) { $translationType = $snippet['trackKind'] === 'autoTranslated' ? '自动翻译' : '人工翻译'; $translationDetails[] = [ '翻译类型' => $translationType, '字幕ID' => $caption['id'] ]; } } // 如果找到符合条件的翻译字幕,加入结果列表 if (!empty($translationDetails)) { $dualCaptionVideos[] = [ '视频ID' => $videoId, '视频标题' => $searchResult['snippet']['title'], '翻译选项' => $translationDetails ]; } } // 输出结果 print_r($dualCaptionVideos);
几个关键细节提醒
- 语言代码要使用YouTube支持的标准格式,比如
en(英语)、zh-CN(简体中文)、ja(日语),用ISO 639-1代码或带地区的扩展代码即可 - YouTube API有配额限制,批量查询时记得做分页处理,避免超出配额导致调用失败
- 少数老视频的字幕可能没有标记
isTranscript,这种情况可以结合视频的原语言(snippet.defaultAudioLanguage)来辅助判断
内容的提问来源于stack exchange,提问作者Jeremy Bullard
相关产品推荐
相关产品推荐

