Metadata-Version: 2.1
Name: danmakuC
Version: 0.2.1
Summary: Faster conversion for larger Danmaku to Ass format
Author: HFrost0, m13253, Nyakku Shigure
License: GPLv3
Classifier: Programming Language :: C++
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.8.3
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: protobuf (>=4.21.0)

# danmakuC

Faster conversion for larger Danmaku to Ass format. Core conversion part is written in C++ while with
user-friendly Python api and cli.

Currently, support types:

* [bilibili](htts://wwww.bilibili.com) protobuf

## Why danmakuC?

.ass format can be recognized by your local video player,
while [Danmaku2ASS](https://github.com/m13253/danmaku2ass) and [biliass](https://github.com/yutto-dev/biliass) provides
a great tool to convert danmaku to ass format, the conversion of large danmaku is **incredibly slow** since it's a heavy
CPU bound task for Python🥲. danmakuC refactor those two repos and provide a much faster C++ implementation to speed up
conversion. Let's see how fast it is:

|                     | test_dm.bin (218 comments) | test_dm_large.bin (59,003 comments) |
|---------------------|----------------------------|-------------------------------------|
| Danmaku2ASS/biliass | 0.0105 s                   | 47.0650 s                           |
| danmakuC            | 0.0009 s                   | 0.2077 s                            |

> Results are obtained in M1 arm64 chip mac with python3.10 danmakuC v0.1a0, danmaku file is downloaded from bilibili by
> [bilix](https://github.com/HFrost0/bilix).

As you can see, over 100 times faster in large conversion. For video with more viewer and comments
(like movie and tv play), a fast tool like danmakuC is just what you need✊.

## Install

```shell
pip install danmakuC
```

danmakuC have been built for many platforms, including macOS x86_64/arm64, linux x86_64/aarch64 and windows amd64,
more platforms can be found in [pypi](https://pypi.org/project/danmakuC/#files).

If you are using unsupported platforms (like win32), `pip` will let you know there is no wheel available,
but feel free to build from source if you are familiar with c++ extension.

## Usage

In python, you can use danmakuC like:

```python
from danmakuC import proto2ass

with open("test_dm_large.bin", "rb") as f:
    ass_text = proto2ass(f.read(), 1920, 1080)

```

If you prefer to use cli, you can use danmakuC like:

```shell
danmakuC src.bin -o tgt.ass
```

for more feature, you can check `-h`

```shell
danmakuC -h

usage: danmakuC [-h] [-o OUTPUT] [-s SIZE] [-rb RESERVE_BLANK] [-fn FONT] [-fs FONTSIZE] [-a ALPHA] [-dm DURATION_MARQUEE] [-ds DURATION_STILL] [-fl FILTER] [-r] [-v] file

danmakuC cli version 0.2a0

positional arguments:
  file                  Comment file to be processed

options:
  -h, --help            show this help message and exit
  -o OUTPUT, --output OUTPUT
                        Output file
  -s SIZE, --size SIZE  Stage size in pixels [default: 1920x1080]
  -rb RESERVE_BLANK, --reserve-blank RESERVE_BLANK
                        Reserve blank on the bottom of the stage [default: 0]
  -fn FONT, --font FONT
                        Specify font face [default: sans-serif]
  -fs FONTSIZE, --fontsize FONTSIZE
                        Default font size [default: 25.0]
  -a ALPHA, --alpha ALPHA
                        Alpha [default: 1.0]
  -dm DURATION_MARQUEE, --duration-marquee DURATION_MARQUEE
                        Duration of scrolling comment display [default: 5.0]
  -ds DURATION_STILL, --duration-still DURATION_STILL
                        Duration of still comment display [default: 5.0]
  -fl FILTER, --filter FILTER
                        Regular expression to filter comments
  -r, --reduce          Reduce the amount of comments if stage is full
  -v, --version         show program's version number and exit


```
