SSブログ

Linuxユーザだってボイロ実況動画が作りたい! [作ってみた]

Linuxで、音声合成ソフトを使ってテキストを読み上げた“それっぽい”動画作るためのメモ。

使用したソフトは

その他に、素材づくりでInkscapeなんかも使ってますが、省略。

ちなみに、実際に作ってみた結果(動画)は、下記の場所で公開しています。
https://www.nicovideo.jp/watch/sm37346368


Open JTalk のインストールには以下のコマンドを実行します。

sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

open-jtalkが本体、open-jtalk-mecab-naist-jdicが辞書、hts-voice-nitech-jp-atr503-m001が音響データで、全て必要です。

補足:
aptで入手出来る Open JTalk には、作成した音声データが間延びするという問題が有ります。
ソースを入手し、パッチを適用して自分でビルドすると良いでしょう(参考サイト)。その場合は hts_engine API も必要になります。
もしくは、読み上げるテキストは短めにすると回避出来ます。

音響データは、他にも下記サイトで色々と入手可能です。

*.htsvoice」が音響データファイルですので、どこか適当なディレクトリに置いておきましょう。
/usr/share/hts-voice/ 辺りが分かりやすいかもしれません。

辞書データは/var/lib/mecab/dic/open-jtalk/naist-jdic/ にあります。
辞書を編集したい時は、どうしたら良いのだろう…


音声データを作成するには、次の様なコマンドを入力します。

open_jtalk -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow output.wav ./input.txt

辞書データ(-x)と音響データ(-m)の指定は必須。出力先ファイルは-owで指定。

input.txtは読み上げたい文章を書いたテキストファイルです。
文字コードは UTF-8 (?)。改行があると上手く行かないようです。
記号とかあるとダメなケースも有るし、(日本語としては変になったとしても、ちゃんと読み上げてくれるように)読み上げテキストを調整するなどの小細工が必要なこともあります。 (「は?」と入力すると「わ」と発声するので、「歯?」と書いてみたり)

echo 'こんにちは' | open_jtalk -m (略) -x (略) -ow output.wav

標準入力から入力することも可。何かしらのフロントエンドを作る場合には、(中間ファイルを作らなくていいので)便利。出力の方は標準出力に変更できませんが。

他にもボリュームや速度などのパラメータが有りますが、省略


動画を作ろうとすると再生する音声も沢山必要です。
一つずつコマンドを実行するのも大変ですので、一括して変換するpythonスクリプトを作成しました。

#! /usr/bin/python3

import subprocess

jtalk=["/usr/bin/open_jtalk",
       "-m",
       "/usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice",
       "-x",
       "/var/lib/mecab/dic/open-jtalk/naist-jdic",
       "-ow"]
no = 0
with open("input.txt") as fp:
    for mes in fp:
        mes = mes.strip()
        print(mes)

        cmd = jtalk + ["voice{:03d}.wav".format(no)]
        no += 1

        c = subprocess.Popen(cmd, stdin=subprocess.PIPE)
        c.stdin.write(mes.encode('utf-8'))
        c.stdin.close()
       c.wait()

OpenShot については、良く分からないので必要最小限のみ。
(以下、色々と苦労した点について多々記載してますが、使い方を分かっていないが故の事柄もあるはずなので、何か知っていたら教えてください)

さて、まずは、画像ファイルや音声ファイルなんかをプロジェクトファイル欄のドロップしてプロジェクトに登録。

次は、プロジェクトファイル欄のファイルをドラッグしてタイムライン欄へドロップ。
再生(表示)したいタイミングの場所まで移動し、再生(表示)時間を調整。
(画像の表示時間の後ろを合わせるのが非常に大変。何か良い方法は無いだろうか)

タイムライン欄の素材を選択したらプロパティを表示して色々と調整。
画像や映像は画面中心に最大表示がデフォルトなので、倍率や位置を調整するのですが…
タイムライン欄の赤い縦線(タイムライン)が素材上にいると、その位置にキーフレームを勝手に挿入するので、意図した結果になってくれない。

フェードインやカットインなんかは、タイムライン欄の素材を右クリックして選択するだけで簡単に設定できるのですが、微調整しようとすると途端に面倒になる。

このソフトは、撮影した動画にBGMを付けて簡単なタイトルを表示する様な編集をするためのもので、立ち絵や字幕を表示するボイロ実況動画には向いてないですね。
OpenShot のプロジェクトファイル(ospファイル)は、JSONっぽいテキストファイルなので、直接イジった方が楽かもしれない。

それはさておき、
編集がおわったらプレビューなんですが
多分環境依存だと思うんですけど、ウチの環境ではプレビューで音声が再生されません。
プレビューは(デフォルトで)2倍速くらいで再生されるのですが、倍速時は音声再生NG。ノイズになります。
何かの拍子に1倍速(等速)に切り替わるのですが、そうなるとちゃんと音も出ます。ただ、何をやったらプレビューの再生速度を切り替えられるのかが分からない。
等速時でもなんか音ズレしているっぽいですし。
なので音声に合わせて何かしようとした場合、最初から音声ファイルを該当箇所で分割しておくか、エンコード速度の早い(解像度が小さくてフレームレートの低い)形式で出力して確認するというこれまた面倒な事をする羽目に…。

ここまでやったら、最期に出力です。
色々な形式が選べますが、解像度とフレームレートでそれっぽいのを選べば大丈夫。

「プロファイル」で「Web」を選べば、「ターゲット」欄にYouTube等の“海外で知名度のある”動画サイトの一覧が表示されますので、それを選んでおけば無難です。
まぁ、ニコニコ動画はありませんので「MP4(h.264)」で「HD 720p」か「HD 1080p]でも選択しておけば良いんじゃないですかね?


他の問題としては、Inkscape や Blender と連携というか各ソフトを呼び出して編集出来る機能が有るのですが、コレが動きません。

/var/lib/flatpak/app/org.openshot.OpenShot/current/active/files/bin
ここ↑に有るスクリプトを呼んでるので、中身を書き換えてみたのですが効果なし。
もしかしたらFlatpakパッケージのものしかダメなのかもしれません。
Inkscape および Blender のFlatpakパッケージのインストールを行ったら、うまく行くかもしれません。


nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。