Files
8-cut/docs/plans/2026-04-06-resize-output-design.md
2026-04-06 13:16:28 +02:00

1.4 KiB

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