时间: 18天前 人气: -
FFmpeg确实有一个生成波形图的滤镜,叫做showwaves或者showwavespic。我记得showwaves是生成动态的波形视频,而showwavespic则是生成静态的图片。我们需要的是图片,所以应该用showwavespic滤镜。
接下来,我们需要考虑如何在PHP中调用FFmpeg。通常,PHP可以通过exec()或者shell_exec()函数来执行系统命令。所以,我们需要在服务器上安装FFmpeg,并且PHP有权限执行该命令。
那具体的FFmpeg命令是怎样的呢?基本的命令结构应该是:输入音频文件,应用showwavespic滤镜,然后输出图片。
使用PHP结合FFmpeg生成音频波形图片可以通过以下步骤实现:
FFmpeg的 showwavespic
滤镜可以将音频波形渲染为静态图片,支持自定义颜色、尺寸和样式。PHP通过执行命令行调用FFmpeg实现此功能。
<?php
// 输入音频路径(需绝对路径)
$audioFile = '/path/to/muwuw/input.mp3';
// 输出图片路径
$outputImage = '/path/to/muwuw/waveform.png';
// 构建FFmpeg命令
$command = sprintf(
'ffmpeg -y -i %s -filter_complex "showwavespic=colors=#007bff:s=640x120" -frames:v 1 %s 2>&1',
escapeshellarg($audioFile),
escapeshellarg($outputImage)
);
// 执行命令
exec($command, $output, $returnCode);
if ($returnCode === 0) {
echo "波形图生成成功!路径:{$outputImage}";
} else {
echo "生成失败,错误信息:" . implode("\n", $output);
}
?>
showwavespic
滤镜参数:
s=640x120
:图片尺寸(宽x高)
colors=#007bff
:波形颜色(支持多颜色,用|
分隔声道)
split_channels=1
:分离左右声道显示
scale=lin/log
:线性或对数缩放
命令参数:
-y
:覆盖已存在文件
-frames:v 1
:仅生成1帧(静态图)
2>&1
:捕获错误输出
安装FFmpeg:
sudo apt install ffmpeg
确保PHP有执行权限:
检查 exec()
函数是否未被禁用
设置正确的文件读写权限
// 双声道不同颜色
$filter = 'showwavespic=split_channels=1:colors=#FF0000|#00FF00:s=800x200';
输入验证:
if (!file_exists($audioFile)) {
die("音频文件不存在");
}
// 使用 escapeshellarg() 转义参数
$safeAudioPath = escapeshellarg($_POST['audio_path']);
动态波形视频:改用 showwaves
滤镜生成视频
频谱图:使用 showspectrumpic
滤镜生成频谱
时间戳标记:叠加 drawtext
滤镜显示时间
通过上述方法,您可以在PHP中高效生成音频波形图。如需处理用户上传文件,需结合文件上传验证逻辑。