Releases: cyroz1/vidcord
Releases · cyroz1/vidcord
v5.6
Full Changelog: v5.5...v5.6
vidcord v5.6
Added
- Preview playback of the selected trim region with audio and play/stop overlay controls.
- Cross-platform preview playback fallback using
QVideoSinkwithQVideoWidgetfallback. - GitHub release update check with in-app notification when a newer version is available.
- Advanced mode (allows user to choose custom target size, resolution, and encoder independently).
Fixed
build.pynow definesmain()and runs correctly.- UI alignment changes
v5.5
Full Changelog: v5.4...v5.5
vidcord v5.5 Release Notes
Highlights
This release focuses on faster start times, improving build stability across platforms, and enhancing hardware acceleration support on Linux.
Build System Improvements (Windows)
- Direct Compilation: Switched from using a third-party GitHub Action to directly invoking the Inno Setup Compiler (ISCC.exe) via Chocolatey. This ensures ensuring build arguments (version, architecture) are correctly passed.
- Robustness: Resolved PowerShell parsing errors in the CI workflow by enforcing cmd shell execution for build steps.
Linux Improvements
- Hardware Acceleration: Improved detection and support for h264_vaapi encoding.
- Robustness: Added retry logic and verbose logging for dependency downloads (ffmpeg, appimagetool) during the AppImage build process to handle transient network failures.
Bug Fixes
- Fixed OutputBaseFileName "invalid value" errors during Windows release builds.
- Fixed Undeclared identifier errors in Inno Setup scripts by refining preprocessor logic.
- Fixed initial preview frame not being loaded.
v5.4
Full Changelog: v5.3...v5.4
v5.4 (2026-01-13)
Bug Fixes
- Linux Hardware Acceleration: Fixed an issue where
h264_vaapiand other hardware encoders were not correctly detected on Linux. - Robust Encoder Detection: Improved the encoder detection mechanism to be more robust across different FFmpeg versions and environments.
Features
- Expanded Linux Support: Enabled NVIDIA (
nvenc), AMD (amf), and Intel (qsv) encoder support on Linux when compatible hardware is detected.
v5.3
Full Changelog: v5.2...v5.3
Changelog
v5.3 (2026-01-13)
Features
- Dynamic Versioning: Automated version extraction from
vidcord.pyfor Windows build artifacts, ensuring consistency between application version and installer filename. - Multi-Platform Consistency: Synchronized versioning across all platform-specific configurations (Inno Setup, macOS PKG, Arch PKGBUILD, Debian Control, and Fedora Spec).
CI/CD & Automation
- Workflow Optimization: Updated GitHub Actions to dynamically pass the version string to Inno Setup compiler.
Bug Fixes
- Fixed issue where Windows installer filenames had incorrect or hardcoded version numbers.
- Fixed Linux hardware acceleration.
- Fixed context menu integration on macOS.
- Fixed build scripts on local environment.
v5.2
Full Changelog: 5.1...v5.2
Changelog
v5.2 (2025-12-20)
Features
- Linux ARM64 Support: Added support for building and distributing Linux AppImages on ARM64 (aarch64) architecture.
- Improved Hardware Detection: Replaced deprecated
wmicwith PowerShell for more reliable GPU detection on Windows, with a robust fallback mechanism.
CI/CD & Automation
- Concurrency Control: Implemented GitHub Actions concurrency settings to prevent duplicate workflow runs on the same branch.
- Enhanced Release Workflow:
- Added support for numeric tags (e.g.,
5.1) in addition to prefixed tags (e.g.,v5.1). - Fixed release permission issues to ensure automated asset uploads.
- Optimized multi-architecture builds for Linux.
- Added support for numeric tags (e.g.,
Bug Fixes
- Fixed potential crashes or detection failures in Windows GPU identification.
- Resolved permission errors during the automated release process.
Maintenance
- General stability improvements and workflow refinements for faster and more reliable builds.
v5.1
Full Changelog: 5.0...5.1
Changelog v5.1 (Cumulative Changes since v5.0)
- Fixed critical Windows build error related to ffmpeg.exe path.
- Resolved issue with rober710/iscc-action by switching to a reliable alternative.
- Improved macOS stability and fixed minor UI alignment issues.
- Updated Linux build scripts and AppImage generation process.
- Refined GPU detection for multi-platform hardware acceleration.
- Optimized startup time with lazy-loading of heavy modules.
- Enhanced settings persistence and encoder mapping.
vidcord v5.0
vidcord v4.9
vidcord v4.9
🎨 Visual Overhaul
- Fluent Design Interface: Completely redesigned using
PyQt-Fluent-Widgetsfor a modern, native Windows 11 look and feel. - New Window Chrome: Implemented a custom title bar and window frame using
FluentWindow. - Enhanced Components: Replaced standard widgets with styled counterparts (Buttons, Sliders, ComboBoxes, Cards).
🚀 New Features
- Remove Audio Option: Added a checkbox to easily strip audio from the video during compression.
- Improved Preview: Smoother preview generation with debouncing for better performance while dragging sliders.
- Settings Persistence: Enhanced settings management to remember your last used quality and encoder preferences.
🛠️ Technical Improvements
- Code Refactoring: Restructured application logic into dedicated classes (
VideoProcessor,SettingsManager) for better maintainability. - Resource Handling: Fixed icon loading issues in compiled versions using improved resource path detection.
- FFmpeg Integration: Optimized command generation and process handling.
vidcord v4.8
I. GUI Responsiveness & Preview Optimization
1. Debounced Video Preview Updates
- Change: Introduced a
QTimer(self.previewUpdateTimer) with a debounce mechanism. The debounce time (self.previewDebounceTime) was set to120ms. - Reason: Prevents the
updatePreviewfunction from being called excessively on every single mouse movement of the start/end time sliders, and reduces the delay for updates after slider movement stops. - Impact: Significantly improves UI responsiveness when adjusting trim times, allowing for finer adjustments as
ffmpegis no longer invoked repeatedly in rapid succession and updates more promptly. - Implementation:
updateStartTime()andupdateEndTime()now setself.lastSliderValueForPreviewand start theself.previewUpdateTimer.- A new method
_actualUpdatePreview()is called when the timer times out, which then calls the originalupdatePreview()logic with the last known slider value.
2. Faster Preview Frame Generation
- Change: Optimized the
ffmpegcommand within theupdatePreviewfunction for speed. - Reason: To accelerate the generation of the preview thumbnail, making fine adjustments easier.
- Impact: Reduces the time taken for each preview frame to appear.
- Implementation: The
ffmpegcommand was modified to:- Disable audio (
-an) and subtitle (-sn) processing. - Adjust JPEG quality/speed (
-q:v 4). - Use a fast scaling algorithm (
-vf "scale=320:-1:flags=fast_bilinear").
- "-frames:v", "1", "-q:v", "2", "-vf", "scale=320:-1", temp_image_path + "-an", "-sn", "-frames:v", "1", "-q:v", "4", "-vf", "scale=320:-1:flags=fast_bilinear", temp_image_path
- Disable audio (
3. Slider Value Synchronization and UI Feedback
- Change: Added logic in
updateStartTime()andupdateEndTime()to prevent sliders from crossing over and to ensure labels update correctly. - Reason: To provide a more intuitive user experience when adjusting sliders.
- Impact: Sliders now behave more predictably, and their respective time labels are kept in sync if one forces the other to move.
- Implementation:
- Used
blockSignals(True)andblockSignals(False)to prevent recursive updates while programmatically setting slider values. - Ensured the corresponding label (start/end) is updated if a slider's value is adjusted due to the other slider's movement.
- Used
4. Preview Clearing
- Change: Added
self.videoPreview.clear()in error paths ofloadVideoandupdatePreview. - Reason: To ensure no stale preview is shown if loading or preview generation fails.
- Impact: Cleaner UI state on error.
II. Video Metadata Handling Efficiency
1. Consolidated Video Metadata Probing
- Change: Refactored
loadVideo()to use a singleffmpeg.probe(self.file_path)call to fetch all necessary video metadata at once. - Reason: To avoid multiple redundant
ffmpeg.probeorffprobesubprocess calls when a video is loaded and later when conversion is initiated. - Impact: Reduces the initial processing time when a video is loaded and makes the setup for conversion faster.
- Implementation:
- New instance attributes were added to store probed data:
self.probed_duration,self.probed_width,self.probed_height,self.probed_bitrate_kbps. loadVideo()now populates these attributes directly from the comprehensiveprobe_data.
- New instance attributes were added to store probed data:
2. Fallback for Video Resolution
- Change: Introduced a helper method
_get_video_resolution_fallback()which uses anffprobesubprocess call. - Reason: To provide a fallback mechanism if the primary
ffmpeg.probe()inloadVideo()fails to return valid width/height from the video stream information. - Impact: Increased robustness in fetching video dimensions.
3. Usage of Stored Metadata in Conversion
- Change: Modified
convertVideo()to use the storedself.probed_duration,self.probed_width,self.probed_height, andself.probed_bitrate_kbpsattributes. - Reason: To eliminate redundant metadata lookups at the time of conversion.
- Impact: Slightly faster initiation of the conversion process.
III. Video Conversion Process Enhancements
1. Precise Trimming with -to
- Change: In the
ffmpegcommand withinconvertVideo(), replaced the-t str(clip_duration)option with-to str(end_time_sec). - Reason:
-tospecifies the absolute end time of the output, which is often more precise when used with-ss(start time). - Impact: More accurate video trimming.
2. Video Dimension Handling (Even Numbers)
- Change: Ensured that target width and height for scaling operations are even numbers.
- Reason: Many video codecs require frame dimensions to be even numbers.
- Impact: Prevents potential
ffmpegerrors or compatibility issues. - Implementation: Adjusted calculations for
target_width,target_height_actual, and usedscale='trunc(iw/2)*2':'trunc(ih/2)*2'for native resolution cases.
3. Improved ETA Calculation & Error Handling in Conversion Loop
- Change: Added a
try-except ValueErrorblock around parsing thetime=string fromffmpeg's stderr. - Reason: To make the ETA calculation more robust against unexpected
ffmpegoutput formats. - Impact: Prevents potential crashes during progress updates and provides fallback text.
- Change: Added more detailed error handling and UI feedback if the
ffmpegprocess returns a non-zero exit code. - Reason: Better user feedback on conversion failure.
- Impact: Clearer indication of success or failure.
4. Cleaner ffmpeg Command Output
- Change: Added
-hide_bannerto the mainffmpegconversion command. - Reason: Suppresses
ffmpeg's version and build information. - Impact: Primarily a cosmetic change for logs/debugging.
IV. Initialization & Resource Handling
1. Robust _internal Path Resolution
- Change: Improved the logic for setting the
PATHenvironment variable to include the_internaldirectory. - Reason: To correctly locate bundled executables, especially when running as a packaged application (e.g., with PyInstaller using
sys._MEIPASS). - Impact: More reliable
ffmpeg/ffprobeexecution.
2. Robust Icon Path Resolution
- Change: Added fallback logic for loading
icon.ico, checkingsys._MEIPASS. - Reason: To ensure the application icon loads correctly in packaged distributions.
- Impact: Consistent application branding.
V. Minor UI and Code Adjustments
- File Display: Changed to display
os.path.basename(filePath)inloadVideo()for a cleaner display. - Universal Newlines: Ensured
universal_newlines=True(ortext=True) forsubprocess.Popenwhen readingstderr. - Version Display: The link label now dynamically uses
CURRENT_VERSION.
vidcord v4.7
changes
- limit bitrate to not go over original video bitrate (waste of data)
- limit file types (only shows context menu on video files and only allows video files to be imported manually)
wip
- full compatibility for all video files (haven't tested all, mov is buggy)