Stable

Subtitle Audit

Native desktop app for scanning video libraries and identifying files missing subtitles in a configurable target language.

  • Swift
  • SwiftUI
  • FFprobe

Screenshots

macOS

Windows

Windows screenshots will be added soon

Overview

Subtitle Audit scans local or network video libraries and reports embedded and sidecar subtitle coverage for a configurable target language without modifying source files. It uses FFprobe-backed inspection and library-safe scanning workflows to help review subtitle availability across large media collections. Detection relies on language metadata and filename matching, not speech recognition or OCR, and is not a guarantee that every track, language tag, or sidecar is always found.

Key features

  • Open video files or folders and run an explicit Scan (selection alone does not start analysis)
  • Choose a configurable target subtitle language
  • Detect embedded subtitle streams and common sidecar subtitle files
  • Review results with filters for Missing & Errors, missing target language, unknown language, or all scanned files
  • Export CSV or TXT results and export the Activity Log
  • Read-only, local analysis with a sandboxed bundled FFprobe helper
  • Handle large local or NAS-backed libraries when the share is readable

Platforms

Windows

Coming soon

Desktop utility focused on subtitle coverage checks across local and NAS-hosted media folders. Uses FFprobe-backed media probing to inspect embedded streams and sidecar files. Designed for practical library-level review rather than subtitle editing. Not distributed through the Microsoft Store.

macOS

Coming soon

Minimum OS: macOS 15

Native SwiftUI app for Apple Silicon Macs running macOS 15 or later. Bundles FFprobe 8.1.2 for local media inspection and runs fully offline under the App Sandbox. The ffmpeg executable is not included.

Help

Opening media, running an audit, reading results, and understanding limitations.

Getting started

Open Subtitle Audit, then choose Open Folder… (⌘O) or Open Files… (⌘⇧O), or drag and drop supported video files/folders onto the window. Recent Folders remembers folders you opened previously (via security-scoped bookmarks) so you can re-select them quickly. Press Scan (⌘R) to begin. Selection or drops do not start analysis automatically. Cancel stops in-flight work while keeping completed results so far. Scans are read-only and do not download, edit, remux, rewrite, or delete source files.

Audit workflow

Discovery enumerates enabled video extensions (subject to Settings such as scanning subfolders). Each discovered file can be checked for embedded subtitle streams with the bundled FFprobe helper and/or for sidecar subtitle files next to the video (and optionally common subtitle subfolders). Progress updates as analysis runs. After Cancel, partial results already completed remain visible. You can filter the table, inspect status and reason text, and export results when ready.

Results columns and filters

The results table shows status (adaptive to your target language), verification completeness, file name/path, reason/details, folder, and embedded/sidecar summary columns. Filters include Missing & Errors (rows that need attention, including incomplete verification), Missing Only (definitively missing the target language), Unknown Language, and All Scanned Files. Treat filters as review aids, not exhaustive proof that every possible subtitle was detected.

Result states (Missing, Errors, Incomplete, and more)

Typical outcomes include Has (target language found embedded, sidecar, or both), Missing (no target-language subtitle found after the enabled checks could finish), Unknown Language (a subtitle exists but language could not be determined), Errors (for example ffprobe failed or timed out), and Incomplete (for example sidecar folder access was declined, so “missing” cannot be confirmed). Incomplete rows are not the same as Missing. A file can show a positive primary status while still marking Incomplete when one detection pass could not finish.

Embedded vs sidecar detection

Embedded detection inspects subtitle streams reported by FFprobe inside the container. Sidecar detection looks for companion subtitle files (such as .srt, .vtt, and related types) beside the video, and can check common subtitle subfolders when enabled. Either source can be turned off in Settings. Detection coverage depends on readable metadata, filename patterns, sandbox access, and the bundled FFprobe build; not every track, language, or sidecar is always found.

Incomplete verification and sandbox access

On macOS, App Sandbox requires user-granted access via open panels, drag-and-drop, or Recent Folders bookmarks. If sidecar folder access is declined or listing fails, Subtitle Audit reports Incomplete rather than inventing a Missing result. Grant access to the media folder (or parent that contains sidecars) and scan again to finish verification. Network/NAS volumes work when macOS grants read access to the paths you selected.

Target language and unknown-language policy

Choose the target subtitle language in Settings (default English). Status labels and “missing” logic follow that choice. The optional “Count unknown-language subtitles as valid” setting treats untagged/undetermined subtitles as satisfying the audit for summary purposes; the Reason text still explains that acceptance came from policy, not a verified language tag. When the setting is off, unknown-language rows appear under the Unknown Language filter instead of counting as Has.

Language metadata, filenames, and what is not detected

Language decisions use embedded stream tags (and limited secondary title signals) plus sidecar filename tokens resolved against a language registry (ISO codes, regional forms, and display names). Role markers such as forced, default, SDH/hearing-impaired, and similar may appear in display when present in metadata or filenames; they do not invent a language by themselves. Subtitle Audit does not perform speech recognition or OCR and does not “watch” or “read” subtitle text to infer language. False positives/negatives can occur when tags are missing, wrong, or ambiguous, or when FFprobe cannot read a container.

Exporting results

Export Results… (⌘⇧S) writes CSV or TXT (default format is configurable in Settings) to a location you choose. Exports include status, verification completeness, paths, and related fields so you can review findings outside the app. Exports do not modify your media library.

Activity Log and logging Settings

View → Show Activity Log (⇧⌘L) opens a separate window with scan lifecycle and diagnostic messages. View → Export Activity Log… saves the log as UTF-8 text. Optional on-disk logging can be enabled in Settings → Logging (including automatic save and log folder preferences); logs stay on your computer and are not transmitted by the app.

NAS performance, parallelism, and ffprobe timeout

Settings include scan performance modes (for example Local Fast vs Network / NAS Friendly) and an optional parallel analysis count. Prefer lower parallelism on busy NAS shares to reduce timeouts and I/O contention. An ffprobe timeout (configurable, default 30 seconds within allowed bounds) produces a distinct timed-out error rather than a Missing result; re-run with a higher timeout or fewer parallel probes if needed.

Formats and offline sandbox behavior

Format coverage is constrained by the bundled FFprobe build and the app’s enabled extension list. Analysis runs locally on your Mac with no network entitlement for scanning. The app ships ffprobe only and does not ship the ffmpeg executable. Sandbox access follows user-selected open panels, drag-and-drop, and security-scoped bookmarks for Recent Folders.

Troubleshooting

  • If Scan stays disabled, select files or a folder first, enable at least one of embedded or sidecar detection, and confirm FFprobe status in Settings.
  • If many rows are Incomplete, grant folder access for sidecar inspection and scan again; do not treat Incomplete as Missing.
  • If many files error or time out, check the Activity Log; lower NAS parallelism or raise the ffprobe timeout.
  • Unexpected Missing/Has results can reflect missing or wrong language tags, filename tokens, unknown-as-valid policy, or disabled detection sources.
  • For product questions or to report a problem, use the H61 Apps contact page and include app name, platform, version/build, and an Activity Log export when possible.

Keyboard shortcuts

Shortcuts below apply to the macOS app.

macOS

  • ⌘O Open Folder…
  • ⌘⇧O Open Files…
  • ⌘R Scan
  • ⌘⇧S Export Results…
  • ⌘⇧L Show Activity Log
  • ⌘, Settings
  • ⌘? Subtitle Audit Help

Support

For product questions or to report a problem, use the H61 Apps contact page. Include the app name (Subtitle Audit), platform, version or build, system version, and what happened. If you can, attach an Activity Log export.

Technical details

Cross-platform subtitle coverage auditing with platform-native implementations. The macOS version uses SwiftUI with a sandboxed bundled FFprobe 8.1.2 helper (ffprobe only; built from FFmpeg 8.1.2 source). Language decisions use metadata and filename matching, not speech recognition or OCR. Windows builds use WinUI 3 with FFprobe-backed inspection.

Third-party notices

Subtitle Audit includes a bundled FFprobe helper that runs locally on your computer to inspect media and subtitle-related metadata. It does not upload your media. The app ships ffprobe only and does not ship the ffmpeg executable.

FFprobe is built from the FFmpeg 8.1.2 source package under LGPL 2.1 or later for this build (GPL and nonfree components disabled). License text and source information are included with the app. Corresponding source is published on this website.

FFmpeg project · FFmpeg corresponding source · Privacy Policy