[Java] exec와 ffmpeg 캡쳐를 이용한 동영상 썸네일 추출하기
[Dos] windows 용 ffmpeg.exe 로 동영상 썸네일 추출하기
[팁] 자바 Runtime.exec()로 ffmpeg 실행시 에러 출력 스트림 주의
http://ffmpeg.zeranoe.com/builds/ 에서 윈도우용 ffmpeg를 다운받고
압축을 풀면 이런구성으로 되어있습니다
사용법은 cmd 입력창에 ffmpeg 캡쳐 명령어를 입력하여 실행하는 구조입니다
// exec 메서드로 윈도우탐색기 열기 Runtime run = Runtime.getRuntime(); try{ run.exec("C:\\windows\\explorer.exe"); }catch(Exception e){ System.out.println("error : "+ e.getMessage()); e.printStackTrace(); }
//exec 메서드를 이용하여 ffmpeg를 실행하기 Runtime run = Runtime.getRuntime(); String command = "C:\\ffmpeg\\bin\\ffmpeg.exe -i \""+videofile+"\" -ss 00:05:00 -vcodec png -vframes 1 \""+videofile+"_%2d.png\""; try{ run..exec("cmd.exe chcp 65001"); // cmd에서 한글문제로 썸네일이 만들어지지않을시 cmd창에서 utf-8로 변환하는 명령 run..exec(command); }catch(Exception e){ System.out.println("error : "+e.getMessage()); e.printStackTrace(); }
chcp 65001을 입력하여 변환했다 하더라도
컴퓨터가 재부팅되고 cmd 창에서 chcp를 입력하면
활성 코드 페이지: 949 로 다시 되돌아옴
ffmpeg -i 비디오파일 -ss 시간 -vcodec png -vframes 썸네일갯수 파일명_%d.png
-i = Input file name
-ar = Audio sampling rate in Hz (audio sampling frequency. default = 44100 Hz)
-ab = Audio bitrate in kbit/s (default = 64k)
-an = Disable audio recording.
-f = format (Force format)
-s = Frame size (가로x세로)
-t = 레코딩 시간 (hh:mm:ss[.xxx])
-ss = 이미지 캡쳐 시간 (hh:mm:ss, 초)
-fs = 파일 사이즈 제한
-vframes = 레코딩하는 비디오 프레임의 수
-r = Frame Rate (Hz, Default=25)
%d = 증가하는 한자리 숫자
%%2d = 증가하는 두자리 숫자
%%3d = 증가하는 세자리 숫자
기타 막혔던 부분
cmd 명령에서 한글경로를 인식 못하고 에러가 나서 아래 블로그를 참조하였다
한글경로를 인식하더라도 공백을 인식못하는부분에서 막혀서 아래블로그를 참조하였다
cmd 창에서 직접입력시 결과화면