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が表示される.使い方は以下に.
「設定」→「ツールバーのカスタマイズ」で好みのボタンを表示すると便利.
全部書き出し,テキスト読み込み等
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から自動翻訳の.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
コメント