Skip to content

Releases: arch1t3cht/Aegisub

Feature Release 12

09 Nov 21:33
Compare
Choose a tag to compare

Aegisub 3.4.0 is out. What version should you use now and what will happen to this fork? Read this to find out: #177


Hi - long time no see and all that. Life happened and I had a lot less time to work on Aegisub in the past year, but by now there've been enough small changes that it's time to make a new release. Sorry to everyone whose issues and/or pull requests I ignored until now - I'll get to them when I can.

Keep in mind that cutting-edge builds can always be found on the actions page

New features

  • Make the getPixel function in the Lua get_frame API return three separate color values rather than packing all values into a single integer. This is technically a breaking change, which is why it's at the top of the list. However, I'm not aware of a single script that ever used this function (since 99% of the time you just want getPixelFormatted instead), so I'm fairly sure that this does not actually break anything.
  • Add a function to the Lua get_frame API to get the raw buffer with the frame's data, e.g. in case you want to pass it on to some library.
  • Update BestSource to R8. Starting from R2, BestSource now has fast and safe seeking (when previously, while guaranteed to be exact, it was so slow that it was only useful as a last resort). Hence, the BestSource video and audio providers are now a feasible alternative for FFmpegSource with similar speed on seeking. BestSource requires more time when initially indexing a file, but in exchange it offers guaranteed frame accuracy when seeking. When BestSource cannot guarantee fast exact access, it will revert to (slow but still exact) linear decoding and alert the user.
  • Make the default audio script for the VapourSynth video provider use BestSource instead of bestaudiosource (the latter being deprecated) and ship the former instead of the latter with the installer.
  • Switch the import path order for the VapourSynth video provider's Python environment to make it possible to override Aegisub's Python modules in your user configuration directory (just like in the Lua API).
  • Bump FFMS2 to version 5.0, which among other improvements (including proper AV1 and VP9 support which previously needed custom patches) contains a number of fixes to seeking accuracy made by me. The FFmpegSource video provider should now be much more reliable than before. In fact, my experience has been that it is more reliable than LWLibavSource now (but I did not yet have time to switch the VapourSynth video provider's default script to use FFMS2).
  • Rework the font collector's font finding logic on Windows (PR by @moi15moi, #107). Font lookups should now be more reliable and e.g. no longer incorrectly return arial.ttf for certain fonts.
  • No longer truncate subtitle timestamps to 10 hours (PR by @TheOneric, #104). The maximum times for subtitle events is now at around 596 hours (the number of milliseconds that can fit into a 32-bit integer, as used by classic VSFilter).
  • Add an option to make Shift+Enter add a soft line break (\n) instead of a hard line break (\N). Soft line breaks only break lines when the WrapStyle is 2, so they can be useful when the script has a global WrapStyle of 2 set that viewers may want to override.
  • Allow setting a style's font encoding to -1 in the style editor. Encoding=-1 is a libass-only extension that enables more extensive text shaping and RTL/Bidirectional support. Refer to the libass wiki for more information.

Various bugfixes

  • Work around the double buffering issues in wx master that were causing the subtitle grid to flash in wx master builds. This was the biggest inconsistency on wx master builds.
  • Make the BestSource and VapourSynth video providers properly respect the file's YCbCr Matrix header (that is, force the video to be converted to RGB using that matrix), and improve support for this header for the FFmpegSource video provider (which previously only applied the header when it specified a BT.601 matrix on BT.709 video). The YCbCr Matrix logic is now better shared across all video providers, which should make it more consistent.
  • Do not allow opening the same dialog (e.g. the style manager) multiple times. Aegisub used to enforce this, but this logic broke in a refactor at some point. Now it matches the old behavior again.
  • Fix a crash when using search/replace with multiple windows (i.e. multiple windows of Aegisub launched from a single process using File > New Window). In my experience, using multiple windows can still be fairly unreliable and more prone to crashes (so I'd recommend users to just open separate instances), but at least now it is slightly less so.
  • Stop shifting all video timecodes to start at 0 milliseconds. This previously broke files like those with a two-frame video delay (sometimes reported as a -83ms audio delay in programs like MediaInfo) that were common in old CR downloads (see this article by CoffeeFlux). Support for such files in players and other software may still vary so I wouldn't recommend working on such files if you don't know what you're doing (I'm also considering to show a warning dialog when opening such files), but at least now it's possible to work on them if you do.
  • Properly wrap long status messages in the progress dialog instead of letting them overflow.
  • Don't crash in the VapourSynth video provider's default script if the cache directory's parent directory does not exist.
  • Improve the version detection for the lsmas plugin in the VapourSynth video provider.
  • Work around a crash in the thesaurus (caused by boost or gcc - PR by @mia-0, #137)

Backend stuff

  • The PR adding meson support to libass was finally merged, so Aegisub will now always use the latest libass version.
  • Bump wxWidgets (when not using wx master) back down to 3.1.4 (it was bumped when adding support for wx master) since it broke some things (#99).
  • Bump ffmpeg to 6.1 (PR by @0tkl, #103)
  • Bump boost to 1.83
  • Write minidump files on crashes on Windows. Aegisub used to do this, but this got lost during the port to meson.
  • Once again fix the Avisynth bundling in the portable build.
  • Fix some small memory safety problems in the Lua get_frame API. I don't think they ever caused actual issues, but they were technically UB. Either way, they're fixed now.
  • Switch to C++17 since some dependencies (in particular ICU) started breaking on older standards. This only updates the C++ standard, though, and does not pull any of the refactors made at TypesettingTools/Aegisub, since this rebasing all the feature branches on top of those would be a massive amount of work that I'd like to only have to do once.

No "super detailed backend stuff" section this time since anyone who really cares about those can just read the commit log anyway.

Note for anyone checking integrity of the attached releases: The AppImage build was generated in a different CI workflow on a slightly later commit since the build generated by the release tag's workflow was broken.

Read the "New Features" section for Release 11 for an explanation of the difference between "wx master" and the normal windows builds.

Feature Release 11

23 Nov 11:22
Compare
Choose a tag to compare

Nothing too big in this release, but it's been a while since the last one and a lot of dependencies got updated in the meantime, so it's worth making a new release.

Keep in mind that cutting-edge builds can always be found on the actions page.

New features

  • Some more small improvements to the VapourSynth video provider:

    • Make the method of showing a yes/no dialog in aegisub_vs.py configurable and do not always import tkinter. This is useful for systems that do not ship tkinter with Python by default.
    • Improve the VSScript DLL loading logic on Windows (#97) and improve its error messages.
    • Improve documentation in aegisub_vs.py
    • Add an option to control whether user plugins should be loaded, which is off by default on Windows. This can prevent crashes when users have an old version of libvslsmashsource installed, for example. Note that this option only controls user plugins, and that system plugins (like plugins installed in /usr/lib/vapoursynth on Windows) will always be loaded.
    • Allow VapourSynth scripts to control the progress dialog displayed when loading the audio or video through specially formatted log messages, and add progress reporting to aegisub_vs.py. For example, keyframe generation will now show a proper progress bar instead of just printing progress to the output log.
    • Fix the lwindex parsing in aegisub_vs.py for files that have more than one video stream (which includes files containing embedded images).
    • Allow the VapourSynth video provider to open images again with the default script. This worked in the past, but was broken when VFR handling was added since Aegisub doesn't like timecode lists with just one element. Now it works again.
  • Allow reading compressed subtitles from an mkv file.

  • Add an option to build with the latest git version of wxWidgets instead of wxWidgets 3.1.7, and build wx master artifacts for Windows on the CI alongside the normal versions. This is relevant because wx master adds the option for an experimental dark mode on Windows. Thus, by downloading a wx master build instead of an ordinary one, enabling dark mode in the Options, and setting the rest of the UI colors in Options > Interface > Colors, you can now have a dark mode for Aegisub on Windows.

    Please note that this dark mode is an experimental feature from wxWidgets that uses undocumented Windows APIs. It's not perfect, and has all kinds of small rendering quirks. Some additional quirks come from wx master itself. Please do not report issues with dark mode or wx master specifically for now, since many of them cannot be fixed from Aegisub's side.

    EDIT: The biggest of those issues (flickering in the subtitle grid) has now been worked around on the latest CI builds.

    Thanks to @seproDev for most of the work on the dark mode builds.

Various bugfixes

  • Fix a case where automation scripts could crash when io.open fails on Windows. This came up when running LuaInterpret more than once, for example.
  • Fix #15 for real this time.
  • Fix the Clean Tags Lua library script for \k tags with noninteger duration (#92)
  • Fix dropdowns in some Lua dialogs on Mac not having an "empty" option. This came up in DependencyControl's Install Script dialog, for example.
  • Make further fixes to audio and video provider selection. The intended logic hasn't changed from the one described in the last release, but some cases where it wouldn't work correctly were fixed. (#23, #61, #83)
  • Fix a crash when failing to load a track using Avisynth while another one is still loaded (#61)
  • Fix the progress dialog when the progress switches from being indeterminate back to showing a proper progress bar.
  • Bring back the hacks to make the IME on Mac work with the subtitle edit box again. (#91)

Updated Dependencies

Unless stated otherwise, these updates mostly affect Windows, since Linux and Mac pull most of their dependencies from package repositories. This also only mentions dependencies that were manually bumped - various other dependencies on Windows track the latest upstream versions already.

  • Update FFmpeg to 6.0. Also make the Ubuntu AppImage use the meson wrap for FFmpeg so that it can also use FFmpeg 6.0 (which is necessary for updated FFMS2)
  • FFMS2 was updated upstream, in particular with fixes to audio decoding.
  • The libass meson wrap was updated upstream, so for the first time in a long while libass on Windows is now caught up with master. In particular, libass on Windows is now past 0.17.0, and thus includes support for the LayoutRes headers added in that version.

Backend stuff

  • Update the luajit wrap for luajit's rolling releases
  • Fix the library path rewriting for libraries bundled with Mac builds when the libraries use @rpath. This was the issue that broke the Mac build on the previous feature release. (#77)
  • Fix an error in the luajit wrap that'd make luajit frequently crash on ARM64 systems like Apple Silicon, and update it further to properly match the Makefile's logic for the affected parts.
  • Fix various issues for cross-compilation, like a bug in the luajit wrap when cross-compiling and disabling tests.
  • Fix a compilation error on ARM64 mac due to a mismatching iconv_t typedef.
  • Add support for code signing when building Mac app bundles.

With these changes, compiling on Apple Silicon should now be possible and yield a fully functional build. Even cross-compiling for ARM64 is possible, although it needs a lot of hacks to get all the dependencies sorted. Official ARM64 Mac builds might come eventually when I figure out the code signing and possibly notarization.

Thanks to @ctrlcctrlv for funding the ARM64 Mac machine that allowed me to test and fix alĺ of these issues.

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 fallback URL for the nasm wrap since their website is down quite frequently (thanks, @seproDev !).
  • Fix a case where iconv_close(iconv_invalid) could be called (#74).
  • Fix a missing order-only dependency for libresrc that would randomly cause first-time compilation to fail.
  • Fix dictionary downloading on Mac builds when the bundling script is run more than once.
  • Copy aegisub_vs.py for the build folder, which makes testing easier.
  • Add a manual trigger option to the CI.
  • Replace [provides] with [provide] in some wrap files since meson no longer accepts the former.

Read the "New Features" section for an explanation of the difference between "wx master" and the normal windows builds.

Feature Release 10

27 Jul 05:58
Compare
Choose a tag to compare

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.
  • 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:
    • Clean the cache directory when necessary.
    • Fix the timecode computation (#27).
    • Make BestSource index the video (or load the index from a cache) every time - this fixes it breaking on some videos (#27).
    • Forward some error messages.
    • Improve some message strings.
  • 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 Typeset...
Read more

Feature Release 09

26 Jan 23:54
Compare
Choose a tag to compare

Whew... it's been a while. This release contains some more involved changes, and they took a while to get ready.

BREAKING CHANGE

Storage of folds has been moved from the Line Folds entry in the Project Properties to the Aegisub Extradata section. This has a number of advantages:

  • Folds will be preserved when opening or editing subtitle files with older Aegisub versions that don't support folds.
  • Folds will be preserved by automation scripts that re-insert every line.
  • Folds do not break after adding or deleting lines using a text editor or other tools.
  • In particular, merging changes using tools like git will not break folds.
  • Copy/pasting lines also copies the fold status of the lines to some extent. This is impossible to solve in general, but it will work in simple cases, as long as the file is not saved between copying and pasting.
  • With this, automation scripts have full control over folds. Refer to scripts like ConvertFolds for examples on how to interact with folds from Lua.

However, this breaks compatibility with the previous format, so folds saved with the old format will not work on this new version. If you need to transition from the old format to the new one, there are two possibilities:

  • Use the ConvertFolds automation script (available in DependencyControl) to convert files with folds from the old version to the new version.
  • If you need to move back and forth between formats, there is an intermediate state preserved on the extra_intermediate tag, with build artifacts here. This version will read and save folds in both formats.

Further Changes

  • Add a visual tool for applying perspective transformations, or more generally any arbitrary transformation determined by four points.
perspective.mp4

The outer quad can be used to match the perspective of some perspective rectangle in the video, after which the inner quad can be aligned relative to that perspective. Use double-click and Shift/Ctrl/Ctrl+Alt/Ctrl+Alt+Shift-drag to move corners more efficiently. Note that Ctrl+click is also the action that selects multiple features at once, so take care when Ctrl-dragging to not accidentally select multiple features.

  • Raise the resolution limit of the dummy video from 10000 to 100000. This can be helpful when rendering subtitles to an image and tracing that in an image editor, which is a simple way to convert text to a shape when other methods fail.
  • Allow higher decimal precision in the style editor, and allow negative values of \fsp. Higher precision can be useful for scaling on anamorphic video and for setting \fsp0.01 to disable all ligatures, to name some examples. Edit: It turns out that renderers don't actually support negative spacing in styles, so this part will be reverted soon.

Fixes:

  • Fix the grid in the visual x/y rotation tool when the video is not at 100% zoom, and for non-default values of \fscx or \fscy. I'm continually amazed at how bugs like these can go unnoticed for years or even decades.
  • Fix the syntax highlighting for drawings breaking on empty clips.
  • Also allow + and E in numbers when syntax highlighting drawing coordinates to correctly highlight all numbers.
  • Fix subtitle grid columns not being resized correctly after changing the interface font size (#11).
  • Fix a crash when clicking the header of the folds column in the subtitle grid.
  • Fix a crash when double-clicking the top rightmost column separator in the hotkey configuration menu on Windows. (A very oddly specific bug, I know. Still, that was a consistent crash.)
  • Fix the HDD audio cache provider after merging wangqr's audio changes. The fact that this took months to notice tells me that not a lot of people use that. Well, it's fixed now.
  • Fix video zoom when the script resolution isn't equal to the video resolution.
  • Remove the option for video panning and just enable it by default. The feature should be stable enough now, and putting it behind an option just confuses users.
  • Deduplicate the automation script autoload path to fix #15 and TypesettingTools#168 .
  • Fix the default color range in the VapourSynth video provider.
  • Fix crash when loading Avisynth or VapourSynth after already having failed to load it once.
  • Ship a version of Yutils that contains the fix in TypesettingTools/Yutils#1 .

Backend stuff:

  • Do a CI build for every push to feature. Releases will still be uploaded here, but you can download work-in-progress builds from the actions page.
  • Revert the patch that enables the ffmpeg wrap to compile with SIMD extensions, since this was added upstream now.
  • Instead, patch the (updated) ffmpeg wrap to detect the zlib subproject. This will make ffmpeg build with zlib on Windows, which will make Aegisub able to open PNG images and the like using FFMS (which didn't work before on builds using the ffmpeg wrap).
  • Disable more debug checks on release builds (specifically, set NDEBUG, as was also done with the original MSVC build system). In particular, this will silence the various wxWidgets assertion errors that pop up in some weird edge cases. Many of these are actually harmless but confuse users, so they're being silenced now.

Even more detailed backend stuff (this is only for the sake of completeness and should only interest you if you're a maintainer)

  • Also add regen dependencies for the icons in src/bitmaps
  • Authenticate the GitHub API requests when building the installer from the CI to not get rate limited
  • Do some dirty fixes to make things compile with Boost 1.81. I'm not pulling the refactors from tgoyne/Aegisub:cmake for now since those would complicate all merges from that point onwards.
  • Ship a builds of the DependencyControl modules that fix TypesettingTools/ffi-experiments#13 .
  • Pin a version of the harfbuzz wrap before the commit that breaks Aegisub's ICU subproject

Feature Release 08

03 Nov 00:09
Compare
Choose a tag to compare
  • Merge all relevant changes and fixes to the GUI from wangqr's fork.

  • In particular, these include fixes for high-DPI compatibility. The Windows executable has also been marked as DPI aware, so DPI scaling should now work on all platforms.

    To also scale icons or drawn elements like the subtitle grid, you'll have to play with the font size settings under Preferences > Interface and the Toolbar Icon Size setting in Preferences > General. For the latter option, the relevant values are 16, 24, 32, 48, and 64, but depending on the platform these might be divided by the global scaling factor (so with a factor of 2, they'd be 8, 12, 16, 24, 32). Restart Aegisub to fully apply these settings.

  • Fix various bugs caused by mixing video panning and DPI scaling:

    • Fix visual tools with DPI scaling
    • Fix detached video with DPI scaling
    • Also, fix a crash when detaching the video and resizing it to zero size
  • Fix rendering of the overscan mask when a different DPI scale is set

  • Fix the overscan mask only being half the size it should be. Previously, the mask matched the values recommended by the BBC but used them as total percentages instead of per-side percentages.

  • Fix various bugs related to the VapourSynth video provider:

    • Fix error propagation in the audio provider. Previously, an error in an audio script would be intercepted and a different audio provider would be tried instead. Now, the error will get shown to the user so they can know that the script failed.
    • Fix the offset missing for the first audio frame in the requested block. This caused occasional clicks in audio loaded by VapourSynth.
    • Treat the frame rate as a fraction instead of a floating point number.
    • Fix the various locale-related assertion errors or crashes popping up after loading a file with VapourSynth.
    • Don't override the script's YCbCr Matrix field with None when loading a video with unknown color space in VapourSynth. Files with known color space (including when it's known to be None) will continue to override this value to match the behaviour of the FFMS2 provider.
    • Fix Aegisub's TimeToFrame computation for constant frame rates. This was unrelated to VapourSynth, but only came up with this video provider, since the FFMS2 provider always reports VFR. It would make seeking to the start of a subtitle line sometimes seek to the frame before it instead.
  • Add syntax highlighting for drawings and vector clips. Coordinates of points are highlighted in alternating colors for the X and Y coordinates, and the ending points of cubic Bezier splines are underlined to make navigating the coordinate list easier. Like any other syntax highlighting, this can be configured or disabled in the settings.

Feature Release 07

28 Sep 01:10
Compare
Choose a tag to compare

The big change in this release:

  • Add a "default script" option for opening audio or video using VapourSynth. When opening a file not ending in .py or .vpy using the VapourSynth provider, the filename will be passed to this default script to be opened as a media file (or in any other way - it's freely configurable after all). This option defaults to using LWLibavSource for video and BestAudioSource for audio - these need to be installed.

    Note, however, that the VapourSynth video provider continues to assume CFR. To properly load VFR video, you'll need to manually create and load a timecodes file.

The rest are a bunch of bugfixes that accumulated over the last month:

  • Fix a colorspace conversion bug for BestVideoSource.
  • Fix a bug where shift+selecting subtitle lines would make the selection jump to different lines in files containing folds.
  • Fix redundant errors such as "Avisynth not found" or "Vapoursynth not found" when trying to open video or audio from an invalid file name
  • Fix a crash when cancelling automation script on debug builds like some Linux builds.
  • Fix Avisynth not being bundled in the portable Windows releases.
  • Add missing string resources to the Windows executable. This will make menus like the "Open With" menu in the file explorer show Aegisub with its proper name, instead of just "aegisub.exe".
  • Bump VCRedist to version 17 to match the VS version used in the Windows CI builds.
  • Work around the second sandbox violation bug so that the project can again be built with the latest meson version.

Feature Release 06

23 Aug 19:21
Compare
Choose a tag to compare

There've been enough bug fixes in the last few days to just make a new release:

  • Slap some duct tape on the ffmpeg wrap that enables compiling with instruction set extensions like SIMD. Up until now, these were disabled on Windows, which was the cause for the mysterious slowdowns in indexing and seeking speed on the TypesettingTools fork compared to other versions. After this fix, indexing and seeking should be as fast as on every other fork.
  • Fix the video aspect ratio forcing options, which had been broken by moex3's video panning.
  • Always save folds, even if "Save UI state in subtitle files" is disabled. This seems like the more sensible option now, since the same happens for fields like the audio or video file.
  • Fix an assertion error popup when importing styles from another script.
  • Fix or work around #6 .
  • Add a note "(SLOW)" to the BestSource video provider option to make very clear that it's only intended to be used in very specific cases.

There's also a few new features:

  • Add options to sort by (raw) text or by the stripped text (i.e. the text without styling tags) in the "Sort All Lines" and "Sort Selected Lines" menus
  • Add commands video/reload and audio/reload to reload the current video or audio file. This is mostly intended for reloading Avisynth or VapourSynth scripts.

Feature Release 05

19 Aug 01:54
Compare
Choose a tag to compare

A quick new release to fix a semi-urgent bug, but there are also a few other additions:

  • Also enable stereo playback for the various Linux audio players. After merging the audio system rework in the last release, all available audio players can now play multi-channel audio.
  • Add "Copy subtitles to clipboard" and "Save subtitles as PNG" options to the right-click menu on the video display. This will copy only the subtitles with a transparent background.
  • Fix some file permission checks on Windows (or, rather, remove unnecessary ones). In particular, this will fix some usages of the Font Collector, such as when copying fonts to a folder in a Samba mount.
  • Fix an assertion error when loading the waveform audio display. This crept in after merging the audio system rework in the last release, and went unnoticed for a surprisingly long time - probably because nobody actually uses the waveform display.

The additional audio/video sources have been disabled on the macOS builds for now. BestSource doesn't compile due to an upstream error, and Avisynth/VapourSynth would first need to be ported to macOS.

Feature Release 04

16 Aug 20:18
Compare
Choose a tag to compare

This release is dedicated to audio and video:

  • Add Avisynth support for Linux and fix several bugs and crashes.
  • Add BestSource video and audio source. This source, while several orders of magnitude slower than other sources, is essentially the only source that can absolutely guarantee being frame or sample accurate.
  • Add VapourSynth video and audio source. Unlike Avisynth, VapourSynth is not shipped with the installer, so VapourSynth needs to be installed for the source to work.
  • Add wangqr's Xaudio2 back-end and allow stereo playback with both this back-end, and DirectSound (PR'd by Shinon)

Apart from previewing Avisynth or VapourSynth scripts, these back-ends also allow for using further alternative sources to FFmpegSource, such as LSMASHSource or DGDecNV.

Other changes in this release include

  • Add a Lua API function to check if there are unsaved changes. This will be useful for scripts like petzku's EncodeClip or my GitSigns script to make sure the user saved the file.
  • Merge sepr0's Lua API function to read the current frame.
  • Adjust default bounds for wxSpinCtrlDouble fields in Lua dialogs to fix dialog sizing. Note that this changes the behavior of Lua dialogs, but not in a way that contradicts existing documentation or specification.
  • Fix folds not being loaded from a saved file if they start at the very first dialogue line
  • Fix Aegisub crashing when trying to open a file from an invalid path. Internally, this is a fix for Avisynth, as it was caused by Avisynth not being unloaded properly after having been tried as a provider. Nevertheless, this seemingly unrelated crash has also been fixed with this.

MacOS build coming soon - BestSource refused to compile there.

Feature Release 03

01 Aug 22:16
Compare
Choose a tag to compare

In this build:

  • Some fixes to line folding
  • Add wangqr's tool for timing subtitles to video features
  • Add more options to control the video zoom behavior: reversing the zoom direction or disabling zoom entirely. Both should be helpful when working with a trackpad.
  • Add Lua API functions to get or set the cursor or selection in the text edit box (documented in automation/v4-docs)