Hi! Long time no see, right? Well, most of the changes since the last release were smaller additions and fixes, and there weren't really many bigger additions that'd warrant making a new release. There was also one annoying thing (reworking audio/video provider selection) that I wanted to get done first. But now that's done and we can have a new big release right on the anniversary of this fork's first release, and exactly six months after the previous release. It's even release number 10, so it's like a triple anniversary!
Keep in mind that cutting-edge builds can always be found on the actions page.
New features
-
Make big improvements to the VapourSynth video provider:
-
Expose Aegisub's path variables (like
?data
,?user
, etc) to the Python environment when running default scripts. -
Add the directories
?data/automation/vapoursynth
and?user/automation/vapoursynth
to the Python include path for default scripts. This way, default scripts can be kept compact by moving utility functions elsewhere. -
Add a cache directory that default scripts can use and that is cleaned when necessary.
-
Allow video scripts to pass video timecodes or keyframes, as well as a flag to communicate whether audio should be loaded for this file, to Aegisub via global variables. This allows VapourSynth default scripts to handle VFR or provide keyframes, as well as handle automatically opening audio for a video file. The API is documented in the
aegisub_vs
module -
Show messages logged to VapourSynth (up to a configurable severity level) to the user in the script loading progress dialog. This way, scripts can report progress or other useful information.
-
Add a python module
aegisub_vs
that contains functions for loading sources, obtaining timecodes from.lwi
files, and generating keyframes, and update the default script presets to use that module. -
Ship the relevant VapourSynth plugins with the installer or portable build on Windows, and expose their location to Python default scripts. The
aegisub_vs
module will load plugins from there if they're not found elsewhere.After all of these changes, the VapourSynth video provider (when using the preset default script) now fully supports VFR and can load keyframes from the video file and automatically load audio when present. On top of that (by uncommenting one line in the default script, marked by a comment there), it can load keyframes from a keyframes file next to the video file (as would be generated by commonly used keyframe generation Batch scripts). When no such file is found, it can use WWXD or Scxvid to generate its own keyframes at scene changes, while reporting progress. It can also show a dialog to the user to ask whether keyframes should be generated each time.
Since the necessary plugins are shipped with the installer on Windows, the VapourSynth video provider can be fully set up just by installing Python and VapourSynth. On other operating systems the necessary plugins will also need to be installed, but after that it will also be fully functional.
With all of this, the VapourSynth video provider can now be used as a full replacement to FFMS2, which is usually also faster and more accurate in terms of seeking. Since it supports keyframe generation directly from Aegisub, it's even more powerful than FFMS2. The main drawback is just that it needs slightly more effort to be set up.
Finally, here's some further small changes:
-
Also add support for VapourSynth on Mac.
-
Default to 25 fps when the clip has no framerate set.
-
Add a "Set to Default" button to the VapourSynth settings page in the Preferences dialog which allows users to easily return to the default default scripts. If you're coming from an older version of this fork and want to update your default scripts to the updated ones, you can use these buttons.
-
-
Rework the video/audio provider system, hopefully for the last time. This became necessary since this fork added more providers, which would sometimes cause unexpected behavior. In summary, the changes were:
- Prioritize certain providers for certain file types, even if the default provider is a different one. For example,
.vpy
files will always be opened with the VapourSynth provider. That way, you don't need to switch default providers every time you want to open a VapourSynth script. - Instead of automatically trying other video providers when the default one fails, show an error message to the user and let them pick a different video player (or choose to cancel). This way, users will know when their default provider isn't the one being used.
- Tweak some of the error handling when providers fail. FileNotFound errors will abort selection immediately, but providers won't manually check whether the file is readable first (since these checks can give false negatives in some situations, like on samba mounts). The VapourSynth providers, however, will no longer immediately abort selection if they fail, since the provider selection will now alert the user when necessary.
- Prioritize certain providers for certain file types, even if the default provider is a different one. For example,
-
Make the perspective tool support drawings.
-
Add a setting to increase the size of shape handles in visual tools.
-
Automatically add scroll bars to dialogs opened by automation scripts when they get to large. This is especially useful for dynamically generated dialogs like DependencyControl's Macro Configuration.
-
Make dummy video support exact fractional frame rates. This can be useful when using a dummy video as a replacement for an actual video when handling frame timings.
-
Add support for an AppImage build and provide them as CI artifacts (PR by @ctrlcctrlv, #12)
-
Make scrolling the subtitle grid smoother when scrolling with a touchpad or some other form of continuous scroll.
-
Apply the improvements to the German translation PR'd to wangqr's fork and make lots of improvements to translation file generation (PR by @TheOneric, #52)
-
Ship the English dictionaries for the spell checker with Windows builds again. (#21)
-
Add the "Reset Video Zoom" to the video context menu so it's easier to find (and fix the capitalization in its name).
-
Don't make unused extradata entries be immediately deleted when saving the file. This will prevent saving from destroying folds in the middle of a cut/paste operation.
-
Pull some additions from wangqr's fork:
- Save the state of the "Show original" checkbox in the subtitle edit box across Aegisub runs.
- Add an "Apply" button to the "Select Lines" dialog that applies the selected modifications but keeps the dialog open.
Various bugfixes:
- Ever wondered why you can't drag
.webm
files into Aegisub? This is why. Well, it's fixed now. - Fix crashes due when opening file open/save dialogs or accessing the clipboard from automation scripts. These were mostly happening on Linux, but clipboard access also had some issues on Windows. See TypesettingTools#51 and #22 .
- Fix a memory leak when automation scripts crash or get cancelled.
- Fix another issue where errors in automation scripts could crash Aegisub entirely.
- Make the font collector collect fonts that are used in drawings.
- Don't crash when encountering a frame rate with zero denominator.
- Fix a bug that'd make the perspective tool's controls disappear sometimes.
- Update some commands in the default hotkey settings that were renamed back in 2013. Usually these would be migrated automatically, but they'd still cause error messages after restoring all settings to default in the preferences menu.
- Do a better job at keeping fold records in extradata consistent. This will especially help automations scripts, since they will receive inconsistent fold data less frequently. Note, though, that there's still no guarantee for the data to be consistent.
- Disallow negative font spacing in the style editor again. This was added in the last release, but it turns out that this isn't actually supported by renderers...
- Some fixes to BestSource:
- Pull bugfixes from wangqr's fork:
- Fix a bug where the "add lead-in"/"add lead-out" keys would break when not first clicking into the audio display.
- Fix incorrect descriptions being displayed for right-click menu items (part of #50)
Backend stuff:
- Pin the bestsource wrap since it master no longer compiles against ffmpeg 4.4 (which the meson wrap still uses).
- Mark Aegisub's executable as longPathAware on Windows (and ensure that this doesn't break anything) and update one piece of code that still struggled with longer paths.
- Link libdav1d on Windows and patch the ffmpeg wrap to detect it. This will make the FFMS2 and BestSource video providers able to load AV1 video. (The VapourSynth provider could already do that, at least with the right source filter.)
- Furthermore, point the ffms2 wrap to a fork that applies some patches to improve support for VP8/VP9/AV1. This also fixes cases where FFMS2 would output scrambled video for VP8/9 video files.
- Manually compile and statically link ffms2 on Mac builds, since the latest official ffms2 release still has broken seeking.
- Make the Windows installer provide an XAudio2 redistributable below Windows 10 (and ship one in a
Redist
folder for the portable build) to make builds against higher XAudio versions work on older Windows versions. - Get YUtils from the TypesettingTools repository again, since the relevant bug has been fixed there.
- Stop pinning harfbuzz and instead just disable its ICU subproject.
Even more detailed backend stuff (this is only for the sake of completeness and should only interest you if you're a maintainer)
- Add a regen dependency for the manifest file for Windows builds.
- Make the build script for the Windows installer and the CI runs actually abort on some errors, so failures will be easier to notice.
- Fix the validation function for the perspective tool's "Lock Outer" command.
- Fix some typos in the meson wrap files (#63)
The macOS release was removed due to having broken library paths. Until the next release, Mac users can download fixed and updated builds on the actions page.