Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

声質保持動画翻訳のプロセス #12

Open
tomo-spring opened this issue Oct 26, 2024 · 0 comments
Open

声質保持動画翻訳のプロセス #12

tomo-spring opened this issue Oct 26, 2024 · 0 comments

Comments

@tomo-spring
Copy link
Collaborator

tomo-spring commented Oct 26, 2024

声質保持動画翻訳のプロセス

  1. 動画から音声を抽出(moviepy)
  2. 抽出した音声を文字起こし(whiper)
  3. 抽出した音声から声質を学習(elevenlabs)
  4. 文字起こしを翻訳(openai)
  5. 翻訳した文章を3で作成したモデルでTTS(elevenlabs)
  6. 5で作成した音声を元動画に結合(moviepy)

上記プロセスにおける課題

  1. 文字起こしをしたのちに翻訳をすると、精度が落ちる&処理速度が遅くなる。
  2. 元動画への音声結合の際に、翻訳による文字量の違いから音がズレる

課題の解決策

はじめは英語→日本語にはkotoba-whisper-bilingual-v1.0という直接かつ高速に英語音声から日本語に翻訳して文字起こしできるというモデルを使用していた。
しかし、数分の動画でもH100で1分以上かかってしまった上、タイムスタンプを保持した形での翻訳ができなかった。
また、GPUリソースを用いたデプロイも大変なので断念。

APIだけで完結させたいと考え、調べていたところ、OpenAI社のAPIで直接音声から英語に翻訳して、かつタイムスタンプも維持するというこちらのエンドポイントがあったので使用。

これを用いることで、高速かつ簡単なデプロイ&運用が実現できた。

タイムスタンプを用いてずれをなくす方法

タイムスタンプを保持したJSONの例:

{
  "duration": 9.399999618530273,
  "language": "english",
  "text": "You're such .. all?",
  "segments": [
    {
      "id": 0,
      "avg_logprob": -0.9008601307868958,
      "compression_ratio": 1.0537633895874023,
      "end": 2.359999895095825,
      "no_speech_prob": 0.03196346014738083,
      "seek": 0,
      "start": 0.0,
      "temperature": 0.0,
      "text": " You're such a troublemaker, Usagi-san!",
      "tokens": […]
    },
...

上記のように、センテンスごとに分割され、それぞれstartとendの時間が記載されている。
ここから、以下のロジックで音声編集をし、各チャンクを結合した。

元動画の音声 > 生成音声の場合

生成音声の前後に無音音声を追加する
追加する無音音声の長さは、それぞれ
元動画の音声 - 生成音声
の長さの無音音声を各チャンクの後に結合

例えば、生成音声が4秒で、元動画での長さが5秒の場合の時は
生成音声の前後に0.5秒の無音区間を追加

生成音声 > 元動画の音声の場合

生成音声 / 元動画の音声
を速度因子として生成音声に乗算する
例えば、生成音声が5秒で、元動画での長さが4秒の場合の時は
5 / 4 = 1.25倍
に再生速度を調整

上記のロジックで編集した音声を、最終的にpydubを用いて動画に結合することで、動画中の動きとのずれを最小限にした。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant