本文目录导读:

在 Laravel 中进行音频处理,可以根据不同的需求选择合适的库,以下是几个常用且功能强大的选项:
FFmpeg(最推荐)
功能最全面,几乎可以处理所有音频需求。
安装
# 安装 FFmpeg 系统依赖 sudo apt-get install ffmpeg # 或 macOS brew install ffmpeg # 安装 PHP FFmpeg 库 composer require pbmedia/laravel-ffmpeg
使用示例
use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg;
// 音频格式转换
FFMpeg::fromDisk('local')
->open('audio.mp3')
->export()
->toDisk('public')
->inFormat(new \FFMpeg\Format\Audio\Aac())
->save('output.aac');
// 音频剪辑
FFMpeg::fromDisk('local')
->open('audio.mp3')
->export()
->addFilter('-ss 00:00:30 -to 00:01:30')
->save('clip.mp3');
// 合并音频
FFMpeg::fromDisk('local')
->open(['audio1.mp3', 'audio2.mp3'])
->concat()
->export()
->save('merged.mp3');
// 获取音频信息
$audio = FFMpeg::open('audio.mp3');
$duration = $audio->getDurationInSeconds();
$format = $audio->getFormat();
getID3
专门用于获取音频元数据,性能好,无需外部依赖。
安装
composer require james-heinrich/getid3
使用
use JamesHeinrich\GetID3\GetID3;
$getID3 = new GetID3();
$file = $getID3->analyze(storage_path('app/audio.mp3'));
// 获取信息
$duration = $file['playtime_seconds'];
$bitrate = $file['audio']['bitrate'];
$sample_rate = $file['audio']['sample_rate'];
$channels = $file['audio']['channels'];
Laravel Audio Video
专为 Laravel 设计的多媒体处理包,封装了常用功能。
安装
composer require shyvlas/laravel-audio-video
使用
// 音频处理
use Shevlas\LaravelAudioVideo\Facades\Audio;
$audio = Audio::open('audio.mp3');
$audio->clip(0, 30); // 前30秒
$audio->export('clip.mp3');
PHP Wav Utilities
专门处理 WAV 格式音频的 PHP 库。
安装
composer require refbyte/phpaudiotools
使用
use Refbyte\Phpaudiotools\Wav;
$wav = new Wav('audio.wav');
$duration = $wav->getLength();
$sampleRate = $wav->getSampleRate();
推荐方案
根据不同需求选择:
| 场景 | 推荐库 | 原因 |
|---|---|---|
| 格式转换、剪辑、合并 | FFmpeg | 功能最全面 |
| 仅读取元数据 | getID3 | 轻量、快速 |
| 简单的 WAV 处理 | PHP Wav Utilities | 专门针对 WAV |
| Laravel 原生集成 | Laravel FFMPEG | 优雅的 Laravel API |
实际项目示例
// app/Services/AudioService.php
namespace App\Services;
use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg;
use JamesHeinrich\GetID3\GetID3;
class AudioService
{
public function processAudio(string $path): array
{
// 获取元数据
$getID3 = new GetID3();
$metadata = $getID3->analyze(storage_path("app/{$path}"));
// 音频处理
$output = 'processed_' . time() . '.mp3';
FFMpeg::fromDisk('local')
->open($path)
->export()
->addFilter('-codec:a libmp3lame -b:a 128k') // 转码为 MP3 128kbps
->save($output);
return [
'original' => $metadata,
'output' => $output,
'duration' => $metadata['playtime_seconds']
];
}
}
建议根据项目的具体需求(音频格式、处理复杂度、性能要求)选择合适的库,如果只是简单的音频元数据读取,getID3 就足够了;如果需要复杂的音频处理,首选 FFmpeg。