录制字幕
实时转录翻译支持录制字幕文本,生成 .vtt 文件并保存到配置的云存储中。录制的字幕可与音视频录制文件同步播放,也可用于生成会议纪要与主题摘要、情感分析和内容审核。录制字幕不收取额外费用。
本文介绍如何录制字幕,并将字幕与云端录制生成的音视频文件同步。
云端录制与转写任务运行在不同服务器上,要同步时间戳,必须在云端录制中开启 NTP 时间戳。
前提条件
开始前,清确保你的开发环境满足以下条件:
- 参考开通服务在声网控制台开通实时语音转写服务,并复制保存 App ID、临时 Token、客户 ID 和客户密钥,以供后续使用。
- 可以访问互联网的计算机。如果你的网络环境部署了防火墙,参考应对防火墙限制以正常使用声网服务。
- 集成并使用声网 实时互动 RTC SDK 搭建一个极简的实时音视频互动 App。
- 参考实现 HTTP 基本认证获取
Authorization值。
-
使用原生平台 v4.2.6.3 或 Web v4.20.1 及以上版本的 Video SDK,并支持
datastreamEncryptionEnabled。 -
在云端录制的
start请求体中将enableNTPtimestamp参数设置为true,以便与转写时间戳对齐。云端录制
start请求体示例JSON"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 2,
"channelType": 1,
"extensionParams": {
"enableNTPtimestamp": true
},
"transcodingConfig": {
"width": 1280,
"height": 720,
"fps": 15,
"bitrate": 2400,
"mixedVideoLayout": 3,
"layoutConfig": [
{
"alpha": 1,
"height": 1,
"render_mode": 1,
"uid": "22228",
"width": 1,
"x_axis": 0,
"y_axis": 0
}
]
}
},
实现方法
按照以下步骤录制字幕,并与对应录制文件同步以便顺畅回放。
录制字幕
按照快速开始中的 API 调用流程,并在 start 请求中加入字幕录制参数,如下所示:
curl --location --request POST 'https://api.sd-rtn.com/api/speech-to-text/v1/projects/{appId}/join' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <credentials>' \
--data '{
"name": "unique-agent-id",
"languages": [
"en-US"
],
"maxIdleTime": 50,
"rtcConfig": {
"channelName": "<YourChannelName>",
"subBotUid": "<YourSubscribeUid>",
"subBotToken": "<YourSubscribeToken>",
"pubBotUid": "<YourPublishUid>",
"pubBotToken": "<PublishToken-IfRequired>"
},
"captionConfig": {
"storage": {
"accessKey": "<YourOssAccessKey>",
"secretKey": "<YourOssSecretKey>",
"bucket": "<YourOssBucketName>",
"vendor": <YourOssVendorCode>,
"region": <YourOssRegionCode>,
"fileNamePrefix": ["folder","sub-folder"]
}
}
}'
同步文件
实时转录翻译生成的 m3u8+vtt 与云端录制生成的 m3u8+ts 是两套独立文件,时间戳不同:云端录制时间戳从 0 开始,实时转录翻译使用系统时间戳。如果任一过程异常启动,可能导致播放时音视频与字幕不同步。
声网提供了后处理脚本用于同步 m3u8+ts 与 m3u8+vtt 文件。运行步骤如下:
-
解压后处理脚本到本地目录。
-
对转写文件运行脚本:
Pythonpython3 insert_subtitle.py --av audio_dir/audio_ts.m3u8 --subtitle subtitle_dir/subtitle.m3u8 --output output_dir/ --overwrite如果
ffmpeg/ffprob不在PATH中,可通过-ffmpeg_path指定路径。 -
播放同步后的文件:
-
运行下列命令启动 HTTP 服务器:
Pythonpython3 -m http.server --bind 127.0.0.1 -d output_dir -
在浏览器访问:
Bashhttp://127.0.0.1:8000/player_demo.html
-
支持的云存储厂商
vendor:Number,第三方云存储厂商,支持以下取值:
1: Amazon S35: Microsoft Azure6: Google Cloud
region:Number,第三方云存储的地域信息,仅支持以下列表:
-
阿里云 (
vendor=2):0:CN_Hangzhou1:CN_Shanghai2:CN_Qingdao3:CN_Beijing4:CN_Zhangjiakou5:CN_Huhehaote6:CN_Shenzhen7:CN_Hongkong8:US_West_19:US_East_110:AP_Southeast_111:AP_Southeast_212:AP_Southeast_313:AP_Southeast_514:AP_Northeast_115:AP_South_116:EU_Central_117:EU_West_118:EU_East_119:AP_Southeast_620:CN_Heyuan21:CN_Guangzhou22:CN_Chengdu23:CN_Nanjing24:CN_Fuzhou25:CN_Wulanchabu26:CN_Northeast_227:CN_Southeast_7
详见阿里云官方文档.
-
腾讯云 (
vendor=3):0:AP_Beijing_11:AP_Beijing2:AP_Shanghai3:AP_Guangzhou4:AP_Chengdu5:AP_Chongqing6:AP_Shenzhen_FSI7:AP_Shanghai_FSI8:AP_Beijing_FSI9:AP_Hongkong10:AP_Singapore11:AP_Mumbai12:AP_Seoul13:AP_Bangkok14:AP_Tokyo15:NA_Siliconvalley16:NA_Ashburn17:NA_Toronto18:EU_Frankfurt19:EU_Moscow
-
金山云 (
vendor=4):0:CN_Hangzhou1:CN_Shanghai2:CN_Qingdao3:CN_Beijing4:CN_Guangzhou5:CN_Hongkong6:JR_Beijing7:JR_Shanghai8:NA_Russia_19:NA_Singapore_1
-
华为云 (
vendor=7):0:CN_North_11:CN_North_42:CN_East_23:CN_East_34:CN_South_15:CN_Southwest_26:AP_Southeast_17:AP_Southeast_28:AP_Southeast_39:AF_South_110:SA_Argentina_111:SA_Peru_112:NA_Mexico_113:SA_Brazil_114:LA_South_215:SA_Chile_1