Monday, August 11, 2014

New version available (0.8.1a)!

There is a new version available (0.8.1a) in my Dropbox folder!
The checksums for the pvp.exe binary are:
MD5: 235b47d9648cb4d36aa51abd2ef81378
SHA-1: bfefd69921b2903de4bb4e0178e6411a7bd51d44
As always, you should check the File Checksum before running.

Thursday, August 7, 2014

New version available (0.8a)!

There is a new version available (0.8a) in my Dropbox folder!
The checksums are:
MD5: 1dbf7186f82bf683d5cfaaa4a7849e18
SHA-1: b2a65c3091af89da18749269d726dd56440c087b
As always, you should check the File Checksum before running.

Tuesday, August 5, 2014

Dependencies and Requirements

The Parallel Video Processor needs a few programs to be already installed on your computer before it can process your videos.

These programs are:

FFMPEG and FFProbe: both of these programs can be found in a single archive on the Zeranoe FFmpeg builds web site. Just download and uncompress. PvP has been tested successfully with this. Alternatively, you can go straight to the FFMPEG website, but you'll need to download and compile the source code to a windows binary.

x264 binary: You will obviously need an encoder to encode your videos. x264 is not the latest, bleeding edge technology in video encoding, but it is an extremely mature and feature-rich video encoder which will produce great compressibility and quality. It can be obtained from

x265 binary: This is another encoder which you can use to encode your videos. x265 is the latest, bleeding edge technology in video encoding, but it is not considered mature for production release videos and therefore it is not widely used yet. It is a feature-rich video encoder that can produce even better compressibility and quality in comparison to x264, but it is slower and in some cases artefacts can be noticed. It can be obtained from

Avisynth: Avisynth is not a requirement per se. PvP will work fine without it. The only difference is that if you have Avisynth installed and your video input to the encoder is an Avisynth script, then PvP will try to use Avisynth's Trim instead of relying on FFMPEG's -ss and -t to cut your video.

If you don't have Avisynth and you plan on installing it only for this feature please note that Avisynth is a 32-bit application and it needs a 32-bit tool chain to work.
Most people's toolchain that have Avisynth installed use these:

Avisynth 2.5.8 or 2.6.0a (32-bit)
ffdshow_tryouts or ffdshow (32-bit)
Haali's Media Splitter (32-bit)

Obviously, after changing your video chain from 64-bit to 32-bit, your 64-bit Windows Media Player will be unable to play any video files and you'll need to download a 32-bit version of a media player such as MPC-HC or SMPlayer.

System Requirements:

PvP can run on any PC as long as its operating system is Windows XP or later.

Monday, August 4, 2014

Quick Start

The Parallel Video Processor is a utility that lets the user create a cluster of PCs whose job is to encode a video.

Its hard requirements are: FFMPEG, FFProbe, and an x265 or x264 encoder somewhere on your system.
Avisynth is a soft requirement; if you have it installed and the video to be encoded is an Avisynth script, then PvP instead of relying on FFMPEG or the encoder to seek and cut the video, it will do so through Avisynth's Trim function.

In Parallel Video Processor, there is a unique master node in the cluster which issues all necessary commands to the slaves.

Let's begin by setting up a cluster.

A cluster can have only one master and at least one slave. The master can only begin after all slaves are up and running so that the proper commands can be issued, so let's start with the slave first:

And this is the slave screen:

"Load Settings" is useful when you have configured a slave before and saved the settings. Since this is our first time, there's not much to save. Let's go ahead and press 2 to configure this particular slave node.

The process is pretty easy. You choose and type your username and password, verify it and finally choose the port that PvP will listen to for incoming connections. The default port is 5445, but here we've chosen 4554.

After this is done, we're back at the original screen. We'll press 3 to show PvP where to find the files necessary to process our video.

After a few steps, PvP will try to automatically detect the video's settings. Please review carefully. In most cases PvP will get everything right, but sometimes it will not. If all (or most) settings are correct, just accept them.

In most cases, it is quicker to just accept these settings, as they can be tweaked through the "Configure video settings" screen.

Finally, PvP will need to know if your output directory that your slave node will write to is on some sort of a shared storage with the master node. If the master's output directory is shared with the slave's then please answer 'y'.

After we're all done, we are back at the original screen. It's time to press 4 change any video settings. If you are absolutely sure that all automatically detected settings of your video were detected correctly you can skip this step.

Note that <ENTER> autocompletes previously-entered settings (if there are any, they will be shown inside brackets), and <TAB> autocompletes if there is a list of settings available. There is an extra option for the color format, which is --bypass. Using it will not specify a color format.

Once again we are back at the original screen. Let's press 6 for our slave node to know how it can connect to our master server. This screen is similar to the slave configuration screen, only that we have to enter the master node's username and password instead of ours. We also need to enter the master server's IP and port, and not just the port.

Back at the original screen, we have all the information required to start the slave. Pressing '7' will start sanity checks and after all tests have been passed, the slave node will be listening for incoming connections. It will only accept ones from the IP we said was the master node and none else.

Time to fire up the server.

The configuration options available are:

Let's press '2' to let our server know how to connect to our slave nodes. This screen is similar to the 'Configure master node settings' in our slave. We'll have to enter the slave node's IP address, the port that it is listening to and its username and password.

After we're done, we need to press the <ESC> button to let PvP know that we've finished configuring slave nodes.

After the slave node configuration is finished, we are presented with the node weight configuration screen. We'll need to choose a weighting method for our nodes. The more weight a node has, the more processing will be assigned to it. In other words, a node that is twice as fast as another one, ideally should get twice as much weight; that way the nodes will finish at the same time and no time will be wasted.

There are 4 different types of weighting methods:
1. Pre-Set: Video files have already been segmented and distributed per node. Let's say that a buddy of yours has the last half of a show and you have the first. The master node will process its part, the slave accordingly and after all is finished, the final result will be one video.
2. Manual: Video files are the same across nodes and the user is asked to individually assign a weight per node (note that in this case the server will perform checksums to validate that each node has the same file).
3. Equal: Video files are the same across nodes and all nodes are assigned the same weight (note that in this case the server will perform checksums to validate that each node has the same file).
4. Benchmark: Video files are the same across nodes and the server requests all nodes to be benchmarked for the file in question, acquiring the node weights through that process (note that the server will perform checksums to validate that each node has the same file).

After you've selected your desired weighting method, you'll be back at the original screen. If you've selected to process your video file benchmarking the systems, this might be a good time to actually press '8' instead of working through the flow. This is because a benchmark might take a while. If you request your slave nodes to be benchmarked while the master node is being configured, you save time.

Back at the original screen, we need to go through the flow just like we did on our slave node. This means that next up is '3', 'Configure paths'.

The only differences between master and slave path configuration screens are these:
a) If an x264 encoder is detected, then PvP will ask you if you want to encode directly using x264 or if you want to pipe a transcoded, raw video format of your video to the x264 encoder using FFMPEG. Even though x264 can handle most input formats, piping through FFMPEG can be a more stable method of encoding a video.
b) You will be asked of an output filename and not just the output directory.

Back at the original screen, we need to go through the flow just like we did on our slave node. This means that next up is '4', 'Configure video settings'. Master screen in exactly the same as slave's.

After that, we can configure any encoder settings we want by pressing '5'. We can choose to enter any x264 or x265 commands except those that are handled by PvP. You can enter x264 commands even though you are using x265 and vice-versa. This is handy because if you save your settings and decide to use a different encoder, you don't have to go through the screen again.

As with other screens, <TAB> autocompletes when there's a list of options available.

Back at the original screen, it's time to configure our master node.

This screen is similar to the slave configuration screen we did on the slave node. Of course we need to put the master node's credentials and port.

Looks like we're ready to go. After we press '7' and a few sanity checks, all nodes should start encoding.


After the encoding's finished and everything's gone well, you'll be asked if you want to delete the now useless temporary files that PvP has created and whether you want to issue a shutdown of the slave nodes' networking components for security reasons.

You've just created a cluster, encoded a video using a state-of-the-art encoder and cut the processing time required to almost half. Congrats!