讯飞听见不直接提供PHP接口生成毫秒级字幕,但可通过导出CSV/JSON(含start_ms/end_ms或秒.毫秒时间戳)→ PHP解析→转换为SRT格式实现;需确认导出文件含三位小数时间精度,脚本支持毫秒转HH:MM:SS,mmm并生成标准SRT。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

讯飞听见本身不直接提供 PHP 接口生成带毫秒级时间戳的字幕文件(如 SRT/ASS),但你可以通过「讯飞听见网页版/客户端转写 → 导出结构化文本(含精确时间戳)→ 用 PHP 解析并生成标准字幕格式」这条链路实现。关键在于获取到带毫秒精度的时间信息,而讯飞听见 Web 版导出的「逐句文本+时间轴」CSV 或 JSON 是可行起点。
一、从讯飞听见获取带毫秒时间戳的原始数据
讯飞听见网页版(https://www.iflyrec.com)上传录音并完成转写后:
- 进入「结果页」→ 点击右上角「导出」→ 选择「导出为 CSV」或「导出为 JSON」;
- CSV 文件默认包含列:开始时间(秒.毫秒)、结束时间(秒.毫秒)、文本内容(例如:
12.345,15.678,“你好,今天天气不错。”); - JSON 格式更规范,字段通常为
start_ms、end_ms、text(单位:毫秒),推荐优先使用 JSON 导出(需确认你使用的讯飞听见版本是否支持;若无,CSV 也可解析); - 注意:免费版可能只提供整秒时间(如 12.000),付费版/企业版才保证毫秒精度(如 12.345)。务必检查导出文件中时间值是否含小数点后三位。
二、PHP 解析讯飞听见导出文件并生成 SRT 字幕
SRT 格式要求时间戳格式为 HH:MM:SS,mmm(毫秒用逗号分隔),每段含序号、时间轴、文本、空行。以下是一个轻量可靠的 PHP 脚本示例(支持 CSV 和 JSON 输入):
(保存为 gen_srt.php,与导出文件同目录运行)
立即学习“PHP免费学习笔记(深入)”;
<?php
function msToSrtTime($ms) {
$totalSec = floor($ms / 1000);
$hours = str_pad(floor($totalSec / 3600), 2, '0', STR_PAD_LEFT);
$minutes = str_pad(floor(($totalSec % 3600) / 60), 2, '0', STR_PAD_LEFT);
$seconds = str_pad($totalSec % 60, 2, '0', STR_PAD_LEFT);
$millis = str_pad($ms % 1000, 3, '0', STR_PAD_LEFT);
return "$hours:$minutes:$seconds,$millis";
}
<p>$inputFile = 'result.json'; // 或 'result.csv'
$srtFile = 'output.srt';</p><p>if (pathinfo($inputFile, PATHINFO_EXTENSION) === 'json') {
$data = json_decode(file_get_contents($inputFile), true);
$segments = [];
foreach ($data as $item) {
if (isset($item['start_ms'], $item['end_ms'], $item['text'])) {
$segments[] = [
'start' => (int)$item['start_ms'],
'end' => (int)$item['end_ms'],
'text' => trim($item['text'])
];
}
}
} else {
$lines = array_filter(array_map('trim', file($inputFile)));
$segments = [];
foreach ($lines as $line) {
if (preg_match('/^(\d+.\d+),(\d+.\d+),(.+)$/u', $line, $m)) {
$startMs = round(floatval($m[1]) <em> 1000);
$endMs = round(floatval($m[2]) </em> 1000);
$text = trim($m[3]);
if ($text !== '') {
$segments[] = compact('startMs', 'endMs', 'text');
}
}
}
}</p><p>file_put_contents($srtFile, '');
foreach ($segments as $i => $seg) {
$index = $i + 1;
$start = msToSrtTime($seg['start']);
$end = msToSrtTime($seg['end']);
$text = htmlspecialchars_decode($seg['text'], ENT_QUOTES);
$block = "$index\n$start --> $end\n$text\n\n";
file_put_contents($srtFile, $block, FILE_APPEND | LOCK_EX);
}</p><p>echo "✅ 已生成字幕:$srtFile(共 " . count($segments) . " 段)\n";
?>三、注意事项与常见问题
-
时间精度依赖源头:如果讯飞导出的时间只有 1 位小数(如
12.3),PHP 会转成12.300,但实际精度已丢失——请在讯飞后台确认是否启用「高精度时间轴」选项(部分版本需在转写设置中开启); -
换行与特殊字符:讯飞导出的文本若含换行符(
\n),SRT 中需保留(SRT 支持单段多行),PHP 中用str_replace("\n", "\n", $text)即可;中文引号、破折号等无需转义; - 合并短句(可选优化):讯飞有时把一句话切太碎,可用 PHP 按时间间隔(如
-
编码问题:确保 CSV 文件为 UTF-8 无 BOM,否则 PHP
file()可能乱码;用记事本另存为 UTF-8 或用 VS Code 重编码。
四、进阶:对接讯飞听见开放平台(API)
若需自动化流程(如上传录音→轮询转写结果→下载带时间戳结果→生成字幕),可申请「讯飞听见开放平台」API 权限:
- 调用
/api/recognition/submit上传音频; - 轮询
/api/recognition/query获取状态; - 成功后调用
/api/recognition/result下载结果,返回 JSON 包含sentences数组,每个元素含bg(开始毫秒)、ed(结束毫秒)、spk(说话人)、text; - 该 JSON 结构比网页导出更稳定,且明确支持毫秒,适合生产环境集成。
不复杂但容易忽略:讯飞听见的「毫秒时间戳」不是默认全量开放,务必检查导出内容是否真实含三位小数,再动手写 PHP —— 否则生成的 SRT 时间轴会跳帧或不同步。



















