我正在测试 Google Video Intelligence 语音转文本,以便用多个扬声器转录播客剧集。
我提取了一个示例并将其发布到一个要点:output.json。
cat file.json | jq '.response.annotationResults[].speechTranscriptions[].alternatives[] | {startTime: .words[0].startTime, segment: .transcript }'
上面的命令将打印出startTime
每个段的,以及段本身。jq-输出.json
{
"time": "6.400s",
"segment": "Hi, my name is Melinda Smith from Noble works. ...snip"
}
{
"time": "30s",
"segment": " Any Graham as a tool for personal and organizational ...snip"
}
我的目标是让speakerTag
每个段包含在我的 jq 输出中。
这就是我被困住的地方......开始,其中的每个数组都.alternatives[]
包含.transcript
一个包含该段的字符串.confidence
,以及.words[]
一个包含该段的每个单词及其说出时间的数组。
JSON 的那部分是我如何获得输出的第一部分。然后,在遍历完成绩单的每一段之后,在底部,它有一个最后一个.alternatives[]
数组,包含(再次)整个成绩单中的每个单词,一次一个单词,以及它的 startTime、endTime 和 speakerTag。
这是我的意思的简化示例:
speechTranscriptions:
alternatives:
transcript: "Example transcript segment"
words:
word: "Example"; startTime: 0s;
word: "transcript"; startTime: 1s;
word: "segment"; startTime: 2s;
alternatives:
transcript: "Another transcript segment"
words:
word: "Another"; startTime: 3s;
word: "transcript"; startTime: 4s;
word: "segment"; startTime: 5s;
alternatives:
words:
word: "Example"; startTime: 0s; speakerTag: 1;
word: "transcript"; startTime: 1s; speakerTag: 1;
word: "segment"; startTime: 2s; speakerTag: 1;
word: "Another"; startTime: 3s; speakerTag: 2;
word: "transcript"; startTime: 4s; speakerTag: 2;
word: "segment"; startTime: 5s; speakerTag: 2;
我的想法是以某种方式通过jq-output.json,并将每个与原始视频智能 API 输出中找到startTime
的对应匹配。speakerTag
.response.annotationResults[].speechTranscriptions[].alternatives[] | ( if .words[].speakerTag then {time: .words[].startTime, speaker: .words[].speakerTag} else empty end)
我尝试了一些变体,只打印出开始时间和扬声器标签,然后在下一步中匹配这些值。我的问题是不了解如何仅在 startTime 具有相应的 speakerTag 时打印它。
如评论中所述,最好在一个命令中生成此结果,但我只是试图将问题分解为我可以尝试理解的部分。