Thursday, August 27, 2015

兎のエゴンと私

経済の本を読んでいた時,なんとはなしに隣にいた兎に「あなたには声があるの?」と尋ねた.「人々の生産性は上がっている.世界の人口はあまり増えなくなっている.どうしてそれでもこんなに問題があるのだろう?」

兎は私を見ていた.兎の名前はエゴン(Egon).今日はスティグが学校に上がる最初の日だ.「なぜなのか知らないの?」エゴンが言った.または私の一部がエゴンが言っているように答えたのか.「わからない.結局『人間は愚かだ』と言うことはできるけれども,それはあまり助けにならない答えだ.たとえそれが真実だとしても.」今度はエゴンは無言だった.だから私は幻聴でも聞いたのだろうと思った.
Egon

ふとエゴンの檻を見て聞いてみた「あなたの檻は小さすぎないかい?」.

Egon: 「小さいね.もっと大きいのがいいね.君のはどうだい?」

私: 「私の檻? 檻なんかないけど」

Egon: 「自分の檻も見えないのかい? 君は自分で作って自分でその中に入ったのだろう.私の知っている限り,動物の中でそんなことをするのは人間だけだけれどもね.」

私: 「刑務所のことかな.自分で入りたいという人は普通はいないと思うけど」

Egon: 「いやいや,君らが街とか読んでいる檻だよ」

私: 「... 街がどうしたら檻なんだい?」

Egon: 「君らが街を作る前には,誰でもどこに座っても文句はなかった.今は街の中では座れる所も寝られる所も決められている.自分の巣も持てない人もいる.街の中のほとんどは自由に立つこともできない.目に見えないかもしれないが,檻があるのとどこが違うのかい?」

私: 「... ふーん.なるほどね.街をそう考えたことはなかったかな.」

Egon: 「別に物理的なものじゃなくてもそうだ.資本主義とかなんとかというものを作って,自分達でその中に入っている.それがもしかしたら危険かもしれないし,突然崩壊するかもしれないと知っていても,君らはその中で暮らしている.そういうあぶない所からでも外に出たくなかったりしないのかい.」

私: 「...」
Egon and me

エゴンはここで話すのを止めた.檻の中にいたのは実は私の方なのかも,とこの奇妙なアイデアについてもう少し考えてみた.いやいや,実は1つの檻ではなくて,何重もの檻の中にいるようだ.街だけじゃない.政治形態,エネルギー網,私の使える言葉,...これらは皆よりよい人生のためかと思っていた.しかしエゴンの考え方ではこれらは皆ある種の限界,檻,でもある.なるほどね.人間は地球で3番目に賢い生き物だと思っていたが,実は兎の次としたら,少なくとも4番目以降というわけか.

Egon: 「君らは単純な命を大事にしすぎる.もう少しバランスを持ったらいいかもね」

私: 「命を大事にしすぎる.国,軍,政党,経済システム,エネルギーシステム,などなどは私達の命を守るために作ったはずなのに,今やそれらが私達を破滅させようとしているようだ.これが私達の問題というのかな?」

Egon: 「多分そうかも,そうじゃないかも」

太陽が沈みかけてきた.スティグがエゴンを寝ぐらの檻に移しかえる.「エゴン,君には声はあるのかな.私が聞けるような声が?」もう一度聞いてみた.「それは重要なことなのかな.君らは些細なことにこだわりすぎていないかい」エゴンは答えた.

彼は檻の中で野菜を食べるのに忙しい.(これもまた,彼の言う檻なのだろうか.私は耳に聞こえる声でないと声と考えないのだろうか? これはそもそも重要なのか?) 家に帰る前にエゴンを一瞥した時,確かではないがエゴンが微笑んでいたような気がした.

Tuesday, August 25, 2015

今さら聞けないコンピュータ: 私の USB スティックに 8GB と書いてあるのはどういう意味ですか?

はじめに


ここでは,「コンピュータが苦手,でもやってみたいことがある.」という方のお手伝いをしながら答えたちょっとした疑問について時々書いていこうと思います.

ビデオ上映会をしたい.どんな USB スティックならいいのですか?


私の知人の中には市民の活動としてこういうことを伝えたい,勉強したいという人が何人かいます.たとえば,国際結婚をした場合,子の国籍はどうなるのか,などということを自分達で勉強したいということがあります.ほかにもいろいろと知りたいことがあるでしょう.

そういうことについて調べて,資料となるビデオもある,では皆で共有しましょうという時,「とにかくコンピュータは苦手で上映会なんてどうしていいのか,でもできればやってみたい」という方がいます.私はその方のお手伝いを少しすることになりました.ビデオを30人位の人達で見るために,プロジェクター(ビーマー)を使って上映会をしたいということです.

その方はとにかくコンピュータが苦手ということなのですが,でもデスクトップのコンピュータは持っていて,メイルを読み書きしたり,あるいは Web を検索するのならなんとかなるということです.私にとっては,それは十分なことだと思います.メイルのやりとりができて Web を検索できるのなら,コンピュータを使えています.

資料となるビデオ映像の著作者の方に特定の条件で上映するの許可を頂いて権利関係はなんとかなったものの,ノートコンピュータを貸して下さる方のノートには DVD ドライブがないということで,USB のスティックに映像を入れられないかという問い合わせがあり,私に次の質問が来ました.

「私の手元に 8GW と書かれた未使用のスティックがあります.これで良いでしょうか?」

はてさて,8GW とはなんだろう? W は普通ワットという単位で,8GW を電気で考えると世界有数の発電施設並みです.もしかして 8GB の間違いでは? と思って確認したところ,実は 8GB の間違いとわかりました.

また,できればいろいろコンピュータについても説明して頂けるとありがたいということでした.

コンピュータでは情報をファイルという単位で記憶します.ファイルというのはもともと紙の書類を綴じたものを指しました.ファイルにはどれだけの情報を記憶されているかの大きさがあります.その単位を B と書いてバイト(byte)と読みます.

1 B(バイト)はコンピュータ用語で英文字を 1 文字記憶できる大きさと考えて十分です.コンピュータの中では実は全て数しかないので,1 B (バイト) も数字です.1 B では 0 から 255 までの数を 1 つ記憶できます.英文字は数字が 0 から 9 まで,英字の小文字が 26 文字,大文字が 26 文字,!, #, *, +, (, ) などの記号などがあって,255 あればだいたい十分です.どの数字がどの文字に対応するかを決めたで広く使われる方法が ASCII(https://ja.wikipedia.org/wiki/ASCII) と呼ばれています.たとえば ASCIIでは文字の 'A' は 65 の数字が対応しています.(しかし日本語や中国語で使う漢字には 255 種類よりももっと多くの種類がありますから,この方法では記憶できません.これについてはまたいつか...)

これで 8GB の B はわかりましたが,8 の後ろの G は何でしょうか.この G はSI 接頭辞 (https://ja.wikipedia.org/wiki/SI%E6%8E%A5%E9%A0%AD%E8%BE%9E)というもので,大きな数や小さな数を 10 の累乗倍を示す接頭辞で表すものです.SI というのはフランス語で国際単位(Le Système International d'Unités) のことです.なんか突然いろいろと難しい話になってきたように思うかもしれませんが,実は例ならきっといくつも知っています.たとえば,1000 を示す接頭辞はk と書いてキロと読みます.1000分の1 は m と書いてミリと呼びます.(実はコンピュータでは普通2進法の都合で 1000 ではなくて,1024 なのですが,以下はなじみのある 10 進法を使って説明します.)

接頭辞の例

倍数 記号 読み方 語源
1000000000分の1
n
ナノ
ギリシャ語で「小人」の意味
1000000分の1
μ
マイクロ
ギリシャ語で「小さい」の意味
1000分の1
m
ミリ
ラテン語で「1000」の意味
1
1000
k
キロ
ギリシャ語で「1000」の意味
1000000
M
メガ
ギリシャ語で「大きい」の意味
1000000000
G
ギガ
ギリシャ語で「巨人」の意味
1000000000000
T
テラ
ギリシャ語で「怪物」の意味

1KB は 1000 B で英文字が約 1000 文字記憶できます.そして,1MB は 100万 B,英文字が約 100 万文字分です.1 GB というのは 10 億文字の記憶ができる容量があるということです.

この接頭辞と関係ある言葉として,巨人達を示すギガンテスや,何か大きいものをいう場合にはギガ何々,という形でも使います.iPod nano という製品名 (意味としては「小さな iPod」でしょうか) など,和製英語ですが,小型バスをマイクロバスと言ったり,小型フィルムをマイクロフィルムというような用法もあります.

この k や M という接頭辞は B という単位だけにつくのではなく,長さの単位のm について km (キロメートル) として使ったり,重さの g について kg (キログラム),あるいは仕事の単位の W について,kW (キロワット)や MW (メガワット)などとしても使えます.

ここで1つの目安ですが,音楽などで使われる CD-ROM は 650 MB ほど記憶できます,また,映画の DVD-ROM は 4.7 GB 記憶できるものが普通です.ファイルのサイズを小さくするための圧縮という技術などがあるので,一概にはいえませんが,70 分の音声は CD の 600 MB 位,2時間の映画はDVD の 4.7 GB 程度で記憶できると考えてよいでしょう.あなたのコンピュータのハードディスクの大きさも2015 年の時点では,GB あるいは TB で示されるでしょう.

最初の質問に戻ると,ビデオのファイルの大きさが何メガ(バイト)? とか何ギガ(バイト)?  ということがわかれば,8GB のスティックにそれが入るかどうかということがわかります.

8GB の 3 文字の意味はこれでおわかりでしょうか? (数字の 8 は説明しませんでしたが,まあ,それはいいでしょう.)

まとめ


  • メイルを読み書きしたり,Web を検索することができるのなら,コンピュータを使う素地はできています.これができる方はあまりコンピュータを苦手に思わないことをおすすめします.
  • コンピュータの記憶できる量は英文字 1 文字を目安にした B (バイト)という単位で示される.
  • 大きな数や小さな数を簡単に言うために接頭辞があり,1000 を示す k (キロ) や 1,000,000 を示す M (メガ) などがある.
  • 8GB のスティックというのは約 80 億文字を記憶できる.目安としては2時間位の映画なら2本弱の記憶ができる.

Sunday, August 9, 2015

ビデオ字幕のタイミング作成の半自動化

概要


私はボランティア活動として誰もが無料で利用できる算数の解説のビデオの翻訳をしている.このビデオに字幕をつける作業に費やす時間が意外に多くて困っている.作業の流れ(ワークフロー)から,字幕作成時には既に音声の入ったビデオとそのスクリプトがあるので,これを使ってできるだけ自動で字幕を作成できないかと考えた.今回,タイミング作成のエンジンとして YouTube の transcript機能を使って,半自動で字幕タイミングを作成したところ,作業時間をある程度短縮することができた.YouTube のtranscript 機能では text フォーマットが入力となるので,srt ファイルを text にする filter を実装した.また,transcript 機能でタイミングを作成した場合,字幕に不自然な改行が入ることがある.そこでこれを除く機能も実装した.以前,13分のビデオの字幕のタイミング生成をした時,手動で 4 時間半程度かかったが,今回の方法でほぼ同じ長さのビデオの字幕タイミング作成を3時間弱程度に短縮することができた.今回作成したソフトウェアは new BSD license で公開しているので,誰でも自由に利用することができる.

字幕のタイミング作成の半自動化


私はボランティア活動で「どうして分数の割り算はひっくりかえしてかけるのか」とか「そもそも分数で割るというのはどういう意味か? 3で割るという意味ならわかるが,2/3 で割るとはどういう意味なのか?」のような算数の解説のビデオ作成をしている.その際に字幕も作成するのだが,このタイミングの作成にかなりの時間をとられている.例えば,13分のビデオの字幕タイミング作成に4時間半程度かかったことがある.

しかし,私には字幕のスクリプトがあり,そして音声も作成している.今回,これを使ってできるだけ字幕のタイミング生成を自動化できないかをSundayResearch のテーマとした.

私の友人の一人に音楽の mp3 ファイルをフーリエ解析し,そこからリズムをとり出すというソフトを作った人がいる.その人はダンスダンスレボリューションというゲームのマットを持っているのだが,ゲーム機は持っていないので,それで遊ぶために作ってみたということである.最初は字幕作成には音声の解析をすべきかと漠然と考えていてその人と議論をしたのであるが,その人と相談しているうちに,もしかしたらそういうソフトがフリーであるかもしれないから探してみては,ということになった.また,私の場合,日本語に対応している必要がある.

字幕作成のソフトを探したところ,YouTube の字幕作成を利用するというソフトがあった.多国語も自動で作成するというこのソフトは,YouTube の字幕作成機能を使って,音声のある言語の字幕を作成し,その字幕を Google translate で他の言語にするというものであった.

そこで実験として YouTube の字幕作成を試してみたのだが,私の音声では利用できるような精度の字幕の出力は得られなかった.しかし,タイミングだけ使えればいいので,スクリプトの文字列と自動生成された文字列に対して,
  • エラーがあるとした上でできるだけ一致する文字列を探せないか
  • 一致部分が得られた時に,その距離を最小化する最適化問題として考えられないか
という考えが議論の中から出てきた.しかし,実際に自動作成した字幕を見てみると,正解している文字列というものが少なく,この考えば難しいと断念した.

音声解析は面倒だろうということでできるだけしたくないと困っていた.私としては問題をできるだけ楽に,時間をかけずに解ける方法を考えるのも重要である.ただし,どうしてもしなくてはならないとなれば仕方ない.

昼休みに友人との議論を続けていたら (SundayResearch では,議論は主に昼休みやパーティなどでしか行なわない),私の場合,字幕作成が必要なのではなく,字幕のタイミング作成だけが必要であることに気がついた.そこで,字幕作成ではなく,字幕のタイミング作成で検索すると,YouTube にはtranscript 機能というものがあることがわかった.これは音声の text を与えると,音声からタイミングを生成して text を字幕にするというものである.

この入力は基本的にテキストファイル + αのもので,とりあえず手で srt ファイルから入力ファイルを作成してみた.するとかなり良い結果が得られた.ただ,出力された字幕ファイル中では勝手に改行が入ってしまうので,これを除く必要があった.そして,最終的には字幕の微調整は amara または camtasia で行うことにした.

つまり,私のワークフローにこの方法を組込むために必要なのは次の2つの簡単なフィルターである.
  • srt file から text 形式に変換するフィルター
  • srt file の字幕の改行を除くフィルター

実装


これらのフィルターを python で実装し,誰でも使えるように new BSD license で以下のページで公開している.


実験と結果


全てを手動で作業していた時にある 13 分のビデオの字幕作成には 4 時間 27分かかったが,同程度の長さ,似た内容のビデオの字幕をこの方法で作成したところ,2 時間 37 分でできた.1時間半以上の短縮はまずますの結果であると考えている.

今後


今後のビデオ作成にこの方法を利用していく予定である.

字幕のタイミング作成を更に時間短縮できる(楽な)方法はないかひき続き模索している.