Blur is a program made for easily and efficiently adding motion blur to videos through frame blending.
The amount of motion blur is easily configurable, and there are additional options to enable other features such as interpolating the video's fps. This can be used to generate 'fake' motion blur through frame blending the interpolated footage. This motion blur does not blur non-moving parts of the video, like the HUD in gameplay footage.
600fps footage, blurred with 0.6 blur amount
60fps footage, interpolated to 600fps, blurred with 0.6 blur amount
As visible from these images, the interpolated 60fps footage produces motion blur that is comparable to actual 600fps footage.
To install blur for Windows, just download and run the installer. Other operating systems are not currently supported.
For manual installation, see manual installation
- Open the executable and drag a video file onto the console window, or directly drop video files onto the executable file.
- A config file will be generated in the video's directory, which can be modified to suit your needs.
- The program will process the inputted video according to the configuration file located in the same folder as the video, and will output the blurred version to the same directory with " - blur" appended.
The program can also be used in the command line, use -h or --help for more information.
Config settings explained:
- blur - whether or not the output video file will have motion blur
- blur amount - if blur is enabled, this is the amount of motion blur (0 = no blur, 1 = fully blend every frame together, 1+ = more blur/ghosting)
- blur output fps - if blur is enabled, this is the fps the output video will be
- blur weighting - weighting function to use when blending frames. options are listed below:
- equal - each frame is blended equally
- custom weights - custom frame weights, e.g. [5, 3, 3, 2, 1]. higher numbers indicate frames being more visible when blending, lower numbers mean they are less so.
- custom function - generate weights based off of custom python code, which is called for each frame 'x', e.g. -x**2+1
- interpolate - whether or not the input video file will be interpolated to a higher fps
- interpolated fps - if interpolate is enabled, this is the fps that the input file will be interpolated to (before blending)
- quality - crf of the output video (qp if using GPU rendering)
- preview - opens a render preview window
- detailed filenames - adds blur settings to generated filenames
- input timescale - timescale of the input video file (will be sped up/slowed down accordingly)
- output timescale - timescale of the output video file
- adjust timescaled audio pitch - will pitch shift audio when sped up/slowed down
- brightness - brightness of the output video
- saturation - saturation of the output video
- contrast - contrast of the output video
- gpu - enables experimental gpu accelerated rendering (likely slower)
- gpu type (nvidia/amd/intel) - your gpu type
- deduplicate - removes duplicate frames and generates new interpolated frames to take their place
- custom ffmpeg filters - custom ffmpeg filters to be used when rendering (replaces gpu & quality options)
- blur weighting gaussian std dev - standard deviation used in the gaussian weighting
- blur weighting triangle reverse - reverses the direction of the triangle weighting
- blur weighting bound - weighting bounds, spreads out weights more
- interpolation program (svp/rife/rife-ncnn) - program used for interpolation.
- svp - fastest option, also blurs static parts of video the least
- rife - considerably slower than SVP but can produce more accurate results, particularly for low framerate input videos. this is the CUDA implementation of RIFE, and is the faster option for NVIDIA gpus.
- rife-ncnn - Vulkan implementation of rife, works for all devices but is slower.
- interpolation speed - default is 'medium', explained further here
- interpolation tuning - default is 'smooth', explained further here
- interpolation algorithm - default is 13, explained further here
Recommended settings for gameplay footage:
blur amount - for maximum blur/smoothness use 1, for medium blur use 0.5, low blur 0.2-0.3. 0.6-0.8 gives nice results for 60fps, 0.3~ is good for 30fps
blur weighting - just keep it at equal
interpolated fps - results become worse if this is too high, for 60fps source footage around 300-900 should be good, for 180fps 1200 is good. In general the limit tends to be at around 10x the input video's fps.
interpolation speed - just keep it at default
interpolation tuning - for gameplay footage default (smooth) keeps the crosshair intact, but film is also a good option
interpolation algorithm - just keep it at default
Using blur on 60fps footage results in clean motion blur, but occasionally leaves some smearing artifacts. To remove these artifacts, higher framerate source footage can be used. Recording with software such as OBS at framerates like 120/180fps will result in a greatly reduced amount of artifacting.
Preventing unsmooth output
If your footage contains duplicate frames then occasionally blurred frames will look out of place, making the video seem unsmooth at points. The 'deduplicate' option will automatically fill in duplicated frames with interpolated frames to prevent this from happening.
Note: I don't suggest manual installation due to the large amount of dependencies. If possible, stick to using the provided installer.
- Download the latest release or build the project.
- Download and run installer.bat to automatically install all of the requirements.
- Install Python
- Install FFmpeg and add it to PATH
- Install the 64-bit version of VapourSynth
- Install the required VapourSynth plugins using the command "vsrepo.py install ffms2 havsfunc"
- Install vs-frameblender manually by downloading the x64 .dll from here to "VapourSynth/plugins64"
- Install SVPflow 184.108.40.206 manually by downloading the zip from here and moving the files inside "lib-windows/vapoursynth/x64" to "VapourSynth/plugins64"
- Install weighting.py and filldrops.py to "%appdata%/Roaming/Python/Python39/site-packages"