在开发中需要使用到插件ffmpeg转化语音、视频等功能。在php中使用ffmpeg功能需要执行shell_exec()函数。由于使用新环境原来的命令不起作用, php调用ffmpeg 常用方法。
遇到这个问题,分析如下:
- 1、php中有没有禁用这个函数的使用。
- 2、linux环境下,目录是否有权限。
- 3、php用户是否有权限执行命令。
php 调用ffmpeg
class FFmpeg{
public $fromVideoType;//需要转换的视频
public $toVideoType;//转换以后的视频
public $thumb_name;//截图的图片名
public $newVideoName;
public $getVoice;
public $getVideo;
/**
* 视频格式转换
* @return [type] [description]
*/
function exVideoType()
{
return shell_exec("ffmpeg -i ".$this->fromVideoType." -vn ".$this->toVideoType." ");
}
/**
* 获取视频缩略图
* @return [type] [description]
*/
function getVideoThumb()
{
return shell_exec("ffmpeg -i ".$this->fromVideoType." -y -f mjpeg -ss 3 -t 1 ".$this->thumb_name." ");
}
//视频的前3秒,重新生成一个新视频
function createNewVideo()
{
return shell_exec("ffmpeg -ss 00:00:01 -t 00:01:30 -y -i ".$this->fromVideoType." -vcodec copy -acodec copy ".$this->newVideoName." ");
}
/**
* 获取视频总长度
* @return [type] [description]
*/
function getVideoTime()
{
return shell_exec("ffmpeg -i ".$this->fromVideoType." 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,// ");
}
/**
* 获取视频的音频
* @return [type] [description]
*/
function getVideoVoice()
{
return shell_exec("ffmpeg -i ".$this->fromVideoType." -vn -y -acodec copy ".$this->getVoice." ");
}
/**
* 获取视频的视频 只是画面
* @return [type] [description]
*/
function getVideo()
{
return shell_exec("ffmpeg -i ".$this->fromVideoType." -vcodec copy -an ".$this->getVideo." ");
}
}
$ffm=new FFmpeg();
$time=$ffm->getVideoTime();
$time=substr($time,0,8);
//$result=$this->time($time);
//public function time($res){//视频时长
// $h=substr($res,0,2);
// $i=substr($res,3,2);
// $s=substr($res,6,2);
// $time=$h*3600+$i*60+$s;
// if($time<90){
// return true;
// }else{
// return false;
// }
// }