#vtt #subtitle #convert #manipulate

rsubs-lib

Pure Rust subtitle manipulation and conversion library

11 releases

new 0.3.3 Apr 27, 2025
0.3.2 Jun 13, 2024
0.3.1 May 22, 2024
0.1.10 Nov 23, 2023
0.1.4 Dec 29, 2022

#881 in Encoding

21 downloads per month
Used in 4 crates

MIT license

87KB
2K SLoC

rsubs-lib

ci clippy Crates.io Crates.io CodeCoverage

A rust library for converting and changing subtitles Currently a work in progress but it should be able to produce usable .srt,.vtt and .ssa/ass files from one another.

Usage:

use rsubs_lib::srt;
use rsubs_lib::ssa;
use rsubs_lib::vtt;
use rsubs_lib::Subtitle;
use std::str::FromStr;

fn main() {
    srt::parse_from_file("./tests/fixtures/test.srt".to_string())
        .unwrap() // Can read either a file or a string
        .to_vtt() // converts file to WEBVTT
        .to_file("./tests/fixtures/test_1.vtt") // Writes the converted subtitle to a file
        .unwrap();
    vtt::parse_from_file("./tests/fixtures/test.vtt")
        .unwrap()
        .to_ass() // converts file to SSA/ASS
        .to_file("./tests/fixtures/test_1.ass")
        .unwrap();
    ssa::parse_from_file("./tests/fixtures/test.ass".to_string())
        .unwrap()
        .to_srt() // converts file to SRT
        .to_file("./tests/fixtures/test_1.srt")
        .unwrap();
    // OR Using the simpler `Subtitle` enum
    let sub: vtt::VTTFile = Subtitle::from_str("./tests/fixtures/test.ass").unwrap().into();
    sub.to_file("./tests/fixtures/test.vtt").unwrap();
}

More examples are provided in the examples folder.

Current features:

  • Changing colors
  • Shifting timestamps
  • Changing line text
  • In SSA and VTT format changing line style is also possible

Dependencies

~3–5MB
~89K SLoC