如何并行运行darktablecli?

2024-09-21 00:18:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个约1000 CR2图像序列,我需要转换为TIFF16。以下命令行起作用:

darktable-cli input_image.CR2 colorcard.xmp output.tiff --core --conf plugins/imageio/format/tiff/bpp=16

但是,当我想通过下面的Python代码并行执行该命令时,在转换一个图像后,我会遇到以下错误:

[init] the database lock file contains a pid that seems to be alive in your system: 31531
[init] database is locked, probably another process is already using it
ERROR: can't acquire database lock, aborting.

以下是我的Python代码:

#!/usr/bin/env python3

import glob
import shlex
import subprocess
import multiprocessing as mp

from multiprocessing import Pool


def call_proc(cmd):
    subprocess.run(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE)


app = '/Applications/darktable.app/Contents/MacOS/darktable-cli '
xmp = ' colorcard.xmp '
opt = ' --core --conf plugins/imageio/format/tiff/bpp=16 --conf plugins/imageio/storage/disk/overwrite=true  --library /tmp/darktable.db'

raw_images = glob.glob('indata/*')

procs = []
for raw_image in raw_images:
    tif_image = raw_image.replace('.CR2', '.tif').replace('indata', 'outdata')
    cmd = app + raw_image + xmp + tif_image + opt
    procs.append(cmd)

pool = Pool(mp.cpu_count())
pool.map(call_proc, procs)
pool.close()
pool.join()

平台:

  • 暗表版本:暗表cli 3.0.0
  • OS:macOS Mojave 10.14.3(18D42)
  • NVIDIA GeForce GTX 680MX 2048 MB

我找到了下面的thread,但对于给定的解决方案没有运气

非常感谢您的帮助


Tags: imageimportcmdrawcliconfpluginsdatabase
1条回答
网友
1楼 · 发布于 2024-09-21 00:18:10

在{a1}中,@miguev给出了帮助我的答案。这并不漂亮,但很有效。我正在为每个图像添加一个tmp目录,并将其传递给 configdir属性,如下所示:

for i in raw_images:
    os.mkdir('/tmp/' + str(os.path.basename(i).split('.')[0]))

cmds_list = []
for raw_image in raw_images:
    tif_image = raw_image.replace('.CR2', '.tif').replace('indata', 'outdata')
    cmd = app + raw_image + ' ' + xmp + ' ' + tif_image + opt + '  configdir /tmp/' + str(os.path.basename(raw_image).split('.')[0])
    cmds_list.append(cmd)

当你在身后清理完毕后,你需要做的就是在最后完成

相关问题 更多 >

    热门问题