매일 업데이트
2023-07-29 15:25 13 min

Whisper 및 AutoHotkey를 사용하여 자신만의 Windows 전사 앱을 만드는 방법

OpenAI의 Whisper는 음성 데이터를 텍스트 형태로 변환하는 데 탁월한 성능을 자랑하는 도구입니다. 하지만 Whisper를 사용하려면 명령줄 인터페이스를 통해 오디오 파일을 지정하고 명령어를 직접 입력해야 하므로 사용자 편의성이 다소 떨어지는 단점이 있습니다. 이러한 불편함을 해결하기 위해 AutoHotkey를 활용할 수 있습니다.

AutoHotkey는 사용자 인터페이스를 손쉽게 구축할 수 있도록 도와주는 강력한 도구입니다. 이 도구를 사용하면 Whisper와 같은 명령줄 기반 프로그램에 사용자 친화적인 인터페이스를 추가하여 복잡한 명령어를 직접 입력하는 대신 버튼 클릭이나 메뉴 선택으로 기능을 활용할 수 있습니다. 이 가이드에서는 AutoHotkey의 GUI 생성 기능과 OpenAI의 Whisper를 결합하여 맞춤형 음성 텍스트 변환 앱을 만드는 방법을 알아보겠습니다.

Whisper 및 AutoHotkey의 기초 다지기

AutoHotkey는 단순한 스크립트 이상의 기능을 제공합니다. 이 프로젝트에서는 AutoHotkey를 이용하여 Whisper를 위한 GUI를 제작하여, 복잡한 명령어를 입력하는 대신 클릭 및 메뉴를 통해 OpenAI의 음성 인식 기능을 사용할 수 있도록 합니다.

이 프로젝트를 진행하기 위해서는 AutoHotkey와 Whisper가 미리 설치되어 있어야 합니다.

AutoHotkey는 공식 웹사이트에서 다운로드하여 설치할 수 있습니다. 설치 과정은 안내에 따라 간단하게 진행됩니다.

중요한 점은 AutoHotkey의 구버전인 "v1"을 사용해야 한다는 것입니다. 최신 버전인 v2는 문법 구조가 다르므로, 이 가이드에서 제시되는 내용이 v2에서는 작동하지 않을 수 있습니다. 따라서 v1 버전을 사용해야 합니다.

Whisper 설치는 조금 더 복잡할 수 있습니다. 자세한 내용은 Windows 환경에서 OpenAI의 Whisper를 사용하여 음성을 텍스트로 변환하는 방법을 다룬 다른 자료를 참고하는 것이 좋습니다.

두 가지 도구가 모두 설치되었다면, 이제 다음과 같은 단계로 진행할 수 있습니다.

  • GUI를 구성하여 Whisper의 다양한 변수 및 설정을 조절할 수 있도록 합니다.
  • 인터페이스에서 값을 가져오고 파일과 폴더를 선택하며, 선택된 값들을 Whisper 명령어 형태로 조합하는 함수를 만듭니다.
  • 조합된 Whisper 명령어를 실행하여 음성 데이터를 텍스트로 변환합니다.

물론 Windows 11에는 자체적인 음성 입력 기능도 있지만, Whisper가 더 높은 정확도를 제공합니다. 물론 Whisper는 속도가 느리다는 단점도 있습니다.

프로그래머가 아닌 개인적인 경험을 바탕으로 말씀드리자면, 이 프로젝트는 개인적인 필요에 따라 제가 만든 솔루션을 "재구성"한 결과입니다.

새로운 AutoHotkey 스크립트 생성

첫 번째 단계는 새로운 빈 스크립트 파일을 만드는 것입니다. 파일 수정 및 추가 생성을 고려하여 별도의 폴더에 저장하는 것을 권장합니다.

  • 파일 탐색기를 실행하고(Windows 키 + E) 원하는 위치에 기록 앱용 폴더를 만듭니다.
  • 폴더 내에서 마우스 오른쪽 버튼을 클릭하고 "새로 만들기 > AutoHotkey Script"를 선택하여 빈 스크립트 파일을 생성합니다.
  • 생성된 파일을 Shift 키와 함께 마우스 오른쪽 버튼으로 클릭한 후, 선호하는 코드 또는 텍스트 편집기로 엽니다. Windows 기본 메모장도 사용할 수 있습니다.
  • AHK 파일은 초기화 코드를 포함하고 있습니다. 이 부분은 건드리지 않고 그대로 두고, 아래에 추가 코드를 작성합니다.

Whisper 플래그 이해

명령줄 앱을 위한 GUI를 개발하고 있으므로, 프로젝트에 사용될 주요 변수 및 플래그에 대한 이해가 필요합니다. Whisper의 상세 정보는 공식 Github 페이지에서 확인할 수 있습니다.

이 프로젝트에서 사용할 주요 플래그들을 정리했습니다. 스크립트에 주석 형태로 추가하는 것이 좋습니다. 주석은 각 줄을 `;` 기호와 공백으로 시작하여 추가할 수 있습니다.

 ; Whisper Flags:;  

AutoHotkey를 이용한 GUI 제작

스크립트를 체계적으로 관리하기 위해 주석을 사용하여 섹션별로 구분하는 것이 좋습니다. 우선 몇 가지 변수를 정의한 후, 실제 GUI를 구성하고 마지막으로 기능을 정의하는 순서로 진행합니다.

숨겨진 변수 설정

GUI를 통해 직접 수정하지는 않지만, 필요에 따라 변경할 수 있는 변수들을 먼저 정의합니다. 변수 이름과 값을 `Variable_Name = 변수의 내용 또는 값` 형식으로 한 줄에 하나씩 입력합니다.

이 예시에서는 출력 파일 형식을 정의하는 OutputFormat 변수와 Whisper 실행 파일 이름을 정의하는 WhisperExecutable 변수를 설정했습니다. 향후에 TXT 대신 SRT 파일을 생성하거나 다른 음성 인식 앱으로 대체할 경우, 해당 변수값만 수정하여 스크립트 전체를 변경할 필요 없이 간단하게 업데이트할 수 있습니다.

 OutputFormat = txtWhisperExecutable = whisper 

사용자 옵션 설정

Whisper 명령줄 인터페이스를 사용할 때, 다음과 같은 세 가지 플래그를 통해 설정을 정의할 수 있습니다.

  • 번역 또는 필사 작업 선택
  • 오디오 파일의 언어
  • 사용할 언어 모델(크기에 따라 성능 및 품질에 영향)

GUI에서 동일한 설정을 제공하기 위해 드롭다운 목록을 사용하는 것이 가장 쉬운 방법입니다. AutoHotkey GUI에서 드롭다운 목록을 추가하는 방법은 다음과 같습니다.

 Gui, Add, DropDownList, xPosition yPosition wWidth hHeight vVariable_that_will_hold_selected_value, optionA|optionB|default_optionC||optionD| 

위 형식을 참고하여 Whisper의 언어(영어/en 및 그리스어/el), 모델(tiny, base, small, medium, large), 작업 유형(transcribe 또는 translate)을 선택하기 위한 세 개의 드롭다운 목록을 스크립트에 추가합니다.

 Gui, Add, DropDownList, x5 y5 w165 h50 vSelectedLanguage, en||el
Gui, Add, DropDownList, x175 y5 w165 h100 vSelectedModel, tiny|base|small||medium|large|
Gui, Add, DropDownList, x345 y5 w165 h100 vTaskType, transcribe||translate|

기본 선택 항목을 설정하려면, 옵션 뒤에 두 개의 세로 막대(`||`)를 추가하면 됩니다. 이 예시에서는 언어는 'en', 모델은 'small', 작업 유형은 'transcribe'가 기본값으로 설정됩니다.

Whisper 안내 방법

Whisper는 인공지능 기반이므로 사용자가 오디오 녹음을 완전히 제어할 수는 없습니다. 하지만 사용자가 필요에 따라 최적의 설정을 선택할 수 있습니다.

다른 인공지능 솔루션과 마찬가지로 Whisper도 사용자 프롬프트를 수용할 수 있습니다. 프롬프트를 작성하여 오디오 변환 과정을 "안내"할 수 있습니다.

만약 개발 중인 솔루션이 특정 단어를 잘못 변환한다면, 변환된 텍스트에 포함할 단어, 약어 및 구문을 입력하여 Whisper에게 "어떤 음성 파일인지"에 대해 "설명"할 수 있습니다. 이를 위해 AutoHotkey 텍스트 편집 필드를 추가합니다.

텍스트 편집 필드를 추가하는 방법은 드롭다운 목록과 크게 다르지 않습니다.

 Gui, Add, Edit, x5 w505 h400 vPromptText, %PromptText% 

끝에 있는 `%PromptText%`는 텍스트 필드 내에 PromptText 변수의 내용이 표시되도록 AHK에게 지시합니다. 지금은 빈 값이 표시되지만, 나중에 프롬프트를 저장하고 불러오는 기능을 추가할 때 유용하게 활용할 수 있습니다!

PromptText 변수에 미리 정의된 값을 할당하려면, 스크립트 변수 섹션에 다음을 추가합니다. "Your Name's"를 실제 이름으로 변경하는 것을 잊지 마세요.

 PromptText = Transcription of Your Name's notes 

작업 버튼 설정

파일과 폴더를 선택하고 Whisper를 실행하기 위한 버튼을 추가하는 것이 좋습니다. AHK 인터페이스에 버튼을 추가하는 방법은 다음과 같습니다.

 Gui, Add, Button, xPosition yPosition wWidth hHeight gFunction_To_Perform, Button Text 

`v`로 시작하는 GUI 요소의 변수와 달리, 함수 이름은 `g`로 시작합니다. 여기서 `g`는 "Go to this spot of the script"의 의미를 가집니다.

AHK 인터페이스의 버튼은 인터페이스의 다른 부분을 클릭하지 않고 Enter 키를 눌러 실행할 수 있는 "기본 버튼"으로 지정할 수도 있습니다. 이는 좌표 및 기능 섹션에 `Default`를 추가하여 설정할 수 있습니다.

 Gui, Add, Button, x5 w505 h50 gSelectFile, Load FileGui, Add, Button, x5 w505 h50 gSelectFolder, Choose Output Folder
​​​​​​​Gui, Add, Button, Default x5 w505 h50 gButtonSubmit, OK

위 코드는 다음과 같은 세 가지 버튼을 정의합니다.

  • 클릭하면 `SelectFile` 함수를 실행하는 "파일 로드" 버튼
  • 클릭하면 `SelectFolder` 함수를 실행하는 "출력 폴더 선택" 버튼
  • 기본적으로 선택되어 있고, Enter 키를 누르면 `ButtonSubmit` 함수를 실행하는 "확인" 버튼

GUI 표시 방법

GUI가 완성되었지만, 스크립트가 화면에 표시되도록 설정하지 않았습니다. 또한, 각 버튼이 수행해야 하는 기능에 대한 정의도 아직 필요합니다.

GUI 정의 코드 아래에 다음 두 줄의 코드를 추가합니다.

 Gui, ShowReturn 

첫 번째 줄은 AHK에게 GUI 창을 표시하도록 지시하고, 두 번째 줄은 GUI 정의 섹션의 끝을 표시합니다.

앱의 기능 및 작동 원리

GUI 섹션은 완료되었지만, 스크립트를 실행하려고 하면 오류가 발생합니다. 이는 존재하지 않는 함수를 참조하고 있기 때문입니다. 따라서, 이제 이러한 함수들을 정의해야 합니다.

만들어야 할 세 가지 기능은 다음과 같습니다.

  • 입력 파일을 선택합니다.
  • 출력 파일이 저장될 폴더를 선택합니다.
  • GUI에서 선택한 모든 변수를 Whisper 명령어 형태로 조합하고 실행합니다.

입력 파일 선택

GUI에 버튼을 추가할 때 "SelectFile"이라는 이름으로 첫 번째 함수를 만들었습니다.

 SelectFile:FileSelectFile, SelectedFileReturn 

`FileSelectFile`은 사용자가 파일을 선택할 수 있도록 표준 파일 선택 창을 표시하는 AutoHotkey 기능입니다. `SelectedFile`은 사용자가 선택한 파일 경로를 저장하는 변수입니다.

스크린샷에서 볼 수 있듯이, 함수 종료를 나타내는 `return` 바로 위에 다음과 같은 줄을 추가했습니다.

 MsgBox, %SelectedFile% 

이 코드는 사용자가 파일을 선택한 후, 선택한 파일 경로를 메시지 상자로 표시합니다. 이는 스크립트 디버깅에 유용합니다. 메시지 상자에 선택한 파일의 경로가 제대로 표시되면, 파일 선택 버튼이나 기능에는 문제가 없는 것입니다.

출력 폴더 선택

폴더 선택 기능은 파일 선택 기능과 거의 동일하지만, 파일 대신 폴더를 처리한다는 점만 다릅니다.

 SelectFolder:FileSelectFolder, SelectedFolderMsgBox, %SelectedFolder%Return 

최종 기능

마지막 기능은 가장 복잡합니다. "확인" 버튼에 연결되어 있으며, GUI에서 입력된 모든 값을 수집하고, 이를 실행 가능한 Whisper 명령어로 변환한 후 실행하는 역할을 합니다.

함수의 시작과 끝을 정의하는 것부터 시작합니다.

 ButtonSubmit:Return 

GUI에서 모든 값을 "수집"하려면 `ButtonSubmit` 아래에 다음 코드를 추가합니다.

 Gui Submit, nohide 

다음 줄은 "WhisperFlags"라는 새로운 변수를 만들고, GUI 변수들을 Whisper 명령에 사용할 수 있는 플래그 형태로 추가합니다.

 WhisperFlags = --initial_prompt "%PromptText%" --task %TaskType% --model %SelectedModel% --language %SelectedLanguage% --output_format %OutputFormat% -o "%SelectedFolder%" "%SelectedFile%" 

다음으로 AHK에게 기본 터미널(`CMD.exe`)을 사용하여 Whisper 실행 파일(WhisperExecutable 변수로 정의됨)을 GUI 변수(`WhisperFlags` 변수에 조합됨)와 함께 실행하도록 지시합니다.

 RunWait, cmd.exe /c %WhisperExecutable% %WhisperFlags% 

더 쉬운 문제 해결을 위해 메시지 상자를 추가했고, 다음 줄도 추가했습니다.

 Clipboard = %WhisperExecutable% %WhisperFlags% 

이 코드는 CMD에 실행되는 전체 명령어를 클립보드에 복사합니다. 따라서 오류가 발생했을 때 AHK의 메시지 상자뿐만 아니라 클립보드에서도 명령어를 확인할 수 있습니다.

터미널을 열고 클립보드에 복사된 명령어를 붙여넣어 오류가 발생하는지 확인하여 문제점을 찾을 수 있습니다.

예를 들어, 스크립트 작업 중 프롬프트에 따옴표를 추가하는 것을 잊었습니다. 그 결과, Whisper가 프롬프트를 플래그로 인식하려고 했기 때문에 명령이 실패했습니다.

테스트 및 최종 조정

이것으로 끝입니다. AutoHotkey의 GUI 제작 기능과 AI 기반 음성 변환 솔루션인 Whisper를 결합하여 자신만의 음성 텍스트 변환 앱을 만들었습니다.

스크립트를 실행하면(해당 파일을 더블 클릭) GUI가 화면에 표시됩니다.

  • 상단의 드롭다운 목록을 사용하여 Whisper의 설정을 변경합니다.
  • 프롬프트 필드에 변환할 오디오에 대한 간단한 설명(또는 특정 용어)을 입력합니다.
  • "파일 로드" 버튼을 클릭하여 변환할 오디오 파일을 선택합니다.
  • "출력 폴더 선택" 버튼을 클릭하여 변환된 텍스트 파일이 저장될 위치를 선택합니다.
  • "확인" 버튼을 클릭하여 선택한 오디오 파일에 Whisper를 적용하고, 선택한 폴더에 텍스트 파일로 저장합니다.

모든 기능이 제대로 작동하면 스크립트에서 문제 해결을 위해 추가했던 모든 기능(메시지 상자 및 클립보드 복사)을 삭제하거나 주석 처리(`;` 기호를 추가)할 수 있습니다.

AutoHotkey를 이용한 Whisper 활용 극대화

기본 설정을 올바르게 설정하고 간단한 프롬프트를 추가하면, 단 세 번의 클릭만으로 음성 데이터를 텍스트로 변환할 수 있습니다. 복잡한 인터페이스 조작, 타사 서비스 비용 지불, 또는 터미널에 명령어를 입력할 필요 없이, 사용자 친화적인 인터페이스를 통해 Whisper를 간편하게 활용할 수 있습니다.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.