3 个不稳定版本

0.2.1 2024年6月30日
0.2.0 2023年12月16日
0.1.0 2023年12月9日

#501解析器实现

Download history 17/week @ 2024-06-02 8/week @ 2024-06-09 1/week @ 2024-06-16 9/week @ 2024-06-23 228/week @ 2024-06-30 7/week @ 2024-07-07 10/week @ 2024-07-21 43/week @ 2024-07-28

每月下载 53 次

0BSD 许可证

165KB
4.5K SLoC

aspasia

aspasia 是一个用 Rust 编写的字幕解析库,提供各种字幕处理功能。

格式解析相对宽松,意味着它会尽力将字幕文件解析为指定的格式,即使它们不完全符合规范。解析格式错误的字幕文件将返回空对象,而不是返回任何错误。

功能

  • 解析各种不同格式的字幕文件
    • SubRip (.srt)
    • 高级 SubStation Alpha V4+ (.ass)
    • SubStation Alpha V4 (.ssa)
    • WebVTT (.vtt)
    • MicroDVD (.sub)
  • 根据文件扩展名和文件内容自动检测字幕格式
  • 在保留兼容格式和信息的同时,在字幕格式之间进行转换
  • 从字幕中移除格式信息
  • 使用实用方法来调整字幕时间、计算单个事件的持续时间等

文档

https://docs.rs/aspasia/latest/aspasia/

用法

安装

您可以使用 Cargo 将 aspasia 添加到您的项目中:cargo add aspasia

...或者您可以编辑您的 Cargo.toml 以添加

[dependencies]
aspasia = "0.2"

示例

基本用法

use aspasia::{SubRipSubtitle, Subtitle, TimedEvent, TimedSubtitleFile, WebVttSubtitle};

// We can directly specify the format to open a subtitle file
let vtt = WebVttSubtitle::from_path("/path/to/some.vtt")?;

// and then directly work with its data
println!("{}", vtt.header().cloned().unwrap_or_default());

// or we could use the more general interface to open (timed) subtitle files
let sub = TimedSubtitleFile::new("/path/to/file.srt")?;

// Move the underlying data out in order to access format-specific properties
// Note that if the format doesn't match, this will perform a conversion instead of just moving the data
let mut srt = SubRipSubtitle::from(sub);

// Now we can access format-specific methods like SubRipSubtitle::renumber()
srt.renumber();

// Access and modify events
for event in srt.events_mut() {
    event.shift(600.into());
}

// Write the modified subtitle to file
srt.export("/path/to/output.srt")?;

格式转换

use aspasia::{AssSubtitle, SubRipSubtitle, Subtitle, TimedSubtitleFile, WebVttSubtitle};

let sub = TimedSubtitleFile::new("/path/to/file.srt")?;

// Get the file as its specific format
let srt = SubRipSubtitle::from(sub);

// You can use into() to convert the file
let vtt: WebVttSubtitle = srt.into();

// or from()
let ass = AssSubtitle::from(vtt);

ass.export("/path/to/converted.ass")?;

请参阅 示例 文件夹以获取更多信息

路线图

aspasia 目前处于开发中,其 API 可能不是稳定的。一旦 API 和功能相对稳定,我将发布 1.0 版本。为此,任何反馈、错误报告或其他形式的贡献都非常欢迎。

计划

  • 改进转换
  • 支持更多字幕格式
  • 更多用于处理字幕/字幕事件的实用方法
  • 更好的测试覆盖率
  • 更好的文档
  • serde 功能?

许可证

aspasia 根据 BSD 0-Clause 许可证授权。

依赖项

~5.5MB
~163K SLoC