clockwerk
V2EX  ›  问与答

每个月有 50g 的 tif 要转 png,有没有效率高一些的办法

  •  
  •   clockwerk · Aug 2, 2016 · 6220 views
    This topic created in 3748 days ago, the information mentioned may be changed or developed.

    每周有大概 12 个 g 的 tif 文件,要转成 png 存服务器,现在处理一遍 12g 的要 8 个小时,程序是以前 c#做的,打算提高些效率,不知道有没有人有好办法

    Supplement 1  ·  Aug 2, 2016
    现在是用的 freeimage 开源项目来处理,不知道有没有更好的处理方法
    40 replies  •  2016-08-03 13:12:27 +08:00
    fcicq
    fcicq
    Aug 2, 2016❤️2
    1
    典型的加 CPU 个数就足够解决的问题
    Srar
    Srar
    Aug 2, 2016❤️1
    2
    GPU 加速?
    cxbig
    cxbig
    Aug 2, 2016
    3
    同 subnet 开一个机器专门处理,完了扔掉。
    lllooo
    lllooo
    Aug 2, 2016
    4
    加 CPU ,程序用 C 重写一遍,队列加大并行数。
    lllooo
    lllooo
    Aug 2, 2016❤️5
    5
    还有一个奇葩的方法。写个程序,然后公司员工安装上,自动转,然后上传。
    undeflife
    undeflife
    Aug 2, 2016
    6
    既然是每周累积的 为什么不在 tif 文件产生的时候就完成这个处理步骤而一定要集中处理?
    clockwerk
    clockwerk
    OP
    Aug 2, 2016
    7
    @undeflife 牵扯到跨部门问题,数据每周定期更新
    clockwerk
    clockwerk
    OP
    Aug 2, 2016
    8
    @fcicq 下载是开了一台 16g 内存电脑专门处理,处理程序是用 freeimage 开源项目处理,就是不知道还有没有其他的办法
    clockwerk
    clockwerk
    OP
    Aug 2, 2016
    9
    @lllooo 套路。。。。
    xmoiduts
    xmoiduts
    Aug 2, 2016 via Android
    10
    租用按量云计算?一台机子 8 小时, 10 台机子就 1 小时了。
    lhbc
    lhbc
    Aug 2, 2016❤️1
    11
    ImageMagick + GPU
    kamen
    kamen
    Aug 2, 2016 via Android
    12
    @llloo@lllooo 人心不古啊,到处都是套路
    hellov22ex
    hellov22ex
    Aug 2, 2016❤️1
    13
    天河 2 ?
    czheo
    czheo
    Aug 2, 2016 via iPhone
    14
    加机器
    3dwelcome
    3dwelcome
    Aug 2, 2016 via Android
    15
    好奇什么图片、竟然是 tif 格式?
    moult
    moult
    Aug 2, 2016
    16
    先把图片传到七牛或者又拍云,然后换个格式再下载回来,并删除文件。其实这种办法和租用云服务器类似,可能瓶颈在带宽,如果租用云服务器的话,务必租关机不计费的机器。
    排除云端方案的话,那就只有本地了。要么加 CPU 核心,或者上 GPU ,要么就组“集群”,也就是 5L 的方案。
    skydiver
    skydiver
    Aug 2, 2016❤️1
    17
    写个 Makefile ,调用 ImageMagick ,然后 make -j32
    skydiver
    skydiver
    Aug 2, 2016
    18
    而且 8 个小时一点都不多好吧……
    cfans1993
    cfans1993
    Aug 2, 2016 via Android
    19
    找数字公司商量一下,能不能租万把台 pc 几分钟
    larsenlouis
    larsenlouis
    Aug 2, 2016❤️3
    20
    安装 imagemagick 和 parallel ,一条命令搞定。
    find . -name '*.tif' | parallel convert {} {}.png

    imagemagick 用 c 语言写的图片处理瑞士军刀
    parallel 并行的执行计算任务

    我用的样图是 http://olympus-esystem.jp/products/e1/sample/image/sample01.tif , 15.3MiB
    复制为 10 份,在一台 i7-4790 16GRAM 上的双核、 2G RAM ubuntu 虚拟机上跑
    real 0m15.724s
    user 0m26.748s
    sys 0m0.520s
    大约 9.73MiB/s , 50GiB 图片大概要 1.5 小时。
    herozhang
    herozhang
    Aug 2, 2016 via iPhone
    21
    直觉是程序写的效率问题,再来就是并行处理。
    herozhang
    herozhang
    Aug 2, 2016❤️1
    22
    刚测试了一下,用 imagemagick 的 conver

    用 photoshop 生成了一个 600M 的 tiff 文件 test.tiff

    > time convert test.tif test.png
    convert test.tif test.png 18.92s user 1.19s system 99% cpu 20.123 total

    20 秒-600M
    50G 算下来也就是 1700 秒=0.47 小时

    如果开并行,应该是接近线性的时间关系。

    硬件平台: mid2014 MBP i7 CPU
    ins
    ins
    Aug 2, 2016
    23
    ....8 小时 知足吧兄弟...
    msg7086
    msg7086
    Aug 2, 2016❤️1
    24
    要便宜的话弄几台 x5650 的洋垃圾,要处理的时候开机然后并行跑,价格便宜量又足。
    clockwerk
    clockwerk
    OP
    Aug 2, 2016❤️2
    25
    @3dwelcome 出版行业一般都是存 tif ,因为 tif 对白底黑字,白色面积较大的情况压缩率高,同等大小更清晰,反过来要是黑底白字那文件就更大了,考虑浏览器不支持 所以要再转 png 保存
    clockwerk
    clockwerk
    OP
    Aug 2, 2016
    26
    @cfans1993 公司有挺大的机房,这个用途估计不给批啊。。。
    clockwerk
    clockwerk
    OP
    Aug 2, 2016
    27
    @ins 主要是这个活每周都要处理新的,这周数据有 25g ,想着每周都干就看看有没有优化的空间
    clockwerk
    clockwerk
    OP
    Aug 2, 2016❤️1
    28
    @moult 考虑过这样处理,瓶颈确实在带宽
    coderluan
    coderluan
    Aug 2, 2016
    29
    imagemagick
    wclebb
    wclebb
    Aug 3, 2016 via iPhone
    30
    不知道用 ps 的批处理感觉是怎样的……
    xenme
    xenme
    Aug 3, 2016 via iPhone❤️1
    31
    先找瓶颈么,找到了再对应优化
    designer
    designer
    Aug 3, 2016
    32
    图喵 表示太恐怖了
    CupTools
    CupTools
    Aug 3, 2016❤️1
    33
    学校有人用 sed | awk | > | cat 去转换 BIND zones , 3 亿纪录花了一晚上

    我看了看他的 bash script ,各种打开文件关闭文件管道 不慢才怪

    同楼上 先找瓶颈
    clockwerk
    clockwerk
    OP
    Aug 3, 2016
    34
    @xenme
    @CupTools 好的 ,今天在用 freeimage 写的这份源码了,初步判断处理起来瓶颈应该在并行,谢谢各位
    CupTools
    CupTools
    Aug 3, 2016
    35
    @nellace IO 也可能会是瓶颈
    123s
    123s
    Aug 3, 2016
    36
    加入收藏
    sgissb1
    sgissb1
    Aug 3, 2016
    37
    其实 c#写的也问题不大,只要正对某个“平台”选择特定的平台编译就好了。

    然后看瓶颈,是 io 瓶颈,就改 ssd ,用 ssd 做转换任务中的临时盘,转换完成了,再搬会机械盘。
    如果是内存,就加内存。是 cpu 就加 cpu 。

    实在没有其他办法,你也只能考虑用 c 重写,或者楼上几位说的用 gpu 。

    一般服务端优化的套路大致从这几个入手
    cnkuner
    cnkuner
    Aug 3, 2016 via Android
    38
    @sgissb1 如果内存够,文件不是很重要的话可以全放内存里,然后转存硬盘。
    bleaker
    bleaker
    Aug 3, 2016
    39
    这个场景蛮适合用七牛的,存储和转码基本是白菜价,和电费差不多了。。
    zqiyun
    zqiyun
    Aug 3, 2016
    40
    又不用你盯着, 8 小时就 8 小时呗,睡一觉不就完成了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2074 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
    ♥ Do have faith in what you're doing.