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获取视频信息的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。