pub enum TimedSubtitleFile {
Ass(AssSubtitle),
MicroDvd(TimedMicroDvdSubtitle),
Ssa(SsaSubtitle),
SubRip(SubRipSubtitle),
WebVtt(WebVttSubtitle),
}
Expand description
Convenience interface for interacting with time-based subtitle files in a generic manner.
For example, managing a collection of multiple subtitles of unknown or different formats.
For accessing or modifying format-specific data/methods, such as embedded fonts in SubStation Alpha files,
you should convert to the format-specific types using from()
or into()
Variants§
Ass(AssSubtitle)
File in Advanced SubStation Alpha V4+ (.ass) format
MicroDvd(TimedMicroDvdSubtitle)
Timed version of file in MicroDVD (.sub) format
Ssa(SsaSubtitle)
File in Substation Alpha V4 (.ssa) format
SubRip(SubRipSubtitle)
File in SubRip (.srt) format
WebVtt(WebVttSubtitle)
File in WebVTT (.vtt) format
Implementations§
Source§impl TimedSubtitleFile
impl TimedSubtitleFile
Sourcepub fn new(path: impl AsRef<Path>) -> Result<Self, Error>
pub fn new(path: impl AsRef<Path>) -> Result<Self, Error>
Automatically attempts to detect format using the file extension and file contents.
Using the detected format, try to parse the given path and load its data
§Errors
- If an error is encountered while opening the file, returns
Error::FileIoError
- If the format cannot be successfully detected, returns
Error::FormatUnknownError
Examples found in repository?
3fn main() -> Result<(), Error> {
4 let sub = TimedSubtitleFile::new("/path/to/file.srt")?;
5
6 // Get the file as its specific format
7 let srt = SubRipSubtitle::from(sub);
8
9 // You can use into() to convert the file
10 let vtt: WebVttSubtitle = srt.into();
11
12 // or from()
13 let ass = AssSubtitle::from(vtt);
14
15 ass.export("/path/to/converted.ass")?;
16
17 Ok(())
18}
More examples
3fn main() -> Result<(), Error> {
4 let sub = TimedSubtitleFile::new("/path/to/subtitle.ass")?;
5 let mut ass = AssSubtitle::from(sub);
6
7 println!("{}", ass.script_info());
8
9 for event in ass.events_mut() {
10 event.style = Some("Karaoke".to_string());
11
12 if event.duration() > TimeDelta::from(500) {
13 event.shift(2000.into());
14 }
15 }
16
17 ass.export("/path/to/output.ass")
18}
3fn main() -> Result<(), Error> {
4 // We can directly specify the format to open a subtitle file
5 let vtt = WebVttSubtitle::from_path("/path/to/some.vtt")?;
6
7 // and then directly work with its data
8 println!("{}", vtt.header().cloned().unwrap_or_default());
9
10 // or we could use the more general interface to open (timed) subtitle files
11 let sub = TimedSubtitleFile::new("/path/to/file.srt")?;
12
13 // Move the underlying data out in order to access format-specific properties
14 // Note that if the format doesn't match, this will perform a conversion instead of just moving the data
15 let mut srt = SubRipSubtitle::from(sub);
16
17 // Now we can access format-specific methods like SubRipSubtitle::renumber()
18 srt.renumber();
19
20 // Access and modify events
21 for event in srt.events_mut() {
22 event.shift(600.into());
23 }
24
25 // Write the modified subtitle to file
26 srt.export("/path/to/output.srt")?;
27
28 Ok(())
29}
Sourcepub fn with_format(
path: impl AsRef<Path>,
format: Format,
) -> Result<Self, Error>
pub fn with_format( path: impl AsRef<Path>, format: Format, ) -> Result<Self, Error>
Try to load and parse file as the given format
§Errors
If an error is encountered while opening the file, returns Error::FileIoError