You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理PHP中shell_exec调用SoX返回的无格式文本块

嘿,看来你已经能用PHP调用SoX获取音频信息了,就是返回的无格式文本不好处理对吧?我给你几个实用的方案,帮你把这些杂乱的文本转换成好用的结构:

1. 解析成关联数组(最灵活的方式)

这种方法会把SoX的输出转换成键值对数组,之后你可以轻松调用任意音频属性:

$soxOutput = shell_exec('sox --i /path/to/audiofile/file.mp3');
$audioInfo = [];

// 先把输出按换行分割成每一行
$lines = explode("\n", trim($soxOutput));

foreach ($lines as $line) {
    // 以第一个冒号为界,分割键和值
    list($key, $value) = explode(':', $line, 2);
    // 清理掉多余的空格、单引号等无关字符
    $cleanKey = trim($key);
    $cleanValue = trim($value, " \t\n\r\0\x01'");
    $audioInfo[$cleanKey] = $cleanValue;
}

// 示例:访问具体属性
echo "音频时长: " . $audioInfo['Duration'] . "\n";
echo "比特率: " . $audioInfo['Bit Rate'] . "\n";
echo "采样率: " . $audioInfo['Sample Rate'] . "\n";

2. 提取特定字段(按需获取)

如果你只需要某几个特定信息,用正则表达式直接提取会更高效:

$soxOutput = shell_exec('sox --i /path/to/audiofile/file.mp3');

// 提取采样率
preg_match('/Sample Rate\s+:\s+(\d+)/', $soxOutput, $sampleRateMatch);
$sampleRate = $sampleRateMatch[1] ?? '未知';

// 提取时长(只取时分秒部分)
preg_match('/Duration\s+:\s+([\d:]+)/', $soxOutput, $durationMatch);
$duration = $durationMatch[1] ?? '未知';

// 提取文件大小
preg_match('/File Size\s+:\s+([\d.]+[MK])/', $soxOutput, $fileSizeMatch);
$fileSize = $fileSizeMatch[1] ?? '未知';

echo "采样率: {$sampleRate} Hz\n";
echo "时长: {$duration}\n";
echo "文件大小: {$fileSize}\n";

3. 格式化输出为可读结构(用于展示)

如果要把这些信息展示给用户,可以整理成整洁的列表(HTML或纯文本都可以):

$soxOutput = shell_exec('sox --i /path/to/audiofile/file.mp3');
$lines = explode("\n", trim($soxOutput));

// 输出为HTML列表(适合网页展示)
echo "<div class='audio-info'>";
echo "<h3>音频信息</h3>";
echo "<ul>";
foreach ($lines as $line) {
    list($key, $value) = explode(':', $line, 2);
    $cleanKey = trim($key);
    $cleanValue = trim($value, " \t\n\r\0\x01'");
    echo "<li><strong>{$cleanKey}:</strong> {$cleanValue}</li>";
}
echo "</ul>";
echo "</div>";

小提示:如果shell_exec返回null,大概率是SoX命令执行出错了(比如文件不存在、权限不足、SoX未正确安装),记得先做错误检查哦!

内容的提问来源于stack exchange,提问作者spice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:33:34