GoPro Hero4 Black Edition (v03.00) の 4K@30pを出先で (とりあえず)シェアする方法@iOS (9.2)

4Kもなんとかしたい


先日 GoProのハイビットレートフォーマットを出先で共有する方法について書いた.

gt1000.hatenablog.com

上記は iMovieを使う方法で,無料でできるのだが 4Kフォーマットには対応していない.GoPro Appを使うと,撮影時に同時に生成される低解像度の Proxyファイルを見ることはできる.が,やはりシェアをすることはできない.

ちなみに Proxyファイルは 4Kの場合は撮影時に同時に作成されるが,1080@120pとかだと Appで開く際に App内で作成される.

動画変換 for iPhone


そこで,今回有料アプリを使って解決してみた.「動画変換 for iPhone」という 2016/01/30時点で 250円,★ 2つのアプリである.もっと適したモノがあるのかもしれないが,「コレで実現できた」ということで記録しておく.

ちなみに★2つである理由のメインは「変換後にアプリのデータをカメラロールに転送できない」ことによるものらしいが,自分は (設定により自動的に) 送ることができるので何が問題なのかイマイチ分からない.別の理由として挙げられている「上手く変換できない」というのは自分も出くわした.なんと,iPhone6sで取った動画 (1080@60p)の変換が完了せずエラーになるのだ.こりゃダメだ,が,自分には関係ない.

気を取り直して話を続ける.タイトルに (とりあえず) と書いたのは 4Kそのものではなくなるからだ.とはいえ,現時点ではネイティブ 4Kのスマホ/タブレットが存在しないワケで,たいした問題ではないだろう.変換後の解像度としては 1080p/720p/576p/480p/360p/240pが選べ,自動的に 720pになってしまう iMovieに比べると自由度が高い.また,fpsは維持される,ということも特筆すべき点だろう.自動的に 30pになってしまう iMov (ry 逆に「fpsの変更ができない」というのは再生環境を選ぶ可能性がある.実際 120pの動画を Nexus7(2013)に転送すると,ビットレート的には問題ないハズなのだが微妙に引っかかって再生される.iPhone6sでは問題はなく,スロー再生も可能.

一点気になるのは,解像度に関わらずサイズがほとんど変わらない点だ.コレはビットレートを優先する仕様になっているからと思われる.最高ビットレートは「ビデオクォリティ」という設定項目で最高品質と思われる「カスタム設定 98%」を選んですらジャスト 5Mbps (これ以外の設定は試していない),iMovieよりちょい低い.正直「んー」というレベルだが,まぁ出先のシェア目的に文句を言っても仕方がないしスロー再生がしたいなら選択肢は無い.

変換速度


さて,iPhone6sの 1080@60pは喰えない (吐ききれない)が GoProのフォーマットは問題ないようだ.そして出力フォーマットは前述の通り.とりあえず 1080@30pで吐いておけばよいだろう.変換後のデータはカメラロールに吐き出されつつ,アプリ内にも保存されるので時折削除することをオススメする.

で,変換速度のベンチマークだが,取りあえず前回のファイル (1080@120p)で取ってみた.

入力ファイル 1080@120p (7分48秒 3.52GB,7.7MB/sec,61.6Mbps)
変換時間   13分02秒 (4.6MB/sec) 
出力ファイル 1080@120p (7分48秒 289.9MB,0.62MB/sec,4.96Mbps)

変換終了予測時間がリアルタイムに出るので画面とにらめっこし続ける必要は無かったが,iMovie (8分30秒)の約1.5倍と結構時間がかかった.ただ,iMovieでの変換に比べて (自動的にカメラロールにはき出される分) 手間が一つ減るのはちょっと嬉しい,のか.

RealSense R200,Mac OSXで動作確認

f:id:gt1000:20160111040544p:plain

忘れていた.


入手自体は 1stロットで手に入れていたのだが,すっかり忘れていた.

が,F200に関して質問が来ていたのを機に取り組んでみた.

やったこと


一言で言えば,前回の改変.

gt1000.hatenablog.com

F200に対応した,と言っているが上手く動いていない libuvcを持ってきて,改変して F200を動かしたのだが,コレに R200の制御を盛り込んだ.

手順


1.Product IDのチェック

オプションキーを押しながらメニューバー左端のリンゴマークをクリックして一番上のシステム情報を選択.USB3.0に R200が繋がっていることを確認し,製品 IDの項目を調べる.R200は 0x0a80.ちなみに F200は 0x0a66.

2.フォーマットのチェック

VendorID (Intelは 0x8086)と ProductID (R200は 0x0a80) で uvc_find_deviceして見つけたデバイスを uvc_open2して手に入れたハンドラで uvc_print_diagを呼んでフォーマットを調べる.uvc_open2の最後の引数 camera_numberは 0:IR 1:Depth 2:RGBの模様.GUID (フォーマットID),size (解像度),interval (fps)くらい把握すれば OK.ちなみに uvc_open2はググっても出てこないので,コレがカスタム libuvcのキモの一つと考えられる.

3.うまいとこ組み込む.

上記で調べたフォーマットの情報を,既にあるフォーマット情報の羅列に並列して記述する.

4.呼び出す.

Depthは camera_number 1で,GUIDは Z16 (というアスキーデータで始まるバイナリ列).名前の通り 16bit値のようだが,ダイナミックレンジは調べていない,というかどうも小さいので生値を 32倍させたのがサムネイルに使ったスクショ.ただし 32倍は少々やり過ぎのようで,遠距離がサチっている.

IR画像は camera_number 0,二つあるうちセンター寄り側の IRカメラの画像.この IR画像モードではレーザープロジェクタは焚かれない.また camera_number 1の Depthとの同時動作はできない (=Depthと IRは排他).GUIDは Y12I,Y16,Y8I,Y8で,おそらく「輝度のみの1ch,ビット数,インターレースか否か」ということだろう,90fpsがある,というのが特記事項か.

RGB画像は camera_number 2で,GUIDは普通の YUY2と,おそらくセンサ生データの RW10 (ただし 8bit表示される.詳細未検討.設定は唯一 2400x1081@30fpsのみ)の二つ.YUY2で 60fpsが使える解像度は 640x480と 320x240のみ,とか画質が低い,とか率直に言って良いところがない.

既知の問題


F200は RGBと Depthの同時呼び出しが問題なく動いたのだが,R200は今のところどちらか片方しか呼ぶことができない.具体的には RGBをスタートさせたあとに Depthをスタートさせてもコールバックが呼ばれない.どうも Depth側がガッツリ刺さっているようで,終了処理自体は普通に抜けているが上手く処理できていない.この状態になると抜き差ししないと再度使用することはできない.

とりあえず動いたので,以上. F200に引き続き,OSXのネイティブで R200を動かした (ことを公表した)のは世界初じゃね?

GoPro Hero4 Black Edition (v03.00) のハイビットレートなフォーマットを出先でシェアする方法@iOS (9.2)

動機


自宅の動画編集マシンにかけて処理する前提の場合,撮影時にフォーマットを気にする必要は無い.しかし出先ではハイビットレートなフォーマットはハンドリング性が悪く,GoProアプリ内でなら確認はできるのだが,シェアは一筋縄ではいかない.だからといって低ビットレート撮影では事後の編集に支障をきたす.ということでハイビットレートフォーマットを出先でシェアする方法をまとめておく.

なお,本記事におけるフォーマットは 4K@30p 1080@120p 720@240pに限定する.それ以外のフォーマットには「そもそも一般的では無いケース」と「iOS側でネイティブで対応しているので問題ないケース」があるが,ともに情報の価値は低いと考え省略した.

使用した iOS機器は iPhone6s.

いきなりまとめ


確認のみなら GoProアプリで OK,シェアしたかったら lightning USBカメラアダプタ経由 (など)で取り込んで iMovieで変換すれば 1280x720@30pになる.4K@30pのシェアはアキラメロン.

データの取り込み


・GoProアプリ経由

ファイルを選択するとサポートしていないフォーマットである旨が出た後,再生できるようにフォーマット変換をしてくれる.勿論元データはそのまま.しかし,この変換後のデータはドコに存在するのか不明 (おそらくアプリ内でテンポラリに持たれる),かつ iOS機本体でハンドリング (Clip/Share/Download)をすることはできず,GoProアプリ内での再生のみで行き止まりになる.従って GoProアプリではファイル内容の簡単な確認のみ行うことになる.

・lightning USBカメラアダプタ経由

「読み込む」でデータのダウンロード (本体へのコピー)は可能 (写真アプリにビデオとして取り込まれる).サムネイルは出る.しかし写真アプリで再生しようとしても,ぐるぐるが出続けるだけで進展しない.

iMovieによるダウンコンバート


ここからは lightning USBカメラアダプタ経由で取り込んだ後の話となる.iMovieを利用すると,1080@120pと 720@240pは 1280x720@30pに落とすことができ,ファイルサイズも 1/10程度に減らすことができる.iMovieのビデオメニューで目的のファイルを選択し,シェアアイコンをタップして iMovie Theaterというアイコンを探す.コレを選択するとビデオの名前の入力を求められた後,変換がかかる.変換後のデータは Theaterメニュー内に現れる.コレを選択し,さらにシェアアイコンをタップして「ビデオを保存」を選択することにより,写真アプリに戻すことができる.

4K@30pも同様の操作を行うことはできるが,できあがる動画ファイルは無音の黒画である.

参考値


入力ファイル 1080@120p (7分48秒 3.52GB,7.7MB/sec,61.6Mbps)
コピー時間  3分39秒 (16.4MB/sec) (from SanDisk Ultra 64GB to iPhone6s)
変換時間   8分30秒 (7.0MB/sec) 
出力ファイル 720@30p (7分48秒 311.1MB,0.66MB/sec,5.45Mbps)

ざっくりとしたオーダーで,撮影時間の半分くらいの転送時間が必要で,撮影時間くらいの変換時間が必要,といった感覚になるようだ. 単純に圧縮率のせいだが,実際のところ画質はかなり厳しい.

おわりに


データサイズは劇的に小さくなるが,変換にはそれなりに時間がかかる.勿論解像度もフレームレートも落ちている.ただ友人とその場でシェアしたい,という場合に備えて iMovieが使えることを覚えておくと良いかも.

Font-Awesome on Hatena

これはイイ.


マークダウン記法について調べていたら,ステキなページを見つけた.

Font-Awesomeというステキなアイコンを利用する方法.

qiita.com

本家 (提供元) はこちら.

fortawesome.github.io

Hatenaで使うにはどうするかなー,と思ったら簡単だった.

初期設定


デザイン -> カスタマイズ -> ヘッダ -> タイトル下 に HTMLが記述できるので,Font-Awesomeの CSSをココで引っ張ってこさせる.

別にココでなくても良いかもしれないが,記事毎に設定しないで済むように共通フォーマットの箇所に埋め込んでおくことが重要.

<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet" />

使い方は簡単


なら <i class="fa fa-thumbs-o-up" style="font-size:1em;"></i>と記述するだけ.

font-sizeでサイズ調整も可能.

フォントの種類に関しては本家ページ参照のこと.

OSXでの ddによる書き出し

あらかじめやっておくこと


diskutil list で書き出し先ディスクを確認する.

MBP:/ user$ diskutil list
 (略)
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.7 GB    disk3
   1:             Windows_FAT_32 boot                    62.9 MB    disk3s1
   2:                      Linux                         3.9 GB     disk3s2

外付け SDカードリーダーを使用しているが,disk3になっていた.パーティション構成から想像が付く方もいるかもしれないが,Raspberry Piである.

接続した際に自動的にマウントされるが,このまま ddを走らせてもエラーになるのでアンマウントする必要がある.

単一のパーティションを umountする diskutil unmountでも ディスクそのものを認識させなくする diskutil ejectでもなく, diskutil unmountDiskを用いること.

MBP:/ user$ diskutil unmountDisk /dev/disk3
Unmount of all volumes on disk3 was successful

ddについて


ディスク名の先頭に rを付けることにより Unbuffered Modeになる.

また bs=1m などでブロックサイズを 1m程度で設定すること.

この二つを設定しないと,とてつもなく遅くなる.

MBP:/ user$ sudo dd if=some_image_file.img of=/dev/rdisk3 bs=1m

dd中の進行状況の確認方法.

別コンソールを用意するなどして killallでシグナル INFOを送ると dd側のプロセスでログを吐く.

OSX以外では USR1らしい.

MBP:/ user$ sudo killall -INFO dd

73+0 records in
72+0 records out
75497472 bytes transferred in 11.541480 secs (6541403 bytes/sec)

もしくは Ctrl-T.別コンソールが要らないのでこっちの方がお手軽か.

書き込み完了後


マウント可能な場合は自動的にマウントされ,OSX独自の隠しファイルが作成されてしまう.

念のため消した上で,今度は diskutil ejectする.

MBP:/ user$ rm -rf /Volumes/DISK_NAME/.*
rm: "." and ".." may not be removed
MBP:/ user$ diskutil eject /dev/disk3
Disk /dev/disk3 ejected

以上.

Kinect v2,Mac OSXで動作確認

f:id:gt1000:20150508205527p:plain

次は Kinect v2.

本体は GW直前にヤフオクで入手.しかし Adapter Kitの入手が鬼門だった.
ヨドバシで買うつもりが GW突入と同時に品切れ.取り寄せになるも物流は止まる.そして今朝 Yodobashi.comで在庫の復活を確認し,予約取り置きしてもらった.

 

続きを読む

RealSense F200,Mac OSXで動作確認

f:id:gt1000:20150503160144p:plain

 

Intelの RealSense F200を入手.
Windows8.1で サンプルを動かして動確したのち,MBPで動作させた.
最低動作環境に "4th Generation Intel Core processor or higher"とあり Sandy Bridge & Ivy Bridgeでは動かないかとヒヤヒヤしたが,そんなことは無かった. 

 

参考にしたのはこのページ.

 

この人は Linuxカーネルパッチを自作した模様.Mac OS Xと書いてあるが,「今後の見通しが立った」程度で,この時点で OSXで動かしていたワケではない.ただ記事中にある "libuvc driver working with the real sense camera" というのが役に立ちそう.

 

 

なんやらうまく動かないらしいが,よしよしおじさんが見てあげよう.githubから cloneしてサンプルをビルドしてテスト.数フレーム読み込めるけど刺さる,という排他処理できてないんじゃないの?的な挙動を示したので,ソースを読んでいったところ予想通りバッファの持ち方と pthread_cond_waitの使い方の問題で刺さりうる箇所を発見.真面目に直す気は無いので単純にバッファを持たなくした (LIBUVC_NUM_TRANSFER_BUFS を 1に設定した) ら動くようになった. 

「F200@OSXで問題なく Depthを出せるようになった」というのでは世界初じゃね?

ただ RGBとのレジストレーションとかは自作する必要がありそう.