npm stats
  • Search
  • About
  • Repo
  • Sponsor
  • more
    • Search
    • About
    • Repo
    • Sponsor

Made by Antonio Ramirez

eprec

1.15.1

@GitHub Actions

npmHomeRepoSnykSocket
Downloads:0
$ npm install eprec
DailyWeeklyMonthlyYearly

eprec

Tools for processing Epic Web course recordings


Build Status version downloads MIT License

Overview

A Bun-based CLI that processes recorded course videos by splitting chapter markers into separate files, trimming silence at the start/end, and optionally removing spoken "Jarvis" command windows via transcript timestamps refined with audio-based silence detection.

Requirements

  • Bun - runtime and package manager
  • ffmpeg + ffprobe - must be available on PATH
  • whisper-cli (optional) - from whisper.cpp, required for transcription
    • Pass --whisper-binary-path if not on PATH
    • Model file auto-downloads to .cache/whispercpp/ggml-small.en.bin
  • Silero VAD model - auto-downloads to .cache/silero-vad.onnx on first use

Installation

bun install

Quick Start

bun src/process-course-video.ts "/path/to/input.mp4" "/path/to/output" \
  --enable-transcription \
  --keep-intermediates \
  --write-logs

Web UI (experimental)

Start the Remix-powered UI shell (watch mode enabled):

bun run app:start

To preload a local video path for the UI:

bun run app:start -- --video-path "/path/to/video.mp4"

Then open http://localhost:3000. Use -- --port, -- --host, or -- --video-path to override the defaults.

CLI Options

OptionAliasDescriptionDefault
inputInput video file (mp4/mkv)required
outputDirOutput directoryoutput
--min-chapter-seconds-mSkip chapters shorter than this15
--dry-run-dDon't write files or run ffmpegfalse
--keep-intermediates-kKeep .tmp files for debuggingfalse
--write-logs-lWrite log files for skips/fallbacksfalse
--enable-transcriptionRun whisper.cpp for command detectionfalse
--whisper-model-pathPath to whisper.cpp model fileauto-cached
--whisper-languageLanguage for whisperen
--whisper-binary-pathPath to whisper-cli binarysystem PATH
--chapter-cFilter to specific chapters (see below)all

Chapter Selection

The --chapter flag supports flexible selection:

  • Single: --chapter 4
  • Range: --chapter 4-6
  • Open range: --chapter 4-* (chapter 4 to end)
  • Multiple: --chapter 4,6,9-12

Chapter numbers are 1-based by default.

Output Structure

Final files are written to the output directory with names like:

chapter-01-intro.mp4
chapter-02-getting-started.mp4
chapter-03-custom-title.mp4

When --keep-intermediates is enabled, intermediate files go to output/.tmp/:

File PatternDescription
*-raw.mp4Raw chapter clip with initial padding removed
*-normalized.mp4Audio normalized (highpass + denoise + loudnorm)
*-transcribe.wavAudio extracted for whisper
*-transcribe.jsonWhisper JSON output
*-transcribe.txtWhisper text output
*-splice-*.mp4Segments before/after command windows
*-spliced.mp4Concatenated output after command removal
*.logPer-chapter skip/fallback logs
process-summary.logOverall processing summary

Voice Commands

Commands are spoken in the format: jarvis <command> ... thanks

CommandEffect
jarvis bad take thanksSkip the entire chapter
jarvis filename my-custom-name thanksRename output file

The command window (from "jarvis" to "thanks") is removed from the final video.

More Details

Implementation notes and pipeline details live in docs/README.md.

This project was created using bun init in bun v1.3.1. Bun is a fast all-in-one JavaScript runtime.