AviSynth+

View project onGitHub

AviSynth Project Ideas


Here is a list of carefully selected and reviewed ideas that'd be nice to have. Please contact us in the #avs-plus channel on IRC on the Rizon server. Look for SEt, tp7, ultim, Firesledge, or innocenat. You can also reach us on the development forums.

We require that all code you submit to AviSynth is licensed under the LGPL or a compatible licence. Furthermore, we kindly ask all contributors to follow this set of coding guidelines.


High bit depth color format support

One modern area where AviSynth seriously lacks support is the processing of video in high bit depth formats. In this task, the student is to add API support for processing of 16-bit [integer] and 32-bit [floating point] video, and to upgrade existing internal filters to operate on such formats natively. At the minimum, planar formats without subsampling are to be supported in internal filters, and appropriate conversion functions from and to those formats will have to be implemented too.

Required skills: C++, basic understanding of digital video
Recommended skills: low-level optimization using SIMD intrinsics

GPGPU processing support

Video processing tasks most often execute the same operations on a large number of independent pixels, or on a large number of independent pixel groups. Modern video cards with a programmable pipeline are designed to handle exactly these kinds of tasks.Therefore, we wish to offload processing of many time-consuming video filters on the GPU. The applying student infor this task will need to add core support for GPGPU processing, making sure that both CPU and GPU-based filters can efficiently exist in the same chain of video filters. For example, this means efficiently utilizing bus bandwidth by avoiding needless data transfers if multiple filters of the same kind (CPU/GPU) follow directly after each other. Furthermore, some filters are to be ported to execute on the GPU. Due to cross-platform and cross-vendor support, OpenCL is to be used.

Required skills: C++, basic understanding of digital video
Recommended skills: OpenCL, experience in working with the GPU

Filter side-channel support for real-time reconfiguration

The AviSynth API does not allow any part of an existing filter chain to be reconfigured. Whenever a filter is to be added or removed, or the parameters of already constructed filters are to be chained, the complete library is de-initialized, binary plugins are reloaded, scripts are reparsed and re-evaluated, and even filters with unchanged parameters are executed a second time. These redundant steps lead to lengthy delays when updating simple script parameters. Ideally, only the filter with the changed parameter, and filters which depend on its output, should need to be reexecuted. The task for students here is to implement support in the API and in the filters for reconfiguring parameters without reconstructing the affected filter. The student will then use this new capability to improve runtime filtering performance, or optionally to add editor support (in AvsPmod) for faster previews.

Required skills: C++
Recommended skills: Experience with computer language parsers, GUI development, Python

DirectShow integration

There are currently two ways to play back AviSynth scripts: directly over the AviSynth API, or via Windows's AVIFile interface. While the latter can be used by DirectShow-capable applications, the AVIFile layer imposes severe restrictions on which features can be used. Also, while AviSynth can already open media files using DirectShow, the corresponding plugin still has its limitations. For students, the scope of this task is to implement three components to finally add perfect AviSynth support for the DirectShow multimedia framework:

  • An AviSynth plugin replacing DirectShowSource(), to be able to open and process media over DirectShow using any AviSynth application.
  • A native DirectShow interface for AviSynth, so that AviSynth will be able to source video to other DirectShow applications natively.
  • A DirectShow intermediary filter to be inserted into the middle of a DirectShow filter graph (chain of DirectShow filters), to only process video, not source, using AviSynth.
The above DirectShow components will support high bit depths, variable frame-rate (VFR) video, multichannel audio, and frame-accurate seeking where possible and applicable.

Required skills: C++, basic understanding of digital video and audio
Recommended skills: Experience with DirectShow and the Windows API

Scripting language and parser improvements

One of AviSynth's most precious assets is its easy-to-use and easy-to-learn scripting language. Over more than a decade and a half, AviSynth users have pushed the boundaries of the current parser, revealing certain inflexibilities and shortcomings. As a result, we would like to have the script parser and evaluator rewritten with several goals in mind: to use modern C++, to be fast and easily extensible, and to avoid C++ exceptions unlike the current code. The scripting language should be augmented to allow for native handling of arrays, dictionaries (associative arrays), and common C operators. Last but not least, the result of the parser (for example an AST) should lend itself to some optimizations. More specifically, it should be possible to detect and remove redundancies in common filter subchains (similar to common subexpresison elimination), which is an important memory-saving feature in complex scripts. In summary, this task will encompass a rewrite of the scripting parser and evaluator, adding support for additional scripting syntax elements, and additional coding for the mentioned optimization pass.

Required skills: C++
Recommended skills: Experience with computer language parsing, and/or compiler theory

Plugin manager

In this task the student will implement a client application to manage AviSynth plugin installations on the user’s computer. This cross-platform GUI application shall offer easier and less error-prone plugin handling than manual management, by automating tasks such as tracking dependencies, selecting the correct plugin version, choosing the right install folder, and notifying about available updates.

Required skills: Programming experience
Recommended skills: Experience with cross-platform and GUI development, server-side scripting

Audio filters / VST / LADSPA support

Even though AviSynth is able to process both audio and video, the current feature set is focused primarily on video. Experience has shown that AviSynth is rarely used for audio processing owing in part to the basic feature set for audio processing and the rudimentary support in AviSynth's ecosystem. The goal here would be to provide additional filters useful for professional audio and DAW users, such as support for VST filters and, if time allows, LADSPA.

Required skills: C++, basic understanding of digital audio
Recommended skills: Experience with VST, and knowledge of audio filtering

Implement unit testing methodology and tests

The AviSynth ecosystem is composed of an enormous number of binary plugins and scripts. To prevent all those valuable resources from going to waste, programmers should try hard to keep all changes to AviSynth compatible with existing code, and avoid breaking existing functionality in subtle ways. As such, a unit testing framework is highly desirable which allows for test-case scenarios for current functionality as well as regression testing in the API and filters. The framework should cover various metrics including correctness and performance.

Required skills: C++, experience with unit testing
Recommended skills: Basic understanding of digital video