[完結]
在百度找了很多安裝方式,都不行。意外之中找到了官網: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