ユーザ用ツール

サイト用ツール


サイドバー

最新の10件
一覧
linux:tts:voicevox

VOICEVOX

GUI

CPU/GPU版とCPU版がある.GPUモードを利用するにはRAM3GB以上を搭載したNVIDIA GPUが必要.以下はCPU版.

$ wget -c https://github.com/VOICEVOX/voicevox/releases/download/0.10.4/voicevox-linux-cpu-0.10.4.tar.gz
$ tar tvf ./voicevox-linux-cpu-0.10.4.tar.gz
$ tar xf ./voicevox-linux-cpu-0.10.4.tar.gz
$ VOICEVOX/voicevox

で,electron製のGUIが表示される.使い方は以下に.

「設定」→「ツールバーのカスタマイズ」で好みのボタンを表示すると便利.
全部書き出し,テキスト読み込み等

web経由でエンジン利用

VOICEVOX/run でwebサーバが起動してくる.

$ VOICEVOX/run
INFO:     Started server process [1996083]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:50021 (Press CTRL+C to quit)

http://127.0.0.1:50021/docs にアクセスするとドキュメントが表示される.

テキストを渡すとwavで返すscriptを用意

voicevox2wav.bash

#!/bin/bash

COMMANDS=(nkf curl)
for COMMAND in "${COMMANDS[@]}"
do
  type "${COMMAND}" > /dev/null 2>&1 || {
     echo "${COMMAND} are required." 1>&2
     exit 1
  }
done

nc -w 1 -v 127.0.0.1 50021 < /dev/null > /dev/null 2>&1 || {
  echo "can't connect VOICEVOX ENGINE."
  exit 1
}

if [ $# == 0 ]; then
  echo "$0 TEXT [SPEAKER]"
  exit
fi

text=$(echo "$1" | nkf -WwMQ | sed 's/=$//g' | tr "=" "%" | tr -d '\n')
body="$(curl -s -X 'POST' -d '' -H 'accept: application/json' "http://127.0.0.1:50021/audio_query?text=$text&speaker=${2}")"
curl -s -X 'POST' "http://127.0.0.1:50021/synthesis?speaker=${2:-0}" -H 'accept: audio/wav' -H 'Content-Type: application/json' -d "$body" || {
  echo audio output error. 1>&2
  exit 1
}

テキストを読み上げて.wavに

$ time ./voicevox2wav.bash "ハローワールド" 1 > hallo_world.wav

real    0m6.728s
user    0m0.044s
sys     0m0.039s
$ ffprobe ./hallo_world.wav 2>&1 | grep ^Input -A2
Input #0, wav, from './hallo_world.wav':
  Duration: 00:00:01.40, bitrate: 384 kb/s
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 24000 Hz, 1 channels, s16, 384 kb/s

YouTubeから文字起こし,機械翻訳をダウンロードしてテキストに変換,TTS読み上げ

YouTubeから自動翻訳の.vtt形式の字幕ファイルをダウンロードして.txtに変換

$ yt-dlp --skip-download --sub-lang=ja --write-auto-sub https://www.youtube.com/watch?v=lZjciSImVhU
$ awk 'FNR<=4 || ($0 ~ /^$|-->|\[|\]|</){next} !a[$0]++' ./Ep\ 12\ -\ Crypto\ Wars\ \[lZjciSImVhU\].ja.vtt > Ep\ 12\ -\ Crypto\ Wars\ \[lZjciSImVhU\].ja.txt

テキストを1行毎にVOICEVOXに渡して.wavに変換

$ count=0 ; cat Ep\ 12\ -\ Crypto\ Wars\ \[lZjciSImVhU\].ja.txt | while read line; do echo ${line} ; ./voicevox.bash ${line} > "${count}.wav" ; count=$(( ${count} + 1 )); done

.wavを結合しながらopus/oggに変換

$ find . -name "*.wav" -size +1c | sort -V | xargs -n1 basename | xargs -n1 echo file > wav-files
$ time ffmpeg -f concat -i ./wav-files -acodec libopus episode12.ogg

コメント

コメントを入力. Wiki文法が有効です:
 __  __  ____  _____ ______  ____
 \ \/ / /_  / / ___//_  __/ /_  /
  \  /   / /_/ (_ /  / /     / /_
  /_/   /___/\___/  /_/     /___/
 
linux/tts/voicevox.txt · 最終更新: 2022/04/12 00:16 by matoken