💡

CLIでアニメーション付き字幕を動画に入れられるツールを作った

2022/12/11に公開

概要

今更ながら、音声からの文字起こしAIで有名なwhisperを触り始めたので、それを使ってCLIでYoutubeや動画ファイルに字幕を入れて保存するツールを作ってみました。
ただ動画に字幕を入れるだけだとwhisper単体でsrtファイルなどに保存すればできてしまうので、文字のアニメーションやエフェクトなどを入れられるツールになっています。

stenocaptioner という名前でpypiに登録されていてpipでインストールできます。

https://pypi.org/project/stenocaptioner/
https://github.com/neka-nat/stenocaptioner

使用しているツール

whisperを使用しているのはもちろんなのですが、それ以外にyoutube_dlmoviepyを使用しています。
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