見出し画像

字幕ファイルvttから冗長な文章を取り除いたsrtファイルを出力するPythonスクリプト

ユーチューバーとなったしろのさんは、次に翻訳すべきはなにかを物色中です。

自分でアップロードした英語の動画に字幕を付ける手順は、こちらの記事で紹介したように確立出来たと思うんですが、問題は他人の動画です。


Youtubeの場合は、自動翻訳を出す方法があり、そちらも紹介しましたし、労力を考えるとそれでいっかーとも思うのですが、やっぱり自動翻訳ですしねー。


もし、他人の動画に字幕を付けてあげたいような場合、昔はYoutubeのコミュニティで制作した字幕を使う機能があったのですが、2021年に廃止されているようです。

こちらにじゅごんさんが紹介しているYoutube External CCという外部サイトに字幕をアップロードすると、字幕つきで元のYoutube動画を視聴できて、しかもViewsのカウントは元々の動画主のカウントが進むということで、私のように動画主のメッセージを日本の皆さんに見てもらいたいだけのボランティア的な要望に適していていいなーと思うので使ってみたい感じです。

しかし、こちらのベン・ダビッドソンの動画はクソ長いのです。

翻訳するならかなり効率よくやる手法が必要です。

自分の持っている動画ならば、Youtube Studioからキレイなsrt形式でダウンロードできるのですが、そうでない場合は各種サービスを使って基本的にはvtt形式でダウンロードしたものをsrtへ変換することになりそうです。

そして、この変換がイマイチ。色んなサービスを試したものの、vttにある文章の重複を取り除いてくれるサービスが見つからなかった。

絶対どっかにあると思うけど、30分くらい見つからなかったので、自分で作っちゃいました。

WEBVTT
Kind: captions
Language: en

00:00:00.560 --> 00:00:02.310 align:start position:0%
 
it's<00:00:00.799><c> always</c><00:00:01.120><c> more</c><00:00:01.360><c> challenging</c><00:00:01.839><c> to</c><00:00:02.000><c> hit</c><00:00:02.159><c> a</c>

00:00:02.310 --> 00:00:02.320 align:start position:0%
it's always more challenging to hit a
 

00:00:02.320 --> 00:00:05.110 align:start position:0%
it's always more challenging to hit a
moving<00:00:02.800><c> target</c><00:00:03.360><c> especially</c><00:00:03.919><c> in</c><00:00:04.080><c> science</c><00:00:04.960><c> by</c>

00:00:05.110 --> 00:00:05.120 align:start position:0%
moving target especially in science by

vtt形式の字幕ファイルは、各単語レベルでタイミングの情報があり、字幕が伸びる度に前の文章も繰り返される仕様なので、上のように人間が読むのにはかなり適さない形式です。

もちろん、動画プレーヤーにとって表示しやすいような形式を策定したのですから、人間には辛いのはしょうがないのですが、上のような事情からvttから人間が読むのに適したシンプルなsrt形式へと変換したいわけですね。

私のPythonスクリプトを使うと上の部分が、

1
00:00:00,560 --> 00:00:02,310
it's always more challenging to hit a

2
00:00:02,320 --> 00:00:05,110
moving target especially in science by

こうなりますwwww

あーー、読みやすい。

短く、繰り返しがなく、必要最小限の情報があります。字幕が出てくるきめ細かなタイミング情報は失われていますが、そんなのどうでも良いでしょう。


使い方は

pip install webvtt-py

として依存性ライブラリであるwebvttをインスコして、後はvtt2clean_srt.pyをダウンロードすればインスコ終了です。

あとはLinuxなら

python vtt2srt.py TheEarthDisaster.vtt > TheEarthDisaster.srt

WindowsだとPipeの記号は|でしたっけ?試してませんが、多分これでOK?

python vtt2srt.py TheEarthDisaster.vtt | TheEarthDisaster.srt


そんな誰得情報でした。