Add video preview, source crop, find-videos, and render toasts
Bring the Video tab closer to Shorts with 4K preview stills and crop modes (none, auto, center, plus the visual editor). Settings store a default source folder so Find videos can collect output.avi sequences. Cap the FFmpeg log with auto-scroll, hide repeat spam, and show a Windows notification when a video or short finishes or fails.
This commit is contained in:
@@ -21,6 +21,12 @@ public sealed record AppSettings
|
||||
public required string EndCardHoldSeconds { get; init; }
|
||||
public required string ThumbnailInterval { get; init; }
|
||||
public bool? MoveSourcesToOriginals { get; init; }
|
||||
public string SourceSearchFolder { get; init; } = "";
|
||||
public string VideoSourceCropMode { get; init; } = "Auto";
|
||||
public string VideoCropLeft { get; init; } = "0";
|
||||
public string VideoCropRight { get; init; } = "0";
|
||||
public string VideoCropTop { get; init; } = "0";
|
||||
public string VideoCropBottom { get; init; } = "0";
|
||||
|
||||
// Shorts tab defaults (sticky across launches, same as the fields above).
|
||||
public string ShortsStyle { get; init; } = "Brand";
|
||||
@@ -57,6 +63,12 @@ public sealed record AppSettings
|
||||
EndCardHoldSeconds = "4",
|
||||
ThumbnailInterval = "10",
|
||||
MoveSourcesToOriginals = true,
|
||||
SourceSearchFolder = "",
|
||||
VideoSourceCropMode = "Auto",
|
||||
VideoCropLeft = "0",
|
||||
VideoCropRight = "0",
|
||||
VideoCropTop = "0",
|
||||
VideoCropBottom = "0",
|
||||
};
|
||||
|
||||
public AppSettings Normalize(string fallbackOutputFolder) => this with
|
||||
@@ -73,6 +85,12 @@ public sealed record AppSettings
|
||||
EndCardHoldSeconds = string.IsNullOrWhiteSpace(EndCardHoldSeconds) ? "4" : EndCardHoldSeconds,
|
||||
ThumbnailInterval = string.IsNullOrWhiteSpace(ThumbnailInterval) ? "10" : ThumbnailInterval,
|
||||
MoveSourcesToOriginals = MoveSourcesToOriginals ?? true,
|
||||
SourceSearchFolder = SourceSearchFolder ?? "",
|
||||
VideoSourceCropMode = string.IsNullOrWhiteSpace(VideoSourceCropMode) ? "Auto" : VideoSourceCropMode,
|
||||
VideoCropLeft = string.IsNullOrWhiteSpace(VideoCropLeft) ? "0" : VideoCropLeft,
|
||||
VideoCropRight = string.IsNullOrWhiteSpace(VideoCropRight) ? "0" : VideoCropRight,
|
||||
VideoCropTop = string.IsNullOrWhiteSpace(VideoCropTop) ? "0" : VideoCropTop,
|
||||
VideoCropBottom = string.IsNullOrWhiteSpace(VideoCropBottom) ? "0" : VideoCropBottom,
|
||||
ShortsStyle = string.IsNullOrWhiteSpace(ShortsStyle) ? "Brand" : ShortsStyle,
|
||||
ShortsHook = ShortsHook ?? "THIS RAN ON AN AMIGA",
|
||||
ShortsWebsite = ShortsWebsite ?? "AMIGADB.NET",
|
||||
|
||||
@@ -29,6 +29,11 @@ public sealed record RenderSettings
|
||||
public required double EndCardHoldSeconds { get; init; }
|
||||
public required int ThumbnailInterval { get; init; }
|
||||
public bool MoveSourcesToOriginals { get; init; } = true;
|
||||
public ShortSourceCropMode SourceCropMode { get; init; } = ShortSourceCropMode.Auto;
|
||||
public int CropLeft { get; init; }
|
||||
public int CropRight { get; init; }
|
||||
public int CropTop { get; init; }
|
||||
public int CropBottom { get; init; }
|
||||
public int Width { get; init; } = 3840;
|
||||
public int Height { get; init; } = 2160;
|
||||
public int FramesPerSecond { get; init; } = 50;
|
||||
@@ -37,3 +42,13 @@ public sealed record RenderSettings
|
||||
}
|
||||
|
||||
public sealed record RenderProgress(double Percent, string Stage, string Message);
|
||||
|
||||
/// <summary>Which moment of a long-form video a preview still represents.</summary>
|
||||
public enum VideoPreviewShot
|
||||
{
|
||||
Opening,
|
||||
Closing,
|
||||
}
|
||||
|
||||
/// <summary>PNG stills of the cropped 4K source look and the end card.</summary>
|
||||
public sealed record VideoPreviewFrames(string OpeningPath, string ClosingPath);
|
||||
|
||||
@@ -25,9 +25,10 @@ public enum ShortStyle
|
||||
Video,
|
||||
}
|
||||
|
||||
/// <summary>How the video style crops the Amiga source before overlaying it.</summary>
|
||||
/// <summary>How the Amiga source is cropped before it is scaled into the output.</summary>
|
||||
public enum ShortSourceCropMode
|
||||
{
|
||||
None,
|
||||
Auto,
|
||||
Center,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user