Home  >  Article  >  Backend Development  >  PHP implements the method of calling ffmpeg to obtain video information

PHP implements the method of calling ffmpeg to obtain video information

墨辰丷
墨辰丷Original
2018-05-24 10:43:221593browse

This article mainly introduces the method of calling ffmpeg in php to obtain video information. Interested friends can refer to it. I hope it will be helpful to everyone.

ffmpeg is a set of open source computer programs that can be used to record, convert digital audio and video, and convert them into streams. It includes libavcodec, ensuring High portability and codec quality.

This article will introduce how to use php to call ffmpeg to obtain video information. To call ffmpeg, you first need to install ffmpeg on the server. The installation method is very simple and you can search by yourself.

The code is as follows:

<?php
// 定义ffmpeg路径及命令常量
define(&#39;FFMPEG_CMD&#39;, &#39;/usr/local/bin/ffmpeg -i "%s" 2>&1&#39;);

/**
 * 使用ffmpeg获取视频信息
 * @param String $file 视频文件
 * @return Array
 */
function getVideoInfo($file){
 ob_start();
 passthru(sprintf(FFMPEG_CMD, $file));
 $video_info = ob_get_contents();
 ob_end_clean();

 // 使用输出缓冲,获取ffmpeg所有输出内容
 $ret = array();

 // Duration: 00:33:42.64, start: 0.000000, bitrate: 152 kb/s
 if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $video_info, $matches)){
  $ret[&#39;duration&#39;] = $matches[1]; // 视频长度
  $duration = explode(&#39;:&#39;, $matches[1]);
  $ret[&#39;seconds&#39;] = $duration[0]*3600 + $duration[1]*60 + $duration[2]; // 转为秒数
  $ret[&#39;start&#39;] = $matches[2]; // 开始时间
  $ret[&#39;bitrate&#39;] = $matches[3]; // bitrate 码率 单位kb
 }

 // Stream #0:1: Video: rv20 (RV20 / 0x30325652), yuv420p, 352x288, 117 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
 if(preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $video_info, $matches)){
  $ret[&#39;vcodec&#39;] = $matches[1];  // 编码格式
  $ret[&#39;vformat&#39;] = $matches[2]; // 视频格式
  $ret[&#39;resolution&#39;] = $matches[3]; // 分辨率
  list($width, $height) = explode(&#39;x&#39;, $matches[3]);
  $ret[&#39;width&#39;] = $width;
  $ret[&#39;height&#39;] = $height;
 }

 // Stream #0:0: Audio: cook (cook / 0x6B6F6F63), 22050 Hz, stereo, fltp, 32 kb/s
 if(preg_match("/Audio: (.*), (\d*) Hz/", $video_info, $matches)){
  $ret[&#39;acodec&#39;] = $matches[1];  // 音频编码
  $ret[&#39;asamplerate&#39;] = $matches[2]; // 音频采样频率
 }

 if(isset($ret[&#39;seconds&#39;]) && isset($ret[&#39;start&#39;])){
  $ret[&#39;play_time&#39;] = $ret[&#39;seconds&#39;] + $ret[&#39;start&#39;]; // 实际播放时间
 }

 $ret[&#39;size&#39;] = filesize($file); // 视频文件大小
 $video_info = iconv(&#39;gbk&#39;,&#39;utf8&#39;, $video_info);
 return array($ret, $video_info);

}

// 输出视频信息
$video_info = getVideoInfo(&#39;myvideo.avi&#39;);
print_r($video_info[0]);
?>

Output:

Array
(
 [duration] => 00:33:42.64
 [seconds] => 2022.64
 [start] => 0.000000
 [bitrate] => 152
 [vcodec] => rv20 (RV20 / 0x30325652)
 [vformat] => yuv420p
 [resolution] => 352x288
 [width] => 352
 [height] => 288
 [acodec] => cook (cook / 0x6B6F6F63)
 [asamplerate] => 22050
 [play_time] => 2022.64
 [size] => 38630744
)

The above is the entire content of this article, I hope it will be helpful to everyone's study.


Related recommendations:

php mysql develops the simplest online question bank and online question making system

PHPThe two-dimensional array is deduplicated based on a certain element

##PHPDistinguish between enterprise WeChat browsers | Ordinary WeChat browser | Other browsers

The above is the detailed content of PHP implements the method of calling ffmpeg to obtain video information. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn