주요글: 도커 시작하기
반응형

자바에서 Ffmpeg을 사용하려고 Xuggler 5.4 버전을 사용했는데, 이게 64비트 윈도우에서 종종 JVM이 Crash되는 문제가 있음을 발견했다. (다른 OS에서는 안 해봐서 어떤지 모른다.) Xuggler 5.5 정식 버전이 나오기까지 기다리긴 힘들기도 해서 자바 코드에서 ffmpeg을 직접 호출해야 하나라는 생각을 하다가, JAVE라는 ffmpeg 래퍼를 찾게 되어서 소개한다.


JAVE(Java Audio Video Encoder)


JAVE는 Runtime.exec()를 이용해서 ffmpeg을 실행해주는 래퍼이다. JAVE는 ffmpeg이 출력하는 문자열을 분석해서 알맞은 정보를 제공해준다. 예를 들어,아래 코드를 보자.


Encoder encoder = new Encoder();

MultimediaInfo info = encoder.getInfo(new File("src/test/resources/sample.mp4"));

System.out.println(info.getFormat());

System.out.println(info.getAudio().getDecoder());

System.out.println(info.getVideo().getDecoder());


위 코드에서 encoder.getInfo() 메서드를 실행하면 ffmpeg -i src/test/resources/sample.mp4 명령어가 실행되고, 출력된 문자열을 파싱해서 컨테이너 포맷이나 비디오/오디오 코덱에 대한 정보를 생성해준다.


트랜스코딩은 다음의 코드를 사용해서 실행한다.


File source = new File("source.avi");

File target = new File("target.flv");


AudioAttributes audio = new AudioAttributes();

audio.setCodec("libmp3lame");

audio.setBitRate(new Integer(64000));

audio.setChannels(new Integer(1));

audio.setSamplingRate(new Integer(22050));


VideoAttributes video = new VideoAttributes();

video.setCodec("flv");

video.setBitRate(new Integer(160000));

video.setFrameRate(new Integer(15));

video.setSize(new VideoSize(400, 300));


EncodingAttributes attrs = new EncodingAttributes();

attrs.setFormat("flv");

attrs.setAudioAttributes(audio);

attrs.setVideoAttributes(video);


Encoder encoder = new Encoder();

encoder.encode(source, target, attrs);


JAVE의 자세한 사용 방법은 http://www.sauronsoftware.it/projects/jave/manual.php 에 있으니 참고하기 바란다.


JAVE의 재미난 점


JAVE의 Encoder가 ffmpeg 실행 파일의 경로를 찾을 때 사용하는 FFMPEGLocator를 사용하는데, 별도로 FFMPEGLocator를 지정하지 않으면 DefaultFFMPEGLocator이 사용된다. DefaultFFMPEGLocator는 다음의 작업을 수행한다.

  • java.tmp.dir 시스템 속성을 이용해서 임시 디렉토리를 구한다.
  • 임시 디렉토리에 jar 파일에 포함된 ffmpeg 관련 파일을 복사한다.
    • 윈도우인 경우 jar 파일에 포함된 ffmpeg.exe와 pthreadGC2.dll 파일일 임시 디렉토리에 복사한다.
    • 리눅스인 경우 jar 파일에 포함된 ffmpeg 파일을 임시 디렉토리에 복사한다.
  • ffmpeg 실행 파일의 경로로 임시 디렉토리에 복사한 ffmpeg.exe 또는 ffmpeg 파일의 경로를 제공한다.
jar 파일에 포함되어 있는 ffmpeg 실행 파일을 사용하기 때문에, ffmpeg이 로컬 시스템에 설치되어 있지 않아도 정상적으로 실행할 수 있다.

아쉬운 점은 썸네일 생성 기능을 래핑하지 않았다는 점인데, 이것까지 들어가면 더 좋을 것 같다.


관런 링크

  • 프로젝트 사이트: http://www.sauronsoftware.it/projects/jave/


+ Recent posts