678af9f9bfd7621163d61657f6b1b1322e69c8b9
MetaMesh Plugin: Subtitle Extractor
Extracts embedded subtitles from video files and saves them as standalone text files. The extracted subtitles are republished in the MetaMesh pipeline and linked to the original video via CID.
Features
- Automatic extraction: Extracts all text-based subtitle tracks from video files
- Multiple formats: Supports SRT, ASS, SSA, WebVTT, and MOV_TEXT codecs
- Smart filtering: Automatically skips image-based subtitles (PGS, DVD, DVB) that cannot be converted to text
- Language preservation: Maintains language metadata from video streams
- Pipeline integration: Extracted files are saved to
/outputand automatically picked up by meta-sort - CID linking: Stores subtitle CIDs as metadata on the source video
Dependencies
This plugin requires the following plugins to run first:
file-info- Determines file typeffmpeg- Provides subtitle stream information
Installation
Build from source
cd packages/plugins/metamesh-plugin-subtitle-extractor
npm install
npm run build
Build Docker image
docker build -t metamesh-plugin-subtitle-extractor:main .
Configure in plugins.yml
Add to dev/plugins.yml:
plugins:
subtitle-extractor:
enabled: true
image: metamesh-plugin-subtitle-extractor:main
instances: 1
resources:
memory: 256m
cpus: 0.5
Configuration
| Option | Type | Default | Description |
|---|---|---|---|
forceRecompute |
boolean | false |
Re-extract subtitles even if already processed |
outputFormat |
select | srt |
Output format: srt, vtt, or ass |
Output
Extracted Files
Subtitle files are saved to /output with the naming pattern:
{Title} ({Year})[{VideoCID}]_subtitle.{lang}.{ext}
Example: Sintel (2010)[bafk...abc]_subtitle.eng.srt
Metadata
The plugin stores the following metadata on the source video:
| Field | Type | Description |
|---|---|---|
extractedSubtitles |
array | CIDs of extracted subtitle files |
subtitleLanguages |
array | Language codes of extracted subtitles |
Supported Codecs
Text-based (supported)
subrip/srt- SubRipass- Advanced SubStation Alphassa- SubStation Alphawebvtt- WebVTTmov_text- QuickTime text
Image-based (skipped)
hdmv_pgs_subtitle- Blu-ray PGSdvd_subtitle- DVD VOBdvb_subtitle- DVBxsub- DivX XSUB
Architecture
Video File (MKV/MP4/AVI)
│
▼
┌───────────────────┐
│ ffmpeg plugin │ ← Provides stream info
└───────────────────┘
│
▼
┌───────────────────┐
│ subtitle-extractor│
│ │
│ 1. Parse streams │
│ 2. Filter codecs │
│ 3. Extract via │
│ ffmpeg │
│ 4. Save to │
│ /output │
│ 5. Compute CID │
│ 6. Store in │
│ Redis │
└───────────────────┘
│
▼
┌───────────────────┐
│ /output folder │ ← Watched by meta-sort
│ *.srt files │
└───────────────────┘
│
▼
┌───────────────────┐
│ meta-sort │ ← Processes extracted files
│ file watcher │ like any other media
└───────────────────┘
Container Mounts
| Mount | Access | Purpose |
|---|---|---|
/files |
READ-ONLY | Source video files |
/cache |
READ-WRITE | Plugin cache |
/output |
READ-WRITE | Extracted subtitle output |
Environment Variables
| Variable | Description |
|---|---|
PORT |
HTTP server port (default: 8080) |
WEBDAV_URL |
WebDAV base URL for file access |
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check |
/manifest |
GET | Plugin manifest |
/configure |
POST | Update configuration |
/process |
POST | Process a video file |
License
MIT
Languages
TypeScript
96.6%
Shell
2.3%
Dockerfile
1.1%