· 톺아보기

PC자료

자막 추출(Whisper)과 DeepL API 번역을 한번에 하는 파이썬 스크립트

무재칠시 · · 수정

조회 32,426 · 공감 23 · 댓글 13

Whisper(stable-ts)를 사용하여 좋은 NVIDIA CUDA 지원 카드를 가진 로컬 PC에서 자막을 추출하고, 우리 나라에도 정식 서비스가 되기 시작한 DeepL API를 써서 번역할 수 있는 파이썬 스크립트를 소개합니다. 


Whisper가 가끔 유령 자막, 반복되는 자막, 무의미한 짧은 자막(예: - ) 등의 문제가 있고,  DeepL PC용 앱 클립보드 무료 번역 시 자막의 시각 정보가 깨지는 문제 등이 있어서 만들기 시작했었습니다. AWS CodeWhisperer/Bard/Bing Chat/ChatGPT의 도움을 받았습니다. 


개인적으로는 대부분 stable-ts를 썼고 GTX-1070Ti(8GB)라서 medium 모델을 사용했습니다. large-v2 모델은  whisper-ctranslate2로 8GB 내에서도 작동했습니다. 


(추가 2023-08-27) faster-whisper를 사용하면 추론 작업 시 float32나 float16이 아닌 int8로 작업하여 더 빠르고 더 적은 메모리로도 이용 가능하고, 해당 기능도 추가했습니다. 예를 들면, Notebook PC의 MX150 2GB VRAM + 4GB GPU 공유메모리인 상태에서도 medium 모델을 2~3배속 정도로 작동 시킬 수 있습니다.


104216.png i7-8550U / MX150 에서 faster-whisper로 medium모델을 이용할 때 GPU 메모리 현황



stable-ts는 demucs, vad, mel_first등 추가 옵션도 제공하는데 demucs는 긴 비디오의 경우 8GB를 초과합니다. 


[기능] 

  • stable-ts 혹은 whisper를 사용하여 영상/오디오에서 음성 추출 자막 생성(.SRT 포맷)
  • (추가 2023-08-27) faster_whisper도 이용 가능합니다(CTranslate2기반으로 int8 양자화 사용으로 노트북과 같이 적은 VRAM 메모리에서도 medium을 이용하거나, 8GB에서 large-v2 이용이 가능: cuDNN 및 cuBLAS 필요). 
  • 자막 중에 짧은 자막(예: 1글자)이나 중복되는 자막을 자동 삭제
  • 시각 정보는 제외하고 자막 텍스트만 API 번역(구글 클라우드, 네이버 파파고, DeepL API, DeepL-Rapidapi)하기
  • 타겟 언어(예:한글) 자막 생성 후 원어 자막도 따로 저장(.SRT 포맷)  
  • DeepL API 번역 사용량 표시(예: 300000 / 500000)  


[한계] 

  • stable-ts이 전반적으로 whisper보다 나은 편이지만, 그래도 누락되는 자막이 있습니다. 경우에 따라서는 whisper가 낫기도 합니다. 
  • 완벽한 것은 아니므로 업무적인 목적 등에 사용하려면 충분한 사전 검토가 필요해 보입니다. 


[설치 방법 및 소스, 사용법] 

  • CUDA, 파이썬, 파이토치 등의 설치가 필요합니다. 첨부의  README.md 혹은 아래 링크를 참조해 주세요. 
  • 첨부 파일 참조 혹은 https://github.com/sevengivings/subtitle-xtranslator
  • (venv) PS D:\python\subtitle-xtranslator > python .\subtitle-xtranslator --audio_language en --subtitle_language ko --translator deepl-api 'D:\video\sample video.mp4' 


[사용하는 모습의 동영상] 


[팁]

  • 비디오/오디오명과 같은 파일명을 가진 자막(.SRT)이 있는 경우 음성 추출 작업은 생략됩니다(덮어쓰지 않음). 원하는 다른 프로그램에서 자막만 추출한 후 (불필요한 시각정보를 제거하여 번역 텍스트 용량 줄이는 용도의) API 번역기로만도 이용도 가능할 것 같아요. 
  • whisper와 stable-ts 명령어 라인을 참고하여 비슷하지만 다른 부분(예: --language는 --audio_language로 변경)도 있습니다. 제공하지 않는 옵션은 whisper와 stable-ts를 호출하는 코드에서 직접 추가 가능합니다. 
  • 여러 개의 MP4를 나열하면 배치로 작동시킬 수 있습니다. GTX-1070Ti에서는 보통 8배속 정도라서 오래 기다려야 합니다. 
  • https://github.com/sevengivings/subtitle-extractor 는 DeepL API의 국내 서비스가 없을 때 만들었던 스크립트인데, stable-ts와 whisper, faster-whisper로 자막 추출 하고 .docx로 자막을 저장하여, 사용자가 직접 수동으로 .docx를 DeepL 앱을 이용하여 번역하면 자막을 만들 수 있습니다. 
  • 무료 이용 가능한 번역 용량은 DeepL API(개발자)는 월 50만자, DeepL-Rapidapi는 월 30만자 /100회 호출입니다. 네이버 파파고는 하루 1만자 정도였던 것 같습니다.    
  • 조절할 수 있는 옵션이 많아서 일일이 다 확인하기는 어려움이 있습니다.  그래도 condition_on_previous_text는 whisper의 자막이 이상하게 나올 때 써 볼 만하다고 합니다(stable-ts에서는 기본이 True인데, False로 설정).  
  • stable-ts는 버전 별로 추출되는 자막이 조금 다른 것 같습니다. 참고로 저는 주로 2.6.x 혹은 2.7.x을 이용했었습니다. stable-ts · PyPI  참조.  


[활용한 오픈소스]


[기타 참조]

첨부파일 : subtitle-xtranslator-2023-08-18.zip

첨부파일 : subtitle-xtranslator-2023-08-27.zip

댓글 13

  1. 준파 ·
    Whisper는 마침 관심갖고 이것저것 해보는 중인데 유용한 정보를 많이 공유해주셨네요👍
  2. 무재칠시 ·
    @준파님 댓글 감사드립니다. 비디오를 MP3로 바꿔서 웹에 올린 후 코랩 등을 쓰는 경험담이 자주 들리는데 품질이 들쑥날쑥(뒷부분 자막 미생성 등)하다는 이야기가 많이 들렸습니다. stable-ts로 로컬 PC에서 작업하면 일정한 품질로 만들 수 있지 않을까 합니다.
  3. 감아차기 ·
    일단 스크랩합니다. 감사합니다.
  4. 무재칠시 ·
    @감아차기님 댓글 감사합니다~
  5. BigNavel ·
    잘 됩니다. 감사합니다. 능력자시네요.
  6. 무재칠시 ·
    @BigNavel님 다행입니다~ CodeWhisperer가 많이 안 쓰던 프로그래밍 언어 쓸 때 더 좋은 것 같습니다.
  7. 간실장 ·
    cuda에 관심이 생기기 시작했는데.. 이런 것도 가능하군요..
    잘 봐 보겠습니다.. 감사합니다.. ㅎㅎ
  8. 무재칠시 ·
    @간실장님 댓글 감사합니다. 페이스북에서도 speech to text가 나왔다고 하는데 성능을 기대해 봐야겠습니다(https://github.com/facebookresearch/SONAR ).
  9. 무재칠시 ·
    생각을 못했는데 노트북 NVIDIA MX150 2GB VRAM에서도 medium모델이 돌아가네요... 미디엄모델이면 충분히 쓸만합니다.

    whisper-ctranslate2 --device cuda --model medium --compute_type int8 --output_format srt --language ko --output_dir d:\video d:\video\20220902_131203.mp4 식으로 하면 됩니다. GPU 전용메모리(2GB)는 거의 100%가까이 사용하고 GPU 공유메모리(4GB)도 아주 조금은 이용하는군요. 다만, 속도는 좀 느려서 2~3배속 가량으로 나옵니다(i7-8550U).
  10. 무재칠시 ·
    간단한 WebUI도 추가했습니다. 윈도우11, WSL Ubuntu 및 Colab에서 테스트해 보았는데요, venv 환경을 갖춘 후에 python app.py를 실행하면 웹주소가 나와서 이후 브라우저에서 작업이 가능합니다. python subtitle-xtranslator.py 명령어 라인에 익숙하면 사실 별 필요는 없지만요... 참고로 Whisper WebUI도 faster-whisper도 지원하는 등 좋아졌더군요. stable-ts도 최신 버전을 적용해서 써보고 있습니다.
  11. 무재칠시 ·
    일본에서 학습된 Kotoba-Whisper v2.2와 중국의 번역 기술인 Tensent Hy-MT2 활용하여, 자막 추출 및 번역기를 만들어 보았습니다(일본어 자막 전용).

    NVIDIA RTX시리즈를 갖고 계실 경우, 한번 시도해 보시면 마음에 드실 수도 있습니다.

    아래에 소스가 있으며, 윈도우11에서 간단한 GUI를 run-kotoba.bat로 불러서 한번에 번역까지 작업이 가능합니다.

    https://github.com/sevengivings/Kotoba-Whisper-CLI
  12. 무재칠시 ·
    실리콘 M칩 맥용도 제공합니다. 코토바 2.2와 Qwen3-ASR 1.7B 중에 골라서 쓰시면 좋을 듯합니다.

자료실 최근 글

자료실 목록 더 보기