ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,包含了libavcodec,保证高可移值性和编解码质量。
本文将介绍使用php调用ffmpeg获取视频信息,调用ffmpeg首先需要服务器上安装了ffmpeg,安装方法很简单,可自行搜索。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
<?php
// 定义ffmpeg路径及命令常量
define( 'FFMPEG_CMD' , '/usr/local/bin/ffmpeg -i "%s" 2>&1' );
/**
* 使用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 [ 'duration' ] = $matches [1]; // 视频长度
$duration = explode ( ':' , $matches [1]);
$ret [ 'seconds' ] = $duration [0]*3600 + $duration [1]*60 + $duration [2]; // 转为秒数
$ret [ 'start' ] = $matches [2]; // 开始时间
$ret [ 'bitrate' ] = $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 [ 'vcodec' ] = $matches [1]; // 编码格式
$ret [ 'vformat' ] = $matches [2]; // 视频格式
$ret [ 'resolution' ] = $matches [3]; // 分辨率
list( $width , $height ) = explode ( 'x' , $matches [3]);
$ret [ 'width' ] = $width ;
$ret [ 'height' ] = $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 [ 'acodec' ] = $matches [1]; // 音频编码
$ret [ 'asamplerate' ] = $matches [2]; // 音频采样频率
}
if (isset( $ret [ 'seconds' ]) && isset( $ret [ 'start' ])){
$ret [ 'play_time' ] = $ret [ 'seconds' ] + $ret [ 'start' ]; // 实际播放时间
}
$ret [ 'size' ] = filesize ( $file ); // 视频文件大小
$video_info = iconv( 'gbk' , 'utf8' , $video_info );
return array ( $ret , $video_info );
}
// 输出视频信息
$video_info = getVideoInfo( 'myvideo.avi' );
print_r( $video_info [0]);
?>
|
输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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
)
|
以上这篇php 调用ffmpeg获取视频信息的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。