이번 게시글에서는 GoodNotes 앱에서 녹음한 오디오 파일을 추출하는 방법에 대해 설명하려고 합니다.
※ 사용법이 궁금하신분들은 바로 [Goodnotes 파일에서 녹음 파일 추출하기]부터 읽으시면 됩니다.
개발 동기
Goodnotes에서도 노타빌리티처럼 녹음 기능을 지원하기 시작했는데요. 저는 이 기능을 사용하여 실시간 강의를 녹음하고 복습할 때 같이 들으면서 공부하는데, 항상 ‘교수님의 강의 내용(특히, 영어 전용 전공 강의를 들을때마다..)을 자막으로 변환해주면 좋겠다!’라는 생각을 많이 했습니다. 그래서 이러한 프로그램들을 찾아보았는데, 대부분 회원가입이 필요하고 음성 파일의 시간 제한이 걸려있는 경우가 많았습니다. (대부분 강의 녹음 시간이 1시간이 넘는데 ㅠ..) 결과적으로 ‘비용을 내고 서비스를 사용할 것인가?, 직접 변환 프로그램을 만들 것인가?’고민했는데요. 저는 후자를 선택하였습니다.
제가 후자를 선택한 이유는 OpenAI 의 Whisper 때문인데요. OpenAI Whisper 는 음성을 텍스트로 변환시켜주는 Open Source 모델로 개발자들이 쉽게 사용할 수 있도록 제공하고 있습니다. 실제로 최근들어 OpenAI Whisper를 활용한 어플리케이션들이 많이 나오고 있는데요. 저도 이번 기회에 STT(Speech To Text)모델 공부도 할겸, 이번 프로젝트를 진행하게 되었습니다.
프로젝트 목표
이미 유튜브나 구글에 Open Whisper를 검색해보면 다양한 사용법을 확인할 수 있습니다. 하지만 제 생각에는 아직까지 접근성은 많이 떨어지는 것 같네요. 특히, 로컬 환경에 맞게 세팅하고 사용하는 것은 만만치 않고, 내 컴퓨터의 GPU에 따라 사용할 수 있는 모델에 제한이 생깁니다. 그래서 이번 프로젝트 핵심 목표를 성능과 접근성을 높이는 것으로 설정하였습니다. 세부 목표는 다음과 같습니다.
- 누구나 무료로 쉽게 사용!
- 로컬 환경과는 상관 없이!
- 최대한 성능은 높게!
Solution
OpenAI Whisper 를 쉽게 높은 성능으로 이용하기 위한 솔루션은 다음과 같습니다.
- 성능 : OpenAI Whisper with jax 사용
- 접근성 : Colab 혹은 Kaggle 활용
Goodnotes 파일에서 녹음 파일 추출하기
우선, 이번 게시글에서는 Goodnotes 파일을 녹음 파일(mp3)로 변환하는 방법에 대해서만 설명하겠습니다. 텍스트 변환하는 방법은 다음 게시글에서 다루겠습니다.
아래 방법보다 더 쉬운 방법을 소개드립니다.
다음 글을 참고해주세요
1. GoodNotes 앱에서 파일 내보내기
추출을 원하시는 노트로 들어가서 상단에 공유하기 버튼을 클릭합니다. (아래 사진처럼 공유하기 버튼이 없으면 ··· 클릭하여 공유 버튼 클릭)
[모두 보내기]를 클릭합니다.
GoodNotes로 선택 후 [보내기]를 클릭합니다.
2. 구글 드라이브에 GoodNotes 파일 업로드하기
우선 자신의 구글 드라이브에 접속한 후, 내 드라이브를 우클릭해서 새 폴더를 만들어주세요. (새로운 폴더를 만들지 않고 기존의 폴더를 사용해도 됩니다.)
생성한 폴더 안에 GoodNotes 파일을 업로드합니다. (반드시 GoodNotes 파일은 특정 폴더 안에 있어야 합니다!)
저는 "GoodNotes" 라는 폴더를 만들고, 그 안에 "강의1", "강의2" 파일을 업로드했습니다.
3. GoodNotes 파일에서 녹음 파일 추출하기
우선, 아래 링크에 접속합니다.
아래 사진처럼 여러분이 생성한 폴더 이름을 입력한 후, 실행 버튼을 클릭해주세요.
👉🏻 만약 폴더 안 폴더에 파일을 업로드했다면?
생성한 폴더명/폴더명 으로 입력해주세요
(ex. "GoodNotes 폴더 -> A강의" 폴더에 파일이 위치하면? GoodNotes/A강의 로 입력)
실행 버튼을 클릭하면, 구글 로그인창이 열리는데요. 이때 파일을 업로드한 구글 드라이브 계정을 선택 후 허용버튼을 클릭해주세요!
아래 그림처럼 결과창에서 자신이 올린 Goodnotes 파일과 번호를 확인할 수 있습니다.
추출할 Goodnotes 파일 번호를 입력해주세요. 이때, 실행 한번당 하나의 Goodnotes 파일을 변환할 수 있기 때문에 번호 하나만 입력해주세요. 저는 '강의2'를 추출하고 싶기 때문에 1을 입력했습니다.
추가적으로 Goodnotes 파일에 저장된 녹음 파일들을 개별로 추출할지 아니면 합해서 추출할지 체크한 뒤 실행해주세요.
👉🏻 만약 개별 추출(isIndividual)만 체크하셨다면?
실행 후 기다리면, 아래 그림처럼 결과창에 "[파일이름]의 개별 mp3 추출 작업이 완료되었습니다." 라고 출력됩니다. (녹음 파일의 크기에 따라 시간이 많이 소요될 수 있습니다.)
cf> 뒤에 있는 코드(병합 저장 부분)는 실행하실 필요 없이 변환된 mp3 파일을 확인할 수 있습니다. 추출된 mp3 확인 방법은 아래에 [4. 추출된 Mp3 확인하기]를 참고해주세요.
👉🏻 만약 병합 추출(isMerged)을 체크하셨다면?
추가적으로 [병합할 mp3 파일 확인하기] 코드를 실행시켜주세요. 아래처럼 (번호): Audio(녹음시간).mp3 형식으로 출력이 됩니다.
이때, 녹음시간과 번호는 합칠 순서를 결정할때 이용됩니다.
이를 Goodnotes 앱에서 오디오 시간과 비교하여, [병합 순서 입력] 부분에 합칠(병합) 순서를 입력해주세요.
👉🏻 mp3 파일을 부분적으로 합치고 싶다면?
-> 전체가 아닌 부분적으로 mp3를 합치고 싶으시면 isPartialMerged를 체크해주세요.
저는 2 -> 1 -> 3 -> 6 순으로 부분적으로 합치고 싶기 때문에 2 1 3 6 을 입력해주었습니다. (띄어쓰기 주의!)
👉🏻 만약 전체병합을 원한다면?
isParitalMerged를 체크 해제하고, [병합 순서 입력] 부분에 추출된 모든 mp3 파일 수 만큼 숫자를 입력해야 합니다.
(ex. 1 2 3 4 5 6 7)
추출된 모든 mp3파일들을 하나의 mp3 파일로 병합합니다. (단, 두 방법 모두 병합 순서를 지정해줘야 합니다.)
👉🏻 만약 계속해서 다른 순서로 합치고 싶으면?
[병합 순서 입력]에 다시 저장하고 싶은 순서를 입력하고 해당 코드 블럭만 실행시켜주세요!
4. 추출한 MP3 파일 확인하기
생성한 폴더로 들어가보면 아래그림처럼 Goodnotes 파일 이름으로 새로운 폴더가 생성된 것을 확인할 수 있습니다.
저는 "GoodNotes" 폴더에 "강의1"이라는 폴더가 생성되었습니다.
이제 새로 생성된 폴더 > input 폴더로 들어가보면 아래처럼 mp3 파일로 저장된 것을 확인할 수 있습니다.
👉🏻 개별 / 부분 병합 / 전체 병합 추출 파일 구분법
Audio(녹음시간).mp3은 개별 추출 mp3입니다. (ex. Audio(13:00).mp3)
부분 병합 mp3 경우에는 앞부분에 병합 순서가 추가되어있습니다. (ex. (2136)강의1.mp3)
전체 병합 mp3 경우에는 파일명.mp3입니다. (ex. 강의1.mp3)
추출한 mp3 파일 텍스트 변환하기
글이 길어진 관계로 [추출한 mp3 파일을 텍스트 변환하는 방법]은 다음 게시글을 참고해주세요!
필요 개선사항
1. 자동으로 생성일 기준으로 병합하기
-> colab에 업로드 및 변환되는 과정에서 Goodnotes 파일의 메타데이터(생성일) 소실이 일어난다. 이를 해결하는 방법을 아시는 분은 댓글 부탁드립니다!
참고 자료
[reddit - Exporing Audio :r/GoodNotes] : https://www.reddit.com/r/GoodNotes/comments/117kx7t/exporting_audio/
※ 문의사항 및 피드백은 댓글로 남겨주세요!