Batch Denoise Script

This page explains the development of a python script that can batch denoise a sequence of RenderMan .exr image files.

 
 

ALGORITHM

1. Use the inspection module to determine the location of the images directory.
2. Create a list of the full paths of the .exr files.
     2.1 Sort them.
3. Create a list with numeric extensions.
4. Obtain the name of the first image (excluding numeric and ".exr" extensions).
5. Create the batch denoise file that will allow the user to denoise the images upon running the file.
     5.1 Make sure the script will work for both Windows and Linux opperating systems.
     5.2 Write the command strings.
     5.3 Close the file.
     5.4 Print a confirmation that the batch denoise files have been created.

 

INSTRUCTIONS

1. Place the batch_denoise.py code into the images folder that contain the .exr files that need to be denoised.
2. Execute the script from this location.
3. On Linux double click the file called "run_batch_denoise", on Windows double click the file called "run_batch_denoise.bat".

 

THE CODE - "batch_denoise.py"

import os
import os.path
import glob
import inspect
import re
  
# 1. Determine the path and location to the images directory.
fullpath = inspect.getframeinfo(inspect.currentframe()).filename
dirpath = os.path.dirname(os.path.abspath(fullpath))
projpath = os.path.dirname(os.path.dirname(dirpath))
  
# 2. Create a list of the full paths of the .exr files.
glob_patt = os.path.join(dirpath, '*variance.*.exr')
paths = glob.glob(glob_patt)
# 2.1 Sort them.
paths.sort() 
  
# 3. Create a list with numeric extensions.
flist = []
number = re.compile('(\w+)[._](\d+)[._](exr)')
  
for path in paths:
    fname = os.path.basename(path)
    fsearch = re.search(number, fname)
    fsearch_2 = fsearch.group(2)
    flist.append(fsearch_2)
  
frames = (",".join(flist))
  
# 4. Obtain the name of the first image (excluding numeric and ".exr" extensions).        
frame = os.path.basename(paths[0])
fsearch = re.search(number, frame)
gr1 = fsearch.group(1)
  
first_frame = ('%s.{%s}.exr'%(gr1,frames))
final_path = os.path.join(dirpath, first_frame)
  
# 5. Create the batch denoise file that work depending on the OS.
if os.name == 'posix':
    # 5.1 Linux
    filepath = os.path.join(projpath, 'batch_render_denoise')
    f = open(filepath,'w')
    # 5.2 Write command string.
    f.write('denoise  --crossframe -v variance -f default.filter.json  '+final_path+'\n')
    f.write('read\n')
    # 5.3 Close the file.
    f.close()
    # 5.4 Print a confirmation.
    print '"run_batch_denoise" created in project directory'    
else:
    # 5.1 Windows
    filepath = os.path.join(projpath, 'batch_render_denoise.bat')
    f = open(filepath, 'w')
    # 5.2 Write command string.
    f.write('denoise  --crossframe -v variance -f default.filter.json  '+final_path+'\n')
    f.write('pause\n')
    # 5.3 Close the file.
    f.close()   
    # 5.4 Print a confirmation. 
    print '"run_batch_denoise.bat" created in project directory'
 

PRINTED CONFIRMATION UPON EXECUTION OF THE CODE

The following is placeholder text known as “lorem ipsum,” which is scrambled Latin used by designers to mimic real copy. Fusce at massa nec sapien auctor gravida in in tellus. Sed a ligula quis sapien lacinia egestas. Donec eu est non lacus lacinia semper.

When the "batch_denoise.py" code is executed, there should be a printed confirmation, like in the above image.

When the "batch_denoise.py" code is executed, there should be a printed confirmation, like in the above image.

 

DISPLAYED CONTENTS OF THE "run_batch_denoise" FILE

The "run_batch_denoise" file should appear as it does in the above image. All of the .exr files should be listed in a single command line.

The "run_batch_denoise" file should appear as it does in the above image. All of the .exr files should be listed in a single command line.

 

RUNNING THE "run_batch_denoise" SCRIPT

The above image shows the result of running the "run_batch_denoise" file from the terminal.

The above image shows the result of running the "run_batch_denoise" file from the terminal.

 

RESTRICTIONS

This is meant as an example for the process of denoising a batch of rendered .exr files. The code assumes that the script is located in the same directory as the .exr files. This script also assumes that the user needs to denoise .exr files, but another user may wish to denoise .jpg or .png files and must edit the script as a result. This code should be use as a starting point and should be tailored to suit the user's needs.