在PHP中检测MP3或WAV音频文件的时长,可以通过以下两种方法实现:
方法一:使用第三方库(推荐)推荐使用 getID3 库,它支持解析多种音频格式的元数据,包括MP3和WAV。
实现步骤:下载并引入getID3从官网 getID3 下载库,解压后将其中的 getid3 目录放到你的项目中。
PHP代码示例:
require_once('getid3/getid3.php'); function getAudioDuration($filePath) { $getID3 = new getID3; $fileInfo = $getID3->analyze($filePath); if (isset($fileInfo['playtime_seconds'])) { return $fileInfo['playtime_seconds']; } else { return false; } } // 使用示例 $mp3Duration = getAudioDuration('audio.mp3'); $wavDuration = getAudioDuration('audio.wav'); echo "MP3时长:" . gmdate("H:i:s", (int)$mp3Duration) . "\n"; echo "WAV时长:" . gmdate("H:i:s", (int)$wavDuration);方法二:手动解析文件头(简单场景)对于WAV文件:
WAV文件的头部信息包含采样率、字节率等字段,可通过计算得到时长。
function getWavDuration($filePath) { $file = fopen($filePath, 'rb'); if (!$file) return false; // 读取WAV头部的关键字段 fseek($file, 24); // 定位到“采样率”位置 $sampleRate = unpack('V', fread($file, 4))[1]; fseek($file, 40); // 定位到“数据大小”位置 $dataSize = unpack('V', fread($file, 4))[1]; fclose($file); // 计算时长(秒):数据大小 / (采样率 * 声道数 * 位深度/8) // 此处假设为16位立体声(常见情况) $duration = $dataSize / ($sampleRate * 2 * 2); return $duration; } // 使用示例 $duration = getWavDuration('audio.wav'); echo "WAV时长:" . gmdate("H:i:s", (int)$duration);对于MP3文件(粗略估算):
MP3时长可通过文件大小和比特率估算(仅适用于固定比特率,CBR):
function getMp3Duration($filePath) { $fileSize = filesize($filePath); $bitRate = 128000; // 假设比特率为128kbps(需根据实际文件调整) // 时长(秒)= (文件大小 × 8) / 比特率 $duration = ($fileSize * 8) / $bitRate; return $duration; } // 使用示例 $duration = getMp3Duration('audio.mp3'); echo "MP3时长:" . gmdate("H:i:s", (int)$duration);方法三:php调用ffmpeg,确保电脑安装了ffmpeg
$file = 'path/to/your/audio.mp3'; // 替换为你的音频文件路径 $command = 'ffmpeg -i ' . escapeshellarg($file) . ' 2>&1'; $output = shell_exec($command); // 使用正则表达式提取时长信息 if (preg_match('/Duration: ([0-9:.]+)/', $output, $matches)) { $duration = $matches[1]; echo "音频时长: " . $duration; } else { echo "无法获取音频时长"; }注意事项:推荐使用 getID3手动解析仅适用于简单场景,而 getID3 能处理可变比特率(VBR)、不同编码格式等复杂情况。安装依赖确保服务器已安装必要的扩展(如 php-mbstring),否则 getID3 可能报错。错误处理添加文件存在性检查(file_exists)和异常捕获以增强健壮性。
通过上述方法,可准确或近似获取音频文件的播放时长。
网友回复
python如何调用openai的api实现知识讲解类动画讲解视频的合成?
html如何直接调用openai的api实现海报可视化设计及文本描述生成可编辑海报?
f12前端调试如何找出按钮点击事件触发的那段代码进行调试?
abcjs如何将曲谱播放后导出mid和wav格式音频下载?
python如何将曲子文本生成音乐mp3或wav、mid文件
python中mp3、wav音乐如何转成mid格式?
js在HTML中如何将曲谱生成音乐在线播放并下载本地?
python如何实现在windows上通过键盘来模拟鼠标操作?
python如何给win10电脑增加文件或文件夹右键自定义菜单?
python如何将音乐mp3文件解析获取曲调数据?