酒をやめて113日目。
今日は映画を楽しむつもりだったのですが、気づけば映画を見る時間をほとんど字幕カバーの開発に使ってしまいました。
たぶん3時間くらいやっていたと思います。
でも、そのおかげで最初に作ったものとは比べものにならないくらい実用的なものができました。
字幕を「黒く隠す」だけでは満足できなくなった
もともと作りたかったのは、動画の字幕を見えなくするための仕組みです。
英語の映画やドラマを見るとき、字幕を読まずに音だけで理解したい。
ところが動画サービスによっては、字幕を完全に消せないことがあります。
そこで最初は、字幕が表示される場所に黒い四角を重ねて隠していました。
これはこれで役に立ちました。
字幕は読めなくなるので、目的自体は達成できます。
ただ、画面の下に大きな黒い板が乗っているような状態になります。
映画を見ていると、やはりかなり気になります。
字幕を消したいだけなのに、映像まで隠してしまう。
使っているうちに、
「もっと自然に字幕だけ消せないだろうか」
と思うようになりました。
ぼかしだけでは字幕の白い文字が残る
そこでAutoHotkeyを使って、字幕部分をぼかす方法を試しました。
黒い四角で完全に覆うより、こちらのほうが映像はかなり自然に残ります。
ただ、字幕は白い文字に黒い縁が付いているため、単純にぼかしただけでは白い部分が残ります。
文字として完全には読めなくても、
「ここに字幕がある」
ということは分かってしまいます。
さらに自然にするには、字幕そのものを周囲の映像になじませてからぼかしたほうが良さそうです。
ここから少しずつ処理が複雑になっていきました。
Pythonを使って字幕部分を周囲になじませる
今回はPythonも使って処理することにしました。
考え方としては、字幕のある場所の周囲の映像を見て、その色を使って字幕部分を目立たなくしていく方法です。
ただ、映画の映像では字幕の周りが黒いこともあります。
単純に近くの色を使うと、その黒まで拾ってしまいます。
そこで、
「周りが黒いなら、もう少し広い範囲を見る」
「黒いタイルは無視して、使える周囲の色を探す」
という処理を考えてみました。
さらに近くに複数の黒い部分がある場合も、それらをまとめて処理します。
多少処理量は増えますが、PC上で映画を見る用途なら十分使えそうです。
実際に作って試してみると、かなり実用的なところまで持っていくことができました。
Python版+AutoHotkeyのぼかしがいい感じだった
最終的には、Python側で字幕の白い部分を周囲の映像になじませ、その上からAutoHotkey側のぼかしを重ねる方法がかなりいい感じになりました。
完全に元の映像を復元できるわけではありません。
字幕の裏側にあった映像は、そもそも画面上には存在しないからです。
それでも、
- 字幕の文字は読めない
- 白い文字の存在感もかなり消える
- 黒い字幕カバーのように映像を大きく隠さない
- 映画を見ていて邪魔になりにくい
というところまでできました。
最初に作った「字幕の上に黒い四角を置く」という方法から考えると、かなりの進化です。
完璧を目指すより、実用になれば十分
作っている途中では、字幕の周りの色や黒い部分の扱いなど、細かい問題が次々に出てきました。
全部を完璧に処理しようとすれば、かなり複雑なプログラムになると思います。
でも今回の目的は映像処理の研究ではありません。
映画を見るときに字幕が気にならなくなればいい。
その目的で考えれば、今回できたものは十分実用的です。
100点の映像を再現する必要はありません。
映画を見ていて字幕に目を奪われなければ成功です。
そう考えると、かなり満足できるところまで来ました。
映画を見る時間を全部開発に使ってしまった
問題があるとすれば、今日は映画を見るために作っていたはずなのに、映画を見る時間を全部開発に使ってしまったことです。
気づけば3時間くらい経っていました。
「ここをこうすればもっと良くなるのでは?」
と思うと試してみたくなります。
それが動くと、今度は別の改善点が見えてきます。
そしてまた直す。
完全に開発のほうが面白くなっていました。
映画を見るための道具を作っていたはずなのに、その道具を作ること自体が今日の娯楽になってしまいました。
Pythonが使えると、できることが一気に増えそう
今回特に感じたのは、Pythonを使えるようになると、自分でできることの幅がかなり広がりそうだということです。
AutoHotkeyだけでも、これまでいろいろな小さな不便を解決してきました。
そこにPythonが加わると、画像を判断したり、周囲の状態によって処理を変えたりといった、もう少し複雑なこともできるようになります。
「こんなものがあったら便利なのに」
と思ったとき、以前なら既製品を探して、なければ諦めるしかありませんでした。
今は、
「それなら作れないだろうか」
という選択肢があります。
今回の字幕カバーも、まさにそこから始まりました。
断酒113日目、酒とはまったく違う3時間だった
考えてみると、今日は3時間くらい一つのことに集中していました。
以前なら夜の時間を酒を飲みながら過ごして、そのまま一日が終わっていたこともあります。
今日は映画すら見ず、字幕カバーをどう改善するか考え続けていました。
同じ3時間でも、終わったあとに残っているものがまったく違います。
今日作ったものは、明日以降も使えます。
今回覚えたPythonの使い方も、別のものを作るときに使えます。
そして何より、
「自分で考えたものが実際に動く」
というのはかなり面白いです。
断酒113日目。
今日は映画を見る予定が、思いがけずプログラム開発の日になりました。
でも、こういう予定外なら悪くありません。
酒を飲まなくなって空いた時間に、また一つ新しい楽しみが増えてきたような気がします。

コメント