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

如何获取YouTube视频中各说话人对应的发言时间戳?

YouTube视频发言者时间戳提取Python实现方案

整体实现逻辑

实现该需求分为两个核心步骤:首先拉取YouTube视频的独立音频文件,再通过说话人分割(Speaker Diarization)模型识别不同发言者的说话时间段,最终整理为你需要的字典格式。

依赖安装

首先安装所需的第三方库:

pip install yt-dlp pyannote.audio torch

代码实现

步骤1:编写音频下载函数

使用yt-dlp直接下载目标YouTube视频的16kHz采样率单声道音频,适配语音模型的输入要求:

import yt_dlp

def download_youtube_audio(video_url, output_path="audio.wav"):
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'wav',
            'preferredquality': '192',
        }],
        'postprocessor_args': [
            '-ar', '16000',
            '-ac', '1'
        ],
        'outtmpl': output_path.rsplit('.', 1)[0],
        'quiet': True
    }
    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        ydl.download([video_url])
    return output_path

步骤2:编写说话人时间戳提取函数

使用预训练的说话人分割模型处理音频,输出格式化后的时间戳结果:

from pyannote.audio import Pipeline
from datetime import timedelta

def format_time(seconds):
    td = timedelta(seconds=round(seconds))
    return str(td)[2:7] # 截取MM:SS部分,需要HH的话调整切片即可

def get_speaker_timestamps(audio_path, hf_token, num_speakers=None):
    # 加载说话人分割Pipeline
    pipeline = Pipeline.from_pretrained(
        "pyannote/speaker-diarization-3.1",
        use_auth_token=hf_token
    )
    # 处理音频
    diarization = pipeline(audio_path, num_speakers=num_speakers)
    # 整理结果
    result = {}
    for segment, _, speaker in diarization.itertracks(yield_label=True):
        time_range = f"{format_time(segment.start)}-{format_time(segment.end)}"
        if speaker not in result:
            result[speaker] = []
        result[speaker].append(time_range)
    return result

步骤3:组合调用示例

if __name__ == "__main__":
    # 替换为目标YouTube视频链接
    VIDEO_URL = "你的目标YouTube视频链接"
    # 替换为你的Hugging Face访问令牌
    HF_TOKEN = "你的Hugging Face访问令牌"
    # 提前知道发言人数的话可以填,不填模型会自动推断
    SPEAKER_COUNT = 3

    # 下载音频
    audio_file = download_youtube_audio(VIDEO_URL)
    # 获取时间戳
    timestamps = get_speaker_timestamps(audio_file, HF_TOKEN, num_speakers=SPEAKER_COUNT)
    print(timestamps)

输出示例

代码运行后会返回和你要求格式完全一致的结果:

{
    'SPEAKER_00': ['00:09-01:04', '01:15-05:12'],
    'SPEAKER_01': ['08:00-09:02', '15:15-20:12'],
    'SPEAKER_02': ['10:19-11:04', '25:10-35:17'],
}

注意事项

  • 如果目标视频自带带说话人标记的官方字幕,可以直接通过yt-dlp拉取字幕文件解析,无需跑模型,速度更快准确率更高。
  • 提前知道发言人数的情况下给get_speaker_timestamps传num_speakers参数,能大幅提升识别准确率。
  • 模型运行需要本地有至少4G内存,有GPU的话处理速度会快很多。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:36:03