Skip to main content

Automatically synchronize and translate subtitles with pretrained deep neural networks, forced alignments and transformers.

Project description

subaligner

Build Status Codecov Python 3.10 Python 3.9 Python 3.8 Documentation Status GitHub license PyPI Docker Build Docker Pulls Citation

Supported Formats

Subtitle: SubRip, TTML, WebVTT, (Advanced) SubStation Alpha, MicroDVD, MPL2, TMP, EBU STL, SAMI, SCC and SBV.

Video/Audio: MP4, WebM, Ogg, 3GP, FLV, MOV, Matroska, MPEG TS, WAV, MP3, AAC, FLAC, etc.

:information_source: Subaligner relies on file extensions as default hints to process a wide range of audiovisual or subtitle formats. It is recommended to use extensions widely acceppted by the community to ensure compatibility.

Dependencies

Required by basic: FFmpeg

$ apt-get install ffmpeg

or

$ brew install ffmpeg

Basic Installation

$ pip install -U pip && pip install -U setuptools
$ pip install subaligner

or install from source:

$ git clone git@github.com:baxtree/subaligner.git && cd subaligner
$ pip install -U pip && pip install -U setuptools
$ python setup.py install

:information_source: It is highly recommended creating a virtual environment prior to installation.

Installation with Optional Packages Supporting Additional Features

# Install dependencies for enabling translation and transcription

$ pip install 'subaligner[llm]'
# Install dependencies for enabling forced alignment

$ pip install 'subaligner[stretch]'
# Install dependencies for setting up the development environment

$ pip install 'subaligner[dev]'

Note that both subaligner[stretch] and subaligner[dev] require additional dependencies to be pre-installed:

$ apt-get install espeak libespeak1 libespeak-dev espeak-data

or

$ brew install espeak

To install all supported features:

$ pip install 'subaligner[harmony]'

Container Support

If you prefer using a containerised environment over installing everything locally, run:

$ docker run -v `pwd`:`pwd` -w `pwd` -it baxtree/subaligner bash

For users on Windows 10: Docker Desktop is the only option at present. Assuming your media assets are stored under d:\media, open built-in command prompt, PowerShell, or Windows Terminal and run:

docker pull baxtree/subaligner
docker run -v "/d/media":/media -w "/media" -it baxtree/subaligner bash

Usage

# Single-stage alignment (high-level shift with lower latency)

$ subaligner -m single -v video.mp4 -s subtitle.srt
$ subaligner -m single -v https://example.com/video.mp4 -s https://example.com/subtitle.srt -o subtitle_aligned.srt
# Dual-stage alignment (low-level shift with higher latency)

$ subaligner -m dual -v video.mp4 -s subtitle.srt
$ subaligner -m dual -v https://example.com/video.mp4 -s https://example.com/subtitle.srt -o subtitle_aligned.srt
# Generate subtitles by transcribing audiovisual files
$ subaligner -m transcribe -v video.mp4 -ml eng -mr whisper -mf small -o subtitle_aligned.srt
$ subaligner -m transcribe -v video.mp4 -ml zho -mr whisper -mf medium -o subtitle_aligned.srt
# Alignment on segmented plain texts (double newlines as the delimiter)

$ subaligner -m script -v test.mp4 -s subtitle.txt -o subtitle_aligned.srt
$ subaligner -m script -v https://example.com/video.mp4 -s https://example.com/subtitle.txt -o subtitle_aligned.srt
# Alignment on multiple subtitles against the single media file

$ subaligner -m script -v test.mp4 -s subtitle_lang_1.txt -s subtitle_lang_2.txt
$ subaligner -m script -v test.mp4 -s subtitle_lang_1.txt subtitle_lang_2.txt
# Alignment on embedded subtitles

$ subaligner -m single -v video.mkv -s embedded:stream_index=0 -o subtitle_aligned.srt
$ subaligner -m dual -v video.mkv -s embedded:stream_index=0 -o subtitle_aligned.srt
# Translative alignment with the ISO 639-3 language code pair (src,tgt)

$ subaligner --languages
$ subaligner -m single -v video.mp4 -s subtitle.srt -t src,tgt
$ subaligner -m dual -v video.mp4 -s subtitle.srt -t src,tgt
$ subaligner -m script -v test.mp4 -s subtitle.txt -o subtitle_aligned.srt -t src,tgt
$ subaligner -m dual -v video.mp4 -tr helsinki-nlp -o subtitle_aligned.srt -t src,tgt
$ subaligner -m dual -v video.mp4 -tr facebook-mbart -tf large -o subtitle_aligned.srt -t src,tgt
$ subaligner -m dual -v video.mp4 -tr whisper -tf small -o subtitle_aligned.srt -t src,eng
# Transcribe audiovisual files and generate translated subtitles

$ subaligner -m transcribe -v video.mp4 -ml src -mr whisper -mf small -tr helsinki-nlp -o subtitle_aligned.srt -t src,tgt
# Shift subtitle manually by offset in seconds

$ subaligner -m shift --subtitle_path subtitle.srt -os 5.5
$ subaligner -m shift --subtitle_path subtitle.srt -os -5.5 -o subtitle_shifted.srt
# Run batch alignment against directories

$ subaligner_batch -m single -vd videos/ -sd subtitles/ -od aligned_subtitles/
$ subaligner_batch -m dual -vd videos/ -sd subtitles/ -od aligned_subtitles/
$ subaligner_batch -m dual -vd videos/ -sd subtitles/ -od aligned_subtitles/ -of ttml
# Run alignments with pipx

$ pipx run subaligner -m single -v video.mp4 -s subtitle.srt
$ pipx run subaligner -m dual -v video.mp4 -s subtitle.srt
# Run the module as a script
$ python -m subaligner -m single -v video.mp4 -s subtitle.srt
$ python -m subaligner -m dual -v video.mp4 -s subtitle.srt
# Run alignments with the docker image

$ docker pull baxtree/subaligner
$ docker run -v `pwd`:`pwd` -w `pwd` -it baxtree/subaligner subaligner -m single -v video.mp4 -s subtitle.srt
$ docker run -v `pwd`:`pwd` -w `pwd` -it baxtree/subaligner subaligner -m dual -v video.mp4 -s subtitle.srt
$ docker run -it baxtree/subaligner subaligner -m single -v https://example.com/video.mp4 -s https://example.com/subtitle.srt -o subtitle_aligned.srt
$ docker run -it baxtree/subaligner subaligner -m dual -v https://example.com/video.mp4 -s https://example.com/subtitle.srt -o subtitle_aligned.srt

The aligned subtitle will be saved at subtitle_aligned.srt. For details on CLIs, run subaligner -h or subaligner_batch -h, subaligner_convert -h, subaligner_train -h and subaligner_tune -h for additional utilities. subaligner_1pass and subaligner_2pass are shortcuts for running subaligner with -m single and -m dual options, respectively.

Advanced Usage

You can train a new model with your own audiovisual files and subtitle files:

$ subaligner_train -vd VIDEO_DIRECTORY -sd SUBTITLE_DIRECTORY -tod TRAINING_OUTPUT_DIRECTORY

Then you can apply it to your subtitle synchronisation with the aforementioned commands. For more details on how to train and tune your own model, please refer to Subaligner Docs.

Anatomy

Subtitles can be out of sync with their companion audiovisual media files for a variety of causes including latency introduced by Speech-To-Text on live streams or calibration and rectification involving human intervention during post-production.

A model has been trained with synchronised video and subtitle pairs and later used for predicating shifting offsets and directions under the guidance of a dual-stage aligning approach.

First Stage (Global Alignment):

Second Stage (Parallelised Individual Alignment):

Acknowledgement

This tool wouldn't be possible without the following packages: librosa tensorflow scikit-learn pycaption pysrt pysubs2 aeneas transformers openai-whisper.

Thanks to Alan Robinson and Nigel Megitt for their invaluable feedback.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

subaligner-0.3.1.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

subaligner-0.3.1-py3.10.egg (1.2 MB view details)

Uploaded Egg

subaligner-0.3.1-py3.9.egg (1.2 MB view details)

Uploaded Egg

subaligner-0.3.1-py3.8.egg (1.2 MB view details)

Uploaded Egg

subaligner-0.3.1-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file subaligner-0.3.1.tar.gz.

File metadata

  • Download URL: subaligner-0.3.1.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.2

File hashes

Hashes for subaligner-0.3.1.tar.gz
Algorithm Hash digest
SHA256 a6cb98cc61bedab216a24e3b83eaca10df682872f79e769b3a50c626114626f6
MD5 ec032e987b71a220369fe25b6fd36e7d
BLAKE2b-256 9ed6186ad2893cae664cdec61e6789fadbecfa5d1b84700d74b30ce2de7a5a66

See more details on using hashes here.

File details

Details for the file subaligner-0.3.1-py3.10.egg.

File metadata

  • Download URL: subaligner-0.3.1-py3.10.egg
  • Upload date:
  • Size: 1.2 MB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.2

File hashes

Hashes for subaligner-0.3.1-py3.10.egg
Algorithm Hash digest
SHA256 dc3ea666a9cabd63bf41d3418f3d72e01dd20a41ec374d00eacf1318d0fa4436
MD5 6b42b9ebd4fa467625f3db5788a53ccc
BLAKE2b-256 f1879af7dfd16fc06024a1adbf5eb6ba28c61a8be87449c25d4f6188851be097

See more details on using hashes here.

File details

Details for the file subaligner-0.3.1-py3.9.egg.

File metadata

  • Download URL: subaligner-0.3.1-py3.9.egg
  • Upload date:
  • Size: 1.2 MB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.4

File hashes

Hashes for subaligner-0.3.1-py3.9.egg
Algorithm Hash digest
SHA256 61cb9e330cd51e6946ff1f9b5fd64c9387bb129e13b8d1615687d96cf42d03ee
MD5 f3174608302484df0d56bf258d01464c
BLAKE2b-256 418d777221ed281086e9cf8458a49366cd002a3273b743fc3857f259ade0ae4c

See more details on using hashes here.

File details

Details for the file subaligner-0.3.1-py3.8.egg.

File metadata

  • Download URL: subaligner-0.3.1-py3.8.egg
  • Upload date:
  • Size: 1.2 MB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.2

File hashes

Hashes for subaligner-0.3.1-py3.8.egg
Algorithm Hash digest
SHA256 44908883b0ae90aaf641075244f08c352e49d6a45a6e2287b210b34da22701a0
MD5 45a73155e00f9d89215000625dfa0cf0
BLAKE2b-256 a51da92464fef35fba6a91666a6f606ddf740362c08278f8fa60b56899ca6b2a

See more details on using hashes here.

File details

Details for the file subaligner-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: subaligner-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.2

File hashes

Hashes for subaligner-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d003e059bc66c1b9ce54bd91812a92d77644e722c93ad8a45827d7fd1ec07241
MD5 0912be60480d0bb0925cb7e0d7a275ea
BLAKE2b-256 bfec8b2142e544b75a65aba482d29762f99d2d5dfc32cffe5029b4355c25e1b9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page