티스토리 뷰

반응형

동영상을 업로드 하다보니, 썸네일을 추출하여 적용해야 하는 일이 생겼다.

서버단을 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 경로에 설치된다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함