#subtitle #recursion #language #srt #merge #position #matching

nightly app submerger

Submerger combines subtitles from two files into one, with customizable position and color settings

1 unstable release

0.1.2 Sep 20, 2024

#304 in Filesystem

Download history 101/week @ 2024-09-16 31/week @ 2024-09-23 33/week @ 2024-09-30

165 downloads per month

MIT license

25KB
432 lines

Submerger

Submerger is a simple tool designed to merge subtitles from two different files into a single output file. It's especially useful for language learners who want to watch content with subtitles in multiple languages simultaneously.

The tool offers two main functionalities: Direct merging of two subtitle files for quick, one-time use, and a more advanced recursive search feature that scans entire directories for subtitle files matching specific language preferences.

Features

  • Merge two subtitle files into one output file.
  • Customize subtitle color and position for the second subtitle track.
  • Recursively search directories for subtitle files to merge based on language markers.
  • Supports both .srt and .vtt subtitle formats for inputs, only outputs .srt however.

Installation

Cargo

Installation

To install using cargo:

cargo install submerger

Building

One way to build this project is using Rust.

Clone the repository:

git clone https://github.com/rasmus-kirk/submerger.git
cd submerger

Build the project:

cargo build --release

Nix

Installation

nix profile install github:rasmus-kirk/submerger

Building

This project has a nix flake, so it can be built using nix:

nix build github:rasmus-kirk/submerger

Running

If you just wish to run the program using nix:

nix run github:rasmus-kirk/submerger -- --help

Developement Shell

To enter a developement shell with the correct rust-toolchain and rust analyzer using nix:

nix develop github:rasmus-kirk/submerger

If you use a shell other than bash:

nix develop github:rasmus-kirk/submerger -c $SHELL

Usage

You can either merge two files directly or recursively search a directory for matching subtitle pairs.

1. Merging Two Subtitle Files

Merge two subtitle files into a single output:

submerger simple [OPTIONS] <SUB1> <SUB2> <OUT>

Required:

  • <SUB1>: Path to the first subtitle file
  • <SUB2>: Path to the first subtitle file
  • <OUT>: Output file where the merged subtitles will be saved

Optional:

  • --color <COLOR> Sets the color for the second subtitle track
  • --position <POSITION> Sets the position of the second subtitle track (default: top-center)
  • --log-level <LOG_LEVEL> Sets the level of logging [default: warn] [possible values: error, warn, info, debug, trace]
  • --help Print help

Example

submerger simple movie.en.srt movie.ja.srt --out merged.srt --color "#fbf1c7" --position top-center

2. Recursive Subtitle Merging

Search a directory for subtitle files matching given language codes and merge them:

submerger recursive [OPTIONS] <SUB1_LANG> <SUB2_LANG> <PATH>

Required:

  • <SUB1_LANG>: Language code for the first subtitle file (e.g., en for English)
  • <SUB2_LANG>: Language code for the second subtitle file (e.g., ja for Japanese)
  • <PATH>: Root directory to recursively search for subtitle files

Optional:

  • --out-ext <OUT_EXT>: The file extension for the output file (e.g. file.en.srt -> file.merged.srt if set to merged.srt) (Default: srt)
  • --vtt: Also match and convert VTT files. Note, this will not output VTT files, only SRT is supported as output (Default: true)
  • --color <COLOR>: Sets the color for the second subtitle track
  • --position <POSITION>: Sets the position of the second subtitle track (Default: top-center)
  • --log-level <LOG_LEVEL>: Sets the level of logging (Default: warn)

How it works

  • The program reads both subtitle files and assigns different positions and colors to the second subtitle track (if configured).
  • When merging recursively, the program looks for matching subtitle files based on the provided language codes (e.g., en, ja).
  • If hearing-impaired subtitles are found (e.g., en.hi), they will be preferred only if normal subtitles (en) aren't available.
  • The merged subtitle output file will contain both sets of subtitles and be written as ORIGINAL_FILE_NAME.OUT_EXTENSION$ in the directory where the matching subs were found.

Example

submerger recursive en ja ./movies --color "#fbf1c7" --position top-center

License

This project is licensed under the MIT License. See the LICENSE file for details.

Dependencies

~4–15MB
~139K SLoC