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

news/2024/12/18 22:07:47/文章来源:https://www.cnblogs.com/tros/p/18615938

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

<?phpnamespace 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));}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855046.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【建议收藏】最新版IDEA2024.3及 AI Assistant 一键激活到2099

成功永久激活 一、支持的IDE和版本支持JB家族所有IDE激活 支持版本为2021.3~2024.1二、如何破解激活 第一步:激活工具下载 为了防止破解工具被删除,通过公众号回复“「永久激活」”获取下载最新工具(如过期,请记得提醒我哦) 关注公众号后台回复“「永久激活」”,获取最新…

《平衡树》读后感

第一框,世界属于fhq-treap 是什么? 你说的对,但是《fhq-treap》是由范浩强自主研发的一款全新树形数据结构。数据结构发生在一个被称作「二叉搜索树」的幻想世界,在这里,被人创造的节点将被授予「随机优先级」,导引期望 \(O(\log n)\) 之力。treap 将扮演一位名为「根据优…

虚拟机unraid系统安装

首先下载unraid文件https://unraid.net/getting-started windows系统使用vmware虚拟机 创建虚拟机过程中注意usb的不同协议 2.0 3.0 由于unraid系统只能识别fat32协议的文件系统,因此需要将u盘格式化 可以使用easeus 或者 傲梅 https://www.easeus.com/partition-manager/ htt…

基于.NET WinForm开发的一款硬件及协议通讯工具

前言 今天大姚给大家分享一款基于.NET WinForm开发的一款硬件及协议通讯工具:PLC-CommunTools。 项目介绍 PLC-CommunTools是一款基于.NET WinForm开发的一款硬件及协议通讯工具,包含各类厂商的PLC协议及基础的TCP、串口通讯、IO口通讯等协议通讯功能的实现整合,注意还有一部…

游戏过程

根据是否结束游戏的逻辑选择对掷骰子的过程用bool申明变量掷骰子 static bool RollDice (w,h,ref Player p1,ref Player p2,Map map) {InfoClear(h);Console.ForegroundColor=p1.type==E_PlayerType.Player?ConsoleColor.Cyan:ConsoleColor.Meganta;if(p1.isPause){p1.isPause…

6.Group组件

关于Group组件的简单介绍首先,Group组件本身并不是一个“布局”类的组件,它只是一个容器,没有提供调整内部组件展示位置的方法,也就是说,当我们将多个组件(比如button)放在group中时,他们(根据流式规则?)会全部挤在窗口的左上角,当然,如果我们没有设置组件的大小的话…

直播预告:OpenAI 开始拥抱 RTC!为什么 LLM+RTC 才是多模态 AI 的未来?丨RTE Dev Talk

如果您正在开发具备语音对话、视觉理解等多模态能力的 AI Agent,请加入我们的直播讨论!OpenAI 今日发布了 OpenAI Realtime API 的重大更新,其中包括价格下调、新增模型以及一项尤为重要的改进: WebRTC 支持 。结合此前 WebRTC 创建者加入 OpenAI 的消息,这清晰地表明 Ope…

实验6 模板类、文件I/O与异常处理

实验四 vector.hpp#pragma once#include<iostream>#include<stdexcept>using namespace std;template<typename T>class Vector {private:int size;T* ptr;public:Vector(int size, int value = 0) :size{ size } {if (size < 0) {throw length_error(&qu…

把半年前完全没思路的题解了的感觉真好

虽然处理了很多次索引思路,不过最后还是过了。第一眼就有解题思路,这种感觉真不错,要的就是这种打怪升级的正反馈。 附上解题代码 `# @lc app=leetcode.cn id=2266 lang=python3[2266] 统计打字方案数@lc code=start from collections import Counter from functools import…

【Windows安全】13种回调函数执行ShellCode

#windows #回调函数 回调机制 在我们使用回调函数执行Shellcode之前,我们首先需要去了解Windows回调机制,Windows回调机制就像你和你的助手一样,比如说每一个律师所中的每一个律师都有一个实习助手,律师需要助手在特定的情况下去处理一些特殊的任务,但这些任务并不是日常…

MaLoader:一款基于Tauri+Rust的免杀马生成工具

免责声明 本公众号“黑客之道HackerWay”提供的资源仅供学习,利⽤本公众号“黑客之道HackerWay”所提供的信息而造成的任何直接或者间接的后果及损失,均由使⽤者本⼈负责,本公众号“黑客之道HackerWay”及作者不为此承担任何责任,一旦造成后果请自行承担责任!简介 MaLoade…

Element Plus组件库el-select组件多选回显踩坑

前情公司有经常需要做一些后台管理页面,我们选择了Element Plus,它是基于 Vue 3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个 Vue 3 UI 框架 | Element Plus,项目中经常会用到el-select多选功能,组件自带的多选交互也是…