您正在使用 IPV4 [44.221.73.157] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】2核2G4M云服务器新老同享99元/年,续费同价      
[公益] 地球是我家,绿化靠大家      
2024年 七夕节 056
2025年 高 考 357
2025年 元 旦 200
2025年 春 节 228
 
您现在的位置:首页 >> PHP >> 内容
本类新增
本类热门
PHP利用FFmpeg实现获取远程视频的时长和截图
内容摘要: 突然发现FFmpeg这个软件还可以直接拉取远程视频的相关信息,也就是可以不通过下载视频到本地的方式,直接远程去获取视频时长和截图。假设我们的视频url是:http://my.com/a.mp4第一步,Linux安装FFmpeg软件第二步,通过composer安装FFmpeg的库composerrequirephp-ffmpeg/php-ffmpeg1、获取远......
突然发现FFmpeg这个软件还可以直接拉取远程视频的相关信息,也就是可以不通过下载视频到本地的方式,直接远程去获取视频时长和截图。

假设我们的视频url是:http://my.com/a.mp4

第一步,Linux安装FFmpeg软件

第二步,通过composer安装FFmpeg的库

composerrequirephp-ffmpeg/php-ffmpeg

1、获取远程视频时长

useFFMpeg\FFMpeg;

require'vendor/autoload.php';

$ffmpeg=FFMpeg::create();

$video=$ffmpeg->open('https://xxx.mp4');

//获取视频的时长(秒)

$duration=$video->getStreams()->first()->get('duration');

2、获取远程视频的第一帧

useFFMpeg\Coordinate\TimeCode;

useFFMpeg\FFMpeg;

require'vendor/autoload.php';

$ffmpeg=FFMpeg::create();

$video=$ffmpeg->open('https://xxx.mp4');

//获取视频的时长(秒)

$duration=$video->getStreams()->first()->get('duration');

echo$duration;

$outputImage='/data/b.jpg';//替换为您希望保存第一帧的物理路径

//提取第一帧(默认情况下,FFMpeg库将从视频的开始处获取第一帧)

$frame=$video->frame(TimeCode::fromSeconds(0));

//将第一帧保存到指定的图像文件

$frame->save($outputImage,'image/jpeg');

经测试,以上过程的调用,并不需要完全把视频下载到本地再解析,可以实现远程获取直接秒级返回!

3.知识补充

除了上文的方法,小编还为大家整理了一些其他PHP关于视频文件的相关操作,希望对大家有所帮助

php利用服务器liunx获取视频、音频时长,封面图

/**

*利用服务器ffmpeg命令截取视频帧数

*@paramstring$local_file_url服务器文件路径,以./开头

*@paramstring$screenshot_local_file_url保存的视频截帧图片路径,以./开头

*@paramstring$time截取视频秒数

*@date2021-06-24

*/

functionget_video_screenshot_by_ffmpeg($local_file_url,$screenshot_local_file_url,$time=0)

{

$str='ffmpeg-i'.$local_file_url.'-y-fimage2-ss'.$time.'-t0.001'.$screenshot_local_file_url;

exec($str);

return$screenshot_local_file_url;

}

//获得视频文件的总长度时间和创建时间

functionget_video_time($local_file_url){

$vtime=exec("ffmpeg-i".$local_file_url."2>&1|grep'Duration'|cut-d''-f4|seds/,//");//总长度

$duration=explode(":",$vtime);

$duration_in_secOnds=$duration[0]*3600+$duration[1]*60+round($duration[2]);//转化为秒

return$duration_in_secOnds;

}

PHP使用ffmpeg获取视频的时长和截取视频图片

//获取上传的视频斜体样式

$files=$_FILES[‘file'];

functionupload_video($files){

//判断上传是否正常

if($files['error']==0){

$ext=strtolower(pathinfo(@$files['name'],PATHINFO_EXTENSION));//截取上传的视频后缀

$allowExts=array("vob","ifo","mpg","mpeg","dat","mp4","3gp","mov","rm","ram","rmvb","wmv","asf","avi","asx");//设置允许上传的视频后缀

$path='../asj/video/';//设置附件上传保持目录

if(!in_array($ext,$allowExts)){

//判断上传视频后缀是否符合

$result=['data'=>'','code'=>-1,'message'=>'非法文件类型!'];

}else{

$fileName=date('Ymd').time();//设置视频新的名称

$destName=$path.$fileName.".".$ext;//保存视频到指定路径

//判断视频上传是否成功

if(!move_uploaded_file($files['tmp_name'],$destName)){

$result=['data'=>'','code'=>-1,'message'=>'文件上传失败!'];

}else{

$outdata=array();

$outdata['path']="video/$fileName.$ext";

$ffmpeg='C:\\Windows\\System32\\ffmpeg\\bin\\ffmpeg.exe';//ffmpeg安装的路径

//获取视频的相关信息

$data=get_video_info($ffmpeg,$destName,$fileName);

$outdata['time']=$data['time'];

$outdata['img']=$data['img'];

$result=['data'=>$outdata,'code'=>200,'message'=>'文件上传成功!'];

}

}

}else{

switch(@$files['error']){

case1:

$msg="上传的文件超过了php.ini中upload_max_filesize选项限制的值!";

break;

case2:

$msg="上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值!";

break;

case3:

$msg="文件只有部分被上传!";

break;

case4:

$msg="没有文件被上传!";

break;

case6:

case7:

$msg="系统错误!";

break;

}

$result=['data'=>'','code'=>-1,'message'=>$msg];

}

如果exec()未正确返回参照

/**

获取视频的相关信息

@param$ffmpeg_path//ffmpeg.exe路径

@param$video_path//视频的路径

@param$fileName//保存的图片名称和视频的新名称一致

@returnarray

*/

functionget_video_info($ffmpeg_path,$video_path,$fileName){

if(!file_exists($video_path)){

returnfalse;

}

//获取视频时长信息

$commond="$ffmpeg_path-i$video_path2>&1";

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

if(is_array($str_res)){

foreach($str_resas$v){

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

$times=substr($v,stripos($v,'.')-8,8);//截取时分秒

$arr_duration=explode(':',$times);//转出相应的数组

$seconds=$arr_duration[0]*3600+$arr_duration[1]*60+$arr_duration[2];//转换播放时间为秒数

break;

}

}

}

//截取视频图片

$time=1;//根据时间截取视频的图片

$img_url="..\\asj\\video\\imgs\\$fileName.jpg";

$img_name="video/imgs/$fileName.jpg";

exec("$ffmpeg_path-i$video_path-fimage2-ss$time-s320x240-vframes1$img_url",$out,$status);

$outdata=array();

$outdata['time']=$seconds;//秒数

$outdata['img']=$img_name;

return$outdata;

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:PHP将敏感文字内容替换为星号的操作方法

 

下一篇:PHP使用mpdf实现导出pdf文件功能

发布日期:2024/6/2
手机扫二维码直达本页
发布时间:22:04:06
点  击:8
录  入:伊伊
相关文章
Baidu
YiJiaCMS 7.5.1 build240527(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,Cloudflare提供加速防护
运行时间载入中.....