자바 스프링에서 FFmpeg 사용하기

dogineer·2023년 7월 26일
0
post-thumbnail

'FFmpeg'를 사용하여 미디어 형식을 변환과 'FFprobe'로 미디어 파일의 메타데이터를 추출를 해보겠습니다.

ffmpeg 설치하기

터미널을 실행하여 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'를 위와 같이 작성해서 사용 할 수 있습니다.

profile
왈왈왈 메모장입니다 왈왈왈

0개의 댓글