2个不稳定版本
0.2.0 | 2024年2月20日 |
---|---|
0.1.0 | 2024年2月17日 |
#632 in 解析器实现
47 每月下载量
用于 oaapi
155KB
4K SLoC
subtp
一个用于解析字幕文本格式(如SubRip字幕(.srt)格式和WebVTT(.vtt)格式)的Rust解析器。
安装
在您的项目目录中运行以下Cargo命令
cargo add subtp
或向您的Cargo.toml添加以下行
[dependencies]
subtp = "0.2.0"
功能
- SubRip字幕(.srt)解析器和渲染器。
- WebVTT(.vtt)解析器和渲染器。
用法
SubRip字幕(.srt)
将SubRip字幕(.srt)文本解析为subtp::srt::SubRip
结构体。
use subtp::srt::SubRip;
let text = r#"
1
00:00:00,000 --> 00:00:02,000
Hello, world!
2
00:00:02,000 --> 00:00:04,000
This is a subtitle.
"#;
let subrip = SubRip::parse(text)?;
将subtp::srt::SubRip
结构体渲染为SubRip字幕(.srt)文本。
subtp::srt::SubRip
由一个subtp::srt::SrtSubtitle
向量构成。
use subtp::srt::{SubRip, SrtSubtitle, SrtTimestamp};
let subrip = SubRip {
subtitles: vec![
SrtSubtitle {
sequence: 1,
start: SrtTimestamp {
seconds: 1,
..Default::default()
},
end: SrtTimestamp {
seconds: 2,
..Default::default()
},
text: vec!["This is the first subtitle.".to_string()],
..Default::default()
},
SrtSubtitle {
sequence: 2,
start: SrtTimestamp {
seconds: 3,
..Default::default()
},
end: SrtTimestamp {
seconds: 4,
..Default::default()
},
text: vec![
"This is the second subtitle.".to_string(),
"Subtitle text can span multiple lines.".to_string(),
],
..Default::default()
},
],
};
let text = subrip.render();
WebVTT(.vtt)
将WebVTT(.vtt)文本解析为subtp::vtt::WebVTT
结构体。
use subtp::vtt::WebVtt;
let text = r#"WEBVTT
1
00:00:00.000 --> 00:00:02.000
Hello, world!
2
00:00:02.000 --> 00:00:04.000
This is a subtitle.
"#;
let webvtt = WebVtt::parse(text)?;
将subtp::vtt::WebVTT
结构体渲染为WebVTT(.vtt)文本。
subtp::vtt::WebVTT
由一个头部subtp::vtt::VttHeader
和一个subtp::vtt::VttBlcok
向量构成。
subtp::vtt::VttBlcok
可以是以下类型
subtp::vtt::VttCue
- 带有标识符(可选)、时间、设置(可选)和字幕文本的提示块。
subtp::vtt::VttComment
- 带有注释文本的注释块。
subtp::vtt::VttStyle
- 带有CSS样式文本的样式块。
subtp::vtt::VttRegion
- 带有区域定义的区域块。
use subtp::vtt::{WebVtt, VttBlock, VttCue, VttHeader, VttTimings, VttTimestamp};
let webvtt = WebVtt {
blocks: vec![
VttCue {
identifier: Some("1".to_string()),
timings: VttTimings {
start: VttTimestamp {
seconds: 0,
..Default::default()
},
end: VttTimestamp {
seconds: 2,
..Default::default()
},
},
payload: vec!["Hello, world!".to_string()],
..Default::default()
}.into(),
VttCue {
identifier: Some("2".to_string()),
timings: VttTimings {
start: VttTimestamp {
seconds: 2,
..Default::default()
},
end: VttTimestamp {
seconds: 4,
..Default::default()
},
},
payload: vec!["This is a subtitle.".to_string()],
..Default::default()
}.into(),
],
..Default::default()
};
let text = webvtt.render();
其他示例
请参阅./examples目录。
变更日志
请参阅CHANGELOG。
许可证
根据您的选择,许可协议为Apache License, Version 2.0或MIT协议。
依赖项
~0.4–0.9MB
~19K SLoC