'FFmpeg'를 사용하여 미디어 형식을 변환과 'FFprobe'로 미디어 파일의 메타데이터를 추출를 해보겠습니다.
터미널을 실행하여 ffmpeg를 설치해주세요. (제 환경은 MAC M1입니다.)
brew install ffmpeg
설치가 완료되었다면 터미널에서 'ffmpeg -version'을 입력해주세요.
위의 사진처럼 나오면 설치 완료입니다.
build.gradle의 dependencies에 implementation 'net.bramp.ffmpeg:ffmpeg:0.6.2'항목을 추가합니다.
videoFileUtils(네이밍 상관X) Class를 생성하여 ffmpeg를 사용해봅시다.
설치 경로는 아까 위에서 -version을 입력했을때 나온 주소를 넣어주세요.
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/6.0 (설치경로)
@Value("/opt/homebrew/Cellar/ffmpeg/6.0/bin/ffmpeg")
public String ffmpegPath;
@Value("/opt/homebrew/Cellar/ffmpeg/6.0/bin/ffprobe")
public String ffprobePath;
public FFprobe ffprobe;
public FFmpeg ffmpeg;
@PostConstruct
public void init() {
try {
ffmpeg = new FFmpeg(ffmpegPath);
Assert.isTrue(ffmpeg.isFFmpeg());
ffprobe = new FFprobe(ffprobePath);
Assert.isTrue(ffprobe.isFFprobe());
log.debug("VideoFileUtils init complete.");
} catch (Exception e) {
log.error("VideoFileUtils init fail.", e);
}
}
위의 코드는 설치된 파일(FFmpeg와 FFprobe)을 가져와서 객체를 초기화하고 사용 가능한지 확인하는 클래스입니다.
@PostConstruct: 해당 메서드가 클래스의 초기화 과정에서 실행되어야 함을 나타냅니다.
따라서 이 클래스의 객체가 생성되고 의존성 주입이 완료된 후 init() 메서드가 자동으로 호출됩니다.
ffmpeg 빌더를 통해서 내가 변환하고 싶은 설정값을 작성합니다.
FFmpegBuilder builder = new FFmpegBuilder()
.setInput(filePath) //파일 경로
.overrideOutputFiles(true) //오버라이드
.addOutput(outputPath) //저장 경로
.disableSubtitle() //서브타이틀 제거
.setVideoCodec("libx264") //비디오 코덱
.setVideoResolution(1280, 720) //해상도
.setVideoBitRate(bitrate) //비트레이트
.setVideoFrameRate(30) //프레임
.setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) //ffmpeg 빌더 허용
.done();
FFmpegExecutor executor = new FFmpegExecutor(videoFileUtils.ffmpeg, videoFileUtils.ffprobe);
마지막으로 FFmpegExecutor객체를 불러와서 아까 만들어놓은 builder를 넣어주게 된다면 변환이 진행됩니다.
executor.createJob(builder).run();
FFmpegProbeResult probeResult = ffprobe.probe(filePath);
probeResult.getStreams().get(0).width;
probeResult.getStreams().get(0).height;
probeResult.getFormat().format_name;
probeResult.getFormat().format_long_name;
probeResult.getFormat().tags.toString();
probeResult.getFormat().duration;
probeResult.getFormat().size;
System.out.println(probeResult.toString);
메타데이터는 미디어 정보 표시 도구인 'ffprobe'를 위와 같이 작성해서 사용 할 수 있습니다.