Skip to content
dsh-market Browse plugins GitHub 中文

STARDUSTLC666/dsh-ffmpeg

Seven video tools (probe/cut/concat/encode/subtitle/extract/gif) on the official subprocess service: shell-free argv, zero runtime dependencies.

Stars ★ 4 Category Tools & Capabilities Listed 2026-08-15 npm dsh-ffmpeg

Install

Inside DeepSeek Harness, with dsh-market

dsh plugin --profile web add dshmarket

Or from the command line

dsh plugin --profile web add dsh-ffmpeg

Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.

README

中文

dsh-ffmpeg

DSH (DeepSeek Harness) video-processing plugin: seven tools covering probing, cutting, concatenation, transcoding, subtitles, extraction and GIF creation — all powered by ffmpeg/ffprobe.

Installation

dsh plugin --profile web add dsh-ffmpeg

ffmpeg must be installed locally (ffmpeg -version should work); use ffmpegPath / ffprobePath, or the DSH_FFMPEG_PATH / DSH_FFPROBE_PATH environment variables, when it is not on PATH.

Configuration

Override the plugin row in your profile's cordis.patch.yml (defaults apply when absent):

- id: ffmpeg
  name: 'dsh-ffmpeg'
  config:
    # ffmpegPath: C:\tools\ffmpeg\bin\ffmpeg.exe   # explicit path (or DSH_FFMPEG_PATH)
    # ffprobePath: C:\tools\ffmpeg\bin\ffprobe.exe # or DSH_FFPROBE_PATH
    timeoutMs: 300000                                # per-operation timeout (default 5 min, 10s - 2h)
    # overwrite: true                                 # allow overwriting outputs (default auto-suffix _1/_2)

Tools

Tool Purpose Key parameters
ffmpeg_probe Probe media info (format/duration/resolution/fps/bitrate/audio/subtitle streams; multi-video files return a full videos list) input required
ffmpeg_cut Cut a clip (stream copy by default, accurate re-encode optional) input required; start/end/duration
ffmpeg_concat Concatenate 2-20 clips (stream copy for identical codecs / re-encode for mixed) inputs array required
ffmpeg_encode Transcode with presets (bilibili 1080p/4K, vertical 1080p, web-720p) plus crf/fps/scale overrides input required; preset optional
ffmpeg_subtitle Burn subtitles (SRT/ASS hard subs) input + subtitle required
ffmpeg_extract Extract audio (m4a) / frame sequences / single frame / subtitle stream input + what required
ffmpeg_gif Video to high-quality GIF (two-pass palette) input required; fps/width/duration optional

Examples

ffmpeg_probe { input: E:\videos\raw.mp4 }
ffmpeg_cut { input: E:\videos\raw.mp4, start: 10, end: 30 }
ffmpeg_encode { input: E:\videos\raw.mp4, preset: bilibili-1080p }
ffmpeg_subtitle { input: E:\videos\raw.mp4, subtitle: E:\videos\subs.srt }
ffmpeg_gif { input: E:\videos\raw.mp4, duration: 3, width: 480 }

Safety

  • No shell: every argument is passed as its own argv element — user input cannot inject commands
  • Runs on the official DSH subprocess service: the timeout AbortSignal now really drives tree-scoped termination (SIGTERM → kill; taskkill /T on Windows), zero runtime dependencies
  • No accidental overwrites: existing outputs get auto-suffixed; output == input is rejected
  • Timeout clamps: per-operation 10s - 2h; probes additionally capped at 60s
  • Input validation: time formats, preset enums, crf/fps/scale ranges are validated up front; directory inputs are rejected and extension-less frame-sequence outputs are auto-fixed

Development

pnpm install
pnpm test       # build + 57 tests, including a real-ffmpeg end-to-end suite (auto-skipped without ffmpeg)

License

MIT

Content from the project README on GitHub ↗