반응형
동영상을 업로드 하다보니, 썸네일을 추출하여 적용해야 하는 일이 생겼다.
서버단을 PHP, Laravel framework를 사용하다 보니, 해당 위주로 검색 해 보았는데
Laravel-ffmpeg, PHP ffmpeg 등등의 오픈 API등이 있었지만 두가지 다 설명이 친절하지 않고, 적용하기도 까다로웠다.
일단, 해당 API를 사용하던 하드 코딩을 하든 FFMPEG 라는 프로그램이 설치가 되어 있어야 가능 하기 때문에 해당 프로그램을 먼저 다운 받자.
윈도우의 경우에는
https://www.ffmpeg.org/download.html
에서 다운로드 할 수 있다.
우분투의 경우에는 집에 메모를 해 놨는데 집에서 수정하여 업로드 하도록 하겠다.
다운로드 한 후에 소스 코드 작성은 다음과 같이 작성하면 된다.
$result = Storage::disk('s3')->put('movie',$request::file('movie'));
$videoFile = $request::file('movie');
$uuid = new uuid();
$thumname = $uuid->createUUID();
shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i $videoFile -ss 00:00:15 -vframes 1 -q:v 2 thumnails/$thumname.jpg");
$img = asset('/thumnails/'.$thumname.'.jpg');
$thumbnail = Storage::disk('s3')->put('thumnails/'.$thumname.'jpg',file_get_contents($img));
$uploadInfo = ['path'=>$result,'thumbnail'=>$thumname.'.jpg'];
S3에 즉시 업로드 하도록 하여서 소스코드가 조금 복잡한데, 썸네일을 추출하는 부분은 아래 소스코드만 확인하면 된다.
$videoFile = $request::file('movie');
shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i $videoFile -ss 00:00:15 -vframes 1 -q:v 2 thumnails/$thumname.jpg");
Form에서 받은 file을 $vidioFile에 저장하고,
shell_exec은 ffmpeg의 설치 경로를 처음에 적어 주며, 마지막에는 추출되는 이미지 파일의 경로와 파일 명을 적어주면 된다.
-ss 00:00:15는 동영상 파일의 15초 부분을 썸네일로 추출한다는 뜻이다.
※ 기본적으로 우분투 서버에서는 /usr/bin/ffmpeg 경로에 설치된다.
반응형
'PHP > PHP' 카테고리의 다른 글
Laravel - passport를 이용한 로그인 구현 (Oauth) (2) | 2022.05.03 |
---|---|
[Laravel] Laravel + Vue 연동 (0) | 2020.12.15 |
[Laravel] AWS S3 연동하기 및 파일 업로드 구현 (0) | 2019.12.11 |
[PHP Mailer] PHP 메일 발송하기 (0) | 2019.11.27 |
dompdf를 이용한 HTML -> PDF 변환 (0) | 2018.03.08 |