사이트 내 전체검색
windows 용 ffmpeg.exe 로 동영상 썸네일 추출하기
로빈아빠
https://cmd.kr/server/996 URL이 복사되었습니다.

본문

windows 용 ffmpeg.exe 로 동영상 썸네일 추출하기

2008/02/12(화)
밤샘 테스트와 거의 2일간의 테스트였다.
동영상 관련해서 흥미는 많지만, Dos 에서 동작하는 파일로 무언가를 해본적이 별로 없는터라.
여하튼, ASP 와 ffmpeg.exe 를 이용한 웹작업을 감안할때,
동영상에서 썸네일을 뽑아내는 Dos 실행파일이 있다는 점은 중요하다.
이 파일(ffmpeg.exe) 은 windows 에서 동작하는 파일이며, 여타 Linux 기반이나 혹은 minGW 등을 설치하고 인스톨 하여 사용하는 방식이 아니라, 단지 폴더채로 카피해다 놓고 작업할 수 있는 파일임.(dll 파일이 포함되어 있지만 별도의 레지스트리 등록등의 작업이 필요한것은 아님).
테스트 OS는 windows XP professional 및 windows 2003 server 이며, 똑같은 동작성과를 보여줌.
XP 에서의 테스트인경우, 곰플레이어나 K-Lite 코덱팩 , Sothink FlashVideo Encoder 1.1 이나 Power Video Converter 등의 편집툴이 깔려있기도 했으나, 2003 서버의 경우, 전혀 이런 코덱이나 편집툴이 깔려있지 않았음에도 똑같이 동작하였음을 감안할때,
별다른 외부 코덱이나 유틸리티의 영향이 없음을 확인함.
(기타, ffmpeg 지원용 코덱팩 같은것의 설치 없었음).
주의:
ffmpeg.exe 의 경우 여러 버전이 있는듯 하며, 파일 사이즈 또한 제각각인데,
테스트한 버전은 6.97MB ffmpeg.exe 파일이었으며, 압축해제시 bin 폴더와 doc 폴더가 있고,
bin 폴더안에 4개의 파일이 존재함(ffmpeg.exe , ffplay.exe , pthreadGC2.dll , SDL.dll).
-- 이 압축파일을 이 글에 첨부함 --
ffmpeg 를 이용해 썸네일을 추출하는 옵션은 조사한 바에 의하면 두가지로 압축이 가능하다.
옵션1.
ffmpeg -y -i [videofile] -vframes 1 -ss 00:00:02 -an -vcodec png -f rawvideo -s 320*240 [thumbnailimage.png]
여기서 [videofile] 에는 1.avi 등 썸네일을 추출하려는 원본 파일 이름(경로)을 쓴다.
[thumbnailimage.png] 는 추출되는 이미지의 이름을 지정하는 것으로, 경로로 지정해도 된다.
여기서 보면 알겠지만, 테스트결과 png 파일로만 추출됨을 확인했다.(gif,jpg 등으로 지정하면 오류 발생)
옵션2.
ffmpeg -i video.flv -an -ss 00:00:03 -an -r 2 -vframes 1 -y %d.jpg
이것은 flv 파일에서 썸네일을 추출할때 쓰는 옵션이라며 떠도는 내용인데,
테스트결과, flv 파일만이 아니라 다른 포맷의 파일도 이 옵션으로 썸네일이 추출됨을 확인했음.
(avi,wmv,flv,k3g,sktm 등 모두 됨)
도스 커맨드 상태에서 실행한 것을 직접보면,
옵션1 을 이용해서 png 파일로 썸네일을 추출할때.

flv 파일에서 썸네일을 추출할때.



k3g 파일에서 썸네일을 추출할때.


sktm 파일에서 썸네일을 추출할때.


현재 실행중인 위치가 아닌 다른 경로에 있는 ffmpeg.exe 를 실행시켜, 다른 경로의 원본 파일을 다른 경로의 디렉토리로 저장할때.
windows XP professional 에서 테스트시 이상한 오류들이 발생하여 문제를 찾지 못했는데,
원인은, 이런 저런 유틸리티등으로 만들어진 flv 파일이 유틸리티 오류로 0byte 의 파일인 경우에 발생한 것으로 원인 규명.
처음에는 문제를 몰라 사용자 컴퓨터의 환경에 영향을 받는 것으로 생각하였으나,
결론적으로, 사용자 컴퓨터의 환경과는 별개의 문제였음.
두번째 옵션의 경우, gif,jpg,png 로의 추출이 모두 가능했으며,
곰플레이어의 코덱오류로 영상이 재생되지 않는 상황(TSCC 코덱없음 오류) 에서도 썸네일이 추출되는 결과를 보임.
이제, 두번째 옵션의 세부적인 내용을 살펴보면,

ffmpeg -i video.flv -an -ss 00:00:03 -an -r 2 -vframes 2 -y %d.jpg

로 옵션을 주면, 1.jpg, 2.jpg 두개의 이미지가 생성되는 것을 확인할 수 있다.
다시,
ffmpeg -i video.flv -an -ss 00:00:03 -an -r 2 -vframes 1 -y %d.jpg
이라고 옵션을 주면
1.jpg 파일만 생성되는데 그 사이즈가 약 17.6KB 였다.
즉, 옵션의 두개의 숫자는 파일의 이름과 관련있는 것이 아니라, 다른 옵션임.
다시,
ffmpeg -i video.flv -an -ss 00:00:03 -an -r 1 -vframes 2 -y %d.jpg
이라고 옵션을 주면
다시 두개의 jpg 파일이 생성(1.jpg,2.jpg) 되는데,
즉, 첫번째 1 이라는 숫자는 썸네일의 퀄리티를 지정하며, 두번째 2 라는 숫자는 몇장을 뽑아내는지 지정함을 확인.
1.jpg 와 2.jpg 파일을 살펴보면, 약간의 차이(동작이 변화. 즉 움직였음)가 있는데, 프레임 단위로 2장의 썸네일을 뽑아내는 옵션으로 보아짐.
이를 확인하기 위해 다시,
ffmpeg -i video.flv -an -ss 00:00:03 -an -r 1 -vframes 6 -y %d.jpg
이라고 옵션을 주면,
6장의 jpg 파일이 생성되고, 인물이 움직임을 확인할 수 있다.
그렇다면, 옵션의 마지막에 파일이름을 지정한 %d.jpg 는 무엇인가.
%d 는 C++ 에서 사용하는 변수명 같은 의미로 봐야할것 같다.
즉, 연속적으로 캡쳐(추출,썸네일)되는 이미지들의 이름을 순차적으로 지정하기 위해 변수명으로 선언하는 듯 하며,
따라서, 추출될 이미지의 이름을 지정하기 위해서는
test_%d.jpg 처럼 %d 변수를 유지한채 이름을 붙여주면 된다.
그러면, test_1.jpg 파일이 생성되는것을 확인할 수 있다.
P.S.
사용자가 올린 영상 파일 자체의 오류로 인해 ffmpeg.exe 오류가 발생할 수 있으며,
현재의 도스 버전으로는 이 오류를 감지해 내거나 오류에 대한 메세징 처리가 원만하지 않은데,
이런 불완전함에도 불구하고,
별도의 특별한 설치절차 없이, 간단한 옵션으로 썸네일을 뽑아낼 수 있는 유용한 방법이 될 듯 하다.


20080212-ffmpegwindows.zip

댓글목록

등록된 댓글이 없습니다.

1,139 (7/23P)

Search

Copyright © Cmd 명령어 3.149.237.231