如何使用Google Cloud Speech Transcription for Video Intelligence实现全视频自动分析
全视频自动分析的代码调整方案
核心逻辑
Google Cloud Video Intelligence 根本不需要你手动算出整个视频的总时长再传片段范围——只要你在VideoContext配置里不主动传segments参数,服务默认就会把输入URI对应的视频从头到尾全量执行分析。
你现有代码只能输出55-80秒区间的分析结果,纯粹是因为手动构造了固定时间范围的VideoSegment对象,强行把分析范围锁死在了这一段里。
具体修改步骤
- 把原有代码里手动构造
VideoSegment、配置起止时间戳、把segment打包成列表传给函数的几行全部删掉。 - 调用
transcribe_speech函数时,不要传入自定义的分段参数,保持函数默认的segments=None配置即可。 - 在函数内部加一个简单判断:只有当用户显式传入分段参数时,才将
segments字段挂载到VideoContext配置上。不要图省事直接传空列表[],部分客户端版本会把空列表解析为「无有效分析范围」,最后返回空结果,白白等待服务处理时间。
调整后可直接运行的代码
video_uri = "gs://cloudmleap/video/next/JaneGoodall.mp4" language_code = "en-GB" # 不传入任何分段参数,自动触发全片分析 response = transcribe_speech(video_uri, language_code) def transcribe_speech(video_uri, language_code, segments=None): video_client = videointelligence.VideoIntelligenceServiceClient() features = [enums.Feature.SPEECH_TRANSCRIPTION] config = types.SpeechTranscriptionConfig( language_code=language_code, enable_automatic_punctuation=True, ) # 动态构造VideoContext配置,仅在有分段需求时添加segments字段 context_config = { "speech_transcription_config": config, } if segments is not None: context_config["segments"] = segments context = types.VideoContext(**context_config) print(f'Processing video "{video_uri}"...') operation = video_client.annotate_video( input_uri=video_uri, features=features, video_context=context, ) return operation.result()
顺带修复你原有代码的小误区
你之前写的segment.start_time_offset.FromSeconds(55)实际没有生效:protobuf的Duration类中,FromSeconds是用于新建Duration对象的静态构造方法,不是给现有offset字段赋值的实例方法。就算未来需要指定局部片段范围,这种写法也无法正确传递时间参数,正确的赋值写法是segment.start_time_offset.seconds = 55。
内容的提问来源于stack exchange,提问作者london_utku
相关产品推荐
相关产品推荐

