日本語の動画に英語の字幕をつけたり、日本語のテキストを英語に翻訳するなど、今や当たり前になりました。
しかし、自動の文字起こしや翻訳は完璧ではなく、専門用語やアルファベット3文字の省略ワードなど、うまく訳せないことは多々あります。
そのような場合、おかしいところを手直ししたくなりますよね。
今回、日本語音声の入った動画を入力とし、日本語文字起こし→英訳→英語音声ファイル生成までをPython環境で行う方法を紹介します。
途中の変換結果をテキストファイルに落とすようにしているので、自動翻訳が気に入らない部分を手修正して次のフローに渡すことで、細かな表現を調整した字幕や英訳音声を生成することができます。
以下の動画に本記事の内容にたどり着くまでの調査や試行錯誤の様子、本記事の内容の実行確認の様子などを収めています。
よろしければ参考にしてください。
動作環境
使用マシン | M1 MacBook Pro 13-inch 2020 |
OS | Monterey 12.6.1 |
環境構築
HomeBrewインストール
HomeBrewをインストールしていない場合はインストールします。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
ffmpegインストール
ffmpegをインストールします。
brew install ffmpeg
Minicondaインストール
MinicondaのGitHubからお使いのPCに合ったインストーラをダウンロードして実行します。
以下はM1 Mac用の場合の実行例です。
bash Miniforge3-MacOSX-arm64.sh
~/.zshrcに自動的にMiniconda用の設定が追記されるので、sourceして有効にします。
source ~/.zshrc
Python 3.9を指定したspeechという仮想環境を作成し、アクティベートします。
conda create -n speech python=3.9 conda activate speech
scipyをインストールします。
conda install scipy
SpeechRecognitionをインストールします。
pip install SpeechRecognition
GoogleTransをインストールします。(バージョン指定しないとエラーになりました)
pip install googletrans==4.0.0-rc1
変換処理実行
変換に使用するPythonプログラムをGitHubからダウンロードして、できたディレクトリに移動します。
git clone https://github.com/tak6uch1/jp_video2en_voice cd jp_video2en_voice
ファイル出力先となるディレクトリを作成します。
mkdir -p output/cut_wav mkdir output/en_voice
日本語文字起こし
日本語文字起こしには、SpeechRecognitionライブラリを使用しています。
SpeechRecognitionはwav音声ファイルから文字起こしを行うことができますが、1分程度の短い音声ファイルしか扱うことができません。
そこで、長い動画を30秒毎の小さな音声ファイルに切り刻んでから文字起こしする方法が、こちらのサイトで紹介されていたので、この方法を採用しています。
日本語音声の入ったmp4動画を用意し、1_long_speech_recog.py
の入力として、以下のように実行します。
python 1_long_speech_recog.py JP_VIDEO.mp4
これで、outputディレクトリ以下にja.txt
というファイルが生成されます。
ja.txt
に日本語の文字起こし結果が格納されているので、テキストエディタで開いて内容を確認します。
文字起こし結果が気に入らない箇所を修正します。
ここで、1文を1行にしておく(改行を入れる)と見やすくなり、続く英訳の結果も見やすくなります。
英訳
文字起こしした日本語のテキストをGoogleTransライブラリを使用して英語のテキストに変換します。
python 2_translate.py
output/ja.txt
を入力して、output/en.txt
に英語への翻訳結果を出力します。
英訳の結果についても、テキストエディタで開いて、気に入らない部分があれば修正しておきます。
英語音声ファイル生成
英語の文章を入力してしゃべってくれるMacのsayコマンドを利用して英語音声ファイルを生成します。
システム環境設定→アクセシビリティ→読み上げコンテンツ→システムの声→カスタマイズ から英語(アメリカ合衆国)のSamanthaなど、お好みの英語話者を選択します。
以下のコマンドを実行します。
python 3_say.py
これで、output/en_voiceディレクトリ以下に000.wav、001.wav, …というように番号が付いた音声ファイルが複数生成されます。
この音声ファイルを動画に組み込むなどして利用することができます。
トラブルシューティング
GoogleTransでエラーが出る
上記手順ではGoogleTransインストール時にバージョン指定で実行していますが、以下のようにバージョン指定せずに実行するとエラーが出ました。(2022年11月現在)
pip install googletrans
エラーの内容は以下です。
AttributeError: 'NoneType' object has no attribute 'group'
バージョン指定でインストールすることで解決できました。
pip install googletrans==4.0.0-rc1
まとめ
SpeechRecognition、GoogleTrans、Macのsayコマンドを利用して、日本語の音声が入った動画から日本語文字起こし→英訳→英語音声ファイル生成、までの変換を行う方法を紹介しました。
この方法を使えば、英語を話すのが苦手な方でもネイティブの発音の英語音声を自分の動画に加えることができ、英語圏の方を意識した発信も可能になりますね。
途中の変換結果をテキストファイルに出力しているので、気に入らない箇所は修正してから次のステップに進むことができるため、自動ではうまく訳せなかった箇所も直すことができます。
30秒毎に切るので、切れ目では文字起こしがおかしくなる部分もあるのですが、私が試行した限りではほとんど気にならず、かなりまともな文字起こしができていました。
英語の発話はMacのsayコマンドを使用していることから、Mac以外では実行できませんが、日本語文字起こしと英訳部分は、Mac以外でも実行できると思います。
本記事が、英語の音声を自動で作って動画に適用したいと思っている方、文字起こしや英訳をプログラムで実行したい方の参考になれば幸いです。
書籍紹介
入門 Python 3
基礎から応用までわかりやすい説明でコード例も多数載っていて、初学者の入門書としては必要十分と感じています。
さらにPythonらしいコードの書き方も言及されていて、スマートなコードが書けるようになります。
新しいLinuxの教科書
Linuxコマンドラインの使い方やシェルスクリプトの書き方、ファイルバージョン管理などの説明があり、これからLinuxで開発を始めたい方におすすめの入門書です。
参考文献
- pythonで長い音声・動画からの文字起こしを実装する(https://www.hamlet-engineer.com/posts/mojiokoshi_long.html)
- 【Python】日本語を英語に翻訳する(https://algorithm.joho.info/programming/python/googletrans/)