Coder Social home page Coder Social logo

aviutl_psdtoolkit's People

Contributors

dependabot[bot] avatar oov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aviutl_psdtoolkit's Issues

字幕の描画が遅いのを何とかする

拡張編集のテキスト出力は静的な文章表示とは相性が悪く、毎フレームレンダリングされるために文字数が多いとかフォントサイズが大きい場合にはかなり重くなる。

静的な内容に対してはキャッシュが有効なはずなので、テキストオブジェクトでキャッシュ機構を実現できないか検討する。
オプション設定だけで実現できそうなら字幕表示の機能を拡張するか、あるいは字幕表示(軽量版)を新設する。
1文字ずつ分解してのエフェクトは諦める。

これは互換性が維持できそうではあるが、v0.3 系での着手の予定。

口パク、目パチを Lua 上で function にまとめる

anm から1行で呼べる状態まで簡略化する

簡略化できたら、拡張編集側のスライダーの値のひとつとして扱えるレベルまで整理して、
プリセットパターンに対して簡単に割り当てできる状態に持ち込む

ドキュメントを書く

v0.2beta から GitHub の Wiki を使ってドキュメントを整備していく。
以下の目次は暫定的なものだが、概ねこれに沿った形で進めていきたい。

  • PSDToolKit とは
  • インストール方法
    • 設定のカスタマイズについて
  • 基本的な使い方
    • PSD ファイルの基本
      • PSD ファイルの読み込み
      • レイヤー構成の変更
      • オブジェクト描画について
    • PSDTool のお気に入りを使用する
      • PSDTool とお気に入りについて
      • シンプルビューの作り方とお気に入りのエクスポート
      • お気に入りを持つ PSD ファイルの読み込み
      • 目パチ(瞬き)の設定
      • シンプルビューのスライダーを AviUtl 用にエクスポート
        • 複数のスライダーに割り当てるには
        • スライダーへの瞬き(目パチ)の割り当て
    • 音声と口パクと字幕
      • 口パク準備
      • 口パク(リップシンク)の設定
      • 字幕準備
      • 字幕表示用オブジェクト
      • 音量調整とチャンネルストリップ
        • 音声ファイル側では音量調整しない理由

GUI が不特定のタイミングでクラッシュする

自分の環境で発生するケースに関しては大体潰したけど、
それでもまだ起こることがあるらしい。

操作性の改善に手を入れる前にこの辺の問題を根底から片付けてしまいたいところ。

アップデートの度に Lua に書いた設定がリセットされるのを改善したい

設定を書くべき箇所が分散しているという別の問題も併発しているので、そこも含めて解決したい。

  1. script\PSDToolKit\setting.lua をユーザーの手で作ることで設定が読み込まれる仕組みを作る
  2. デフォルト設定の全てを記述した script\PSDToolKit\setting-default.lua を配布ファイルに含める
  3. プログラムからは setting-default.lua を読んだあとに setting.lua で上書きして使う

setting.luasetting-default.lua をコピーして作るのではなく、setting.lua-template のような、ほぼ空のファイルをリネームして作るようなやり方にする。

こうすることでユーザーがどの設定をカスタマイズしているのかを一目瞭然にし、例えば新規に設定項目が追加されて「どれが追加されたかわからない」という状況になっても、全設定のコピーのやり直しをしなくて済む構造にしたい。

  • setting-default.lua を作成
  • setting.lua-template を作成
  • 設定を読み込んで処理をするように変更
  • 設定の使い方を説明するページを作成

口パク準備のパラメーターを移動

口パク準備 のデータとして本質的に重要なのは波形だけで、これさえ確保しておけば他の処理は別の場所で行うこともできる。

そう考えると 口パク準備 に存在するパラメーターは全部削除してしまい、使う側で後続の処理を行う方が汎用性が高くなるように思える。

更にこのアプローチで行くと 口パク準備 設定上書き のオブジェクトが必要なくなり、必要な場所でスライダーを実際に変えるだけ、という使い方にできる。

これは破壊的な変更になるのでやるとしても v0.3 系以降。

PSD ファイルオブジェクトで AviUtl のエイリアス機能を使えるようにして欲しい

エイリアスとして保存しておいた PSD ファイルオブジェクトを使えるようにしてほしい。

現状でもエイリアスに保存されたファイルを配置すること自体は可能だが、v0.2 系から PSD ファイルを正確に扱うようになり、タイムラインに配置された野良 PSD ファイルだと PSDToolKit ウィンドウに追加されない仕様に変わっているため、エイリアスで配置するとそこからの表情変更が難しい。

Extram.dll を使ってみる

依存が増えるのは良くないが、現状は AviUtl 側に PSD ファイルのキャッシュを保持しているのでこれを Extram.dll 側に移動させたらパフォーマンスがどうなるかテストする。

複雑な構造の pfv ファイルを読ませた時、ブラウザ版と挙動が違う

階層構造が深い pfv ファイルを読み込んでいる時、
レイヤーの表示/非表示が正しく適用されないケースがある。

ブラウザ版での動作は問題なく、PSDToolKit 側の挙動がおかしい。
レイヤーの表示状態を復元する時に、正しく親階層の表示/非表示が復元できないケースがあるように見える。

口パク準備、字幕準備、多目的スライダーの統合

音声と合わせてレイヤーを4本占拠しているのを、最終的には音声+準備の2本まで減らしたい。
超えるべきハードルがいくつかある。

  • obj.getaudio 依存をやめる
    • これが原因で削除後のファイルロック、再生速度変更に非対応、オブジェクトの配置区間の制限などの課題が生まれているので、自前で管理することによりかなり大きな範囲の問題を排除できるはず
      FFT が必要になるので自前で用意したもののパフォーマンスが悪いようなら採用できない
    • ハンドルを保持する同じような機構は設けるが、5秒ぐらい obj.getaudio が呼ばれなかったらロックは開放していいはずなのでそういう実装にする
    • AviUtl 本体にある avi_file_open を使う
  • 口パク準備のパラメーターを増やす
    • 開始マージン(口パク準備のオフセットを再現するため)
    • 終了マージン(多目的スライダーや字幕準備より口パク準備が短い状況を再現するため)
    • 再生位置(音声の再生位置と合致させるため)
    • 再生速度(音声の再生速度と合致させるため)
    • ローカット、ハイカット、しきい値、感度、開始マージン、終了マージン、再生位置、再生速度のうち、どれをスライダー置くのかも再検討
  • 字幕準備のパラメーターを増やす
    • 開始マージン
    • 終了マージン

マージン系は一度設定したら細かく変えない前提でいくと、スライダーじゃなくてもいいかも。
多目的スライダーだけガッツリ引き伸ばして複数の音声を跨ぐ使い方ができなくなるので、個人的にはこれが一番問題。

口パク周りの改善

作りかけのまま完成に至っていないものを実際にリリースするのかどうかハッキリさせる。

複数キャラでの利便性の改善/レイヤー選択のリセット回避

多分大まかにまとめると現在コンボボックスで表示している「最近使ったPSDファイルのリスト」の使い勝手がよくない、という話だと思われる。

この辺は仕組みの都合上 AviUtl や拡張編集との完全な連動が難しいのが予めわかっており、まずは最低限使えるレベルを目指していたために使いやすさの面までは考慮できていなかったので、改善案を検討してみる。

改善案

変更規模が小さくないため v0.2 系としてのリリースにすべきと思われる。
実装する場合はベータ版の公開は無用な混乱を避けるためこれらを全て実装してからにしたい。

  • インターフェイスをコンボボックスではなくタブに変更
    切り替えを少ないクリック数で行えるように、また閉じる操作も手動で行えるように
  • ドロップして開いた画像に対する GC を廃止
    閉じる操作を行えるようにすれば廃止しても困らないはず
    ただしレイヤーでのキャッシュに対しては依然として必要なのでそこは残す
  • 左右反転と上下反転を「⇄」「⇅」に変更、送るボタンの幅を縮小
    PSDTool との一貫性の確保とタブ表示用のスペース確保のため
  • プロジェクト保存時に読み込んでいる画像とレイヤーの表示状態を保持し、読み込み時に復元
    PSDToolKit.auf から PSDToolKit.dll に直接保存用のデータを問い合わせる流れを追加する
  • アイテムリストにはドロップした画像以外は現れないようにする
    プロジェクトファイルとの連動が正しく行えるようになったら出さなくても困らないはず
    特定のシーンで便利なこともあるが、説明の時点で面倒な機能は要らない可能性も高い
  • TL への PSD ドロップにも対応するために psd.lua から PSDToolKit.dll を呼ぶ
  • 同じPSDファイルを複数個開いている時にシンプルビューの選択状態も個別管理
  • お気に入りの開閉状態を個別管理
  • レイヤーサムネイルの無駄な作り直しを抑制

画像が上手く出ない

GUI 上では PSD ファイルの読み込みに成功しているため、ファイル側には問題がない。
Lua 側から画像データをリクエストすると、何らかの理由で失敗しスクリプトの実行が中断されているように伺える。
開発環境上ではうまく動いているように見えるので、全ての環境で問題が起きるわけではないようだ。

原因はわからないが Lua → PSDToolKit.dll → PSDToolKit.exe → PSDToolKit.dll → Lua の経路の途中で上手く行かないように思われる。

文字化け

-チャンネルストリップの設定画面
-スライダーのエクスポート

SetMultiByteConversionCodePage(CP_UTF8) の追加によって発生中。
CP_UTF8 じゃないときちんと Unicode のデータが保持できない可能性があるのでこの変更自体は間違いではないが、既存のコードで WideString で処理していなかった部分が事故ってるので修正が必要。

製作途中での PSD/PFV ファイルの変更に弱い

現在の実装では faview のコピペに関しては "F.XXXXXXXX" という文字列を渡す形になっているが、現状の仕組みでは途中でPSDファイルのレイヤー構造や順番が変更された場合に表示が破綻してしまう。
直接表示状態を渡すのではなく、シンプルビューの「どの項目」の「何」を選んでるかを指定する形にすれば、PSDやPFVに変更があっても同じ名前のものが存在すれば表示状態を復元できるようになる。
また、この機構を流用してプロジェクト全体に対する保存/読み込みを実装すべきと思われる。
以前の機構も廃止する必要はないので互換性のために残す。

ただし「送る」ボタンを使用した場合はレイヤーのすべての表示状態を指定する必要があるため、AviUtl 側の255文字制限との兼ね合いもあり現状の仕様は仕方がないと思われる。

  • レイヤー名ベースの serializer
  • レイヤー名ベースの deserializer
  • お気に入り登録名ベースの serializer
  • お気に入り登録名ベースの deserializer
  • シンプルビューでのコピー時に新形式でコピー

PSD ファイルオブジェクトのテキストオブジェクトを何とかする

テキストオブジェクトには使わないプロパティがたくさんあるので、可能であれば使いたくない。
ただしタイムラインにファイル名が表示されないのも避けたいので、タイムラインに名前が表示できて、かつパフォーマンスが落ちない方法が欲しい。

現状の案は *.psd 用のダミーの spi を作って、画像オブジェクトの下にスクリプト制御を入れる方法。
ダミーの 1x1 画像を返すのと obj.mes で無駄なスペースを吐くのとどちらが軽いのかがポイントになると思われる。

v0.2 での両立もできなくはないけど、着手するのは v0.3 系列の予定。

PSDToolKit.auf がプラグインとして認識されない

  • lua.pas で lua51.dll の場所を動的に検索するようにしないと、exedit.auf 自体を Plugins ディレクトリなどに配置している場合 DLL を見つけ出せずにコケる。

一番致命的なのは多分これ。

口パクの閉じを常時適用しないようにする?

喋ってない時に閉じが適用されると結果的に表情変更が適用できないように見えるので、バグっぽく見える。

チェックボックスで喋ってない時に適用するかどうかを決められるようにすべき?

ごちゃまぜドロップス外部連携 API からのドロップに対応する

現状は *.wav のドロップ時に Shift キーを押さないといけないが、外部連携 API 経由の場合はそうもいかないので、新しいオプションを追加する。

  • 同じファイル名の *.wav*.txt がドロップされた時
  • 1フレーム目に音声とテキストが配置された *.exo ファイルがドロップされた時

すべて初期設定で有効にする。

設定値の変数名を整理する

次の v0.2 β 版のリリース前に設定周りを整理する

  • default.lua の変更
  • wav.lua の変更
  • setting.md の追従
  • 環境設定ダイアログの追従

type 上書きへの対策

同等機能を PSDToolKit 側で用意して、上書きされていても問題なく動くよう対策する。
type を一番最初の時点でバックアップするアプローチだと実行順序の問題で上手くいかないこともあるので、DLL 内部に同等機能、あるいは簡略版を用意する。

音声は分割できるのに、口パクは途中から再生できない

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 -- 多目的スライダー
?>

というのを入れておくことで、入力のハードルを下げたい。

  • PSD ファイルをドロップした時の初期テキストを変更
  • 新規PSDToolKitオブジェクトの初期テキストを変更
  • グローバル変数 lipsync が代入されている時は口パク準備オブジェクトを取得しておく
  • 「口パク 開閉のみ」の「口パク準備」プロパティを削除
  • 「口パク あいうえお」の「口パク準備」プロパティを削除
  • マニュアル内の「口パク 開閉のみ」スクリプト用フォームから「口パク準備」プロパティを削除
  • マニュアル内の「口パク あいうえお」スクリプト用フォームから「口パク準備」プロパティを削除
  • マニュアル内の「口パク あいうえお」スクリプト例の「口パク準備」取得方法を変更
  • 口パク準備の使い方解説を改定
  • PSD ファイルを読み込んだ時のプロパティ解説を改定

目パチ、口パクの設定ダイアログへの割り当て機能

PSDToolKit 側の設定コピーボタンを押したとき、もし拡張編集側で設定ダイアログを開いているならクリップボードへのコピーの代わりにコピー対象になる項目リストをポップアップメニューで出し、選ばれた項目に直接入力する

ラジオボタンの入れ子の挙動

GUI でレイヤーツリーをクリックした時は親階層のレイヤー切り替えも合わせて行っているが、アニメーション効果でレイヤー名を指定した時は該当のレイヤーの切り替えのみにとどまっており、ラジオボタンが入れ子になっている時などに、期待した挙動と異なってしまっている。

使う側はマウスでクリックした時と同等の振る舞いを望んでいるはずなので、切り替え時の挙動を改善する。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.