📹

完全に無料で翻訳字幕入り動画作成をしたい

2025/01/30に公開

海外のカンファレンスの動画を手に入れたのですがネイティブの発音を追っかけていたら
理解するのに動画の何倍も時間がかかってしまうので翻訳した字幕入り動画を作ります

カンファレンスが10時間とか超えるので有料のサービス使うとあっという間に数百ドル…
ローカルで処理してケチります

環境:Macbook Pro (M3 Pro)
WhisperもffmpegもCPUでも動きますが速度が段違いなのでGPUでやる前提で書いています
1時間の動画を処理するのに全部で10分はかかりません

Step:

  1. 文字起こしをする
    a. 動画から音声データだけ抽出する
    b. 音声データから字幕ファイル(SRT)を作成する
  2. 字幕データを翻訳する
  3. 字幕を元動画に書き込む(エンコード)

使ったもの

  • 文字起こし > Whisper
  • 音声データ抽出 > ffmpeg
  • 字幕データ翻訳 > https://www.syedgakbar.com/projects/dst
    • 精度にこだわるなら ChatGPTかDeepLあたりがいいかも
    • 上記はとにかく無料で早い。精度はGoogle翻訳なので察して
  • 字幕焼き付けエンコード > ffmpeg

Step 1 文字起こし
前提:ffmpegをインストール済みであること

  1. 動画データから音声データを抽出する
    動画次第ではwavにしなくても良さそうなのですがおそらくこちらの方が処理も早いです

    ffmpeg -i 001.mov -ar 16000 -ac 1 -c:a pcm_s16le 001.wav
    
  2. Whisper をインストール 最新をローカルでビルドして使用します
    ビルドのためにcmakeをインストール

    brew install cmake
    

    whisper.cpp をクローン

    git clone https://github.com/ggerganov/whisper.cpp
    cd whisper.cpp
    

    モデルをダウンロード

    mkdir -p models
    curl -L -o models/ggml-base.en.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin
    

    Metal(M1/M2 GPU)を有効にしてビルド

    make clean
    WHISPER_METAL=1 make
    

    動画から文字起こしをする > SRTに出力

    ./build/bin/whisper-cli -m models/ggml-base.en.bin -f 001.wav --output-srt --threads 4
    

これで001.srtが作られます

Step 2 翻訳
srtを任意のツールで翻訳します

Step 3 エンコード
ffmpegでsrtを字幕として書き込むことができます

ffmpeg -i 001.mov -vf "subtitles=001.srt" -c:v h264_videotoolbox -b:v 2500k -c:a aac -b:a 128k 001_h264.mp4

あとは待つだけ

翻訳部分をChatGPTでいい感じにするツールを作ったらこれらを一括してできるツールにしようと思います

Discussion