如何获取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
相关产品推荐
相关产品推荐

