Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

assjs

Package Overview
Dependencies
Maintainers
0
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

assjs

A lightweight JavaScript ASS subtitle renderer

  • 0.1.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
251
increased by81.88%
Maintainers
0
Weekly downloads
 
Created
Source

ASS.js

GitHub Action Codecov License File size

Online Demo ASS specs (zh-Hans) ass-compiler

ASS.js renders ASS subtitles on HTML5 video, with almost full ASS features.

It's lightweight and suitable for web, 60x smaller than WebAssembly solutions:

SolutionSize
ASS.jsDOM
JavascriptSubtitlesOctopusWebAssembly
JASSUBWebAssembly

WebAssembly solutions also requires to set fallback font to avoid CJK characters turning into tofu, it's a huge cost for web. In ASS.js font fallback is handled by browser, it just works.

However compared to WebAssembly solutions, it's almost impossible for DOM to render exactly same result in every pixels as VSFilter or libass, ASS.js will provide best efforts to accurate rendering.

Installation

NPM Version jsDelivr

npm install assjs

ASS.js can be used as a JavaScript module:

<script type="module">
import ASS from '/path/to/assjs/dist/ass.min.js';
</script>

or a classic script:

<script src="/path/to/assjs/dist/ass.global.min.js"></script>
<script>
console.log(window.ASS);
</script>

Usage

<div id="player">
  <video id="video" src="./example.mp4"></video>
  <div id="ass-container"></div>
</div>
import ASS from 'assjs';

const content = await fetch('/path/to/example.ass').then((res) => res.text());
const ass = new ASS(content, document.querySelector('#video'), {
  container: document.querySelector('#ass-container'),
});

new ASS() will append several elements to the container, and sync the render area's size with the video element. You should set styles yourself to make sure the container is overlap on the video and match the position. For example:

<div id="player" style="position: relative;">
  <video id="video" src="./example.mp4" style="position: absolute; top: 0; left: 0;"></video>
  <div id="ass-container" style="position: absolute; top: 0; left: 0;"></div>
</div>

If you click the native fullscreen button in video element, only <video> will be fullscreened, so ASS will not show. You should use a custom button and call document.querySelector('#player').requestFullscreen() to ensure ASS is contained.

API

Initialization
const ass = new ASS(content, video, {
  // Subtitles will display in the container.
  container: document.getElementById('my-container'),

  // see resampling API below
  resampling: 'video_width',
});
Show
ass.show();
Hide
ass.hide();
Destroy
ass.destroy();
Delay
// Subtitles will be 5s later
ass.delay = 5;
// Subtitles will be 3s earlier
ass.delay = -3;
Resampling

When script resolution(PlayResX and PlayResY) don't match the video resolution, this API defines how it behaves. However, drawings and clips will be always depending on script origin resolution.

There are four valid values, we suppose video resolution is 1280x720 and script resolution is 640x480 in following situations:

  • video_width: Script resolution will set to video resolution based on video width. Script resolution will set to 640x360, and scale = 1280 / 640 = 2.
  • video_height(default): Script resolution will set to video resolution based on video height. Script resolution will set to 853.33x480, and scale = 720 / 480 = 1.5.
  • script_width: Script resolution will not change but scale is based on script width. So scale = 1280 / 640 = 2. This may causes top and bottom subs disappear from video area.
  • script_height: Script resolution will not change but scale is based on script height. So scale = 720 / 480 = 1.5. Script area will be centered in video area.
ass.resampling = 'video_width';

Browser Compatibility

ASS.js uses many Web APIs to render subtitles, some features will be disabled if you use a old browser.

FeatureWeb APIChromeFirefoxSafari
Auto resizeResizeObserver646913.1
\[i]clipclip-path and path()889713.1
Animations (\t)registerProperty()7812816.4
accel in \tlinear()11311217.2
\q0text-wrap: balance11412117.5
BorderStyle=3 with \bord0@container111-18.0
\blur with \bord0round()12511815.4

Keywords

FAQs

Package last updated on 09 Nov 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc