米国で思いっきり働いてみたいソフトウェア・エンジニア大募集
Apple Watch 向けアプリ「iBacknine」の日本国内での使用上の注意

VideoShader をオープンソース化しました

昨年 iTunes ストアで公開し、オースチンの SXSW でもブースを持ってデモをした VideoShader ですが、このたび一周年を記念して、エンジン部分のソースコードをすべてオープンソース化しました。

https://github.com/snakajima/videoshader

Instagram などが行っている写真のフィルター(「Toy Cameraフィルター」や「アニメフィルター」)は、複数のフィルターを組み合わせて実装しますが、カメラから入ってくる映像をリアルタイムで処理する際には、高速に動作するフィルターをパイプライン上に繋げて実行する必要があります。

数年前までは、高性能なパソコンでしか無理でしたが、GPU 性能の向上により、ようやくスマフォでもそんな処理が可能になりました。

VideoShader は、スクリプト言語 VSScript を使ってビデオパイプラインを記述できるという手軽さを持ちながらも、実行時にはそれを OpenGL の GLSL にまでコンパイルして落とし込み、CPU をほとんど使わず、大半の処理を GPU に並列処理させるという設計により、iPhone5 で 720p/30fps の処理を可能にしています。

アニメフィルターを VSScript で記述すると、以下のようになります(VideoShader Composer を使って、インタラクティブにフィルターを作ることも可能です)。

{
   "title":"Cartoon I",
   "pipeline":[
       { "filter":"boxblur", "ui":{ "primary":["radius"] }, "attr":{"radius":2.0} },
       { "control":"fork" },
       { "filter":"boxblur", "attr":{"radius":2.0} },
       { "filter":"toone", "ui":{ "hidden":["weight"] } },
       { "control":"swap" },
       { "filter":"sobel" },
       { "filter":"canny_edge", "attr":{ "threshold":0.19, "thin":0.50 } },
       { "filter":"anti_alias" },
       { "blender":"alpha" }
   ]
}

これを VideoShader で実行すると、世の中の景色をアニメ化して見ることができるのです。下のビデオは VideoShader を使ったサンプルです。

OpenGL をいかに効率的に使うか、iOS 上でカメラから取り込んだ動画をいかに CPU を介さずに GPU に渡して処理させるかなど、さまざまなノウハウがぎっしりと詰まったソースコードなので、OpenGL や AVFoundation の勉強にも持ってこいだと思います。

【追記】Node.js アプリケーションを iPhone/iPad 上で動かすための neunode もフルにオープンソース化したので、こちらもよろしくお願いします(https://github.com/snakajima/neunode)。こちらには、iOS 上で HTTP サーバーを走らせるためのノウハウが詰まっています。

Comments

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

Post a comment

Your Information

(Name is required. Email address will not be displayed with the comment.)