【thinkphp】tp6/tp5.1获取视频第一帧生成图片并保存下来

沉梦小哥哥
预计阅读时长 15 分钟
位置: 首页 ThinkPhp 正文

在实现具体功能的php代码之前,我们需要先了解一个组件库,ffmpeg-php

首先php本身是无法获取视频和音频文件的信息,需要通过这个ffmpeg组件库调用php底层的程序来获取

下面开始安装ffmpeg-php到thinkphp项目中!

一.使用Composer安装ffmpeg-php


1. 使用shell客户端下载composer.phar到项目中,它可以用于安装发布在git上任何项目(已有可以跳过)

 $ wget https://raw.githubusercontent.com/composer/getcomposer.org/1b137f8bf6db3e79a38a5bc45324414a6b1f9df2/web/installer -O - -q | php

该命令将创建名为composer.phar 的文件在项目运行目录下


2.创建一个名为composer.json并将以下JSON粘贴到其中:

 {    
     "require": {
             "char0n/ffmpeg-php": "^3.0.0"
      }          
 }


如果已有composer.json文件,将 "char0n/ffmpeg-php": "^3.0.0" 复制填写到 require 列表中即可

 {    
     "require": {
         "php": ">=7.2.5",
        "topthink/framework": "^6.0.0",
        "topthink/think-orm": "^2.0",
        "topthink/think-multi-app": "^1.0",
        "topthink/think-view": "^1.0",
        "liliuwei/thinkphp-jump": "^1.5",
        "topthink/think-captcha": "^3.0",
        "aliyuncs/oss-sdk-php": "^2.4",
        "phpoffice/phpexcel": "^1.8",
        "phpoffice/common": "^1.0",
        "char0n/ffmpeg-php": "^3.0.0"
      }          
 }


3.通过运行以下shell命令安装FFmpegPHP:

php composer.phar install

或

composer update

5656.png

4. 这个命令成功执行后,名为vendor/目录已创建。当前工作目录的文件结构应该如下所示:


 *.*
 - composer.json 
 - composer.phar 
 - vendor/

安装成功后在vendor/目录下会有一个名称为char0n的目录,至此FFmpegPHP安装完成!

二.使用yum安装rpm和ffmpeg

centos7使用如下命令安装

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
sudo yum install ffmpeg ffmpeg-devel -y

Ubuntu使用如下命令安装

sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update
sudo apt-get install ffmpeg


56.png

55D.png

命令执行完成后,在使用如下命令查看版本,可知晓是否已成功!

ffmpeg -version

如出现以下类似信息,说明已安装成功!

555.png

接下来,可以开始使用它,获取到视频的第一帧图片并保存下来!

三.使用ffmpeg-php获取视频的第一帧图片

代码很简单,只需要调用Movie类实例,使用getFrame方法即可

<?php
use Char0n\FFMpegPHP\Movie;

//使用原生方式获取到上传的文件
//$image_temp = $_FILES['file']['tmp_name'];

//或者使用thinkphp获取也可以
$key      = 'file';
$file     = request()->file($key);
$fileInfo   = $file->getInfo();
$image_temp  = $fileInfo['tmp_name'];

//把视频文件的第一帧保存下来
$movie       = new Movie($image_temp);
//获取第一帧图片
$frame_image = $movie->getFrame(1);
//转Gd
$im       = $frame_image->toGDImage();

$filename = __DIR__ . DS . 'frame_' . time() . '.png';

//保存到临时文件
imagepng($im, $filename);

// 保存文件代码

//删除临时文件
//unlink($filename);



-- 展开阅读全文 --
头像
【JavaScript】美观方便的IE内核浏览器检测提示纯JS代码
« 上一篇 2022-06-27
【thinkphp】出现 Trying to access array offset on value of type null怎么解决
下一篇 » 2022-06-30
取消
微信二维码
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]