# 画像と動画の効率化について

> DRAFT
> 
> この文章は、アイデア資料です。正式決定や指針ではありません。

## Alice System の掲げるコンセプト

現時点で、Alice System は独自構文 (Anov Syntax) による開発の効率化や、共通エンジン方式[^ce]による軽量化などをメリットとして表示しています。

[^ce]: 共通エンジン方式 (独自用語) - Alice Novel のようにゲームエンジン自体を共通化し、ゲームテキストや画像のみ頒布する方式。(ゲームテキストや画像だけでなく、ゲームエンジンも同梱して配布するのが一般的)

しかし、学習難易度が低いとはいえ Anov Syntax は独自構文であるため、それを学ぶ必要があり、共通エンジン方式に関しても、ノベルゲームにおいて一番重い画像や動画を軽量化できていないという点であまりメリットとなっていませんでした。

## 画像と動画の効率化について

Alice System の共通エンジン方式のメリットを伸ばし、軽量化を進めるため、画像や動画を自動的に Webp や Webm のように圧縮効率が良いものに変換するシステムを搭載することを検討しています。  

これは、Alice Console の `pack` コマンド (または `pack publish`) の際に実行する予定です。そのため、Alice Novel には直接的な関係はありません。

### 画像圧縮

こちら: <https://qiita.com/kimamanaDr/items/0a5ae262136fc6bcf691> の記事を参考に、画像圧縮方式の比較データを表示します。

(圧縮率は PNG を0%とする。圧縮率は画像によるので参考程度)

| 圧縮方式 | 可逆 | 圧縮率 (参考) |
| - | - | - |
| PNG | 可逆 | 0% |
| WebP | 可逆 | 19% |
| AVIF | 可逆 | 21% |
| JPEG | 非可逆 | 87% |
| WebP | 非可逆 | 90% |
| AVIF | 非可逆 | 91% |

JPEG も十分に圧縮率が高いように見えますが、劣化が激しいように見える (あくまで主観的) ため、WebP または AVIF を検討しています。

自動設定/容量優先設定では非可逆を、画質優先設定では可逆を採用する予定です。

### 動画圧縮

mp4 から WebM への変換はあまり容量削減につながらない可能性があるため、こちらは行わないかもしれません。(また、画像とは異なり変換に時間がかかるため)

圧縮率だけでいうと、H.265 を採用するのが良いのですが、こちらは GPU を利用したハードウェアエンコードを必要とするため、あまり推奨できません。

### 音声圧縮

先述では話題に上げていませんでしたが、音声に関しても圧縮方式を変えることができます。しかし、フル音声サポートでない限りは、あまり音声が重くなることはないため、先述では言及を避けていました。

高音質の音声としては wav (非圧縮) が利用されますが、フル音声にする場合は、mp3, ogg, m4a など適当な方式に圧縮するほうが容量削減できると考えています。

## Spec

### Alice Console

```sh
aliceconsole pack publish
```

```diff
# (main.anov)
- > firstplace.png
+ > firstplace.webp

- > greenwich.jpeg
+ > greenwich.webp
```

Files: `xxx.png`, `xxx.jpeg` -> `xxx.webp`

### Anproj

```json
[
  {
    ...
    "images-compression": true,
    "audio-compression": true,
    "movies-compression": false
  }
]
```

or

```json
[
  {
    ...
    "images-compression": "webp",
    "audio-compression": "mp3",
    "movies-compression": "" // none
  }
]
```

## 最後に

圧縮によりデータ量を大幅に削減し、軽量なノベルゲーム開発に貢献できると考えています。
