首页 > 编程语言 >thinkphp6 使用FFMpeg获取视频信息

thinkphp6 使用FFMpeg获取视频信息

时间:2024-07-03 11:20:42浏览次数:20  
标签:视频 ffmpeg app thinkphp6 duration imgPath data match FFMpeg

1.本地安装 FFMpeg,官网下载地址:https://ffmpeg.org/download.html#build-windows

 

 解压后,把文件夹放到自定义目录,添加系统变量

 

2.安装依赖,composer.json 添加

"php-ffmpeg/php-ffmpeg": "^0.19.0",

3.封装class类

<?php
namespace app\api\controller;

use FFMpeg\FFMpeg;
use think\facade\Config;
use FFMpeg\Coordinate\TimeCode;

/**
 * FFMpeg处理音视频
 */
class Media extends Common
{
    /**
     * 获取视频时长 单位:秒
     * @param string $oriPath
     * @return string
     */
    public function videoDuration(string $oriPath=''): string
    {
        $config = [
            'ffmpeg.binaries' => Config::get('app.app_ffmpeg'),
            'ffprobe.binaries' => Config::get('app.app_ffprobe')
        ];
        $ffmpeg = FFMpeg::create($config);
        $video = $ffmpeg->open($oriPath);

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

        return bcdiv($duration,1,0);
    }

    /**
     * 获取视频封面图(视频第一帧)
     * @param string $oriPath
     * @return string
     */
    public function videoCoverImage(string $oriPath=''): string
    {
        try {
            $config = [
                'ffmpeg.binaries' => Config::get('app.app_ffmpeg'),
                'ffprobe.binaries' => Config::get('app.app_ffprobe')
            ];
            $ffmpeg = FFMpeg::create($config);
            $video = $ffmpeg->open($oriPath);

            //获取视频第一帧
            $frame = $video->frame(TimeCode::fromSeconds(1));
            $imgDir = $this->imgPath . '/' . date('Ymd');
            if(!is_dir('.'.$imgDir)){
                mkdir('.'.$imgDir, 0755, true);
            }
            //保存图片
            $imgPath = $imgDir . '/' . buildFileName().'.jpg';
            $frame->save('.'.$imgPath);
            echo $imgPath;die;
            $cos = new Cos();
            $res = $cos->uploadStaticFile($imgPath,'.'.$imgPath);
            if($res['msg']!='success'){
                return '';
            }
            unlink('.'.$imgPath);

            return $imgPath;
        }catch (\Exception $e){
            return '';
        }
    }

    /**
     * 获取音视频基本信息
     */
    public function getVideoInfo($file)
    {
        $command = sprintf('F:\work\ffmpeg-7.0.1\bin\ffmpeg -i "%s" 2>&1', $file);  //你的ffmpeg路径

        ob_start();
        passthru($command);
        $info = ob_get_contents();
        ob_end_clean();

        $data = array();
        if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $info, $match)) {
            $data['duration'] = $match[1]; //播放时间
            $arr_duration = explode(':', $match[1]);
            $data['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数
            $data['start'] = $match[2]; //开始时间
            $data['bitrate'] = $match[3]; //码率(kb)
        }
        if (preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $info, $match)) {
            $data['vcodec'] = $match[1]; //视频编码格式
            $data['vformat'] = $match[2]; //视频格式
            $data['resolution'] = $match[3]; //视频分辨率
            $arr_resolution = explode('x', $match[3]);
            $data['width'] = $arr_resolution[0];
            @$data['height'] = $arr_resolution[1];
        }
        if (preg_match("/Audio: (\w*), (\d*) Hz/", $info, $match)) {
            $data['acodec'] = $match[1]; //音频编码
            $data['asamplerate'] = $match[2]; //音频采样频率
        }
        if (isset($data['seconds']) && isset($data['start'])) {
            $data['play_time'] = $data['seconds'] + $data['start']; //实际播放时间
        }
        $data['size'] = filesize($file); //文件大小
        return $data;
    }
}

4.本地测试

 public function testVideo()
    {
        $path = base_path()."/test.mp4";
        $media = new Media();
//        $img_url = $media->videoCoverImage($path);
        $video_len = $media->videoDuration($path);
//        $videoInfo = $media->getVideoInfo($path);
        dump($video_len . '秒');
    }

获取视频时长:

 

标签:视频,ffmpeg,app,thinkphp6,duration,imgPath,data,match,FFMpeg
From: https://www.cnblogs.com/wjs2019/p/18281214

相关文章

  • AI美食怪兽短视频玩法,月入过万新手也能做!
    这种通过AI技术将各地的特色美食转为具有形象生动、创意满满的怪兽制作成的短视频,发布在各大短视频平台上,可以吸引大量的人群观看,那今天就教大家如何使用免费的AI工具生成这类爆款视频,从而轻松达到月入过万的收益百度网盘请输入提取码百度网盘为您提供文件的网络备份、同......
  • 视频转文字怎么提取?快速转换技巧全攻略
    经常有同学问俺,如何能够将视频在线转文字。无论是因为网课节奏过快难以跟上,还是出于为宣传视频添加字幕的需求......所以今天就向大家分享3个能够高效提取视频文字的工具,并提供详细的操作指南,确保每个人都能轻松掌握视频文字提取技巧。▎借助工具一:录音转文字工厂使用端口:......
  • 1367java jsp SSM留学生交流互动论坛网站系统经验分享计划分享软件推荐网址推荐标签分
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 287java jsp SSM旅游信息网站系统旅游景点管理(源码+文档+PPT+运行视频+讲解视频)
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 1187java jsp SSM列车火车高铁票务信息管理系统(源码+文档+PPT+运行视频+讲解视频)
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 282java jsp SSM公司活动报名居家办公考勤请假系统员工请假体温上报设备申请员工工资
    项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/10......
  • 批量视频创作:PlugLink如何助力大规模视频生成(附源码)
    批量视频创作:PlugLink如何助力大规模视频生成传统的视频制作流程往往需要大量的人力、物力和时间投入,这不仅限制了内容产出的效率,也大大提高了成本。为了解决这一问题,PlugLink,一个开源的自动化框架,为我们提供了一种全新的解决方案。什么是PlugLink?PlugLink是一个旨在帮助......
  • ffmpeg常用命令汇总
    最近在学习ffmpeg,将基础命令做一次汇总,便于自己以后查阅:1.ffmpeg常用命令ffmpeg帮助信息查看//查看ffmpeg的基础信息。ffmpeg--help//查看高级参数部分。ffmpeg--helplong//查看全部的帮助信息。ffmpeg--helpfull转封装//-hide_banner:隐去ffmpeg......
  • 基于web实现的物业管理系统项目(运行视频+源码+数据库+部署文档)
    项目描述文档1.项目概述本项目旨在开发一个综合性物业管理系统,涵盖了保安保洁管理、保修管理、房产信息管理、公告管理、管理员信息管理、业主信息管理和登录管理等多个功能模块。该系统使用了JSP作为前端页面的开发技术,结合Bootstrap和jQuery进行页面设计和交互,后端则使用J......
  • ffmpeg在Windows上的安装
    首先进入官网DownloadFFmpeg选择windows版本下载想要的版本Gyan.dev的版本可能会更符合Windows标准,而BtbN的版本可能会更加开放和跨平台往下拉选择想要的版本进行下载我下载的是第一个下载好之后解压文件复制bin目录的路径 接着按照下面的顺序进行环境配置,结束后一路确......