oov / aviutl_psdtoolkit Goto Github PK
View Code? Open in Web Editor NEWPSDToolKit
Home Page: https://www.nicovideo.jp/series/436
License: MIT License
PSDToolKit
Home Page: https://www.nicovideo.jp/series/436
License: MIT License
本来でないタイミングで出ているので何らかのエラーが発生していると思われるが、原因が不明。
拡張編集のテキスト出力は静的な文章表示とは相性が悪く、毎フレームレンダリングされるために文字数が多いとかフォントサイズが大きい場合にはかなり重くなる。
静的な内容に対してはキャッシュが有効なはずなので、テキストオブジェクトでキャッシュ機構を実現できないか検討する。
オプション設定だけで実現できそうなら字幕表示の機能を拡張するか、あるいは字幕表示(軽量版)を新設する。
1文字ずつ分解してのエフェクトは諦める。
これは互換性が維持できそうではあるが、v0.3 系での着手の予定。
AviUtl 標準のシーンチェンジを使ったときに、縦に画像がずれることがある。
原因は今のところ不明だが、プレビューでうまく動くようになるとその後はなかなかずれなくなる。
発生バージョン、環境、再現方法不明。
anm から1行で呼べる状態まで簡略化する
簡略化できたら、拡張編集側のスライダーの値のひとつとして扱えるレベルまで整理して、
プリセットパターンに対して簡単に割り当てできる状態に持ち込む
そもそも喋る内容ではないものをセリフ用のテキストファイルに書き出す仕様がだいぶひどい。
v0.2beta から GitHub の Wiki を使ってドキュメントを整備していく。
以下の目次は暫定的なものだが、概ねこれに沿った形で進めていきたい。
自分の環境で発生するケースに関しては大体潰したけど、
それでもまだ起こることがあるらしい。
操作性の改善に手を入れる前にこの辺の問題を根底から片付けてしまいたいところ。
設定を書くべき箇所が分散しているという別の問題も併発しているので、そこも含めて解決したい。
script\PSDToolKit\setting.lua
をユーザーの手で作ることで設定が読み込まれる仕組みを作るscript\PSDToolKit\setting-default.lua
を配布ファイルに含めるsetting-default.lua
を読んだあとに setting.lua
で上書きして使うsetting.lua
は setting-default.lua
をコピーして作るのではなく、setting.lua-template
のような、ほぼ空のファイルをリネームして作るようなやり方にする。
こうすることでユーザーがどの設定をカスタマイズしているのかを一目瞭然にし、例えば新規に設定項目が追加されて「どれが追加されたかわからない」という状況になっても、全設定のコピーのやり直しをしなくて済む構造にしたい。
setting-default.lua
を作成setting.lua-template
を作成未調査につき原因不明。
原因次第では #40 との関連性もある可能性がある。
GUI のレンダリング時に例外が発生する
口パク準備
のデータとして本質的に重要なのは波形だけで、これさえ確保しておけば他の処理は別の場所で行うこともできる。
そう考えると 口パク準備
に存在するパラメーターは全部削除してしまい、使う側で後続の処理を行う方が汎用性が高くなるように思える。
更にこのアプローチで行くと 口パク準備 設定上書き
のオブジェクトが必要なくなり、必要な場所でスライダーを実際に変えるだけ、という使い方にできる。
これは破壊的な変更になるのでやるとしても v0.3 系以降。
エイリアスとして保存しておいた PSD ファイルオブジェクトを使えるようにしてほしい。
現状でもエイリアスに保存されたファイルを配置すること自体は可能だが、v0.2 系から PSD ファイルを正確に扱うようになり、タイムラインに配置された野良 PSD ファイルだと PSDToolKit ウィンドウに追加されない仕様に変わっているため、エイリアスで配置するとそこからの表情変更が難しい。
欲しい。
依存が増えるのは良くないが、現状は AviUtl 側に PSD ファイルのキャッシュを保持しているのでこれを Extram.dll 側に移動させたらパフォーマンスがどうなるかテストする。
階層構造が深い pfv ファイルを読み込んでいる時、
レイヤーの表示/非表示が正しく適用されないケースがある。
ブラウザ版での動作は問題なく、PSDToolKit 側の挙動がおかしい。
レイヤーの表示状態を復元する時に、正しく親階層の表示/非表示が復元できないケースがあるように見える。
音声と合わせてレイヤーを4本占拠しているのを、最終的には音声+準備の2本まで減らしたい。
超えるべきハードルがいくつかある。
obj.getaudio
依存をやめる
obj.getaudio
が呼ばれなかったらロックは開放していいはずなのでそういう実装にするavi_file_open
を使うマージン系は一度設定したら細かく変えない前提でいくと、スライダーじゃなくてもいいかも。
多目的スライダーだけガッツリ引き伸ばして複数の音声を跨ぐ使い方ができなくなるので、個人的にはこれが一番問題。
詳細不明
ライブラリ側で読み込む時点で失敗している可能性あり
起動に失敗するのはまあ仕方がないので、エラーメッセージをフレンドリーにする。
そのメッセージで原因がわかれば、何でダメなの……って状況は減らせる。よい。
AviUtl と拡張編集のバージョンを調べて、想定より古い場合はエラーメッセージを表示するようにする。
作りかけのまま完成に至っていないものを実際にリリースするのかどうかハッキリさせる。
多分大まかにまとめると現在コンボボックスで表示している「最近使ったPSDファイルのリスト」の使い勝手がよくない、という話だと思われる。
この辺は仕組みの都合上 AviUtl や拡張編集との完全な連動が難しいのが予めわかっており、まずは最低限使えるレベルを目指していたために使いやすさの面までは考慮できていなかったので、改善案を検討してみる。
変更規模が小さくないため v0.2 系としてのリリースにすべきと思われる。
実装する場合はベータ版の公開は無用な混乱を避けるためこれらを全て実装してからにしたい。
PSDToolKit.auf
から PSDToolKit.dll
に直接保存用のデータを問い合わせる流れを追加するpsd.lua
から PSDToolKit.dll
を呼ぶチュートリアルをそのままやらない人用の補助
縦方向に小さくなるものの全体像の把握が難しくなるので良くない。
その時のプロジェクトの状態が把握できるような視覚的なサポートができるようなのが理想。
使用中のバージョンと一致しないものを参照されると都合が悪いので、オンラインマニュアルでのみバージョン確認を何らかの方法で行うようにする。
読み込みの途中でエラーが起きた時、画面の更新を行わずに処理を抜けてしまうために全てが読み込まれていないようにみえる。
実際には失敗するまでに読み込んだ分は存在している。
エラーが起きた場合はそのファイルをスキップして続きを読み込むように改善する。
GUI 上では PSD ファイルの読み込みに成功しているため、ファイル側には問題がない。
Lua 側から画像データをリクエストすると、何らかの理由で失敗しスクリプトの実行が中断されているように伺える。
開発環境上ではうまく動いているように見えるので、全ての環境で問題が起きるわけではないようだ。
原因はわからないが Lua → PSDToolKit.dll → PSDToolKit.exe → PSDToolKit.dll → Lua の経路の途中で上手く行かないように思われる。
-チャンネルストリップの設定画面
-スライダーのエクスポート
SetMultiByteConversionCodePage(CP_UTF8)
の追加によって発生中。
CP_UTF8 じゃないときちんと Unicode のデータが保持できない可能性があるのでこの変更自体は間違いではないが、既存のコードで WideString で処理していなかった部分が事故ってるので修正が必要。
現在の実装では faview のコピペに関しては "F.XXXXXXXX" という文字列を渡す形になっているが、現状の仕組みでは途中でPSDファイルのレイヤー構造や順番が変更された場合に表示が破綻してしまう。
直接表示状態を渡すのではなく、シンプルビューの「どの項目」の「何」を選んでるかを指定する形にすれば、PSDやPFVに変更があっても同じ名前のものが存在すれば表示状態を復元できるようになる。
また、この機構を流用してプロジェクト全体に対する保存/読み込みを実装すべきと思われる。
以前の機構も廃止する必要はないので互換性のために残す。
ただし「送る」ボタンを使用した場合はレイヤーのすべての表示状態を指定する必要があるため、AviUtl 側の255文字制限との兼ね合いもあり現状の仕様は仕方がないと思われる。
テキストオブジェクトには使わないプロパティがたくさんあるので、可能であれば使いたくない。
ただしタイムラインにファイル名が表示されないのも避けたいので、タイムラインに名前が表示できて、かつパフォーマンスが落ちない方法が欲しい。
現状の案は *.psd
用のダミーの spi を作って、画像オブジェクトの下にスクリプト制御を入れる方法。
ダミーの 1x1 画像を返すのと obj.mes
で無駄なスペースを吐くのとどちらが軽いのかがポイントになると思われる。
v0.2 での両立もできなくはないけど、着手するのは v0.3 系列の予定。
まだ挙動を未確認。あとで調査する。
Ctrl キーを押しながらポチポチして Ctrl キーを離すと、複数同時にエクスポートできる、みたいな機能が欲しい
これは説明がなければ気付かない UI なのでとても良くないが、説明なしでも伝わりそうなコストの安い方法が今のところ思いつかない
一番致命的なのは多分これ。
喋ってない時に閉じが適用されると結果的に表情変更が適用できないように見えるので、バグっぽく見える。
チェックボックスで喋ってない時に適用するかどうかを決められるようにすべき?
現状は *.wav のドロップ時に Shift キーを押さないといけないが、外部連携 API 経由の場合はそうもいかないので、新しいオプションを追加する。
*.wav
と *.txt
がドロップされた時*.exo
ファイルがドロップされた時すべて初期設定で有効にする。
次の v0.2 β 版のリリース前に設定周りを整理する
OpenGL 周りの何かと思われる
何故かフォルダーと認識されているように見える(未調査)。
4つ以上扱いたい場合の話としてチュートリアルで触れておく
同等機能を PSDToolKit 側で用意して、上書きされていても問題なく動くよう対策する。
type を一番最初の時点でバックアップするアプローチだと実行順序の問題で上手くいかないこともあるので、DLL 内部に同等機能、あるいは簡略版を用意する。
現在 PSDTool で使っているものとは検出処理が若干異なっているので、取りあえず同じ基準に合わせる。
AviUtl 側が持つ obj.getaudio
がオブジェクトの現在の時間に依存したデータしか取得できないため、問題の解決には手数が必要になっている。
また、この問題を克服できたとしても、右クリックメニューの「分割」を使った時に後半のデータに正しい分割地点の情報が入らないので「できなくはないが、利便性はいまひとつ」という壁は越えられなさそうではある。
(分割を使う度に音声側の「再生位置」などの数値をコピペすることになる)
仕組み的には PSDToolKit.dll に「指定した時間から1フレームの時間分、周波数の範囲を BPF で絞った音量データを取得する」という Wave ファイルを読み込む命令を用意すれば対応できそう。
BPF の実装は既にあるし Wave ファイル読み込みだけならそんなに難しくはない。
(もし「口パク準備」という今回の仕様に特化しないのであれば、obj.getaudio
で使える形式全てに対応する方が利便性は高そう)
ただ、そもそも論として AviUtl は仕様的に音声編集環境として使うことはあまり重視されておらず、別ソフトで音声を刻んだりした方が効率もずっといいしエフェクトも掛けたい放題なので、作業コストの割にメリットはそんなに高くなさそうかな、といったところ。
特にダメ文字を含む場合に Base64 エンコードしていることにより長さが膨らみ設定が保存されなくなっている。
UTF-8 + Base64 なので Shift_JIS に比べると概ね 3/2 * 4/3
ぐらいに膨らむのでかなり厳しいようだ。
お気に入りの名前に依存すると挙動が安定しない気配がするのでやっぱり諦めるべきだろうか…。
取りあえず Shift_JIS で表現できない文字とダメ文字だけをエスケープするアプローチを考える。
原因未調査。
<?mpslider=3?>
を手で書かせるのは親切ではないので、数字だけを書き換えればいいように改善したい。
PSD を読み込んだオブジェクトのテキスト入力欄に予め
<?
lipsync = 0 -- 口パク準備
mpslider = 0 -- 多目的スライダー
?>
というのを入れておくことで、入力のハードルを下げたい。
詳細確認中。
PSDToolKit 側の設定コピーボタンを押したとき、もし拡張編集側で設定ダイアログを開いているならクリップボードへのコピーの代わりにコピー対象になる項目リストをポップアップメニューで出し、選ばれた項目に直接入力する
一気に複数ファイルのレンダリングを走らせるのはレンダリング負荷が心配なのだが、
新設したタスクキューに積んでおけばいいだけかもしれない。
原因はわからないが、メニューからウィンドウの表示を選んでも表示されない
EXE の起動に失敗しているように見えるが、アンチウィルス系の問題ではない
GUI でレイヤーツリーをクリックした時は親階層のレイヤー切り替えも合わせて行っているが、アニメーション効果でレイヤー名を指定した時は該当のレイヤーの切り替えのみにとどまっており、ラジオボタンが入れ子になっている時などに、期待した挙動と異なってしまっている。
使う側はマウスでクリックした時と同等の振る舞いを望んでいるはずなので、切り替え時の挙動を改善する。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.