README fixed. Releasing UI now.

This commit is contained in:
Alexander Shabarshov 2026-06-09 14:10:56 +01:00
parent e5a9a04265
commit 9760fbc2e6
4 changed files with 42 additions and 25 deletions

View File

@ -3,7 +3,7 @@ name: Build and Publish
on: on:
push: push:
tags: tags:
- 'v*' - 'v*'
permissions: permissions:
contents: write contents: write
@ -22,19 +22,19 @@ jobs:
dotnet-version: 10.0.x dotnet-version: 10.0.x
- name: Restore - name: Restore
run: dotnet restore -r win-x64 run: dotnet restore Splitter-UI/Splitter-UI.csproj -r win-x64
- name: 'Get Version' - name: Get Version
id: version id: version
uses: battila7/get-version-action@v2 uses: battila7/get-version-action@v2
- name: Publish Release - name: Publish Release
run: dotnet publish splitter-cli/splitter.csproj -c Release -r win-x64 /p:Version=${{ steps.version.outputs.version-without-v }} /p:BuildNumber=${{ github.run_number }} /p:SourceRevisionId=${{ github.sha }} run: dotnet publish Splitter-UI/Splitter-UI.csproj -c Release -r win-x64 /p:Version=${{ steps.version.outputs.version-without-v }} /p:BuildNumber=${{ github.run_number }} /p:SourceRevisionId=${{ github.sha }}
- name: Create ZIP - name: Create ZIP
shell: pwsh shell: pwsh
run: | run: |
$publish = "splitter-cli/bin/Release/net10.0/win-x64/publish" $publish = "Splitter-UI/bin/Release/net10.0/win-x64/publish"
$version = "${{ steps.version.outputs.version-without-v }}" $version = "${{ steps.version.outputs.version-without-v }}"
$zip = "splitter-win-x64-$version.zip" $zip = "splitter-win-x64-$version.zip"
@ -51,5 +51,3 @@ jobs:
files: splitter-win-x64-${{ steps.version.outputs.version-without-v }}.zip files: splitter-win-x64-${{ steps.version.outputs.version-without-v }}.zip
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,5 +1,7 @@
# Splitter # Splitter
This application was built to help me with maintaining my YouTube channel - [UnclShura](https://www.youtube.com/@UnclShura).
Splitter is a high-performance command line tool for cutting one or more video files into equal or Splitter is a high-performance command line tool for cutting one or more video files into equal or
fixedlength segments using multithreaded FFmpeg execution. It supports batch input, flexible fixedlength segments using multithreaded FFmpeg execution. It supports batch input, flexible
duration formats, rotation, smart face/bodyaware cropping, ETA and speed reporting, with nice GUI duration formats, rotation, smart face/bodyaware cropping, ETA and speed reporting, with nice GUI

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 KiB

After

Width:  |  Height:  |  Size: 572 KiB

View File

@ -140,24 +140,41 @@ All option names are preserved exactly, and descriptions are consolidated for cl
## Options ## Options
| Option | Description | | Parameter | Description |
|--------|-------------| |----------|-------------|
| **--out=<folder>** | Output folder for generated segments. Default: `<input folder>/Splitter`. | | --out=&lt;folder&gt; | Output folder for segments. Default: same folder as input video + "Splitter". |
| **--file=<path>** | Input file list or file mask. If omitted, the first non-option argument is used as input. Examples: `--file=videos/*.mp4`, `--file=file_list.txt`. | | --file=&lt;path&gt; | Input names or file masks (e.g. "videos/*.mp4"). If not specified, the first non-option argument is used as input. |
| **--mask=<pattern>** | Custom output filename pattern. Default: `[NAME]_seg[NN].[EXT]`. Supports `[NAME]`, `[N]`, `[NN]`, `[NNN]`, `[NNNN]`, `[EXT]`. Example: `--mask="[NAME]_[NNNN].mp4"`. | | --mask=&lt;pattern&gt; | Output filename pattern. Default: [NAME]_seg[NN].[EXT]. Supports [NAME], [N], [NN], [NNN], [NNNN], [EXT] placeholders. |
| **--duration=<value>** | Override target segment duration. Formats: `Ns`, `NmMs`, `N`. Examples: `--duration=90s`, `--duration=2m30s`, `--duration=45`. Without `--force`: max 58 seconds, equalized across segments. | | --duration=&lt;value&gt; | Override target segment duration. Formats: Ns, NmMs, N. Examples: 90s, 2m30s, 45. Default (without --force): max 58s, equalized segment lengths. |
| **--force** | Use the duration exactly as provided. Last segment may be shorter. | | --force | Use fixed segment duration exactly as given. Last segment may be shorter. Default OFF. |
| **--enhance** | Enable video enhancement. Increases output resolution x4 using RealBasicVSR_x4 model. | | --enhance | Enable video enhancement. Output resolution x4 using RealBasicVSR_x4 model. |
| **--rotate=<degrees>** | Rotate video by 90, 180, or 270 degrees. Useful for correcting orientation metadata. | | --rotate=&lt;degrees&gt; | Rotate video by 90, 180, or 270 degrees. |
| **--rotate-auto** | Use automatic rotation detection. | | --rotate-auto | Auto-detect rotation using edge orientation statistics. |
| **--estimate** | Print calculated segment information and exit. No splitting is performed. | | --estimate | Print calculated segment information and exit. No splitting performed. |
| **--crop[=<w:h>]** | Crop video to a target width and height with face/body tracking. Default: 607x1080. Ideal for Shorts, TikTok, Reels. | | --crop[=&lt;w:h&gt;] | Crop video to width w and height h with face tracking. Default: 607x1080. |
| **--detect=<name>** | Object detector for tracking. Values: `face` (UltraFace), `body` (YoloOnnx, default), `none` (center crop). | | --detect=&lt;name&gt; | Object detector: face (UltraFace), body (YoloOnnx, default), none. |
| **--gravitate=<x:y>** | Bias the crop window toward a normalized point in the frame. Example: `--gravitate=0.2:0.5`. | | --detect-above=&lt;0-1&gt; | Report detections only if upper bound starts below this threshold (0.01.0 mapped to 0..Height). |
| **--text** | Use plain-text logging instead of the rich terminal UI. | | --detect-id=&lt;hex&gt; | Hexadecimal ID of face/person to track across segments. Obtained via --debug overlay. |
| **--single-thread** | Disable parallel FFmpeg execution. Useful for debugging or low-resource systems. | | --gravitate=&lt;x:y&gt; | Gravitate tracking toward normalized point (0.01.0). Example: 0.2:0.5. |
| **--debug** | Show debug overlay during tracking. No cropping performed, but crop region shown. | | --text | Display log in plain text. |
| **-p:<name>=<value>** | Set custom parameters for the object detector. Example: `-p:confidence=0.5`. Defaults: DropoutToleranceFrames=20, EmaFactor=0.65, CameraEasing=0.03, LostFreezeFrames=60. | | --single-thread | Run in single-threaded mode. Useful for debugging or constrained systems. |
| --debug | Show debug overlay during face tracking. |
| -p:&lt;name&gt;=&lt;value&gt; | Set custom detector parameter. Example: -p:EmaFactor=0.65. |
Tracking splitter defaults:
DropoutToleranceFrames = 20;
EmaFactor = 0.65;
CameraEasing = 0.03;
LostFreezeFrames = 60;
Rotation detector defaults:
RotationDetectorSampleCount = 5;
RotationDetectorSampleLength = 0.15;
RotationDetectorFrameWidth = 320;
RotationDetectorFrameHeight = 180;
## FFmpeg Passthrough ## FFmpeg Passthrough