如何直接在终端里把音频转成文字
有时候写程序毫无必要:十来个录音,处理完就忘。终端在这件事上比任何应用都顺手——一条 curl 就把文件变成文字,一段小脚本就能清空整个文件夹。
单个文件
curl https://voicesscribe.com/v1/audio/transcriptions \
-H "Authorization: Bearer $VS_KEY" \
-F file=@call.ogg \
-F model=whisper-1
返回是 JSON。只想要文本就接一个 jq:
curl -s https://voicesscribe.com/v1/audio/transcriptions \
-H "Authorization: Bearer $VS_KEY" \
-F file=@call.ogg -F model=whisper-1 | jq -r .text
密钥放环境变量里:带明文密钥的命令会留在 shell 历史和日志里。
其他返回格式
response_format 字段直接在请求里决定输出形态:
# 字幕直接落地成文件
curl -s https://voicesscribe.com/v1/audio/transcriptions \
-H "Authorization: Bearer $VS_KEY" \
-F file=@lecture.ogg -F model=whisper-1 \
-F response_format=srt -o lecture.srt
# 不带 JSON 外壳的纯文本
curl -s https://voicesscribe.com/v1/audio/transcriptions \
-H "Authorization: Bearer $VS_KEY" \
-F file=@note.ogg -F model=whisper-1 \
-F response_format=text一段脚本处理整个文件夹
#!/bin/bash
set -euo pipefail
for f in recordings/*.ogg; do
out="${f%.ogg}.txt"
[ -f "$out" ] && continue
echo "正在处理 $f"
curl -s --fail-with-body https://voicesscribe.com/v1/audio/transcriptions \
-H "Authorization: Bearer $VS_KEY" \
-F file=@"$f" -F model=whisper-1 \
| jq -r .text > "$out"
done
检查文件是否已存在让脚本可以重跑:中断后会从断点继续,已处理的录音不会被重复付费。
排查
--fail-with-body 让 curl 在失败时返回非零码并打印错误内容——没有它,脚本会安静地把错误信息写进转录文件。其他有用的技巧:
- 只看状态码:加上 -o /dev/null -w "%{http_code}\n"。
- 看请求和响应头:-v。
- 发送前确认真实格式:ffprobe 显示的是实际编码,而不是扩展名。
用你自己的录音试一试。 注册只需一分钟,免费额度足够判断识别质量。
免费获取 API 密钥常见问题
必须装 jq 吗?
不必。没有它文件里就是完整 JSON。也可以直接请求 response_format=text 拿到纯文本。
怎么避免密钥留在历史里?
放环境变量,或者放进权限受限的文件里由 shell 加载。
脚本一报错就停,怎么继续?
去掉 set -e,或把调用包在状态码判断里,把失败的文件收集起来另跑一遍。
Windows 上能用吗?
可以,PowerShell 自带 curl.exe,参数完全一样。写脚本的话 WSL 或 Git Bash 更顺手。
相关阅读
- 如何为音频存档搭建批量转录流水线 — 转录上万条录音而不丢失任何一条:任务队列、并发控制、重试策略、崩溃后续跑,以及如何把账单控制在预期之内。
- 转录 API 的报错分别代表什么 — 逐个解释转录接口的状态码:401、400、413、429、502 各自的原因和修法,以及哪些失败值得自动重试。
- 语音识别该选哪种音频格式 — mp3、wav、ogg、opus、m4a 与 webm 在语音识别中的取舍:码率影响多大,为什么单声道 16 kHz 就够,如何不超体积上限。