.NET (WPF) Development: Video Tools

Tools: Microsoft Visual Studio, C#, XAML, Git, Adobe Illustrator

Roles: Interaction programmer, QA

In our term project for human-computer interaction (HCI) class, our group of five decided on a set of video tools. With command line libraries forming our backend, we created functional interface prototypes of the following:

I had never used Visual Studio or written C#/XAML before, but I found it similar to the Java/XML setup of Android Studio, so it wasn't difficult for me to get started. My groupmate Alex (veridiam @ GitHub, bless him) implemented most of the editing tool functionalities, while most of my work (Hammerlord @ GitHub) was on the downloader and widget interactions.

GitHub Repository

Libraries used

We used the following command line libraries for our backend:

Our project would map input arguments and execution to user-friendly graphical interfaces. For example, where a user might input to Youtube-dl:

youtube-dl -f [Format Code] [URL] -o \[File Name]\
We would hide the query generation and have custom field widgets for each of the arguments.

Downloader

Initial Data Retrieval

When the user inputs a valid URL, the downloader retrieves details such as available dimensions, file extensions, and a preview thumbnail.

Entering a valid URL runs a script
Results of the script

Normally, the information is displayed as a string or block of text in the command line interface. I wrote a parser to convert that information into selectable items on the Video Options and Audio Qualities views. Fortunately, I could at least add an event handler to the framework's Process class, which allowed me to get the information line by line instead of having it all spit out at once.

I put each valid video option into a class VideoOutput with properties such as FormatCode, Extension, and Resolution. Then it was straightforward to access the selected item's data or map data to the Video Quality columns.

Audio Only

Youtube-dl offered audio options along with the other video options, but those files had nonstandard formats and weren't always playable. I changed the acquisition to an audio rip, where Youtube-dl would download the video and convert its audio to a chosen option: mp3, ogg, wav, etc.

Audio only mode

Download!

The application generates a query behind the scenes based on the user's input. From there, it's a matter of choosing a file name and hitting Save.

Save
Download
Enjoy

QA

As the user testing date drew near, I identified and fixed several bugs to clean up the functionality of our project. Some examples:

Wireframes

Early on, I made wireframes: low fidelity sketches to quickly communicate layout.

I also had a foray into a potential colour scheme. As you can probably tell, we chose not to go with it.

Alex argued for a native OS look, which would:

Challenges