首页 > 编程语言 >PHP使用ffmpeg为视频生成预览图

PHP使用ffmpeg为视频生成预览图

时间:2024-12-18 22:09:20浏览次数:3  
标签:视频 PHP return ffmpeg 预览 video MIME finfo dir

默认取视频第1秒截图作为预览图

<?php

namespace app\common\library;

//视频获取第一帧做缩略图
class VideoThumb
{

    public $timeStamp = '00:00:01';

    public function createThumb($videoPath)
    {
        $uploadPath = public_path() . '/uploads/';
        $videoPath = $uploadPath . $videoPath;
        if (!is_file($videoPath)) {
            return false;
        }

        if (!$this->isVideoFile($videoPath)) {
            return false;
        }

        $thumbPath = 'videos_thumb/' . $this->autoBuildName() . '.jpg';
        $thumbPathFull = $uploadPath . $thumbPath;

        $dir = dirname($thumbPathFull);
        if (!is_dir($dir)) {
            mkdir($dir, 0777, true);
        }

        // FFmpeg命令,-ss表示时间戳,-vframes 1表示只截取一帧,-f image2表示输出图片格式
        $ffmpegCommand = "ffmpeg -ss {$this->timeStamp} -i \"{$videoPath}\" -frames:v 1 \"{$thumbPathFull}\"";

        // 执行FFmpeg命令
        $output = [];
        exec($ffmpegCommand, $output, $returnVar);

        // 检查命令是否成功执行
        return $returnVar == 0 ? $thumbPath : false;
    }

    public function isVideoFile($filePath)
    {
        // 创建一个fileinfo资源
        $finfo = finfo_open(FILEINFO_MIME_TYPE);

        // 获取文件的MIME类型
        $mimeType = finfo_file($finfo, $filePath);

        // 关闭fileinfo资源
        finfo_close($finfo);

        // 定义可能的视频MIME类型
        $videoTypes = [
            'video/mp4',
            'video/avi',
            'video/quicktime',
            'video/x-msvideo',
            'video/x-ms-wmv',
            'video/mpeg',
            'video/ogg',
            'video/webm',
            'video/3gpp',
            'video/3gpp2',
            'video/quicktime',
            'video/x-matroska',
        ];

        // 检查MIME类型是否在视频类型数组中
        return in_array($mimeType, $videoTypes);
    }

    /**
     * 自动生成文件名
     * @access protected
     * @return string
     */
    public function autoBuildName()
    {
        return date('Ymd') . DIRECTORY_SEPARATOR . md5(microtime(true));
    }
}

 

标签:视频,PHP,return,ffmpeg,预览,video,MIME,finfo,dir
From: https://www.cnblogs.com/tros/p/18615938

相关文章

  • [网鼎杯 2020 朱雀组]phpweb1
    根据形式,猜测func是命令,p是参数,尝试修改func为phpinfo,发现被过滤了尝试绕过过滤,php中,\被认定为特殊字符,所以\phpinfo就会绕过过滤,发现index.php文件采用highlight_file显示当前页面源代码,由于页面刷新速度较快,这里建议用bp抓包或者快速复制下来(我是复制的)func=highlight_f......
  • Windows Server 2019 配置PHP环境(图文教程)
    操作系统:WindowsServer2019运行模式:IIS10+fastcgi+PHP(安装IIS的时候选择上CGI)软件版本:MySQL5.7.37解压版/PHP7.4.29/PHPManager1.5.0/phpMyAdmin5.1.31、MySQL5.7.37解压版安装:为什么我会选择解压版而不是安装版?一是因为安装版没有64位版本;二是因为安装版......
  • FFmpeg.AutoGen 获取注册的编解码类型
    使用FFmpeg.AutoGen获取注册的编解码类型1获取版本 Debug.WriteLine($"FFmpegversioninfo:{ffmpeg.av_version_info()}"); FFmpegversioninfo:6.0-full_build-www.gyan.dev2获取注册的编解码类型(注支持硬件加速需要对源码编译)//使用av_codec_iterate获取......
  • Z-BlogPHP遇到“error-4 数据库连接错误”错误时,应该如何解决?
    当您在使用Z-BlogPHP时遇到“error-4数据库连接错误”错误,通常是因为Z-BlogPHP无法成功连接到数据库。这可能是由于多种原因引起的,以下是一些解决此问题的方法:检查数据库配置:确认Z-BlogPHP的数据库配置文件(通常是 zb_system/config.php)中的数据库连接信息是否正确。......
  • Z-BlogPHP 中“error-8 登录失败”错误的原因是什么?
    “error-8登录失败”错误通常出现在Z-BlogPHP中,表示您无法成功登录系统。以下是常见的原因和解决方法:用户名或密码错误:最常见的原因是用户名或密码输入错误。请仔细检查您输入的用户名和密码是否正确。确保用户名和密码的拼写、大小写都正确无误。有些系统对大小写非常敏......
  • Z-BlogPHP 报错“error-9 该文章不存在或设置了权限”,如何解决?
    当您在使用Z-BlogPHP时遇到“error-9该文章不存在或设置了权限”的错误,通常是因为文章的状态被更改或设置了访问权限。以下是一些解决此问题的方法:检查文章状态:确认文章的状态是否为已发布。如果文章被设置为草稿或其他未发布的状态,非作者或管理员账号将无法访问。登录Z......
  • Z-BlogPHP 报错“主题模板的编译文件不存在”,如何解决?
     当您在使用Z-BlogPHP时遇到“主题模板的编译文件不存在”的错误,通常是因为系统未能正确编译主题模板文件,导致无法正常显示网站内容。以下是一些解决此问题的方法:清空缓存并重新编译模板:登录Z-BlogPHP后台管理界面,进入首页。在首页中,找到并点击“清空缓存并重新编译模......
  • 最佳 PHP 开发工具:助你高效编码
    PHP堪称家喻户晓的技术,因其广阔的前途而备受青睐。众多企业,不论规模大小或所属行业,都对PHP表现出特别的偏爱。因此,PHP开发公司层出不穷,蓬勃发展也就不足为奇了。本文将重点介绍一系列优秀的PHP开发工具,助您成功完成项目。此外,您还将了解到为什么PHP仍然是现代软件开......
  • 完美解决PHP无法上传大文件源码
    前端:vue2,vue3,vue-cli,html5,jquery,webuploader后端:php服务器:linux,centos,Windows,数据库:MySQL,达梦数据库,人大金仓平台:Windows,macOS,Linux,Ubuntu,RedHat,中标麒麟,银河麒麟,统信UOS,信创国产化CPU:x86(Intel,AMD,兆芯,海光),arm(鲲鹏,飞腾),龙芯(mips),龙芯(Loong......
  • PHP slim 部署Apache
    Step1:InstallXAMPPXAMPP是一个集成了Apache服务器、MySQL数据库和PHP的开放源代码软件包。Step3:ConfiguretheApache打开Apache的配置文件httpd.conf,有效化ApacheRewrite(mod_rewrite)模块。Step4:InstallComposer 下载 Composer并安装。Step5:Ins......