[完结]
在百度找了很多安装方式,都不行。意外之中找到了官网:https://ffmpeg.org/ 。在这里可以下载各种版本、各种平台的包。但是我没用上。
下面介绍我的操作:
1、安装:
安装时参考了一遍文章:https://www.linuxidc.com/Linux/2019-08/160266.htm
介绍的是如何安装4.2版本,由于没有安装过,所以版本号无所谓只要能用起来就行。
输入安装命令:sudo add-apt-repository ppa:jonathonf/ffmpeg-4
安装的时候报错:ubuntu add-apt-repository command not found
解决方法:
Launchpad PPA Repositories是很有用的非ubuntu官方的第三方个人资源库,可以很方便地安装第三方软件。
但是在运行add-apt-repository命令时,有时会提示命令不存在,这个时候直接apt-get add-apt-repository是不可以的!
解决的方法是安装software-properties-common。输入命令:
apt-get install software-properties-common
根据提示操作即可。
2、正式尝试安装ffmpeg扩展
输入命令安装:sudo add-apt-repository ppa:jonathonf/ffmpeg-4
3、查看版本
输入命令:ffmpeg -version
4、如何恢复(此步骤未测试):
无论出于何种原因,您可以通过以下命令清除PPA,将FFmpeg降级到Ubuntu Universe存储库中的库存版本:
linuxidc@linuxidc:~/www.linuxidc.com$ sudo apt-get install ppa-purge && sudo ppa-purge ppa:jonathonf/ffmpeg-4
5、简单使用(此步骤未测试):
参考上面文章链接。
6、获取第一帧
我这里需要的是获取视频第一帧作为图片保存下来。
开始编辑测试代码:
//待处理视频路径 /var/www/html/public/static/upload/file/0_6462e42afd0743d7b4ebabc8383077cbAdminist_1591013034.mp4
$in_file = "/var/www/html/public/static/upload/file/0_6462e42afd0743d7b4ebabc8383077cbAdminist_1591013034.mp4";
//缩略图保存路径
$out_file = '/var/www/html/runtime/wh_ffmpeg.jpg';
//要执行的 cmd 命令
$cmd = "ffmpeg -i ".$in_file." -y -f image2 -ss 2 -t 0.001 -s 350x240 ".$out_file;
$cmd = iconv('UTF-8','GB2312',$cmd);
//执行命令
$res = exec($cmd.' 2>&1');
dump($res);
输出:
string(95) "video:10kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown"
查看、或者自己下载下来在本地看:
我是下载在本地看的。
到这里已经可以生成图片了,但是,还不是我要的效果!
我的进阶需求:
生成原视频宽高(等比例)图片。
继续研究。。。。。。
//输入的视频格式 mov,mp4,m4a,3gp,3g2,mj2
研究出来了,下面直接上代码:
/**
* desc:生成视频封面
* 读取视频第一帧保存为图片
* author:
* @param $in_file 待处理视频路径
* @param $out_file_name 缩略图文件名称
* @return string
*/
function createVideoImg($in_file, $out_file_name, $path=''){
//缩略图保存路径
$path = $path?$path:'/static/upload/file/';
$out_file = config('app.ROOT_PATH_PRO').'public'.$path;
if(!file_exists($out_file)){
mkdir($out_file, 0777, true);
}
$out_file_path = $out_file.$out_file_name;
//要执行的 cmd 命令
//$cmd = "ffmpeg -i ".$in_file." -y -f image2 -ss 2 -t 0.001 -s 350x240 ".$out_file;
$cmd = "ffmpeg -i {$in_file} -f image2 -ss 2 -t 0.001 {$out_file_path}";
$cmd = iconv('UTF-8','GB2312',$cmd);
//执行命令
exec($cmd);
return $path.$out_file_name;
}
返回的结果是不含域名的文件访问路径,加上域名即可访问。
ok,终于搞定。
继续撸码。。。。。。
END