字幕情報を利用した Python による動画自動編集 (Videogrep)

昨日 Videogrep というツールちょっと話題になっていたので使ってみました。字幕情報 (.srt 形式) を用いていわゆる Supercut と呼ばれる編集手法を自動化する Python スクリプトです。

Videogrep: Automatic Supercuts with Python – Sam Lavigne

Supercut とは同じ言い回しやフレーズを言っている(あるいは動作を行っている)場面を寄せ集めてテンポのいい合成映像(モンタージュ)を作ることです。コミカルな演出を狙って使われることが多いようですね。

日本語での検索ワードを知らないので分かりやすい例をパパッと挙げるのは難しいですが、この辺でいかがでしょう。

▶ ことりちゃんのホノカチャン集 完全版 - YouTube

ポルノグラフィティの曲から「僕」だけを集めてみた - ニコニコ動画:GINZA

英語のみですが Supercut 動画だけを集めたサイトもあるようです。

Supercut.org — Home of the Obsessive Video Montage

インストール

事前準備

まず ffmpeg が必要です。音声ファイルを書き出す際 ogg 形式を利用するらしいので libvorbis エンコーダも必要です。

  • OS X & Homebrew の場合は以下のコマンドで一発インストールできます。
$ brew install ffmpeg --with-libvorbis

Linux の人も apt-get あたりを使えば簡単にインストールできるのではないでしょうか。Windowsの人は MinGW なり Cygwin なりを使うのでしょうがちょっと大変かも知れません。

続いてここのrequirements.txt に記載されているライブラリ群をインストールしましょう。

$ git clone https://github.com/antiboredom/videogrep
$ cd videogrep
$ pip install -r requirements.txt

moviepy やら pytube やらリッチなライブラリに依存してますな…

脱線

moviepy 単体でも動画編集やネタ GIF を作るのに便利です。以下の記事は moviepy を使ってネタ GIF を作る技法を惜しみなく伝えており非常に面白いです。

Making GIFs from Video Files with Python - del( self )

上の requirements.txt には載ってないですが moviepy でリサイズを使おうとすると PILscipyOpenCV を必要としたと思います。Videogrep ではリサイズ機能は使わないんですが欲しくなることもあるのでインストールしておくといいでしょう。

$ pip install pillow

使ってみる

今のところ Python スクリプトとしてのみ使えるようです。git clone して videogrep.py のあるフォルダに降り、

$ python videogrep.py --input /path/to/{target.{mp4|srt}|folder} --search 'search phrase'

というのが基本的な使い方になります。このコマンド一発で、あとは 'search phrase' に引っかかった場面を supercut した動画を吐き出してくれます。ここで注意しなければならないのは /path/to/target.{mp4|srt} のあるフォルダには同名の動画or字幕ファイル target.{mp4|srt} も置かれている必要があるということです。これはやや不自由ですがそういう規約として作ったみたいなので受け入れるしかないです。

しかし利用例として誰にでも手に入れられる日本語動画と字幕がないかと探してみたのですがなかなか難しいですね。映画字幕 というサイトもあるようですが元の映画を持ってないと厳しい。

ところで関係ないですがここで羽生さんの TEDxTokyo の動画を貼っておきます。

まず YouTube の字幕ファイルは(存在すれば) videogrep/tools/getyoutubecc.py を使えば手に入ります。

$ python getyoutubecc -v [動画のID] -l ja
[動画のID].srt というファイルができている

動画をダウンロードするには videogrep/tools/videodownloader.py が使えますがこれは投稿者のビデオ一覧からまとめて落とすためのものらしいので一つの動画を落とすのには不便です。pytube がせっかくインストールされているので自作のスクリプトでごにょごにょしてみるのもオツでしょう。getyoutubecc にしろ videodownloader にしろ簡単なスクリプトなので Python 初心者の人は読んでみるともしかしたら勉強になるかもしれません。

字幕ファイルと動画ファイルが揃ったら同じ名前にリネームし、あとは最初の使い方で述べたようにコマンドを実行すれば自動的に変換されます。

$ python videogrep.py --input habu.mp4 --search "ですね"
Creating clips.
25.664 to 27.397: 私はですね 普段はほとんど
29.495 to 31.571: こうやって話をするのがですね
34.069 to 37.341: せっかくですね こういった機会を頂きましたので
41.244 to 46.575: 今日はですね 棋士というのがどんな風なプロセスで
56.246 to 59.056: 「読み」というものなんですね
69.238 to 71.865: 基本中の基本というのがですね
84.153 to 87.258: その三手の読みということですね
87.258 to 89.967: これは将棋に限らずですね
92.013 to 94.164: 結構そういうことをですね
97.868 to 99.575: 通常の場合はですね

... (中略) ...

MoviePy: building video file supercut.mp4
----------------------------------------
Writing audio in supercutTEMP_MPY_to_videofile_SOUND.ogg
Done writing Audio in supercutTEMP_MPY_to_videofile_SOUND.ogg !

Writing video into supercutTEMP_MPY_to_videofile.mp4
|#####-----| 1396/2747  50% [elapsed: 00:39 left: 00:38, 35.53 iters/sec]Warning: in file supercut.mp4.tmp0.mp4, 2764800 bytes wanted but 0 bytes read,at frame 1397/1398, at time 58.21/58.22 sec. Using the last valid frame instead.
Done writing video in supercutTEMP_MPY_to_videofile.mp4 !

Now merging video and audio:

MoviePy Running:
>>> ffmpeg -y -i supercutTEMP_MPY_to_videofile_SOUND.ogg -i supercutTEMP_MPY_to_videofile.mp4 -vcodec copy -acodec copy supercut.mp4
... command successful.

Your video is ready ! Fingers crossed for the Oscars ! 

--output filename で出力ファイル名を指定しないとデフォルトでは supercut.mp4 というファイルが出来上がります。ちゃんと自動カットされているでしょうか?

弁解: 羽生先生を選んだのはたまたま字幕が付いていたというだけで他意はありませんスイマセン。10 分弱のプレゼンで 40 回「ですね」と言っていたのでおもしろおかしく抽出した面は否めませんが、さすがに趣味が悪いのでアップロードは控えておきます。動画を手元に置いておく習慣がないのでテストデータを探すのにも一苦労したという話でした。

高度な使い方

Videogrep: Automatic Supercuts with Python – Sam Lavigne

複数の動画ファイルを一度にまとめたり、pattern を利用して文章構造を解析することも可能なようです。また頻出ワードを探すのには N-gram などのような手法でコロケーションを調べたりするとよりメカニカルに編集できて面白いかもしれません。ちなみに pattern でできる文章構造の解析は言語が限られている(英語の他にも複数言語使えるが日本語はない)ようなので日本語をちゃんと解析したかったら自力で MeCab を叩くことになるでしょう。

おまけ:srt ファイルの作り方

動作は確認してないですが HN でいくつかの字幕作成エディタの名前が挙がっています。

Aegisub Advanced Subtitle Editor

アニメ字幕作成のスタンダードらしい。Windows, OS X, Linux すべてで動作する

Subtitle Editor

GTK+2 製の *nix 環境で動作するエディタ

Home [VisualSubSync]

Windows

subler - Google Project Hosting

Mac OS X 向け

Gnome Subtitles | Video subtitling for the GNOME desktop

これも *nix 環境向け