OpenParable
Skip to content
← Back to skills

Video Merger

Documents
video-merger

Video Merger is an Agent Skill for documents published in the opensquilla/opensquilla repository on GitHub: a SKILL.md instruction file an AI agent can load to do this task.

Concatenate a directory of numbered MP4 segments (1_*.mp4, 2_*.mp4, ...) into one MP4 with optional fade transitions, unified resolution/fps/codec. Pure ffmpeg wrapper, no LLM. Trigger when a workflow has produced several short clips that need stitching into a final reel.

View on GitHub ↗
QUICK START

How to use this skill

Bring this guide into your coding agent with a prompt tailored to the tool you use.

  1. Open your project in Codex.
  2. Copy and paste the prompt below.
  3. Review files and risks before approving any action.
Prompt to paste
Inspect the Agent Skill at https://github.com/opensquilla/opensquilla/blob/HEAD/src/opensquilla/skills/bundled/video-merger/SKILL.md and all supporting files. Report provenance, permissions, scripts, dependencies, and security risks. Propose an exact installation into .agents/skills/video-merger, but wait for my approval before writing files or running scripts.

Copying this prompt does not install or run the skill. Review third-party files before use.

video-merger — numbered-segment MP4 concatenator

Combines 1_*.mp4, 2_*.mp4, ... in numeric order into one MP4 (or multiple ~60s chunks), with optional fade transitions, codec/resolution/ fps normalisation.

Inputs (with:)

keyrequireddefaultnotes
input_diryes—Directory containing \d+_*.mp4 segments.
output_pathyes—.mp4 path (full mode) or directory (chunk mode).
modenofullfull or chunk.
transitionno0.5Fade duration in seconds. 0 disables.
fpsno24Target frame rate.
crfno22x264 CRF (0-51, lower = better).
presetnomediumx264 preset.

For chunk mode, pass chunk_duration directly to the script — the meta engine entrypoint above does not template it; use a direct shell call when chunking is needed.

Dependencies

  • ffmpeg ≥ 5.0
  • ffprobe
  • Python 3.8+
  • No Python packages required beyond stdlib.

Install hints (or just run the bundled installer):

OSOne-liner installerManual
Windows (PowerShell)pwsh -ExecutionPolicy Bypass -File install.ps1winget install Gyan.FFmpeg / choco install ffmpeg / scoop install ffmpeg
macOSbash install.shbrew install ffmpeg
Debian/Ubuntubash install.shsudo apt install ffmpeg

The Windows installer (install.ps1) defaults to winget but accepts $env:OPENSQUILLA_FFMPEG_INSTALLER="choco"|"scoop"|"skip" to switch backends. It prints the absolute ffmpeg/ffprobe paths after install so you can pass them to merge.py via --ffmpeg-path / --ffprobe-path when subprocess PATH inheritance is unreliable.

Filename ordering contract

The script picks files matching ^\d+_.*\.mp4$ and sorts by the leading integer. Producers must save segments as 1_shot.mp4, 2_shot.mp4, 3_shot.mp4, etc. The meta-short-drama workflow already follows this.

Output

Stdout: progress lines and the final output path. Non-zero exit on ffmpeg failure.

Failure modes

  • 未找到ffmpeg → install ffmpeg, ensure ffmpeg on PATH or pass --ffmpeg-path directly.
  • 未找到符合命名规则...的MP4文件 → ensure segments are \d+_*.mp4.
  • Mixed resolutions / fps: handled automatically when --resolution is set; otherwise ffmpeg preserves originals (no normalisation).