如何在文件夹和子文件夹中的所有Jpeg图像上运行guetzli

时间:2017-03-17 15:57:35

标签: batch-file image-processing

我只是在https://github.com/google/guetzli上面了 - 并希望编写一个脚本来在Windows上的项目中的所有jpeg图像上运行它。

我如何循环,文件夹和子文件夹中的所有文件,并获取输入命令的相对路径?最后,由于guetzli速度相当慢,有没有办法等待执行完成或延迟?

谢谢, 路易斯

2 个答案:

答案 0 :(得分:2)

对于任何有兴趣的人,这是我去的代码;

setlocal disableDelayedExpansion
for /f "delims=" %%A in ('forfiles /s /m *.jpg /c "cmd /c echo @relpath"') do 
(
  set "file=%%~A"
  setlocal enableDelayedExpansion
  echo !file:~2!
  CALL "guetzli.exe" --quality 85 !file:~2! !file:~2!
  endlocal
)

只需将其放入带有guetzli可执行文件的根目录

即可

答案 1 :(得分:1)

我只需要这样做,并编写了这些简单的几行Python来处理它。这里没有尝试超级Pythonic。只有数字jpgs特定于我正在处理的文件夹。不得不使用质量= 95,因为非常轻的皮肤色调上的压缩瑕疵在90时仍然明显。仍然从6.4meg变为2.2meg 25个420x280 jpg图像(原件是最高质量)。在质量= 85时,尺寸为1.7meg,因此可以接受0.5meg的显着减少的伪影。 Stil大笔储蓄 - Guetzli很棒。 HTH。 -Steve

import os
import time
import subprocess

files = os.listdir('./')

jpgs = []
for file in files:
    if file[len(file)-3:] != 'jpg':
        continue
    try:
        fnum = int(file.split('.')[0])
    except:
        continue
    jpgs.append(file)
    jpgs.sort()


todo = len(jpgs)
done = 1
print '# %d = todo' % (todo)
start_tot = time.time()
for jpg in jpgs:
    fnum = int(jpg.split('.')[0])
    cmd = 'guetzli --quality 95 %d.jpg %d_g.jpg' % (fnum, fnum)
    print '# %d of %d' % (done, todo)
    print '# %s' % (cmd)
    start_img = time.time()
    subprocess.call(cmd, shell=True)
    t_this = time.time() - start_img
    t_tot = (time.time() - start_tot)
    avg = t_tot / float(done)
    done += 1
    print '#---%d done: %0.2f sec, %0.2f avgSec, %0.2f minTot' % ( fnum, t_this, avg, t_tot/60.0)
#end