35 lines
1.4 KiB
Markdown
35 lines
1.4 KiB
Markdown
# Resize Output Design
|
|
|
|
## Overview
|
|
|
|
Add a user-configurable short-side resize to every exported clip. When set, ffmpeg scales the output so the shorter dimension equals the specified pixel value, preserving aspect ratio. When blank, output is native resolution.
|
|
|
|
## UI
|
|
|
|
A labeled `QLineEdit` ("Short side:") with placeholder `"px (opt.)"` added to the export row, immediately before the Export button. Value is optional — blank means no resize.
|
|
|
|
## Persistence
|
|
|
|
`QSettings("8cut", "8cut")` stores the value under key `resize_short_side`. The field is pre-filled on startup and saved on every text change.
|
|
|
|
## ffmpeg Command Change
|
|
|
|
`build_ffmpeg_command` gains an optional `short_side: int | None = None` parameter. When set, it appends:
|
|
|
|
```
|
|
-vf scale='if(lt(iw,ih),N,-2)':'if(lt(iw,ih),-2,N)'
|
|
```
|
|
|
|
Where `N` is the short-side value. This selects width for portrait videos and height for landscape videos. `-2` maintains aspect ratio with even-pixel rounding (required by libx264).
|
|
|
|
No `-vf` flag is added when `short_side` is `None`.
|
|
|
|
## Parsing
|
|
|
|
`MainWindow._on_export` reads the field, strips whitespace, and attempts `int()` conversion. Any non-positive or non-numeric value is treated as no resize (passes `None` to `build_ffmpeg_command`).
|
|
|
|
## Testing
|
|
|
|
- `test_ffmpeg_command_no_resize` — existing test, verify no `-vf` in output
|
|
- `test_ffmpeg_command_with_resize` — pass `short_side=256`, verify `-vf` and the scale expression appear in the command
|