linux下安装ffmpeg以及php中调用linux命令获取视频第一帧图片

Linux ThinkPhp 发表时间:2018-08-28 14:28:15 作者:梁子亮 浏览次数:810

linux服务器安装ffmpeg(未验证)

先到ffmpeg官网下载安装包,下载链接 http://ffmpeg.org/download.html

下载后上传到服务器,解压安装包

tar -jxvf ffmpeg-x.x.tar.bz2

进入目录

cd ffmpeg-x.x

编译安装

./configure --enable-shared && make && make install

如果编译报错,请加选项(报错会提示选项内容)

./configure --enable-shared  --选项 && make && make install

安装完成之后 执行

ffmpeg -version

如果出现ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No such file or directory

编辑/etc/ld.so.conf文件加入如下内容

/usr/local/lib

保存退出后执行ldconfig命令

如果能够出现类似下列信息,说明ffmpeg安装成功。

ffmpeg version 2.5.11 Copyright (c) 2000-2016 the FFmpeg developers
built on Apr 17 2017 16:47:15 with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11)
configuration: --enable-shared
libavutil      54. 15.100 / 54. 15.100
libavcodec     56. 13.100 / 56. 13.100
libavformat    56. 15.102 / 56. 15.102
libavdevice    56.  3.100 / 56.  3.100
libavfilter     5.  2.103 /  5.  2.103
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100

php程序中使用ffmpeg生成视频第一帧图片

/*$file可以为"http://www.aaa.mp4",又可以为"/Uploads/2018/0828/aaa.mp4";
$time可不填,默认取0.01秒*/
function getVideoCover($file,$time) {
    if(empty($time))$time = 0.01;//默认截取第0.01秒第一帧,也可以传0

    $bool = strpos($file,'http');//查找是不是http格式的地址,是的话也可以获取第一帧图片的
    if($bool === false){
        $file_name = $_SERVER['DOCUMENT_ROOT'].''.$file;
    }else{
        $file_name = $file;
    }
    $return_name = '/Uploads/'.date('Y').'/'.date('md').'/'.md5('vsonter_'.time().mt_rand(1,99999)).'.png';
    $save_name = $_SERVER['DOCUMENT_ROOT'].$return_name;
    $re = pathinfo($save_name);
    if (!file_exists($re['dirname'])) {
        recursiveMkdir($re['dirname']);
    }
    // $str = "ffmpeg -i ".$file_name." -y -f mjpeg -ss ".$time." -t 0.001 -s 320x240 ".$save_name;
    $str = "ffmpeg -ss ".$time." -i ".$file_name." -y -f mjpeg -t 0.001 ".$save_name;
    system($str,$result);
    if($result == 0){
        return $return_name;// 返回的路径格式为 /Uploads/2018/0814/2354454853146134d7329a1c3ede99f4.png
    }
}

注意:如果php调用system命令不生效,则在php.ini关闭禁用的system命令即可,即把disable_functions下的system函数删掉

vim /usr/local/php/etc/php.ini
disable_functions = passthru,exec,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru