You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改YouTube API查询以筛选特定语言字幕并区分人工/自动翻译

针对YouTube字幕查询需求的代码修改方案

没问题!咱们可以直接基于你现有的YouTube Data API查询代码来修改,完美实现你要的两个目标,还能区分转录/翻译字幕、人工/自动翻译类型。下面我一步步给你拆解:

目标1:查找带有指定语言转录字幕的视频

转录字幕是和视频原语言匹配的字幕(可能是自动生成的,也可能是人工上传的),咱们可以通过API的字段筛选来精准定位:

实现步骤

  1. 先通过Search.list接口筛选带有字幕的视频(用videoCaption=closedCaption参数缩小范围)
  2. 对每个返回的视频,调用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)的翻译字幕,还要区分翻译是人工还是自动生成的。

实现步骤

  1. 同样先搜索带字幕的视频
  2. 对每个视频,先确认存在Lang A的转录字幕
  3. 再检查是否存在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:25:53