ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리눅스, 영상에서 음성을 분리한 후 자막을 넣기(Faster-Whisper)
    취미/Linux 2025. 2. 14. 10:24
    반응형

    Faster-Whisper를 이용해서 영상에 자막을 넣는 방법을 단계별로 설명하겠습니다.
    이대로 따라하시면 음성을 분리하고, 자막을 생성한 후 srt 파일을 만듭니다.

    1. Python 설치

    리눅스 배포판에 따라 Python 설치 방법이 다를 수 있습니다. 일반적으로 다음 명령어를 사용합니다:

    Ubuntu/Debian(linux mint 포함) 계열:

    bash
    sudo apt update
    sudo apt install python3 python3-pip
    

    CentOS/RHEL 계열:

    bash
    sudo yum install python3 python3-pip
    

    2. ffmpeg 설치

    ffmpeg는 다양한 리눅스 배포판에서 설치할 수 있습니다. 다음 명령어를 사용하세요:

    Ubuntu/Debian(linux mint 포함) 계열:

    bash
    sudo apt update
    sudo apt install ffmpeg
    

    CentOS/RHEL 계열:

    bash
    sudo yum install epel-release
    sudo yum install ffmpeg
    

    3. Faster-Whisper 설치

    Faster-Whisper는 Python 라이브러리로 설치할 수 있습니다. 다음 명령어를 사용하세요:

    bash
    pip install faster-whisper
    

     

    4. 영상에서 음성 분리

    ffmpeg를 사용해 영상에서 음성을 분리합니다. 터미널이나 명령 프롬프트에서 다음 명령어를 입력하세요:

    bash
    ffmpeg -i 동영상.mp4 -q:a 0 -map a 분리된음성파일.wav

    여기서 동영상.mp4는 원본 영상 파일의 이름이고, 분리된음성파일.wav는 추출된 음성 파일의 이름입니다.

    5. Faster-Whisper를 이용해 자막 생성

    이제 Faster-Whisper를 이용해 음성 파일에서 자막을 생성합니다.

    python
    import sys
    import os
    from faster_whisper import WhisperModel
    import datetime
    
    def transcribe_audio(audio_file, model_size="medium", device="cpu", compute_type="int8", output_file="10.srt"):
        model = WhisperModel(model_size, device=device, compute_type=compute_type)
    
        segments, info = model.transcribe(audio_file, beam_size=5, best_of=5)
    
        with open(output_file, "w", encoding="utf-8") as f:
            for i, segment in enumerate(segments):
                start_time = str(datetime.timedelta(seconds=segment.start)).replace('.', ',')[:-3]
                end_time = str(datetime.timedelta(seconds=segment.end)).replace('.', ',')[:-3]
                f.write(f"{i+1}\n")
                f.write(f"{start_time} --> {end_time}\n")
                f.write(f"{segment.text.strip()}\n\n")
    
    if __name__ == "__main__":
        audio_file = sys.argv[1] if len(sys.argv) > 1 else "10.wav"  # 인자 받기
        model_size = "medium"  # 사용할 모델 크기
    
        output_file = os.path.splitext(audio_file)[0] + ".srt"  # 확장자 .wav를 .srt로 변경
    
    # CPU 사용 (1660 Super 없이 CPU만 사용)
        transcribe_audio(audio_file, model_size=model_size, device="cpu")

    이 스크립트를 soundtotext-cpu_default.py로 저장한 후, 터미널이나 명령 프롬프트에서 다음 명령어로 실행합니다:

    bash
    python soundtotext-cpu_default.py 분리된음성파일.wav

    이렇게 하면 분리된음성파일.wav 파일에서 자막을 생성하여 분리된음성파일.srt 파일로 저장합니다.

     

     

    stt-cpu.sh 파일로 만들면, 명령어를 잊어버리지 않고 더 편리하게 사용하실 수 있습니다.

    #!/bin/bash

    # 입력 파일 경로
    audio_file="$1"

    # 확장자 제거하여 파일명 추출
    base_name=$(basename "$audio_file" .wav)

    # 출력 파일명 설정
    output_file="$base_name.srt"

    # Python 스크립트 호출
    python3 /media/soulowner/data/data/commandforlinux/soundtotext/faster-whisper/soundtotext-cpu.py "$audio_file" "$output_file"

    echo "SRT 파일 저장 완료: $output_file"

     

    사용 방법.

    sh stt-cpu.sh 음성파일.wav

     

    GPU를 이용해서 사용하는 방법도 있는데, 이는 생각보다 복잡합니다.
    결과물이 제대로 출력되지 않는다면, 2. CUDA 및 cuDNN 설치 때문일지도 모릅니다.
    gtx1660super 그래픽 카드를 사용하는 필자는,
    실행은 제대로 되는데, 결과물이 모두 ???로 나옵니다. 작업 시간도 2시간 이상 소모되고요.
    에러를 찾지 못해서 CPU를 이용해서 자막 생성을 하고 있습니다.

    1. GPU 드라이버 설치

    먼저, NVIDIA 드라이버와 CUDA Toolkit을 설치합니다. Ubuntu/Debian 계열에서의 명령어입니다:

    bash
    sudo apt update
    sudo apt install nvidia-driver-460 nvidia-cuda-toolkit
    

    2. CUDA 및 cuDNN 설치

    CUDA Toolkit 외에도 cuDNN을 설치해야 합니다. cuDNN은 NVIDIA GPU에서 딥러닝 라이브러리의 성능을 최적화하는 데 필요한 라이브러리입니다.

    1. CUDA 설치: CUDA 다운로드 페이지에서 자신의 운영체제와 맞는 설치 파일을 다운로드하여 설치합니다.
    2. cuDNN 설치: cuDNN 다운로드 페이지에서 cuDNN 라이브러리를 다운로드하고 설치합니다.

    3. PyTorch 설치

    PyTorch는 GPU 지원을 받는 딥러닝 라이브러리로, 이를 설치하기 위해 pip를 사용합니다. CUDA 버전에 맞춰 설치해야 합니다. 예를 들어, CUDA 11.1을 사용하는 경우:

    bash
    pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
    

    4. ffmpeg 설치

    ffmpeg는 다음과 같이 설치할 수 있습니다:

    bash
    sudo apt update
    sudo apt install ffmpeg
    

    5. Faster-Whisper 설치

    Faster-Whisper 라이브러리를 설치합니다:

    bash
    pip install faster-whisper
    

    6. 영상에서 음성 분리

    ffmpeg를 사용해 영상에서 음성을 분리합니다:

    bash
    ffmpeg -i 동영상.mp4 -q:a 0 -map a 분리된음성파일.wav

    7. Faster-Whisper를 이용해 자막 생성 (GPU 사용)

    Python 스크립트에서 GPU를 사용할 있도록 설정합니다. 다음은 GPU를 이용한 스크립트 예제입니다:

    python
    import sys
    import os
    from faster_whisper import WhisperModel
    import datetime
    
    def transcribe_audio(audio_file, model_size="medium", device="cuda", compute_type="int8", output_file="output.srt"):
        model = WhisperModel(model_size, device=device, compute_type=compute_type)
    
        segments, info = model.transcribe(audio_file, beam_size=5, best_of=5)
    
        with open(output_file, "w", encoding="utf-8") as f:
            for i, segment in enumerate(segments):
                start_time = str(datetime.timedelta(seconds=segment.start)).replace('.', ',')[:-3]
                end_time = str(datetime.timedelta(seconds=segment.end)).replace('.', ',')[:-3]
                f.write(f"{i+1}\n")
                f.write(f"{start_time} --> {end_time}\n")
                f.write(f"{segment.text.strip()}\n\n")
    
    if __name__ == "__main__":
        audio_file = sys.argv[1] if len(sys.argv) > 1 else "audio.wav"  # 인자 받기
        model_size = "medium"  # 사용할 모델 크기
    
        output_file = os.path.splitext(audio_file)[0] + ".srt"  # 확장자 .wav를 .srt로 변경
    
        # GPU 사용
        transcribe_audio(audio_file, model_size=model_size, device="cuda")
    

    스크립트를 transcribe.py저장한 후, 터미널에서 다음 명령어로 실행합니다:

    bash
    python transcribe.py 분리된음성파일.wav

    이렇게 하면 분리된음성파일.wav 파일에서 자막을 생성하여 자막파일.srt 파일로 저장합니다.

    이것도 마찬가지로 sh 파일로 만들어서 사용하시면 변환 명령어를 잊어버리지 않고 사용하실 수 있습니다.

    반응형

    댓글

Designed by Tistory.