이번 게시글에서는 Colab으로 OpenAI Whisper with Jax를 이용하여 mp3 파일을 텍스트로 변환하고 자막을 생성하는 방법을 소개해드리려고 합니다.
※ 사용법은 바로 [OpenAI Whipser mp3 파일 텍스트 변환하기]부터 읽으시면 됩니다.
프로젝트 목표
이번 프로젝트 개발 동기를 한 문장으로 정리하면 '교수님의 (영어 전용 전공) 강의 녹음 파일를 텍스트로 변환하자!' 입니다. (자세한 개발동기 및 프로젝트 목표는 다음 게시글을 참고해주세요.)
이미 유튜브나 구글에 Open Whisper를 검색해보면 다양한 사용법을 확인할 수 있습니다. 하지만 제 생각에는 아직까지 접근성은 많이 떨어지는 것 같네요. 특히, 로컬 환경에 맞게 세팅하고 사용하는 것은 만만치 않고, 내 컴퓨터의 GPU에 따라 사용할 수 있는 모델에 제한이 생깁니다. 그래서 이번 프로젝트 핵심 목표를 성능과 접근성을 높이는 것으로 설정하였습니다. 세부 목표는 다음과 같습니다.
- 누구나 무료로 쉽게 사용!
- 로컬 환경과는 상관 없이! ➔ Colab, Kaggle 활용
- 최대한 성능은 높게!➔ OpenAI Whisper with Jax 활용
OpenAI Whisper로 mp3 파일 텍스트 변환하기
Colab / Kaggle 버전 차이
이번 프로젝트는 Colab과 Kaggle 2가지 버전으로 진행해봤는데요. 각 버전의 특징은 다음과 같습니다.
지원 모델 | 접근성 | 소요 시간 | 기타사항 | |
Colab | Small / Medium | 상대적으로 쉬움. (Interactive Markdown 지원) |
Kaggle에 비해 오래 걸림. | 구글 계정 필요 |
Kaggle | Small / Medium / Large | 과정이 colab에 비해 복잡하여 어려울 수 있음. | Large 모델도 Colab보다 빠르게 텍스트를 얻을 수 있음. | Kaggle 가입 필요 |
👉🏻 요약 : Colab이 Kaggle에 비해 텍스트 변환하는 방법이 쉽지만, Medium 모델까지 지원하기 때문에 텍스트 변환 시간이 오래걸리고 결과 퀄리티가 떨어질 수 있습니다. 반면 Kaggle은 Colab에 비해 과정은 조금 복잡하지만, Large 모델도 지원하기 때문에 텍스트 변환 퀄리티가 높고, 시간도 적게 걸립니다.
👉🏻 한국어 음성 파일을 변환하는 경우에는 퀄리티가 낮습니다.
개인적으로 영어 mp3 파일을 변환하는 경우에는 Colab의 Medium 모델로도 충분했습니다. 하지만 한국어를 텍스트 변환하는 경우에는 Kaggle의 Large 모델로 변환하면 그나마 났지만, 두 버전 모두 상대적으로 퀄리티가 떨어졌습니다 😭 이러한 특징들과 자신의 상황을 고려하여 Colab 버전과 Kaggle 버전을 선택해서 사용하시면 됩니다 :)
저는 우선 Colab 버전을 한번 사용해보고 텍스트 퀄리티가 부족하다 싶으면 Kaggle 버전으로 시도해보는 것을 추천드리는데요. Colab으로 먼저 실행해보면 나중에 Kaggle에서 실행시키는 방법도 좀 더 수월하실겁니다.
※ 이번 게시글에서는 Colab 버전을 사용하는 방법만을 다룹니다. Kaggle 버전을 원하시는 분은 다음 게시물을 참고해주세요!
Colab으로 mp3 파일 텍스트 변환하기
이제 본격적으로 Colab 환경에서 텍스트를 변환하는 방법에 대해 알아보겠습니다.
1. Colab 접속하기
먼저 아래 Colab 링크에 접속해주세요.
2. 런타임 GPU 설정
접속하면 아래와 같이 창이 열릴텐데요. 런타임 버튼을 클릭 후, 런타임 유형 변경을 클릭해주세요.
아래와 같은 노트 설정창이 뜨는데, 하드웨어 가속기가 GPU로 설정되어있는지 확인해주세요. 만약, None으로 설정되어있다면 GPU로 바꿔주세요! 이는 실행 시간에 큰 영향을 미치기 때문에 중요합니다.
3. 자신의 구글 드라이브 연동 및 MP3 파일 업로드 하기
아래 사진처럼 MP3 파일을 업로드할 폴더 이름을 입력 후 실행해주세요.
구글 로그인창이 뜨면 파일을 업로드할 구글 드라이브 계정을 선택하고, 허용 버튼을 클릭합니다.
예시로 저는 "GoodNotes 폴더 안에 있는 강의1 폴더"로 설정하기 위해 GoodNotes/강의1이라고 입력했습니다.
구글 드라이브로 접속하면 입력한 폴더 이름으로 폴더가 생성되고, 그 안에 input 폴더와 output 폴더가 생긴걸 확인할 수 있습니다.
이제 input 폴더 안에 텍스트 변환하실 mp3 파일을 업로드해주세요.
cf> mp3 파일만 텍스트 변환이 가능합니다. 따라서, mp4 파일이나 다른 형식의 파일 같은 경우는 다음 팟 인코더, Adapter(Mac) 같은 프로그램으로 mp3 파일로 변환을 먼저해주세요.
👉🏻 만약 [Goodnotes 파일을 mp3 파일로 변환]을 하신분이라면?
이미 input 폴더 안에 mp3 파일이 있습니다. 따라서 input 폴더가 있는 폴더명만 제대로 입력해주시면 됩니다.
그 후 아래 사진처럼 해당 블럭을 실행시킨 후 텍스트 변환하고 싶은 mp3 파일이 맞는지 확인해주세요. 결과에 이상이 없다면 [MP3 파일 텍스트 변환]으로 이동하면 됩니다.
👉🏻 만약 변환을 원하지 않은 mp3 파일이 있는 경우는?
체크박스(has_undesirable_mp3_file)에 체크를 하고 변환을 원하는 mp3 파일의 번호를 입력해주세요. 해당 블럭을 실행하면 아래 사진처럼 최종적으로 텍스트 변환할 mp3 파일 목록을 출력하게 됩니다.
예시로 저는 2번 3번 5번 파일의 텍스트 추출을 진행하기 위해 2 3 5를 입력했습니다. (띄어쓰기 주의해주세요!)
4. MP3 파일 텍스트 변환하기
이제 옵션만 선택하면 끝입니다!
먼저, 텍스트 변환시 사용할 모델을 선택해주세요. 아래 모델 참고사항을 읽어보고 시간과 정확성을 고려하여 선택하면 됩니다.
그 다음으로 텍스트 파일을 어떤 형식으로 저장할 것인지 선택해주세요. 텍스트(txt), 문서(doc), 자막(srt) 총 3가지 형식을 지원합니다.
추가적으로 아래 사진처럼 시간과 텍스트 형식을 같이 저장하고 싶으면 timestamp 체크박스를 선택해주세요.
옵션들을 다 선택했다면 이제 해당 블럭을 실행시켜주세요. 그럼 아래 사진처럼 "텍스트 변환 작업이 완료되었습니다."가 뜰 때까지 기다립니다. (파일의 크기, 선택 모델, colab 서버 네트워크 상황에 따라 시간이 오래걸릴 수 있습니다.)
5. 결과 확인하기
위에서 (input 폴더가 있던) 입력하셨던 폴더의 output 폴더로 들어가보면 결과들을 확인할 수 있습니다.
파일 이름은 (변환한 mp3 파일명)_(사용한 모델)_ouput.(파일 형식) 형태로 저장됩니다. 추가적으로 timestamp를 선택했으면 사용한 모델 뒤에 _timestamp가 붙어있습니다.
👉🏻 위에서 언급했던 것처럼 텍스트 변환 결과가 만족스럽지 못하다면, 다음 Kaggle 버전도 사용해보는 것을 추천드립니다.
참고자료
[Github - Whisper JAX] : https://github.com/sanchit-gandhi/whisper-jax