CLIでアニメーション付き字幕を動画に入れられるツールを作った
概要
今更ながら、音声からの文字起こしAIで有名なwhisperを触り始めたので、それを使ってCLIでYoutubeや動画ファイルに字幕を入れて保存するツールを作ってみました。
ただ動画に字幕を入れるだけだとwhisper単体でsrtファイルなどに保存すればできてしまうので、文字のアニメーションやエフェクトなどを入れられるツールになっています。
stenocaptioner という名前でpypiに登録されていてpipでインストールできます。
使用しているツール
whisperを使用しているのはもちろんなのですが、それ以外にyoutube_dlとmoviepyを使用しています。
youtube_dlは入力としてYoutubeのURLが与えられた場合にそれをダウンロードして編集します。
moviepyは抽出されたテキストを動画内に字幕として挿入するための処理を行うのに使用します。
インストール
現状は Ubuntuのみ でしか試せてません。
aptで必要なパッケージをインストールしておきます。
sudo apt-get -y install imagemagick fonts-vlgothic
必要であればImageMagickをmoviepyで使えるようにするために以下のファイルの一行をコメントアウトします。
sudo vi /etc/ImageMagick-6/policy.xml
<!--
<policy domain="path" pattern="@*" rights="none">
-->
stenocaptionerをpipでインストールします。
pip install git+https://github.com/openai/whisper.git
pip install stenocaptioner
基本の使い方
基本的な使い方はコマンドラインで 動画ファイルのパスやYoutubeのURL を与えると字幕付きの動画ファイルが保存されます。
今回はTEDの動画を使って、それに字幕を入れた動画を保存してみます。
日本語の場合は--language ja
オプションを追加して以下のように実行します。
アニメーションの追加は応用編で説明します。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja
実行すると、youtube動画のダウンロード、whisperによるspeech-to-text、moviepyを使った字幕の追加が順番に行われます。
動画は <youtubeのid>_captioned.mp4
の形式で保存されます。
元の動画
結果
応用編
以下、応用的な使い方です。
いろいろとオプションを用意してみました。
フォントの変更
フォントを指定してフォントの変更を行います。
以下ではこちらのフォントをダウンロードしてファイルを指定することでフォントを変更しています。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --font ./gomarice_mukasi_mukasi.ttf
文字の色の変更
文字の色を指定できます。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --text-color red
文字の大きさの変更
文字の大きさを指定できます。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --font-size 100
文字の背景色を指定
動画の背景色と文字の色がかぶると文字が見えない場合に背景色を指定できます。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --background-color blue
文字の輪郭の色を指定
輪郭に色をつけて文字を目立たせることもできます。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --contour-color black
文字のフェードイン、フェードアウトの指定
文字のフェードイン、フェードアウトをそれぞれ秒数で指定します。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --fadein-duration 0.5 --fadeout-duration 0.5
文字のアニメーションを設定
テキストの表示にアニメーションを加えることができます。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --letter-effect typing
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --letter-effect arrive
字幕に使われたテキストデータを保存・読み込み
以下のコマンドで抽出されたテキストデータを transcript.json
という名前のjson形式で保存します。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --save-text
保存したデータを用いて文字を入れることができます。
stenocaptioner https://www.youtube.com/watch?v=ldybnuFxdiQ --language ja --load-text transcript.json
最後に
まだまだ機能として荒い部分も多いのと、Ubuntuでしか試せてないです。
ぼちぼち改良していこうと思います。
Discussion