PHP中用ffmpeg获取视频封面图片详细步骤


一、环境准备

官网下载:https://ffmpeg.org/download.html

wget https://ffmpeg.org/releases/ffmpeg-4.2.3.tar.bz2
bzip2 -d ffmpeg-4.2.3.tar.bz2
tar -xvf ffmpeg-4.2.3.tar
cd ffmpeg-4.2.3

安装

./configure --prefix=/usr/local/ffmpeg

如果错误提示:

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.

安装一下 yasm既可:

yum install yasm

也可以编译安装 yasm:

wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar -xzvf yasm-1.2.0.tar.gz
./configure
make
make install

再执行 configure 命令就可以了,接下来

make
sudo make install

查看是否安装成功

/usr/local/ffmpeg/bin/ffmpeg -version

亦可以配置环境变量(略),不配置就带完整路径使用

二、代码实战

方式1:直接用PHP调用命令

<?phpnamespace extend\utils;class Video
{static function getVideoCover($file,$name,$time=1) {$strlenstrlen = strlen($file);// $videoCover = substr($file,0,$strlen-4);// $videoCoverName = $videoCover..jpg;//缩略图命名//exec("ffmpeg -i ".$file." -y -f mjpeg -ss ".$time." -t 0.001 -s 320x240 ".$name."",$out,$status);$str = config_item('ffmpeg')."ffmpeg -i {$file} -y -f mjpeg -ss 3 -t {$time} {$name}";system($str);}function getTime($file){$vtime = exec( $str = config_item('ffmpeg')."ffmpeg -i ".$file." 2>&1 | grep Duration | cut -d -f 4 | sed s/,//");//CuPlayer.com提示总长度$ctime = date("Y-m-d H:i:s",filectime($file));//创建时间//$duration = explode(":",$time);// $duration_in_seconds = $duration[0]*3600 + $duration[1]*60+ round($duration[2]);//CuPlayer.com提示转化为秒return ['video_time'=>$vtime,'create_time'=>$ctime];}
}

方式2:使用composer 引入 php-ffmpeg扩展

composer require php-ffmpeg/php-ffmpeg

安装后,在自己使用的控制器里引入

use FFMpeg\FFMpeg;
use FFMpeg\Coordinate\TimeCode;

使用代码


$ffmpeg = FFMpeg::create(array('ffmpeg.binaries'  => '/usr/local/ffmpeg/bin/ffmpeg',//服务器ffmpeg安装路径下的文件'ffprobe.binaries' => '/usr/local/ffmpeg/bin/ffprobe'//服务器ffmpeg安装路径下的文件));$videoname = config('kj_url')."/uploads/video/".$info->getSaveName();//视频地址$video = $ffmpeg->open($videoname);$frame = $video->frame(TimeCode::fromSeconds(1));//获取第几帧$filename = time().".jpg";//获取图片命名$frame->save($filename);//获取图片$dirname = date("Ymd");//设置日期文件夹if (!is_dir("uploads/video/img/$dirname")){//是否已有文件夹mkdir("uploads/video/img/$dirname");//没有则新建文件夹}copy($filename,"uploads/video/img/$dirname/$filename"); //拷贝到新目录unlink($filename); //删除旧目录下的文件

方式3:PHP 安装 php-ffmpeg扩展

首先先下载扩展包

wget http://nchc.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

进入 ffmpeg-php目录 进行编译扩展

cd ffmpeg-php-0.6.0
/www/server/php/56/bin/phpize
./configure --with-php-config=/www/server/php/56/bin/php-config --enable-skip-gd-check
make
make install

在php.ini中加入extension=ffmpeg.so

重启php-fpm 或者 apache,查看PHPinfo

代码应用:

function createVideoThumb($fileName,$dir,$file = null){$movie = new ffmpeg_movie($dir.'/'.$fileName);//这里就是视频的存储路径$ff_frame = $movie->getFrame(1);$gd_image = $ff_frame->toGDImage();$filenames =substr($fileName,0,strrpos($fileName,'.')); $img="./upload/".$filenames."_video.jpg";//存图片的路径imagejpeg($gd_image, $img);imagedestroy($gd_image);}

三、总结

这三种方式,建议用第3种,再是第2种,最后是第1种,因为第一种某些视频在同样的格式下获取不到封面图,第二种composer引入的依赖太多,尤其是引入了symfony的东西,虽然没影响,感觉不是很优雅。

PHP中用ffmpeg获取视频封面图片详细步骤相关推荐

  1. ffmpeg获取视频封面图片

    ffmpeg百度云盘下载地址:https://pan.baidu.com/s/1Am_x0abBvXTrbCFPHs5e9Q 提取码:4y2r /*** ffmpeg百度云盘下载地址:https:// ...

  2. Java通过FFMPEG获取视频时长

    2019独角兽企业重金招聘Python工程师标准>>> Java通过FFMPEG获取视频时长 详见https://www.yz1618.cn/view/19 转载于:https:// ...

  3. FFmpeg获取视频旋转角度rotate获取不到的问题解决

    ffmpeg获取视频旋转角度,这个主要是在ios或者安卓手机拍照出来的视频,一般是高比宽大. 那么在我们自己用ffmpeg处理视频的时候,比如获取YUV的时候,其实倒立着的.即使你以后处理了,比如做水 ...

  4. php获得视频分辨率,php+ffmpeg 获取视频相关信息(缩略图、视频分辨率)

    ffmpeg是一款开源.跨平台的视频处理程序,可用在Windows.mac.linux等平台,可以方便的运用多种语言脚本来调用其执行视频的操作. 下面介绍使用ffmpeg获取视频首帧的方法. & ...

  5. ffmpeg获取视频时长和分辨率

    文章目录 ffmpeg获取视频文件时长和分辨率 获取视频时长 获取视频分辨率 ffmpeg获取视频文件时长和分辨率 获取视频时长 import os import subprocess# video_ ...

  6. python ffmpeg 获取视频信息_ffmpeg获取视频信息

    php使用ffmpeg获取视频信息可以获取到视频的分辨率.文件大小.播放时长.编码格式.视频格式.音频编码.音频采样频率.等..... 废话不多说,直接上代码.../** * Name: ffmpeg ...

  7. java通过使用ffmpeg获取视频的码率

    2019独角兽企业重金招聘Python工程师标准>>> 工作过程中有使用JAVA代码获取视频码率的场景,网上搜索了找到了利用ffmpeg来获取,ffmpeg组件中有ffprobe是专 ...

  8. java ffmpeg 获取视频时长_Java通过调用FFMPEG获取视频时长

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库l ...

  9. FFmpeg获取视频的旋转角度

    FFmpeg获取旋转角,目前只有在解析视频流的时候,调用rotate函数,才可以获取. 示例代码如下: int getRotateAngle(AVStream* avStream) {AVDictio ...

最新文章

  1. 20、30、40岁年轻人,2020年的建议 转载
  2. linux压缩和解压缩类命令|--zip/unzip指令
  3. 基于用户投票的排名算法(三):Stack Overflow
  4. sql 精读(二) 标准 SQL 中的编号函数
  5. discuz 二次开发
  6. MYSQL 加密函数的用法
  7. javaweb学习总结(三十六)——使用JDBC进行批处理
  8. 牛客 - 阶乘(唯一分解定理)
  9. 双端队列 HDOJ 3530 Subsequence
  10. Google Chrome 浏览器JS无法更新解决办法
  11. Javascript JSON格式
  12. linux可视化打开root,Linux非root用户登录情况下可视化编辑root权限文本
  13. f1c100s 源码_F1C100S 简易 boot 原理
  14. AABB与OOB包围盒子
  15. 等你等了这么久:DTCC2021中国数据库技术大会 Galaxybase万亿大图实践分享——终于来了!
  16. 微型计算机中的西文字符编码,在微型计算机中,应用最普遍的西文字符编码是什...
  17. 计算机二级excel设置宏,Excel2013中为宏指定快捷键的方法
  18. String的intern()方法浅析
  19. 综合练习--The Eighth Week
  20. 基于Matlab的数字水印设计—基于DCT域的水印算法实现

热门文章

  1. 电子海图基本概念介绍
  2. 一个可以地址和各种格式的经纬度查询互换的网址,支持百度、高德、Google等地图对比查询。
  3. ubuntu20.04安装rvm安装ruby
  4. Java 模拟考试系统(Swing + IO)
  5. js禁止 鼠标滚轮事件
  6. Java 4X4棋盘游戏
  7. java实习生应具备哪些知识与能力?
  8. CAD二次开发--两条线交叉求交点坐标的方法建议(IntersectWith的使用注意)
  9. 嵌入式开发板bmp图片显示
  10. 八省联考林克卡特树【题解】