danmu2ass 0.1.0

哔哩哔哩的 xml 文件转化为 ass 文件
Documentation
use anyhow::{Context, Result};
use clap::Parser;
use danmu2ass::Cli;
use std::fs::File;

fn main() -> Result<()> {
    pretty_env_logger::try_init()?;

    let mut cli = Cli::parse();
    cli.check()?;

    let canvas_config = cli.canvas_config();

    let mut parser = danmu2ass::Parser::from_path(&cli.xml_file)?;
    let writer = File::create(&cli.ass_file.context("ass_file 为空")?)?;
    let mut writer = danmu2ass::AssWriter::new(writer, canvas_config.clone())?;

    let t = std::time::Instant::now();
    let mut count = 0;
    let mut canvas = canvas_config.canvas();
    #[cfg(feature = "quick_xml")]
    let mut buf = Vec::new();
    while let Some(danmu) = parser.next(
        #[cfg(feature = "quick_xml")]
        &mut buf,
    ) {
        let danmu = danmu?;
        if let Some(drawable) = canvas.draw(danmu)? {
            count += 1;
            writer.write(drawable)?;
        }
    }
    println!("弹幕数量:{}, 耗时 {:?}", count, t.elapsed());

    Ok(())
}