• Key sequencer 1.1.0

    2017年11月24日 20時45分
    実際に使い始めると気になるところが出てきたので機能を追加。

    • MIDI入力機器(MIDIキーボードなど)に対応。MIDI入力機器からの入力をキーボード入力に変換する。
    • ファイルをドロップして起動に対応。
    • デフォルトのキーバインドを修正。

    Key sequencer
  • Key sequencer 1.0.0

    2017年11月21日 20時11分
    キーボード(MIDIではなくパソコンの)で楽器演奏するソフトがありまして、
    ちょっとマクロで入力したろかいと思ったわけですよ。

    ただそうすると「四分音符だからここは0.4秒ウェイトして・・・」とか書くことになるわけでスマートでない。
    どうせなら楽譜を読み込んでその通りに実行して欲しい。

    そういうことで久しぶりにプログラムを書いたのですが、
    久しぶりだったせいで途中から楽しくなってきて予定よりきちんとしたものが出来ました。
    せっかくなので公開しておこうと思います。

    Key sequencer

    楽譜(MIDI)を読み込んでキーボード(MIDIではない)の入力を行うソフト。

    楽譜は書式が決まってるからデジタルのフォーマットがあると思っていたのですが
    全然そういうことはなくて結局扱いやすいMIDIを採用しました。

    だいたいの楽譜作成ソフトはMIDI出力が付いているので大丈夫だと思いたい。
    とりあえずMuseScore 2で作って試したら良い感じでした。
  • FFmpegでVP9エンコード

    2017年09月21日 20時25分
    時々ゲームプレイを録画して残していまして、
    CODECをh.264、色空間はYUV420にしていました。

    ただ、ゲーム画面だと隣り合うピクセルの色が全然違ったり彩度の高いピクセルが多かったりで
    YUV420にすると全体的に色が薄く見えるのが不満でした。

    これを解決すべく色空間をYUV444に変更し
    ついでにCODECも高圧縮なVP9に変更しようというのが今回の話の始まり。


    今時高圧縮なCODECというとh.265かVP9で迷います。

    h.265はハードウェアエンコード対応が多く
    VP9はだいたいのブラウザで再生できるのがそれぞれの利点でしょうか。

    画質と圧縮率はだいたい同じくらいのようで
    私には良し悪しが判断出来ません。

    今回は大量にエンコードするわけではないので再生環境が多いVP9を採用することにしました。


    VP9のエンコーダというと、最初はlibvpxに付いているvpxencを使おうと思ったのですが
    録画したaviファイルをy4mに変換する必要があり
    y4mの変換にffmpegを使うことになったので、それならもう全部ffmpegでいいかとffmpegを採用。


    それでいざffmpegでエンコードしようとすると
    オプション大量すぎてわけわからんで苦労したので調べた情報を書いておこうと思います。


    私はffmpegについて詳しいわけではないので
    不確かなことを書くのもどうかとは思ったのですが
    あまりに情報が少なかったので全く無いよりはいいかと書いておくことにしました。

    調べる時のとっかかり程度の情報と思って見ていただきたい。


    参考情報




    CODEC


    動画CODECにVP9を指定。
    -c:v libvpx-vp9


    WebMの音声CODECはOpusまたはVorbisになりますが、後発のOpusを使えばいいと思います。(性能もいいらしい)
    音声CODECにOpusを指定。
    -c:a libopus


    コンテナは出力ファイルの拡張子から判断してくれるようですが、一応指定しておけば確実かなと思います。
    -f webm



    RGB → YUV444変換


    エンコーダに渡すピクセルの色空間指定はpix_fmtで行います。
    -pix_fmt yuv444p


    カラーマトリクスは全然別のオプションでこうです。
    -vf "scale=out_color_matrix=bt709:out_range=full"


    ffmpegのログを見ると、-vfでscaleを指定しない場合auto_scalerというのが挿入され、こいつが色空間の変換処理をしているようです。
    「-vf "scale=out_color_matrix=bt709:out_range=full"」のように明示的に指定してやるとauto_scalerが自動挿入されなくなり、指定したscalerが入ります。


    ビットレート


    VP9にはビットレートのモードが4つ。

    • Constant Quantizer (Q)
    • Constrained Quality (CQ)
    • Variable Bitrate (VBR)
    • Constant Bitrate (CBR)

    ストリーミングで配信するわけでもなく
    自分用にアーカイブするのが主な目的なので
    品質固定のConstant Quantizer (Q)を採用しました。

    Constant Quantizer (Q)の指定。
    -crf 30 -b:v 0


    crfは0-63の範囲で指定し、0に近づくほど画質がよくなりデータサイズが大きくなるので
    結果のファイルサイズと画質のバランスで決めることになると思います。

    思ったより数字を大きくしても画質は良いと感じました。
    目安としていくらか試した感じだと1080p 30fpsで30-35あたりが良いのではないかと。

    「-b:v 0」は必須です。というかこの指定がConstant Quantizer (Q)の意味。


    Opusのビットレートの指定は簡単。
    -b:a 160k

    Youtubeが160kでエンコードしているらしいのでその辺りが良さそうです。


    エンコード品質と速度


    -speed 1


    0-4の間で指定し、0に近い程エンコード速度が遅くなり画質が良くなる。
    基本的には0を指定したいところですが、ただでさえ遅いVP9のエンコードがさらに遅くなるので
    エンコード時間を考慮して決めることになります。


    カラーマトリクス


    YUVからRGBに戻す時のカラーマトリクスを指定します。
    RGB → YUVの変換で指定したものを指定すればいいと思うのですが
    なぜ3個もあるのかよくわかりません。

    ffmpegのログを見ると3つとも同じにしておけばひとまとめにして認識してくれているようなのでこれで合っている気がします。
    -colorspace bt709 -color_primaries bt709 -color_trc bt709



    デコード用オプション


    公式のエンコードガイドに、画面を分割して並列デコードできるようになるみたいなオプションがエンコード例に記載してあります。
    -tile-columns 6 -frame-parallel 1


    効果はイマイチわかりませんが今のところ特に害はないです。


    FFmpegでVP9エンコード 補足
  • ARROWS Tab QH55/M クリーンインストール方法

    2016年09月24日 15時38分
    Windows 10にアップデートして使ってたらある日突然起動画面で固まって動かない状態になって
    さすがマイクロソフトだな!とか思いながらいっそ初期状態にリカバリするかと
    リカバリ領域からリカバリかけたら途中で止まってリカバリ出来ない上に起動ドライブのデータがぶっ壊れて
    さすが富士通クオリティだな!とか思いながらWindows 10でクリーンインストールしようとしたら
    思いの外手こずったのでクリーンインストール方法を書いておこうと思う。
    またなんかすぐ動かなくなってやると思うので。

    BIOSからセキュアブートを切る


    1. 電源入れた直後にオプション?ボタンを連打
    2. 起動マネージャがというのが出たらメニュー切り替えするとBIOS起動がある
    3. BIOSを起動
    4. 管理者パスワードを適当に設定(これを設定しないとセキュリティ設定が出来ない)
    5. セキュアブートをOFF
    6. セキュリティチップもOFFったほうが良いかも?
    7. 高速起動もOFFった方が良いかも?
    8. 設定後管理者パスワードを空欄で更新してOFFったほうが良いかも?

    この辺りいじりまくったので他にも影響するのがあるかもしれん。

    起動メディア


    64bit版を入れようとして起動しない!とか悩んだけど
    このマシンは32bit用だった。よって今時32bit版を入れる。

    あとUSBメモリだとブートしなくてDVDだとブートした。
  • SAStrutsのHTML5対応 その3

    2015年06月18日 01時04分
    taglib-html5_1_2_9_2.zip

    ナウなHTML5で必要な属性が足りていなかったのでいくらか足しました。
    • textareaタグ
      • maxlength属性
      • wrap属性

    やはり無条件に全て受け入れてそのまま出すというのが正解だった気がしますが今更後には引けない。

    というか、これJava1.3のソースをtarget=Java1.2で作っているのですが、
    Java9以降は3バージョンくらい古いバージョンしかサポートしてくれない予定のようなので
    さすがにそろそろ延命措置も厳しい気がします。