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

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
[email protected] 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既可:

yun install yasm

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

make
sudo make install

查看是否安装成功

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

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

 

二、代码实战

 

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

&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深入实践,php,获取视频封面,php-ffmpeg,ffmpeg,使用安装)