我只是在https://github.com/google/guetzli上面了 - 并希望编写一个脚本来在Windows上的项目中的所有jpeg图像上运行它。
我如何循环,文件夹和子文件夹中的所有文件,并获取输入命令的相对路径?最后,由于guetzli速度相当慢,有没有办法等待执行完成或延迟?
谢谢, 路易斯
答案 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