您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
使用php调用ffmpeg生成音频波形图(exec)windows环境下
发布时间:2021-08-27 15:27:56编辑:雪饮阅读()
对于php调用ffmpeg,可以用扩展的形式,但是扩展的形式局限于线程安全版(某些资料这样说,自己尝试了对于5.4.45ffmpeg目前暂时没有弄成功的,无论线程安全还是不安全)
那么理论来说,这样说是有道理的。
那么用扩展的形式比较麻烦,而且理论来说,若ffmpeg没有对于php5.4.45的非线程安全版本,那么基本就没有希望了,因为线程安全和非线程安全基本就属于是两套代码了。
那么这里介绍一种简单的方式,php存在exec方法,可以执行一些系统的命令,那么我们直接将ffmpeg安装在系统中
C:\Users\Administrator>where ffmpeg
D:\software\ffmpegwin\ffmpeg\ffmpeg-20180605-b748772-win64-static\bin\ffmpeg.exe
C:\Users\Administrator>
并不是以php的扩展形式存在,配置好环境变量。
那么接下来一个简单的php脚本就出来了。
假设api.php:
<?
$mp3=$_POST["mp3"];
$output=$_POST["output"];
$response=[];
if(empty($mp3)){
$response["status_code"]="mp3 filed required";
echo json_encode($response);
}
else if(empty($output)){
$response["status_code"]="output filed required";
echo json_encode($response);
}
else{
if(file_exists($output)){
$response["status_code"]="success";
$response["from"]="exist";
}
else{
$status_code="";
exec('ffmpeg -i "'.$mp3.'" -filter_complex "showwavespic=s=640x120" -frames:v 1 '.$output.' >>log.txt 2>&1',$log, $status);
if($status==0) $status_code="success";
if($status==1) $status_code="fail";
$response["status_code"]=$status;
$response["from"]="ffmpeg";
}
$img="http://".$_SERVER["SERVER_NAME"]."/".$output;
$response["img"]=$img;
echo json_encode($response);
}
?>
那么接下来,就以一个环境,假如就是小皮面板吧,随便建立一个php站点或者直接用默认的localhost站点。
将上面的php文件放入后访问如:
![exec.png](/d/file/manshenghuo/chengxurensheng/6ed39b790442ecac2fac19846bc0dc7c.png)
然后我们访问这个图片
![ffmpeg.png](/d/file/manshenghuo/chengxurensheng/d895df9ae321d9bc2ead406491ddbb85.png)
Ok,任务完成
需要注意的是:
mp3:要传入站点内相对于这个脚本的mp3文件路径
output:输出图片,目前也是输出在这个脚本文件所在路径
![音频波形图.png](/d/file/manshenghuo/chengxurensheng/07eca2c4b8997b4495682acbb7a01cbd.png)
另外就是既然是基于exec实现的,那么就要注意安全了,最好运行在docker环境下,进行下隔离。
关键字词:php,ffmpeg,音频波形图,音频,波形
相关文章
- 如何在PHPstorm中配置使用单元测试phpunit
- 如何对php进行单元测试 单元测试编写
- windows中为php7.3.4nts配置安装phpunit单元测试框架
- (安卓)ffmpeg添加文字水印中文乱码的解决(非终极方案)
- ffmpeg-kit的使用(android studio第三方庫、依賴的使用
- ubuntu-18.04.5-desktop-amd64與ndk(r21e)交叉編譯ffm
- 交叉编译ffmpeg4.3.2(api28、安卓9、ubuntu-18.04.5-d
- 7、基于NDKC++FFmpegAndroid视频(流媒体)播放器开发实
- 编译支持64位arm处理器的ffmpeg动态链接库(支持neon和
- 9. 创建支持ffmpeg的AndroidStudio项目并调用其接口在