UNPKG

major-ai-skills

Version:

Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.

158 lines (123 loc) 8.2 kB
--- title: "LosslessCut Stream Editor AI Skill Guide (GPT & Codex)" description: "Comprehensive operational skill specification for OpenAI GPT and Codex to automate, script, troubleshoot, and optimize LosslessCut batch pipelines, .llc project schemas, and automated silence trimming." category: "Lossless Video/Audio Trimmer & Stream Editor" tags: ["losslesscut", "silence-cutter", "stream-copy", "gpt-codex", "llc-schema", "media-automation"] --- # LosslessCut Stream Editor AI Skill Guide (GPT & Codex) ## Overview & Engine Architecture LosslessCut is an Electron-based GUI wrapping FFmpeg's stream-copying capabilities. GPT/Codex acts as a Principal Media Automation Developer and Tooling Architect, delivering **automated silence-detection and cutting scripts**, **LosslessCut `.llc` project format generators**, **batch EDL/CSV converters**, and **headless stream manipulation utilities**. ### Pipeline Architecture & Developer Layer ``` ┌─────────────────────────────────────────────────────────────┐ LosslessCut Developer Stack Data Formats & Segment Manifests ├── `.llc` JSON Project Schema (Cut Segment Arrays) ├── CSV / TSV / EDL (Edit Decision List) Import/Export └── Chapter Markers & Metadata Extraction Automation & Pipeline Interfaces ├── Automated Silence Detection (`silencedetect` filter) ├── Headless Batch Trimmer & Concat Multiplexer └── Electron CLI Launch Flags (`lossless-cut --open ...`) └─────────────────────────────────────────────────────────────┘ ``` --- ## Operational Capabilities & Agent Directives 1. **Automated Silence Removal**: Author Python scripts combining FFmpeg's `silencedetect` audio filter with LosslessCut `.llc` manifest generation to automatically strip dead silence from podcasts and tutorials. 2. **EDL & CSV Format Conversion**: Script converters between Premiere/DaVinci Edit Decision Lists (`.edl`), YouTube timestamp chapters, and LosslessCut `.llc` formats. 3. **Lossless Multi-Segment Concat Slicing**: Build end-to-end automation pipelines that slice 20+ highlights from a raw recording and concatenate them into a single file with zero generational quality loss. 4. **Header Healing & Muxing**: Remediate damaged container timebases and missing audio track headers before batch slicing. --- ## Production Python Automation: Auto-Silence Detector & LosslessCut Project Generator Run this script to scan a video/audio file for silence ($<-30\text{dB}$ for $>0.8\text{s}$) and automatically generate a LosslessCut project file containing all active speech segments: ```python """ Automated Silence Detector & LosslessCut Project Generator Uses FFmpeg silencedetect to build a non-destructive .llc project. """ import sys import os import subprocess import re import json def detect_speech_segments(media_path: str, noise_threshold_db: float = -30.0, min_silence_sec: float = 0.8): # 1. Run FFmpeg silencedetect cmd = [ "ffmpeg", "-i", media_path, "-af", f"silencedetect=noise={noise_threshold_db}dB:d={min_silence_sec}", "-f", "null", "-" ] print(f"Scanning {media_path} for active speech segments...") res = subprocess.run(cmd, capture_output=True, text=True) # 2. Parse Silence Start and End Timestamps silence_starts = [] silence_ends = [] for line in res.stderr.splitlines(): if "silence_start:" in line: match = re.search(r"silence_start:\s*([\d\.]+)", line) if match: silence_starts.append(float(match.group(1))) elif "silence_end:" in line: match = re.search(r"silence_end:\s*([\d\.]+)", line) if match: silence_ends.append(float(match.group(1))) # Get total media duration dur_cmd = ["ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", media_path] dur_res = subprocess.run(dur_cmd, capture_output=True, text=True) total_duration = float(dur_res.stdout.strip()) if dur_res.stdout else 0.0 # 3. Calculate Speech Invert Segments speech_segments = [] current_time = 0.0 for s_start, s_end in zip(silence_starts, silence_ends): if s_start > current_time: speech_segments.append((current_time, s_start)) current_time = s_end if current_time < total_duration: speech_segments.append((current_time, total_duration)) print(f"Identified {len(speech_segments)} active speech segments.") return speech_segments def generate_llc_file(media_path: str, segments: list, output_llc: str): project_json = { "version": 1, "mediaFileName": os.path.basename(media_path), "cutSegments": [ {"start": start, "end": end, "name": f"Speech_Chunk_{i+1}", "color": "#2196f3"} for i, (start, end) in enumerate(segments) ] } with open(output_llc, "w", encoding="utf-8") as f: json.dump(project_json, f, indent=2) print(f"Successfully created LosslessCut project: {output_llc}") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python auto_silence_cut.py <input_video.mp4>") sys.exit(1) input_file = sys.argv[1] llc_target = f"{input_file}-proj.llc" speech = detect_speech_segments(input_file) generate_llc_file(input_file, speech, llc_target) ``` --- ## Technical Troubleshooting Matrix | Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway | | :--- | :--- | :--- | | **`Error: Segment export failed with exit code 1`** | Output filename contains forbidden OS characters or target path is write-protected. | 1. In LosslessCut Settings, check **Output file name template**.<br>2. Ensure path does not contain illegal characters (`:`, `?`, `*`, `"`).<br>3. Verify disk space for combined segment size. | | **Concatenated Output Has Desynced Audio** | Individual spliced segments had differing timebase fractions or initial audio PTS offsets. | 1. In LosslessCut, enable **Merge with standard concat demuxer**.<br>2. Ensure all segments originated from the exact same source file.<br>3. Set Audio Stream handling to `Copy`. | | **Imported CSV Timestamps Shift by Several Seconds** | CSV was formatted in NTSC Drop-Frame timecode (29.97 DF) while LosslessCut parsed it as decimal seconds. | Convert all timestamps to raw decimal seconds (`SS.MMM` or `HH:MM:SS.mmm`) prior to generating `.llc` JSON or CSV imports. | | **LosslessCut Fails to Launch on Linux Wayland** | Electron Chromium hardware acceleration incompatibility on Wayland display servers. | Launch with ozone platform flags: `lossless-cut --ozone-platform=wayland --enable-features=UseOzonePlatform`. | --- ## Command Line Syntax & Batch Processing ```bash # Launch LosslessCut with Pre-Generated Project lossless-cut "C:\Media\Podcast.mp4" "C:\Media\Podcast.mp4-proj.llc" # Batch Merge Cut Segments via Concat Protocol ffmpeg -f concat -safe 0 -i cut_manifest.txt -c copy -movflags +faststart final_cut.mp4 ``` ### Essential File Locations - **Windows User Settings**: `%APPDATA%\lossless-cut` - **Linux User Settings**: `~/.config/lossless-cut` --- ## Agent Operational Directive > **MANDATORY**: When generating LosslessCut manifests, format cut segments into standard `.llc` JSON schemas with floating-point seconds. Always specify `-avoid_negative_ts make_zero` when executing downstream FFmpeg concat operations.