我希望在视频中有两个人的成绩单,但我从云语音到文本API得到一个空的回复
方法
我有一个56分钟的视频文件,其中包含两个人之间的对话。我希望得到该对话的成绩单,并且我想使用Google的Cloud Speech-to-Text API来实现这一目标。
为了节省我的Google云端存储空间,我首先使用mmpeg
将视频转换为音频。
首先,我尝试使用下面的命令找出音频编解码器,它看起来像AAC
ffmpeg -i video.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'videoplayback.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2015-12-30T08:17:14.000000Z
Duration: 00:56:03.99, start: 0.000000, bitrate: 362 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 490x360 [SAR 1:1 DAR 49:36], 264 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s (default)
Metadata:
creation_time : 2015-12-30T08:17:31.000000Z
handler_name : IsoMedia File Produced by Google, 5-11-2011
所以我通过使用以下方式从视频中获取了这个:
ffmpeg -i video.mp4 -vn -acodec copy myaudio.aac
到目前为止的详细信息:
ffmpeg -i myaudio.aac
输出:
Input #0, aac, from 'myaudio.aac':
Duration: 00:56:47.49, bitrate: 97 kb/s
Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 97 kb/s
之后我把它改成了作品,因为我被告知opus更好
ffmpeg -i myaudio.aac -acodec libopus -b:a 97k -vbr on -compression_level 10 myaudio.opus
迄今为止的信息:
opusinfo myaudio.opus
User comments section follows...
encoder=Lavc58.18.100 libopus
Opus stream 1:
Pre-skip: 312
Playback gain: 0 dB
Channels: 2
Original sample rate: 48000Hz
Packet duration: 20.0ms (max), 20.0ms (avg), 20.0ms (min)
Page duration: 1000.0ms (max), 1000.0ms (avg), 1000.0ms (min)
Total data length: 29956714 bytes (overhead: 0.872%)
Playback length: 56m:03.990s
Average bitrate: 71.24 kb/s, w/o overhead: 70.62 kb/s
此时我已将myaudio.opus
上传到Google云端存储。
卷曲POST 1
我通过使用curl
:
curl --request POST --header "Content-Type: application/json" --url 'https://speech.googleapis.com/v1/speech:longrunningrecognize?fields=done%2Cerror%2Cmetadata%2Cname%2Cresponse&key={MY_API_KEY}' --data '{"audio": {"uri": "gs://{MY_BUCKET}/myaudio.opus"},"config": {"encoding": "OGG_OPUS", "sampleRateHertz": 48000, "languageCode": "en-US"}}'
回复:{"name": "123456789"}
123456789不是实际值。
卷曲GET 1
现在我想得到结果:
curl --request GET --url 'https://speech.googleapis.com/v1/operations/123456789?fields=done%2Cerror%2Cmetadata%2Cname%2Cresponse&key={MY_API_KEY}'
这给了我错误:Error : Unable to recognize speech, possible error in encoding or channel config. Please correct the config and retry the request.
所以我将编码配置从OGG_OPUS
更新为LINEAR16
。
卷曲POST 2
再次发帖:
curl --request POST --header "Content-Type: application/json" --url 'https://speech.googleapis.com/v1/speech:longrunningrecognize?fields=done%2Cerror%2Cmetadata%2Cname%2Cresponse&key={MY_API_KEY}' --data '{"audio": {"uri": "gs://{MY_BUCKET}/myaudio.opus"},"config": {"encoding": "LINEAR16", "sampleRateHertz": 48000, "languageCode": "en-US"}}'
回复:{"name": "987654321"}
卷曲GET 2
curl --request GET --url 'https://speech.googleapis.com/v1/operations/987654321?fields=done%2Cerror%2Cmetadata%2Cname%2Cresponse&key={MY_API_KEY}'
响应:
{
"name": "987654321",
"metadata": {
"@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
"progressPercent": 100,
"startTime": "2018-06-08T11:01:24.596504Z",
"lastUpdateTime": "2018-06-08T11:01:51.825882Z"
},
"done": true
}
问题是我没有得到实际的转录。根据文档,响应中应该有一个包含数据的response
密钥。
因为我有点被困在这里,我想知道我做错了什么。我没有任何技术或资源限制因此非常欢迎所有建议!也很乐意改变我的方法。
提前致谢!干杯
答案 0 :(得分:0)
Looks like目前仅支持WAV和FLAC。
在本地使用gcloud
命令,我成功了:
gcloud ml speech recognize-long-running gs://bucket-name/file.flac --language-code en-US --include-word-time-offsets > my_transcription.json
使用本地文件时出现字节限制错误。 Says you can