画像:アニメーション画像をフレーム分割してブックにする

Issue #777 wontfix
Ito Mitsuhiro repo owner created an issue

さて、以前から対処してもらえればありがたいことがあるのですが、1つのファイルに複数の
アイコンやカーソルを格納した.icoや.curファイル、すなわち「アイコンアーカイブ」について
です。現状では、このアイコンアーカイブは単一の画像すなわちページとして扱われています。

具体的な要望なのですが、.icoおよび.curは中身が単一の画像であるかアイコンアーカイブで
あるかを問わずに、ページがデコードして出来た.bmp画像からなる「ブック(圧縮書庫)」として
扱うオプション設定があれば大変ありがたいです。

現状では、アイコンアーカイブの中身を列挙するためにはTORO氏のaxcurico.spiなどのSusie
プラグインに頼らないといけません。しかしaxcurico.spiは、単一の画像からなる.icoおよび
.curは「画像(ページ)」として、複数の画像からなるアイコンアーカイブの.icoおよび.curは
単一の画像の.icoおよび.curを格納した「圧縮書庫(ブック)」として扱われるため、同じ.ico
および.curファイルがページとブックとの両方の性質を持ってしまい、ページとブックとを
厳密に区別して扱うNeeViewとの相性が非常に悪いです。

そこで、NeeView側でSusieプラグインに頼ることなくアイコンアーカイブに対応してもらえれば
ありがたいのですが、大事なこととして、複数の画像からなるアイコンアーカイブをブックとして
扱うのはもちろんのこと、単一の画像の.icoおよび.curも1個だけのページを格納したブックと
して扱うことです。これで.icoおよび.curは中身の如何を問わずブックとして扱われます。
そして、ブックの中身のページについてですが、もし各ページも.icoおよび.curになってしまって
いると、「ブックとしての.icoおよび.curを展開して中身の.icoおよび.curを列挙して、その.ico
および.curをまたブックとして展開して...」と無限再帰呼び出しに陥ってしまいます。そこで、
各ページば中身の.icoおよび.curをデコードした無圧縮の.bmpにしてしまえば正しく扱えるように
なります。.bmpのピクセルフォーマットは、透過属性を持つアイコンやカーソルを正しく表示する
ため、32bitアルファチャンネル付きRGBとします。

また、同様のことが.gif形式についても言えます。.gifついては、単一のフレームからなる「普通の
GIF」と複数のフレームを再生する「アニメーションGIF」とがあります。そこで、アニメーション
GIFである.gifを圧縮書庫して単一の.gifに展開するSusieプラグインを使用すると、前述のアイコン
アーカイブのときと同じ問題を引き起こしてしまいます。

そこで、NeeView側で.icoおよび.curのときと同様に、「普通のGIF」か「アニメーションGIF」かを
問わずに.gifは一律「ブック(圧縮書庫)」として扱い、中身の「ページ」は各フレームをデコード
した.bmpにするという手もあります。現在まだサポートしていないAPNGや、.Netのメディア再生
機能で辛うじてサポートしている動画ファイルについても同様に、各フレームを.bmpにデコードして
ページとして扱い、ファイル自体はこれを格納したブックとして扱ってフレーム単位で閲覧できる
ようにする機能も良いかもしれません。

ただし、.gifや動画などは再生時間に応じてフレーム数が際限なく増大するため、ユーザーが指定
した設定に基づいて一部のフレームだけをページとして切り出す必要があります。例えば、動画を
5ページのフレームからなるブックとみなす設定をしたとき、総フレーム数が100フレームなら0番、
20番、40番、60番、80番の5フレームだけをページにするという感じです。

当方ではこの動作を、TORO氏のaxextend.spi/ifextend.spiを用いてFFmpeg(Windows版はZeranoe氏の
ビルドを https://ffmpeg.zeranoe.com/builds/ から入手)を起動して実現しています。しかし、
ブックやページの表示やサムネイル作成の度にffmpeg.exeのアプリの起動と終了とを繰り返すため、
プロセス生成のオーバーヘッドで動作が重くなってしまっています。もし、.Netのメディア再生機能で
各フレームを静止画に切り出せるなら、NeeView側でこの機能を実現してもらえれば大変ありがたい
です。

Comments (3)

  1. Ito Mitsuhiro reporter
    • FFmpegはライセンスがややこしいので、組み込みは難しい。自前で用意してもらうというのも利便性に欠ける。

  2. Log in to comment