php 获取mp4视频时长,window环境下php ffmpeg获取视频总时长与缩略图 代码

一、背景

最近在给安卓客户端提供API接口时,需要提供后台上传视频的缩略图,视频总长。

用搜索引擎搜索了下,windows环境下(个人自己电脑上用)获取缩略图的资料挺多,

但获取视频总长的资料,基本都是linux环境。如下是自己整理的方法

二、准备

windows环境下,只需去官网下载windows版本的FFmpeg,地址http://ffmpeg.zeranoe.com/builds/

我下载的是64-bit Shared版本。

对,就只需要上述1步,而不需要费尽心机去网上找php5.5及以后版本的ffmpeg-php扩展。 反正我是没找到。

三、获取视频总时长

/**

* 获取视频总时长

* @param string $ffmpeg_path [ffmpeg.exe的绝对路径]

* @param string $video_path [video的绝对路径]

*/

function get_video_times($ffmpeg_path, $video_path){

if (!file_exists($video_path)) return ['status'=>0, 'msg'=>'视频文件不存在'];

$times = false;

$commond = "{$ffmpeg_path} -i {$video_path} 2>&1";

exec($commond, $str_res, $str_r);

if (is_array($str_res)){

foreach($str_res as $v){

if (strpos($v, 'Duration') !== false){

$times = substr($v, stripos($v , '.') - 8, 8);//' Duration: 00:24:28.14, start: 0.000000, bitrate: 486 kb/s'

break;

}

}

}

return $times ? ['status'=>1, 'msg'=>$times] : ['status'=>0, 'msg'=>'获取视频时间失败'];

}

调用方法:

$ffmpeg = 'D:\\org\\ffmpeg\\bin\\ffmpeg.exe';

$video = 'C:\\py\\test1.mp4';

get_video_times($ffmpeg, $video);// return 00:24:28

当然,你也可以优化,如方法里面可以用正则截取时间,减少代码;可以截出小时分钟为0的返回值;

其次,这个方法稍微改进下,便可获取视频的创建时间等信息。具体实现,大家可以foreach循环外打印 $str_res ,进一步截取自己需要的信息。 个人打印$str_res的结果如下:

Array

(

[0] => ffmpeg version N-86537-gae6f6d4 Copyright (c) 2000-2017 the FFmpeg developers

[1] => built with gcc 7.1.0 (GCC)

[2] => configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib

[3] => libavutil 55. 66.100 / 55. 66.100

[4] => libavcodec 57. 99.100 / 57. 99.100

[5] => libavformat 57. 73.100 / 57. 73.100

[6] => libavdevice 57. 7.100 / 57. 7.100

[7] => libavfilter 6. 94.100 / 6. 94.100

[8] => libswscale 4. 7.101 / 4. 7.101

[9] => libswresample 2. 8.100 / 2. 8.100

[10] => libpostproc 54. 6.100 / 54. 6.100

[11] => Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\py\test1.mp4':

[12] => Metadata:

[13] => major_brand : M4V

[14] => minor_version : 1

[15] => compatible_brands: isomM4A M4V mp42

[16] => creation_time : 2015-08-29T17:50:15.000000Z

[17] => Duration: 00:24:28.14, start: 0.000000, bitrate: 486 kb/s

[18] => Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1080x812 [SAR 150:149 DAR 40500:30247], 442 kb/s, SAR 406:405 DAR 4:3, 15 fps, 15 tbr, 15k tbn, 15 tbc (default)

[19] => Metadata:

[20] => creation_time : 2015-08-29T17:50:15.000000Z

[21] => handler_name : avi#video:fps=15:par=406:405@GPAC0.5.2-DEV-rev387-g3102094-master

[22] => Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 41 kb/s (default)

[23] => Metadata:

[24] => creation_time : 2015-08-29T17:48:55.000000Z

[25] => handler_name : Sound Media Handler

[26] => At least one output file must be specified

)

四、获取缩略图

/*获取视频缩略图

$videopath : 视频绝对地址

$imgpath : 缩略图保存地址

$time : 截取第几帧为缩略图

*/

function get_img_by_video($ffempeg_path, $videopath, $imgpath, $time = 1) {

if (! file_exists($videopath)) return false;

if (strpos(PHP_OS, 'WIN') !== false){ //windows系统

$str = "{$ffempeg_path} -i {$videopath} -y -f mjpeg -ss 3 -t {$time} -s 300x200 {$imgpath}";

return system($str);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值