PHP不直接做语音识别,而是调用云API或封装本地模型;快手字幕需轮询维护cursor,阿里/腾讯云ASR需音频预处理,Whisper本地部署需注意权限、超时和音频质量。

PHP本身不直接做语音识别,所有靠谱的AI字幕方案都靠调用外部服务——要么是云API,要么是本地模型封装接口。你写的PHP代码,本质是调度员和搬运工。
用PHP调用快手AI直播字幕API拉取实时字幕
快手字幕不是“上传完等结果”,而是推流开始后持续轮询拉取,PHP必须主动维护cursor、控制间隔、处理空响应。
-
curl_init是唯一稳妥方式,file_get_contents极易因 header 大小写或 JSON 编码失败返回401 Unauthorized - 每次
/open/live/caption/pull请求必须带上次响应里的cursor字段,漏传就重复或跳段 - 初始轮询间隔设
500ms,响应中has_more === true就立刻再拉,否则退到1000ms - 响应体始终是 JSON,哪怕出错也有
code和message,别依赖http_response_code()判断成败 -
text字段内容必须过htmlspecialchars()才能安全输出到前端,否则XSS风险明显
用PHP对接阿里云/腾讯云ASR生成教程视频离线字幕
这类API适合处理已导出的录屏视频(如MP4),流程固定:抽音频 → 上传 → 轮询状态 → 下载SRT。关键在音频预处理和状态判断逻辑。
- 必须先用
ffmpeg抽出单声道、16kHz采样率的WAV:ffmpeg -i input.mp4 -ar 16000 -ac 1 -f wav audio.wav - 阿里云要求
format参数严格匹配实际格式(如wav),填mp3却传WAV会静默失败 - 腾讯云返回的
ResultText是纯文本,没时间戳;要SRT得自己按SpeechTime数组分段+计算起止毫秒 - 别在PHP里用
sleep()等异步结果,高并发下会卡死FPM进程;改用Redis队列+定时任务查状态更稳 - 百度ASR的
enable_punctuation_prediction设为true后标点才合理,否则全是空格连句
用PHP包装Whisper本地模型提供字幕接口(无需公网)
如果你的教程视频含敏感内容、不能上传云端,又不想装桌面软件,可以用PHP启动Whisper CLI并读取输出。
- 安装
openai-whisper后,PHP用exec()调whisper audio.wav --model medium --language zh --output_format srt - 注意:PHP运行用户需有执行权限,且
ffmpeg必须在系统PATH里,否则Whisper抽音轨会失败 - 输出的
audio.srt文件名由输入决定,不能硬编码;建议用tempnam()生成随机前缀防冲突 - 大视频(>30分钟)可能超PHP默认
max_execution_time,得在脚本开头加set_time_limit(0) - 错误输出混在
stderr,要用2>&1重定向才能捕获,否则exec返回空字符串你以为成功了
真正容易被忽略的是音频质量——90%的识别失败不是模型问题,而是PHP抽出来的WAV有爆音、静音过长或人声太低。别急着换API,先拿Audacity打开audio.wav看波形。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











