4 个版本
新版本 0.1.4 | 2024 年 8 月 23 日 |
---|---|
0.1.3 | 2024 年 8 月 23 日 |
0.1.2 | 2024 年 8 月 22 日 |
0.1.1 | 2024 年 8 月 21 日 |
0.1.0 |
|
1 in #ass
每月 237 次下载
60KB
915 行
AssParser
ass_parser 是一个用于解析 .ass(高级子站 alpha)文件的 crate。它是一种视频文件中创建和显示字幕的字幕文件。由于其复杂的文本格式化、定位和样式,它被广泛使用。高级子站 alpha 是 SubStation Alpha .ssa 文件的继承者。
安装
将 ass_parser
添加到您的 cargo.toml 作为依赖项
cargo add ass_parser
介绍
AssParser 基于易于阅读、编写和修改 .ass
文件的原则。这是 ass_parser
的第一个版本,目前仅具有修改 .ass
文件的功能。
示例
使用默认值创建一个简单的 Advanced SubStation Alpha
(.ass)
文件!
use ass_parser::{self, AssFile, ScriptInfo, V4Format, Events, AssFileOptions};
use hex_color::HexColor;
fn main() {
let mut ass_file = AssFile::new();
let hexcolor = AssFileOptions::get_ass_color(HexColor::YELLOW);
ass_file.components.script
.set_script(ScriptInfo::default());
ass_file.components.v4
.set_v4(V4Format::default())
.set_primarycolour(&hexcolor);
ass_file.components.events
.set_events(Events::default());
AssFile::save_file(&ass_file, "new_subtitles.ass")
}
在这里,我们创建一个具有默认值的 .ass 文件,当你打开 .ass 文件时,你可以看到以下内容。
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288
ScaledBorderAndShadow: yes
YCbCr Matrix: None
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,16,&H00ff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,Hello Friend
添加对话
use ass_parser::{self, AssFile, ScriptInfo, V4Format, Events, AssFileOptions, Dialogue};
use ass_parser::IndexNotFound;
use hex_color::HexColor;
fn main() -> Result<(), IndexNotFound>{
let mut ass_file = AssFile::new();
let hexcolor = AssFileOptions::get_ass_color(HexColor::YELLOW);
let first_dialogue = Dialogue::default()
.set_text("Hello There!")
.set_start("0:00:00.10")
.set_end("0:00:00.50");
let second_dialogue = Dialogue::default()
.set_text("Hello Friend!")
.set_start("00:00.50")
.set_end("00:00.58");
let third_dialogue = Dialogue::default()
.set_text("Hello World!!")
.set_start("0:00:00.58")
.set_end("0:00:01.01");
let events = Events::new()
.add_first_dialogue(first_dialogue)?
.add_dialogue(second_dialogue)
.add_dialogue(third_dialogue)
.create();
ass_file.components.script
.set_script(ScriptInfo::default())
.set_scripttype("FFMPEG");
ass_file.components.v4
.set_v4(V4Format::default())
.set_primarycolour(&hexcolor);
ass_file.components.events
.set_events(events);
AssFile::save_file(&ass_file, "new_subtitles.ass");
Ok(())
}
这将生成一个类似于下面的 ASS 文件
ScriptType: FFMPEG
PlayResX: 384
PlayResY: 288
ScaledBorderAndShadow: yes
YCbCr Matrix: None
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,16,&H0ffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.10,0:00:00.50,Default,,0,0,0,,Hello There!
Dialogue: 0,00:00.50,00:00.58,Default,,0,0,0,,Hello Friend!
Dialogue: 0,0:00:00.58,0:00:01.01,Default,,0,0,0,,Hello World!!
也可以这样创建事件
let first_dialogue = Dialogue::default()
.set_start("0:00:00.10")
.set_end("0:00:00.50");
let second_dialogue = Dialogue::default()
.set_start("00:00.50")
.set_end("00:00.58");
let third_dialogue = Dialogue::default()
.set_start("0:00:00.58")
.set_end("0:00:01.01");
let events = Events::new()
.add_first_dialogue(first_dialogue)?
.add_dialogue(second_dialogue)
.add_dialogue(third_dialogue)
.create();
你可以将这个字幕文件烧录到视频中,或者使用任何视频播放器选择与这个字幕文件一起的视频文件。
使用 FFmpeg 烧录带有字幕的视频。
首先,你必须在你的系统上下载并安装 FFmpeg 来尝试此操作。一旦下载,你可以使用以下命令将视频文件 video.avi
和生成的字幕文件 new_subtitles.ass
烧录到单个输出视频文件 output.avi
ffmpeg -i video.avi -vf "ass=new_subtitles.ass" output.avi
依赖项
~88KB