//之前在网上找了很多例子使用ffmpeg获取视频参数,发现正则有问题,加以改良,希望其他人不要被误导
/**
* 广州第一靓仔-Stone
* 获取视频的分辨率
* @param $strInfoArray
* @param string $fileName
*/
public static function getVideoInfo($file){
$command = sprintf(self::$FFMPEG_COMMAND, $file);
ob_start();
passthru($command);
$info = ob_get_contents();
ob_end_clean();
$returnData = array();
$array_ = explode("\n", $info);
foreach ($array_ as $oneLine) {
if(strstr($oneLine,'Duration:')){
preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $oneLine, $match);
$returnData['duration'] = $match[1]; //播放时间
$arr_duration = explode(':', $match[1]);
$returnData['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数
$returnData['start'] = $match[2]; //开始时间
$returnData['bitrate'] = $match[3]; //码率(kb)
}
if(strstr($oneLine,'Video:')){
//去掉括号,因为里面可能会包含逗号照成后面正则匹配错误
$oneLine = preg_replace('/\(([^\)]+)\)/','',$oneLine);
preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $oneLine, $match);
$returnData['vcodec'] = $match[1]; //视频编码格式
$returnData['vformat'] = $match[2]; //视频格式
$returnData['resolution'] = $match[3]; //视频分辨率
$arr_resolution = explode('x', $match[3]);
$returnData['width'] = $arr_resolution[0];
$returnData['height'] = $arr_resolution[1];
}
if(strstr($oneLine,'Audio:')){
//去掉括号,因为里面可能会包含逗号照成后面正则匹配错误
$oneLine = preg_replace('/\(([^\)]+)\)/','',$oneLine);
preg_match("/Audio: (\w*), (\d*) Hz/", $oneLine, $match);
$returnData['acodec'] = $match[1]; //音频编码
$returnData['asamplerate'] = $match[2]; //音频采样频率
}
}
$returnData['size'] = filesize($file); //文件大小
return $returnData;
}
使用FFmpeg获取视频信息
最新推荐文章于 2024-09-03 17:11:12 发布