Greetings Everyone! Over the past many months, a ton of work has gone into OpenShot 2.0, so this update is going to be jam packed full of exciting news and updates! I’ll be discussing what features are now completed, what challenges have come up and been conquered, what challenges remain, and what’s next for OpenShot!
This remainder of this update contains many technical details about OpenShot 2.0, so for those of you who just want to hear the big picture, here it is: Lots of progress is being made, with many difficult technical challenges now overcome, and I am 100% committed to bringing OpenShot successfully to Windows, Mac, and Linux as quickly as possible!
Performance Improvements - Image Manipulation
As everything started to really come together, and I was able to start testing more complex functionality from the UI, a really big, show-stopping type of issue was discovered. ImageMagick++, which is a C++ library for manipulating images, and deeply integrated with libopenshot, hit me with the following:
- OpenMP Deadlocks - libopenshot uses OpenMP to accelerate certain parts of the video editing pipeline, and this approach was colliding with certain internal ImageMagick functions, which also uses OpenMP. The result was a really ugly deadlock, freezing the execution of the program. There were a couple workarounds I came up with, but they were just as ugly.
- Performance Issues - Certain image manipulation routines, such as rotation (a type of distortion), took a crazy amount of processing time (0.5 to 1.5 seconds per frame). I consider both of these issues show-stopping!
Not having many options left (and not having any more time left to mess with it), I decided to move to Qt5’s QImage, and reprogram all image manipulation code in libopenshot. This took many, many weeks of work, but resulted in some fantastic things: Super fast processing of images, fast rotation, fast distortion, fast pixel manipulation, and great multi-thread support!
Video Export Dialog
An important feature of a video editor is being able to export your new creation. This dialog is now completed, and works much like the one in OpenShot 1.X. It is easy-to-use, very flexible, and supports over 100 video formats & codecs. There are many additional features I would like to add to this screen, but for now, it is complete and functional, and supports just about every combination of (resolution, frame rate, sample rate, bit rates, formats, video codecs, audio codecs, etc…)
Keyframes and Properties
Another critical UI element that is now complete and functional is the new property editor. Simply select an element on the screen (clip, transitions, effect), and the properties appear. Any property can be easily changed, and as you change properties (depending on where the playhead is), keyframes are automatically added, and indicated on the property window with colors. As you drag the playhead around, the values in the property window change, so you can see how your values are changing with time. Green background color indicates you are currently on that keyframe. Blue background color indicates the value is interpolated from a keyframe. Gray background color indicates the value is not keyframed and is not changing over time.
Effects Integrated into UI
Many effects have now been integrated into OpenShot 2.0’s UI, and can be dragged onto clips (or tracks) and edited in the property window. This is a work-in-progress, as I have many more effects that will be added soon, but a few key effects have already been integrated, such as contrast, saturation, and chroma key. The coolest part is these effects can be easily keyframed as well, changing color saturation, contrast, and chroma key values over time. It’s pretty awesome and works great!
Due to the numerous performance improvements with libopenshot, real-time previews are finally working well, and are able to keep up with many concurrent layers of HD video and many effects in real-time (on a decent computer). This has been one of the more difficult and rewarding parts of building OpenShot 2.0. =) I never set out to build a video player, but now that I have one, it’s going to be a lot of fun playing around with it. At some point in the distant future, I might even release the OpenShot Player as a stand-alone application, and compete with VLC. Maybe someday… =)
New Source Code Releases
Over the past few months, libopenshot, libopenshot-audio, and openshot-qt (the UI) have all seen new source code releases to the open-source community. While these are development releases (snapshots), and are not terribly easy for users to test, I have been trying to keep a rhythm to the releases, and release whenever things have reached a certain stability.
Windows 10 Cometh
Windows 10 has been released (as you probably know), and it’s a pretty big deal. I have moved my Windows development environment to Windows 10, and of course found many new issues, with regards to libopenshot and libopenshot-audio. One of the largest issues was related to audio processing, and new compile errors with JUCE (the audio sub-system used by libopenshot-audio) related to MinGW64 and WASAPI (fun, fun, I know…). Luckily, these have all been successfully fixed, and patches sent upstream to JUCE.
Mac OS X Yosemite
I also finally migrated my Mac development environment to Yosemite, and worked through a few more issues, related to the GNU compiler and some OS-include compatibility issues. These have also now been resolved!
Breakages in APIs (libAV, FFmpeg, JUCE)
As you probably know, time breaks all things, including APIs. So, it’s pretty regular for everything to break all of a sudden, due to a change upstream trickling down to libopenshot. Why such mature API’s are changed so often (and resulting in breakages) I have no idea. =) But it’s life, and I continue to fix them as I find them. This often derails things for an unspecified amount of time, as I search and debug to find a solution.
New Tools (JetBrains)
Over the past few months, I've migrated my development environment to some new tools, CLion and PyCharm. These tools have been quite awesome so far, and have provided me better debuggers, better code organization and formatting, and integrated source control features. They have certainly increased the speed at which I can debug certain types of issues, and I’m very happy with them so far!
There are still a few remaining challenges for OpenShot 2.0, but they are pretty minor in comparison to what’s already been accomplished.
- Audio issues when resampling across multiple threads. This is a tricky one to solve, but it’s very solvable. However, resampling an audio wave out-of-order is tricky.
- Windows 10 Crash with WebM (might also crash on other platforms). This is another tricky one, that I've already invested many days into debugging. There are a lot of moving parts, and I hate to blame this one on Windows… but WebM encoding crashes on Windows only, and needs a little more work to figure out.
So, let’s discuss what tasks are remaining for OpenShot 2.0 to be stable enough to start wide-scale testing among backers and supporters. There are many small loose ends to tie up related to the UI. For example:
- The previously mentioned “Challenges Remaining” need to be resolved
- Many context menus still need to be created
- A few more effects still need to be added
- Many small usability tweaks need to be made
- Credits need to be added to the About screen
- Windows Installer needs some additional work (Linux and Mac Installers / Packages are in pretty good shape)
Once those tasks are wrapped up, I will be ready to start some very limited alpha testing. Limited so that I can work closely with each person, and help resolve problems without being completely overrun with emails and bug reports. =) Once everything is working pretty smoothly, I’ll start expanding the tests to include more backers and supporters, and finally make an official release for all users to try out.
I knew there would be challenges in bringing OpenShot to Windows and Mac, but I certainly didn't expect some of the problems I've encountered so far. There aren't that many cross platform video editors, and I know why now. =) But I am super proud of what’s been accomplished so far, and I want everyone to know that I’m still 100% committed to bringing OpenShot 2.0 to Windows, Mac, and Linux as quickly as possible. Once the Kickstarter objectives have all been checked off, this isn't the end, but the beginning of something really special that I hope lives on for decades!
A powerful, flexible, and free video editor, for the world to use and extend, available on any platform, and capable of any video editing need (from students to professionals). That is the dream, and I’m working hard to make that come true! Thanks again for your support, and stay tuned!