2018年6月20日

GV-HUVC を買った

http://www.iodata.jp/product/av/capture/gv-huvc/index.htm

USB 3.1 Gen1 接続で、USB Video Class 対応の HDMI キャプチャーデバイス。
専用のドライバーを必要としないので Windows 以外でも動作し、メーカーからのドライバーや専用ソフトの継続的な更新を必要としないため OS の更新などでデバイスが使えなくなる心配が薄い。
ただ USB 3.1 Gen1 が実質的に必須でAMD製チップセットなど非対応なものもあるようなので、そのあたりでトラブルが起きる可能性は少なくない。

この手の HDMI キャプチャーデバイスでは近年では AVerMedia 製のデバイスが特にメジャーだと思うが、専用のドライバーやソフトウェアがあるタイプの製品はあまり好きではないので、今回は GV-HUVC を買うことにした。
AVerMedia の UVC 対応デバイスは7月に出るらしい

ffmpeg でフォーマットを列挙すると以下の通りで、MJPEG には非対応。
> ffmpeg -list_options true -f dshow -i video="I-O DATA GV-HUVC, Video Capture USB":audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{4CFE616A-B674-474C-B539-907085A96B08}"
ffmpeg version N-91317-gb41b6b3234 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
  libavutil      56. 18.102 / 56. 18.102
  libavcodec     58. 20.102 / 58. 20.102
  libavformat    58. 17.100 / 58. 17.100
  libavdevice    58.  4.101 / 58.  4.101
  libavfilter     7. 25.100 /  7. 25.100
  libswscale      5.  2.100 /  5.  2.100
  libswresample   3.  2.100 /  3.  2.100
  libpostproc    55.  2.100 / 55.  2.100
[dshow @ 0000022f7989ac80] DirectShow video device options (from video devices)
[dshow @ 0000022f7989ac80]  Pin "繧ュ繝」繝励メ繝」" (alternative pin name "0")
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1920x1080 fps=6 max s=1920x1080 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1920x1080 fps=6 max s=1920x1080 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=800x600 fps=6 max s=800x600 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=800x600 fps=6 max s=800x600 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1024x768 fps=6 max s=1024x768 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1024x768 fps=6 max s=1024x768 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1152x864 fps=6 max s=1152x864 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1152x864 fps=6 max s=1152x864 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1280x960 fps=6 max s=1280x960 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1280x960 fps=6 max s=1280x960 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1280x1024 fps=6 max s=1280x1024 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1280x1024 fps=6 max s=1280x1024 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1440x900 fps=6 max s=1440x900 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1440x900 fps=6 max s=1440x900 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1600x900 fps=6 max s=1600x900 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1600x900 fps=6 max s=1600x900 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1600x1200 fps=6 max s=1600x1200 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1600x1200 fps=6 max s=1600x1200 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1680x1050 fps=6 max s=1680x1050 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1680x1050 fps=6 max s=1680x1050 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1280x720 fps=6 max s=1280x720 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1280x720 fps=6 max s=1280x720 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=720x480 fps=6 max s=720x480 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=720x480 fps=6 max s=720x480 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=720x576 fps=6 max s=720x576 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=720x576 fps=6 max s=720x576 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1280x800 fps=6 max s=1280x800 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1280x800 fps=6 max s=1280x800 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1360x768 fps=6 max s=1360x768 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1360x768 fps=6 max s=1360x768 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1366x768 fps=6 max s=1366x768 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1366x768 fps=6 max s=1366x768 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=640x360 fps=6 max s=640x360 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=640x360 fps=6 max s=640x360 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=768x576 fps=6 max s=768x576 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=768x576 fps=6 max s=768x576 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=856x480 fps=6 max s=856x480 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=856x480 fps=6 max s=856x480 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=960x540 fps=6 max s=960x540 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=960x540 fps=6 max s=960x540 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1024x576 fps=6 max s=1024x576 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1024x576 fps=6 max s=1024x576 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1920x1200 fps=6 max s=1920x1200 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=1920x1200 fps=6 max s=1920x1200 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=640x480 fps=6 max s=640x480 fps=60.0002
[dshow @ 0000022f7989ac80]   pixel_format=yuyv422  min s=640x480 fps=6 max s=640x480 fps=60.0002
[dshow @ 0000022f7989ac80] DirectShow audio only device options (from audio devices)
[dshow @ 0000022f7989ac80]  Pin "Capture" (alternative pin name "Capture")
[dshow @ 0000022f7989ac80]   min ch=1 bits=8 rate= 11025 max ch=2 bits=16 rate= 44100
    Last message repeated 22 times
レイテンシーはそれなりにあるので、アクション性の高いゲームのキャプチャーなどを行う場合には HDMI スプリッターは必須だと思われる。
キャプチャーした映像には品質的な問題はない。
Clip to Evernote

2018年3月4日

拡張編集と Shift_JIS

PSDToolKit を作っていて「ダメ文字」問題と向き合うことになったので、思い出がてら記録しておく。

拡張編集は多くの箇所で MBCS 文字列を使っていて Lua スクリプトでも Shift_JIS が使われるので、例えば
A = "サシスセソ"
みたいなスクリプトはそのまま記述されると上手く動かないことが容易に予想できる。

ところが、実際にはテキストオブジェクトに
<?mes("サシスセソ")?>
と書くと上手く動き、
<?dofile("test.lua")?>
として、test.lua の中に同じ内容を書くと、こちらは動かない。

内部で何が起きているのかを知るのは簡単で、ダブルクォートの代わりに
<?mes([[サシスセソ]])?>
このようにすると、画面には
サシスセソ\
と表示される。

つまり、拡張編集では拡張編集が用意したダイアログ内に入力されたテキストに対しては独自にダメ文字対策を行っていて、その対策方法は恐らく単純に「ダメ文字を探して \ を足す」という形で行っているので、実際にエスケープする必要があるかどうかに関係なくエスケープしようとした結果、画面に「サシスセソ\」と出た。

この方法は変なことをしようとしなければ概ね上手く動くので大抵のケースでは問題にならないし、誤ってエスケープされたものも余分な \ を消せば復元できるので大きな問題にはならないはずだったが、PSDToolKit の特殊な事情により厄介な問題に発展した。

やりたかったことは、文字列をクリップボードにコピーしておいて、拡張編集のダイアログや *.lua ファイル内に貼り付けて使う、というだけの処理だった。

何が問題なのかというと、コピーした時点ではどちらに貼り付けようとしているのかがわからないので、貼り付けられた場所次第で得られる文字列が変わってしまう。
最初は「こっちからの場合は \ を消して……」みたいな場当たり的な措置でお茶を濁そうとしたのだが、置換処理が結構な回数必要になるし、気をつけて扱わないとすぐ事故る勢いだったのでこれはまずいと思ってアプローチを変えることにした。

対策は単純に「ダメ文字が出てこないようにする」というだけ。

処理の都合上、元々文字列では Unicode の範囲全てを扱える必要がありエスケープ処理を行うロジックを作っていたので、それにダメ文字用の対策も加えることによって事なきを得た。

上手く動くようになってよかったなあ。
Clip to Evernote

2017年7月11日

「CeVIO Creative Studio」のフォント

CeVIO Creative Studio のパッケージやサイトなど、様々な場所で使われている

こういう感じのロゴ

このロゴ、今までちゃんと見ずに漠然と「futura」辺りのフォントを使っていると勝手に思っていたんだけど、真面目に見てみると i の上の点が丸くないし、C の形すら違う。

何だろうと思って気になって調べてみたら、これは「URW Gothic」というフォントだった。
(※追記:系譜も含めて考えると実際に使われているのはもしかしたら ITC Avant Garde Gothic かもしれないけど、自分には全然区別がつかなかった)

このフォントは ghostscripturw-core35-fonts.git という git リポジトリに登録されているのだが、ライセンスは特例付きの AGPLv3 となっており、ライセンスの範囲内で自由に使うことができる。
「URWGothic-Book.otf」や「URWGothic-Book.ttf」が目的のフォントなので、興味があればお試しください。

追記:
もう1つ、このページの左上にある Project CeVIO の部分は r とか c の形状から察するに Handel Gothic をベースに o や e を自作したり、j を J をベースに差し替えたり、CeVIO の部分は横長にした上で太さが極端にならないように修正したものじゃないだろうか、という感じで疑っているんだけど、もし仮にそうだとすると同じフォントを使ってもすぐに同じものを再現できなくて面白くない感じに。

追記 2018-01-11:
jamバンドについても調べた
Clip to Evernote

2016年8月29日

[絵を描く人向け]PSDTool の使い方

先日投稿した動画は主に「公開されている PSD ファイルを使う人」にスポットを当てたものだったので、今回は「PSD ファイルを公開する人」に向けた PSDTool の使い方をブログで紹介しようと思います。
Clip to Evernote