RICOH THETA Sの動画機能を4k相当に拡張する(waifu 2x で)

概要

RICOHのTHETA Sは1920 x 960 30FPS(29.97)のEquirectangular形式のmp4動画を作ることが出来ます。素晴らしい!

しかし、この動画をHMDやパノラマビューアーで見てみると、「動画の解像度やビットレートがもっと高かったらなあ」と思うときもあります。
そこで、今年話題になった良い感じの超解像ソフトであるwaifu 2x を使って、擬似的に4k動画を生成してみようという試みです。

結論から言うと、多少時間は掛かりますが思った以上の効果を発揮するので、お気に入りのTHETAで撮った動画はアップスケーリング版を作りたくなりそうです。

作り方

waifu2x-caffeが 2015/7のバージョンから実写にも対応しました(すごい)

機械学習を利用した画像の高品質拡大ツール「waifu2x-caffe」が実写にも対応 
http://www.forest.impress.co.jp/docs/news/20150702_709790.html

しかもGUI版であっても、フォルダ内の静止画を一括変換できます(かなりすごい)

なので、今回はwaifu2x-caffeを使います。

作り方としては ffmpegでthetaの動画を静止画連番に書き出して、waifu2x-caffeに突っ込んで3840x1920にして再度ffmpegで結合する という流れです。これだけで分かった人は結論まで読み飛ばして問題ありません。

以下、入力をinput.mp4として、最終出力をoutput.mp4とします。

1.動画を音声と静止画連番に分離

ffmpegを使います。

Zeranoe FFmpeg - Builds http://ffmpeg.zeranoe.com/builds/win64/static/
からffmpeg-20151227-git-baf4c48-win64-static.7zを使いました(最近のバージョンなら他でも良いと思います)

音声を分離

ffmpeg -i "input.mp4" -vn "output.wav"

静止画連番ファイルをなるべく高画質に出力 (ffmepgのデフォルトjpeg切り出し、画質悪い…)

ffmpeg -i "input.mp4" -f image2 -vcodec mjpeg -qscale 1 -qmin 1 -qmax 1 img_%07d.jpg

2.waifu2x-caffeで連番静止画を拡大

waifu2x-caffeはこちら github.com

windows用実行ファイルの直接リンクはこちら https://github.com/lltcggie/waifu2x-caffe/releases/download/1.1.1/waifu2x-caffe.zip

GUI版で行うなら f:id:izm_11:20151231101845j:plain

こんな感じです。フォルダ単位で指定するのと、photoモードを選ぶのが肝心ですね。
仮に今回は .\res\以下に img000000.pngからimg000001.png img000002.png…という連番pngを出力することにしましょう。

処理速度としてはMaxwellGeforce GTX860M で大体一枚あたり6秒くらいでした。
一分あたり10枚のpngが処理できる感じです。めっちゃ不安になるくらいGPUファンが回ります。

1時間で20秒分のフレームが処理できるので、丸一日回して8分くらいですね!

3.ffmpegで再結合

エイっと結合します。

ffmpeg -r 29.97 -i .\res\img_%07d.png -i output.wav -s 3840x1920 -vcodec libx264 -b:v 50M .\res\output.mp4

このままガバっと2.で出力した連番pngと1.で分離した音声を合わせて4k動画をH264で生成します。
このくらいの解像度とビットレートで、手元のNexus 5(Android 5.1)でハードウェアデコード付きで再生出来ることを確認しました。

エンコードオプションは、ビットレートや2passなどの改善の余地がありそうです。詳しい人教えてください

これも良いかも(60Mbpsくらい)

ffmpeg -r 29.97 -i .\les\img_%07d.png -i output.wav -vcodec libx264 -pix_fmt yuv420p -crf 14 -preset veryfast -tune zerolatency,film -movflags +faststart .\les\output.mp4

結果

THETAのサイト内、公式動画サンプルで試してみました。 theta360.com

大体、解像度が足りないところがキュービックリニアっぽく補完されます。

http://izm.totheist.net/archive/theta_img/sample1.JPG

鉄塔付近や、ボーダー柄の服などのjpegノイズがうまいこと消えています。すごい。 http://izm.totheist.net/archive/theta_img/sample2.JPG

japanese karate(以下URLはリコーのサンプル動画への直接リンク)は、なぜかビットレートが5Mbps以下なので https://theta360.com/ja/gallery/sample/videos_s_3.mp4

こんな風に低ビットレート起因のjpegノイズが消えます。べんり。 http://izm.totheist.net/archive/theta_img/sample3.JPG

まともに4kパノラマを作るなら、ハードウェアが安いので10万くらい、ソフトウェアが安いので3万くらいするので、theta sだけでアプコン出来るのはコストメリットも、撮影の手間も少なくて良い感じです。

結論

  • waifu2x-caffeの超解像はphotoモードを使うと実写画像にも効果がある事を追試した
  • waifu2x-caffeの超解像はEquirectangular形式の画像でも効果がある事を確認した
  • 4k相当のパノラマ動画を安価に作れる可能性が出てきた
  • 各種動画サイトで配布されているパノラマ動画が低画質な時も、この方法で画質を向上させられる可能性が出てきた

  • いろいろ追試中です。意外と動画で確認したら、画質改善の効果を確認しにくいかも。そして、もしかしてRGBモードで非フォトの方が効果が分かりやすいかも…

参考URL

waifu2xでアニメをアップコンバートする - unsuitanの日記

ffmpegの使い方:tech.ckme.co.jp

最後に

私事ですが、引越しと転職を最近しまして、それに伴う出費により、食糧事情が悪化しております。 なにとぞ下記URLのウィッシュリストからご支援頂けると、めちゃくちゃ豪華なスパゲティを食べられます('-' *)

www.amazon.co.jp

RICOH THETA SのUnity上でライブビューパノラマ展開まとめ(メモ)

1.概要

前回のまとめ以降、ようやく触る時間と機材が出来たのでUnity上でTHETA SのHDMI Liveviewを追試しました。

イメージとしては凹みさんの

tips.hecomi.com

です。

  • THETA Sの取得できる画像、動画フォーマット一覧
  • HDMIキャプチャ方式のハードウェア紹介
  • Unity上でのHDMIキャプチャ経由の動画読み込み方法
  • Unity上での Dual Fish Eye → Equirectangular変換

みたいな内容です。

2.THETA Sの取得できる画像、動画フォーマット一覧

こんなイメージです。 f:id:izm_11:20151105014235j:plain 今回はHDMI Dual FishEyeを使います。

非リアルタイム

  • 静止画 5376 x 2688 Equirectangular
  • 動画 1920 x960 Equirectangular

リアルタイム

  • Dual Fish Eye (HDMI 1920 x 1080 インタレース60FPS)
  • Dual Fish Eye (USB2.0 UVC 1280 x 720 30FPS)
  • Equirectangular (スティッチ済みライブビュー、THETA API 640x320 MJPEG ストリーム)

3.HDMIキャプチャ方式のハードウェア紹介

HDMIからのキャプチャボードは色々な種類があります。最近だとスプラトゥーンの録画などでも皆さま買われてますが、あれも使えます。 OSから見た時に

  1. UVC(Webカメラ)として見える物
  2. キャプチャボード(direct showフィルタ)で見える物

という2種類の物が今回は使えます。 市場に出ているのは殆どすべてが2.です。

a.UVC-HDMIキャプチャボード Febon198(今回の秘密兵器!)

以下の2個をセットで買いましょう!

Febon198 http://www.amazon.co.jp/dp/B014QQXKVO/armneon-22/www.amazon.co.jp

HDMI Signal Converter

www.banggood.com

Febon198は OSからはUSB3.0の1080Pで60FPSなWebカメラとして見える、Febon198内の遅延は50-80ms程度(*1)、というトンデモないスペックの一品です。

デメリットは

などです。

Febon198はプログレッシブ信号しか受け付けないので、THETA含むデジカメからのインタレースな1080iなHDMI信号を読ませるには

HDMI Signal ConverterみたいにHDMI信号をなんでも1080Pに変換してくれるオモチャボードを通しましょう。

PCモニタ出力やXBOXの出力は1080Pなので、そういうのをキャプチャするだけならオモチャボードは不要なのですが、デジカメからの信号はインタレースが多いようです。ご注意ください。

セットで買わないと、こんな風に寝込む羽目になります。

b. 定番:BlackMagic Intensity Shuttle

ご存じ定番のBlackMagic!
なんでも読めるし、SDKも公式配布でフレームごとガバっと持ってこれて最高です。

http://www.amazon.co.jp/dp/B007ZDHDRS/armneon-22/www.amazon.co.jp

これを使えば大体のHDMI信号は読めます。ド定番!最高!!

b. その他キャプチャボード

遅延が大きいハズレもあったりする印象。2万円程度?

TL見てて動いたという話があるのはGC550など

http://www.amazon.co.jp/dp/B00ZOXYQ26/armneon-22/www.amazon.co.jp

4.Unity上でのHDMIキャプチャ経由の動画読み込み方法

a. UVCキャプチャボード

Unity標準のWebCamTextureを開いて再生するだけです! こんな感じのスクリプトを、適当にUnityのPlaneにアタッチします。 Thetaの再生用 · GitHub

b. DirectShowフィルタキャプチャボード

ここが結構大変な印象です。

BlackMagic系や、一般的なキャプチャボードなら AVPro Live Camera

https://www.assetstore.unity3d.com/jp/#!/content/3683 を使えば大丈夫だと思います。トライアル版で必ず事前に動作は確認してください。

尚、このアセットですが 200ドル と、比較的お高いです

(だからこそFebon 198を今回お勧めしてます。こっちは読むのタダですからね!) (他に安価な手段があるかもしれません。情報お待ちしてます!)

5.Unity上での Dual Fish Eye → Equirectangular変換

凹みさんの方法(前述)と

Stereoarts(Noraさん )の方法があります。 Stereoarts Homepage (Theta Shader Pack)

今回は後者のNoraさんのTheta Shader Packを試しました。

手順を念のため録画しました。一発撮りです。

www.youtube.com

Theta shader Packと、このスクリプトで作業しました。(部屋が散らかっていてお恥ずかしい) Thetaの再生用 · GitHub

Unity上でビルドしたexeを動作確認用に置いておきます。 Febon 198か、USB接続のLiveviewモードなら、再生できると思います。 https://copy.com/L6wAq9dYdIOrIHp1

6.今後やりたいこと

生放送時のパノラマ配信インフラがどこかにないかなあと気になってます。ちゃんとした法人契約じゃなくても、個人でちょろっと試せる場があると嬉しいです。

補足

HDMIキャプチャボード越しの遅延チェック

*1:本家スペック表による。 Theta→Febon198→Unityの遅延はこんな感じで測ると260-300ms程度です。どうやらThetaの絵を読み込んでHDMIから出すまでは、100ms以上のタイムラグがあるようです。

THETA SのUSBライブビューモードの認識手順

USBケーブルをPCとつながずに 写真動画切り替えボタンを押しながら電源を入れる→LiveviewモードになってからPCにUSBケーブルを刺す

という順番です。意外と忘れがちです。

ライブビュー経由で見る時の画質劣化

Dual Fish Eyeの時の実効解像度から考えて

  • HDMI経由で130万画素相当
  • USB経由で50万画素相当

くらいまで欠落してます。1920x960のスティッチ済み動画と比べるとHDMI経由でも3-4割くらい落ちてる雰囲気です。

RICOH THETA S 発売したので、個人用メモ

概要

ついに念願の動画も取得できる安価で安心な全球カメラが出ました!

TL上ではハックが進んで有益情報も多いですが、twitter上の内容で散逸してしまうと勿体ないので、メモとして記載します。

Unity上で見る方法

tips.hecomi.com

USBキャプチャ(720P 15FPS)

UnityのWebCamTextureからそのまま読めたと思います。
後は上記凹みtipsさんの記事を確認すれば大丈夫そうです。

HDMIキャプチャ(1080P 30FPS)

まずハマりがちなのが、「Modeボタンを押しながら電源ONでLiveモード(HDMIパススルー)」を選んでやること。

BlackMagicのIntensityとかのキャプチャボードで良いやつを買って Blackmagic Design: Intensity

AVPro Live Camera(200ドル) https://www.assetstore.unity3d.com/jp/#!/content/3683

を買うと言うのが一番楽なようです。少しお高いですが、安心感があります。

この時の遅延は最小で200ms位?

また、directshow互換で絵を持ってくることが出来るキャプチャボードもあるので、

www.amazon.co.jp

これもwindows上だと何とかしやすそうです(2万円程度) ただ、WebcamTextureでは読めないはずなので、上記AVPro Live Cameraが必要?

個人的に安くて気になるのがUVC互換のUSB3.0-HDMIキャプチャボード

FEBON: FEBON198 USB3.0 UVC HDMI Grabber Card User Manual

www.youtube.com

このキャプチャスティックが額面通りの性能なら、OSからはUVC対応のwebカメラとして認識されるので、UnityからそのままWebCamTextureとして取得できる気がします。

USB,HDMI併用時の3脚固定方法

スマートな方法だとこれが良さそう?

これを買って上のプラ部分を外す感じで www.amazon.co.jp

「いかにも使えそう」な、これは各端子と微妙に干渉するので不適

www.amazon.co.jp

360度配信向け機材

適当なスマホ+Cerevo LiveShell + THETA Sが今のところ良さそう。

ケース

純正ケースがギッチギチで凄く機動性を損ないます。
(一日差し込んで伸ばすと大丈夫という意見もあり)

最高にお勧めのケースは現在絶賛売り切れ中みたいです

www.amazon.co.jp

その他tips

Blenderのスフィアマップ適用

パノラマ合成

長時間HDMIパススルーで使うには、USB給電にして1A以上出るモバイルブースターに繋ぐのも必要ですが、    その前に本体を満充電にしておく。そうしないと、充電の熱で10分くらいで映像が止まったりする…
(逆に、満充電にしてUSB給電モードで使うと30分は連続で動きました)

2015/8現在のOculusRift+UnityのノートPC対応 開発動作環境構築

概要

OculusRift CV1(コンシューマ向け)の発表も近づいてきたので、OculusVR社は自社OculusSDKやOculusRuntimeを積極的にアップデートしています。

また、最新版の各種ゲームエンジンでは組み込みでOculusRift対応を進めています。(UE4は前から、Unityは5.1から)

そんなタイミングですが、最新のOculusSDK0.7以降では動作未保証になってしまったOptimusノートPC+Unity5.1でOculusRiftDK2の動作環境を作ってみようと思います。 色々検討した結果、今回はExtendModeなら最低でも動きそうな0.5.0.1環境にします。

プログラマ向けの手順をこれから書いていくので、分かる人は読み飛ばして「最後にまとめ」だけ読んで頂ければと思います。

(主婦ゆに本の、Unity5対応版も購入者は手に入れられるはずなので、ご検討ください)

このエントリに書かれていない事

  • 最新のUnity5.1以降で導入されたUnityネイティブのVR support
  • OculusRuntime 0.7対応

準備する物(もしくは、動作環境)

UnityとOculusRuntime0.5.0.1はインストールしておいてください。 下の2個はダウンロードだけしておいてください。

環境構築

一発撮りで申し訳ないですが、Unity上での操作手順を動画で撮ってみました。 8分程度です。

www.youtube.com

上の動画で作った動作確認用exe

OculusRuntime 0.5で動作確認済みです。
このexeの価値は、Optimus環境でOculusConfigUtilityの机と椅子のデモ(Show demo scene)が、クラッシュする事が多いので、 Optimus機の方は、机と椅子のデモ代わりの普通の動作確認にお使いください。

https://copy.com/Y22DH1oo7bXSSvuB

最後にまとめ

  • Optimusノートで動かす可能性があるコンテンツは、現時点でSDK0.5.0.1で作るしかないので、その環境を作る
  • Unity5.1以降であっても、VR Supportを使わなければ、普通に OculusUnityIntegration.unitypackage をインポートできる
  • 0.5.0.1対応のOculusUnityIntegrationをUnity5.1で使う場合は、パッケージをインポート→自動のUnity5向け変換をした後に、Assets/OVR以下のスクリプト内で #if UNITY_5_0 という定義があるので、そこを UNITY_5_0 || UNITY_5_1 などに書き換える必要がある
  • Optimus機の場合は DirectToRift.exeを右クリックして、グラフィックプロセッサと共に実行→高パフォーマンス で起動する必要がある