JAVA/컨셉 , 예제

Jave 예제 (동영상파일에서 음원 추출)

minwoohi 2020. 1. 25. 17:52

회사에서 업무 중 stt 기술 적용 시켜야 할 일이 있었다. 텍스트 뿐 아니라 타임스탬프까지 기록하고 싶었는데, google cloud platform에서 지원하고 있었고, 이를 적용시키는 와중 동영상에서 raw 음원 파일 추출해주는 라이브러리가 있어 소개

내가 해결해야 하는 이슈는

- 동영상(.mp4) 파일에서 음원파일을 추출해야 하는 것 (google에서는 wav, flac 등 음원파일만을 파라미터로 허용)

이었고, 이를 JAVE 라이브러리를 통해 해결했다.

자바 버전 1.7에서 동작 확인

http://www.sauronsoftware.it/projects/jave/

 

홈페이지 접속해서 바이너리 파일 받으면, jar 파일이 있다. 이를 외부 라이브러리로 등록하면

it.sauronsoftware.jave 패키지의 클래스들 사용 가능

Documentations에 보면 지원하는 포맷, 예제 코드까지 친절하게 적혀 있다.

 

import it.sauronsoftware.jave.AudioAttributes;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncodingAttributes;

public String makeFlacFile ( MultipartFile mp4File) throws IOException {
		String result = "";
		
		String uuid = UUID.randomUUID().toString().replace("-", "");
		
		try {
			String filePath = File.separator + "var" + File.separator + "stt" + File.separator;
			
			Encoder encoder = new Encoder();
			
			File source = new File(mp4File.getOriginalFilename());
			mp4File.transferTo(source);
			
			File target = new File(filePath + uuid + ".flac" );
			
            // 오디오 포맷 속성 정의. Google speech to text api 동작 조건
			AudioAttributes audio = new AudioAttributes();
			audio.setSamplingRate(new Integer(16000)); // 샘플 레이트
			audio.setChannels(new Integer(1)); // Mono 채널로 설정해야 speech to text api 사용 가능
			audio.setCodec("flac");  // 코덱 조건
			
			EncodingAttributes attrs = new EncodingAttributes();
			attrs.setFormat("flac"); // 포맷 설정
			attrs.setAudioAttributes(audio);
			
			encoder.encode(source, target, attrs);
			
			result = target.getPath();

		} catch (Exception e) {
			result = "flacFile make fail";

		}

		return result;
	}

파일 생성 메소드

만들고 싶은 포맷 조건 설정해서 source, attrs 파라미터를 넣으면 지정한 target 경로에 설정한대로 파일 생성된다.