Multi-raw2dng-converter
I asume that you know all about installiation and usage of Magic Lanters raw video functionality.
If you like me find your self with many raw files, using raw2dng manually can be pain in a**. Here you have python 3.x script working and tested on Windows 8. Given the argument -d "file directory" it will look for any subfolders there and for each raw file in subfolder will create new folder and will run raw2dng on that file. The resulting dng will end up in folder named "ra_file_name" without RAW. The script utilizes as many new processes as there cores in CPU.
Note that this script is just quick and dirty way to fix my problem. I hope it will be useful for other as well. Feel free to modify and extend.
Usage:
Output:
Script:
Note that this script is just quick and dirty way to fix my problem. I hope it will be useful for other as well. Feel free to modify and extend.
Usage:
D:\dev\python multiConverter.py -d "F:\Images\2013\0722"
Output:
Successfully processed: F:\Images\2013\0722\1\M17-2243.RAW
Script:
#!/usr/bin/python #searches for raw files and converts then into a directory with the #same name as file import glob import sys, getopt import os, multiprocessing, queue, subprocess from threading import Thread, Lock FILE = 0 DIR = 1 RAW2DNG = r"C:path\to\raw2dng.exe" def optionsGet(argv): inputdir = "" try: opts, args = getopt.getopt(argv,"hd:",["ddir="]) except getopt.GetoptError: print('multiconverter.py -d') sys.exit(2) for opt, arg in opts: if opt == "-h": print("multiconverter.py -d ") sys.exit() elif opt in ("-d", "--ddirectory"): inputdir = arg return inputdir def getCPUs(): # Windows try: res = int(os.environ['NUMBER_OF_PROCESSORS']) if res > 0: return res except (KeyError, ValueError): pass def createFolder(name): pass def getFileNames(name): return glob.glob(name + "\*.RAW") def getsubdirs(inputdir): file_list = [] dirs=os.listdir(r'%s' %inputdir) for d in dirs: tmp = r'%s\%s' %(inputdir,d) file_list.append(tmp) return file_list def createJobs(dir_list, q): for d in dir_list: files = getFileNames(d) for f in files: q.put((f,d)) def deployWorkers(file_list, l, num_workers, func): jobs = multiprocessing.Queue() createJobs(file_list, jobs) workers = [] for i in range(num_workers): jobs.put(None) tmp = multiprocessing.Process(target=func, args=(jobs,)) tmp.start() workers.append(tmp) for worker in workers: worker.join() def raw2dngWorker(queue): while True: job = queue.get() if job == None: break else: #enter right dir os.chdir(job[DIR]) #create folder folder = job[FILE].split(".")[0] os.makedirs(folder) #change dir os.chdir(folder) proc = subprocess.Popen([RAW2DNG, job[FILE]] , stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, ) stdout_value, stderr_value = proc.communicate() if not stderr_value: print("Successfully processed: %s" %job[FILE]) else: print("ERROR %s " %stderr_value) if __name__ == "__main__": inputdir = optionsGet(sys.argv[1:]) cores = getCPUs() l = Lock() file_list = getsubdirs(inputdir) #start cores = workes deployWorkers(file_list, l, cores, raw2dngWorker)
Cheers