본문 바로가기

경험나눔

비디오 자막 추출 Faster-Whisper-XXL 사용 방법

비록 UI(사용자 인터페이스)가 없지만 비디오로부터 자막을 추출하는 하나의 방법인 Faster-Whisper-XXL의 사용법을 기록해보겠습니다. Whisper계열 자막 추출 방법 중에는 속도가 가장 빠릅니다. 만약, 업무용으로 정확한 자막 추출을 원하는 경우에는 그 용도에는 맞지 않다고 봅니다. 

 

제가 만들어 쓰던 subtitle-xtranslator에서도 faster-whisper를 지원하기는 하지만 (자막 추출 품질을 높이기 위한)다양한 옵션을 제공하지 않으므로 저도 이 프로그램을 사용하고 있습니다. 

 

참고로 PotPlayer 최신판에서 "소리로 자막생성"기능에서도 faster-whisper-xxl을 지원한다고 합니다(저는 목록에 아직 보이지 않습니다).

 

  • 풀다운 메뉴를 통해 사용하는 것이라서 처음에는 불편하지만 한번 세팅하고 나면 이 방법과 다를 바 없으리라 봅니다. 또한 실시간 번역도 지원되므로 이용해보는 것도 좋을 것 같습니다. 
  • 팟플레이어를 최신 버전으로 업그레이드해도 Faster-Whisper-XXL이 목록에 나타나지 않는다면 윈도우11의 경우 "설치된 앱"에서 팟플레이어를 검색해서 프로그램을 완전히 제거한 후에 다시 설치하면 나타납니다. 

다운로드하기 

https://github.com/Purfview/whisper-standalone-win/releases/tag/Faster-Whisper-XXL 에 방문하여, 윈도우즈용 프로그램을 다운로드 합니다. 

  • Faster-Whisper-XXL_r245.4_windows.7z 가 최신 버전입니다. 

압축 해제하기  

https://7-zip.org/download.html 에서 64-bit Windows x64용 설치 파일을 받아서 설치를 한 후, 7-zip File Manager를 실행하고 .7z로 된 압축을 해제합니다. 

 

faster-whisper-xxl.exe 및 One Click Transcribe.bat 파일이 생깁니다. 

 

.BAT 파일 편집하기  

메모장이나 Notepad++ 등 텍스트 편집기를 써서 내용을 수정합니다. 

 

아래 내용을 찾아서 

:: The command
faster-whisper-xxl.exe %file_list% -pp -o source --batch_recursive --check_files --standard -f json srt -m medium

 

medium을 지우고 아래의 파란색 글자 부분을 추가합니다(어떤 분이 공개한 정보를 참고했습니다). 

  • 각각의 설정은 장단점이 있으며 모든 비디오와 언어에 맞는 정답은 없으므로 경험적으로 하나씩 수정하면서 이용하는 것이 좋습니다. 
  • 보통은 대사가 없는데 나오는 자막, 같은 자막이 한 줄에 무한 반복, 같은 자막이 계속 반복, 자막이 화면 가득 너무 길게 나오는데 한 문장을 다르게 표현하여 중복(=>아래 설정의 경우) 등등입니다. 

 

참고로 large-v2는 빠른 컴퓨터와 NVIDIA그래픽 카드가 있으면 좋습니다. 컴퓨터 사양(specification)이 낮다면 medium을 이용할 수 있습니다.  그리고, 아래 --compute_type=float16 부분은 필요에 따라 바꿀 수 있는데, GTX 고(높은)사양이나 RTX시리즈의 NVIDIA 카드가 없어서 CPU를 이용하여야 한다면 --compute_type=int8 로 변경합니다.  

 

faster-whisper-xxl.exe %file_list% -pp -o source --batch_recursive --check_files --standard -f json srt -m large-v2 --sentence -vad true --vad_method pyannote_v3 --compute_type=float16 --no_repeat_ngram_size 4 --ff_vocal_extract mdx_kim2 -hst 4 -bo 10 --ff_speechnorm

 

명령 프롬프트 열고 One Click Transcribe.bat 실행하기 

윈도우 돋보기(검색)을 누르고 cmd를 입력하여 명령 프롬프트 창을 띄웁니다.

 

faster-whisper-xxl.exe 가 있는 곳으로 경로를 바꾸고 bat파일을 실행합니다. 명령을 내릴 때에는 오디오/비디오 파일명을 인자로 넘겨주는 것이 필요합니다. 

  • 만약 D:\Faster-Whisper-XXL 에 있다면, d:[Enter키] 후에 cd Faster-Whisper-XXL[Enter키] 를 눌러야겠지요. 

D:\Faster-Whisper-XXL> "One Click Transcribe.bat" d:\download\video.mp4  

 

자막을 추출하고 싶은 비디오가 있다면 윈도우의 "파일 탐색기"에서 마우스로 파일명을 클릭한 채로 "명령 프롬프트"창에 끌어다가 놓으면(drag & drop) 쉽게 경로명을 일일이 치지 않고 입력할 수 있습니다.  혹은 한 두 글자 쓰고 [Tab]키를 눌러서 파일명 자동 완성 기능도 활용할 수 있습니다. 

 

참고로, faster-whisper-xxl.exe를 그냥 실행해 보면, -l 뒤에 쓸 수 있는 언어 목록(한영일중이라면 ko, en, ja, zh)도 볼 수 있습니다. 명시하지 않으면 앞부분 30초 가량 분석을 통해 입력 언어를 결정합니다.  "One Click Transcribe.bat"의 내부에 -l ja를 추가하면 되는데, 아래와 같이 bat파일을 수정하면 -l 옵션을 밖에서도 쓸 수 있습니다. 

 

:: Collect all file paths
for %%F in (%*) do (
    if exist "%%~F" (
        set "file_list=!file_list! "%%~F""
	) else if "%%~F"=="-l" (
        :: Next argument is language option
        set "language_option_next=1"
    ) else if defined language_option_next (
        set "language_option=-l %%~F"
        set "language_option_next="
    )
)

:: The command
faster-whisper-xxl.exe %file_list% %language_option% -pp -o source --batch_recursive --check_files --standard -f json srt -m large-v2 --sentence -vad true --vad_method pyannote_v3 --compute_type=float16 --no_repeat_ngram_size 4 --ff_vocal_extract mdx_kim2 -hst 4 -bo 10 --ff_speechnorm

 

이제 처음 실행하므로 (번역용)모델 및 관련 파일들을 몇 분 가량 다운로드 받으며, 다운로드가 끝나면 "Standalone Faster-Whisper-XXL r245.2 running on: CUDA"라고 메시지가 나오면, 컴퓨터에 설치된 NVIDIA 그래픽 카드의 도움을 받는다는 뜻입니다. 

  • 물론, NVIDIA 그래픽카드 드라이버 및 CUDA toolkit과 Cudnn은 미리 설치해야 합니다. 설치 도중 NVIDIA 개발자 로그인을 요구 받지만 x 등을 누르고 무시하고 진행하면 됩니다. 

오디오 분석 및 자막 추출 작업 진행 

앞서서 파란색 글자로 추가한 설정 때문에 곧바로 자막이 추출되는 것이 아니라 전체적인 오디오를 스캔하는 작업을 먼저 진행하게 됩니다. 

 

이후 자막 추출 작업이 진행됩니다. 아래는 작업이 진행되는 중의 내용입니다. 

 

Starting sequential inference to transcribe: d:\download\video.mp4 

Detecting language using up to the first 30 seconds. Use `--language` to specify the language.
 64% |  7757/12059 | 09:20<<05:10 | 13.84 audio seconds/s

 

참고로 RTX3090/Ryzen 5600에서는 3시간20분짜리 비디오의 자막 추출에 28분 가량 소요되었습니다.  

파이썬 스크립트를 써서 DeepL API 번역하기  

이제 생성된 .SRT파일을 한국어로 번역을 하면 됩니다. 다양한 방법을 사용할 수 있지만 여기에서는 제가 만든 파이썬 스크립트와 DeepL API(무료이지만 개발자 등록이 필요)를 써보겠습니다. 

 

1.파이썬 설치 

사용하는 시스템에 파이썬이 없다면, 예를 들자면 Python 3.11.9 버전을 설치합니다.

 

설치가 완료되고 나서, 명령 프롬프트에서 python [Enter키]를 입력했을 때 오류가 안나오면 설치 완료입니다. "exit()"을 입력하여 python을 종료합니다. 

 

D:\python> python
Python 3.11.9 (tags/v3.11.9:de54cf5, Apr  2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

2.필요한 라이브러리 설치 

여기에서는 D:\python 디렉터리를 만들었다고 가정합니다. 

 

D:\python> pip install deepl 

 

3.파이썬 소스 코드 받기 

https://github.com/sevengivings/subtitle-xtranslator/blob/main/subtitle-translator.py 에 접근한 후, "Download raw file" 아이콘을 찾아서 파일을 받습니다. 아래와 같이 나오면 일단 준비가 된 것입니다. 

 

D:\python> python subtitle-translator.py
usage: subtitle-translator.py [-h] [--source SOURCE] [--target TARGET] [--skip_textlength SKIP_TEXTLENGTH]
                              [--text_split_size TEXT_SPLIT_SIZE]
                              subtitle [subtitle ...]
subtitle-translator.py: error: the following arguments are required: subtitle

 

4.DeepL API 키를 받은 후, 환경 변수에 지정하기 

https://www.deepl.com/ko/products/api 에서 회원 가입 및 개발자 등록(신용카드 필요?)을 마친 후, API 키(여기에서는 you-deepl-api-key로 가정)를 받았다고 가정하고 다음과 같이 하면 됩니다. 

 

명령 프롬프트 창에서

 

D:\python> set DEEPL_API_KEY=your-deepl-api-key 

 

를 입력합니다. 

 

5.SRT 번역 실행하기 

D:\python> python subtitle-translator.py --source en --target ko d:\download\video.srt

 

문제 없이 완료된다면, 외국어 자막은 video_original.srt로 저장되고 번역된 자막이 video.srt로 저장됩니다.  

 

6.위 자막 추출과 DeepL API 번역을 한번에 .bat로 처리하기 

 

위 작업에 익숙해졌다면, 한번에 처리하고 싶을 수 있습니다. One Click Transcribe.bat은 여러 개의 동영상/오디오파일을 나열하여 한번에 처리할 수 있는데, subtitle-translator.py도 마찬가지로 여러 개의 .srt를 넘겨줘서 일괄 처리할 수 있습니다. 

 

1) 위 bat파일 내의 pause가 있는 부분 뒤에 아래 내용을 추가하면 됩니다. 

 

:: Change extension to .srt

for %%F in (%file_list%) do (

    set "new_name=%%~dpnF.srt"

    set "new_file_list=!new_file_list! "!new_name!""

)

echo %new_file_list%

set DEEPL_API_KEY=your_deepl_api_key

python subtitle-translator.py --source ja --target ko %new_file_list%

 

위와 같이 하면, mp4로 나열된 파일 목록의 파일이름에서 확장자를 .srt로 바꾸고 파일 목록으로 만들어서 일괄 처리가 가능해 집니다. 

 

2) 편의상 subtitle-translator.py도 D:\Faster-Whisper-XXL로 복사해 줍니다. 

 

마지막으로 실행했을 때 명령 프롬프트 창에서 전체적으로 화면에 업데이트되는 내용을 나열해 보겠습니다. DeepL API 무료 번역용량 50만자 중 7만여자를 사용했음도 알 수 있습니다. 

 

D:\Faster-Whisper-XXL>"One Click Transcribe.bat" " d:\download\video.mp4"

 

 

     8""""                                    8   8  8                                       8   8 8   8 8

     8     eeeee eeeee eeeee eeee eeeee       8   8  8 e   e e  eeeee eeeee eeee eeeee        8 8   8 8  8

     8eeee 8   8 8   "   8   8    8   8       8e  8  8 8   8 8  8   " 8   8 8    8   8        eee   eee  8e

     88    8eee8 8eeee   8e  8eee 8eee8e eeee 88  8  8 8eee8 8e 8eeee 8eee8 8eee 8eee8e eeee 88  8 88  8 88

     88    88  8    88   88  88   88   8      88  8  8 88  8 88    88 88    88   88   8      88  8 88  8 88

     88    88  8 8ee88   88  88ee 88   8      88ee8ee8 88  8 88 8ee88 88    88ee 88   8      88  8 88  8 88eee

 

Standalone Faster-Whisper-XXL r245.2 running on: CUDA

 

Audio filtering is in progress...

 

MDX Kim_Vocal_2 model probably is running on CUDA: 100% | 169/169 | 00:48<<00:00

 

Starting sequential inference to transcribe: d:\download\video.mp4

 

Detecting language using up to the first 30 seconds. Use `--language` to specify the language.

100% | 2531/2531 | 01:24<<00:00 | 29.80 audio seconds/s

 

Transcription speed: 29.8 audio seconds/s

 

Subtitles are written to 'd:\download' directory.

 

Operation finished in:  0:03:55.246

 

계속하려면 아무 키나 누르십시오 . . .

 

"d:\download\video.srt"

subtitle-translator DeepL-API 2025.02.17

 

[Info] Processing d:\download\video.srt

[Info] Using DeepL API

Character usage: 68922 of 500000

[Info] number of sentences translated:  81

[Info] Using DeepL API

Character usage: 69839 of 500000

[Info] number of sentences translated:  109

[Info] Using DeepL API

Character usage: 70728 of 500000

[Info] number of sentences translated:  112

[Info] Using DeepL API

Character usage: 71617 of 500000

[Info] number of sentences translated:  47

 

[Info] Number of characters:  3088

[Info] Number of short subtitles:  1

 

[Info] Number of repeated subtitles:  11

[Info] final srt file is saved

[Info] Done

관련 글

https://imky.tistory.com/84

 

DeepL번역으로 Youtube 유튜브 외국어 영상 자막 보기

크롬 브라우저에서 마우스 툴팁 번역 기능은 매우 편리합니다. 크롬 사용 중에 마우스만 갖다 대면 한국어로 번역을 해주는데, 다른 브라우저 쓰느라 잠시 없이 쓰려니까 많이 불편하더군요.  

imky.tistory.com

 

https://imky.tistory.com/61

 

stable-ts (Whisper)로 영상 자막을 파이썬 코드로 추출해 보기 및 DeepL 파일 번역 도우미

[최신 업데이트 소스 위치]  내용을 계속 수정 보완 중이라서, 최신 내용은 아래 링크를 참고해 주세요.  영상 자막 추출 후 DeepL 앱/웹으로 워드파일을 이용하여 수동 번역을 원할 경우: https:/

imky.tistory.com