dwing吧 关注:5,669贴子:89,042

基于x264的静态图像编解码工具(开发中)

取消只看楼主收藏回复

至今我还没搜索到基于x264 intra帧的编解码工具,所以只能自己动手了.
因为要支持任意分辨率和alpha通道,所以只能自定义一种简单的封装格式,目前暂定名为UCI(Ultra Compact Image),目标不仅仅是h.264,而是追求压缩质量最佳的有损静态图像编码.

编码器组件包含x264.exe和一个外壳ucienc.exe.
解码器组件包含基于ffmpeg的ucidec.dll和一个外壳ucidec.
由于x264经常更新,而且是以GPL协议发布的,所以我不打算直接提供,可到x264.nl那里下载.

目前仅仅完成了24/32位bmp到uci的编码,以后打算支持输入其它常用格式.
alpha以另一帧Y通道的形式编码,色彩目前仅支持4:2:0.


IP属地:北京1楼2008-12-07 16:56回复
    这楼的目的不仅仅是发一个通知.

    还要征求各位图像/视频领域的高手共同讨论.
    目前有几个问题:
    1.静态图像支持4:4:4的色彩采样是否有必要?
    2.计算机内保存的位图的RGB到YUV的转换是采用以下那种?
    Y = 0.2990 R + 0.5870 G + 0.1140 B
    Y = 0.257 R + 0.504 G + 0.098 B + 16


    IP属地:北京2楼2008-12-07 17:00
    回复
      3.如果使用4:2:0采样,编码和解码时是否要对UV通道做加权和插值处理?


      IP属地:北京3楼2008-12-07 17:03
      回复
        1.先暂时用4:2:0,color banding看看能不能用较好的插值算法避免.
        2.公式我先用前者,后者感觉很奇怪,输出的Y值总是>=16.
        3.x264官方提供了vc的工程文件,但我不想用,这样更新方便一些,而且我不必遵循GPL协议.


        IP属地:北京5楼2008-12-07 18:45
        回复
          alpha通道我暂时的想法是当作Y通道去单独压缩,UV用0填充.
          这样含alpha的UCI文件就包括了2个x264帧.

          插值暂时选用lanczos,不知道会不会很影响解码速度.


          IP属地:北京6楼2008-12-07 18:48
          回复
            ffmpeg用VC编译是比较痛苦的,我决定使用FreeImage来做图像上的格式转换,色彩转换及缩放处理.


            IP属地:北京8楼2008-12-07 21:13
            回复
              会提供dll来解码,以及进一步的开发.


              IP属地:北京10楼2008-12-07 21:58
              回复
                用目前最新的ffmpeg解h.264单帧的速度比较理想,即使不使用任何汇编优化也比解同等大小的hd-photo快一点.


                IP属地:北京12楼2008-12-11 10:07
                回复
                  win环境下还是vc比较好用,h.264解码部分我已经掌握了所需文件和修改方法,可以在VC7以上顺利编译,编译结果是600多KB,UPX可以压到170多KB.


                  IP属地:北京14楼2008-12-11 19:04
                  回复
                    如果ffmpeg所用的汇编使用nasm/yasm兼容的语法就好了.
                    不过,对于解静态图像来说,不用汇编优化速度也是可以接受的.


                    IP属地:北京16楼2008-12-12 09:48
                    回复
                      那种情况做好cache比用汇编优化有效得多.


                      IP属地:北京18楼2008-12-12 19:39
                      回复
                        合并成大图管理起来比较麻烦,还不如改用一个比较好的cache策略,比如用LRU代替简单的hash slot.


                        IP属地:北京20楼2008-12-13 00:04
                        回复
                          UCI的各个环节已经完成,初步测试发现,使用相同的压缩参数,我解出来的图像比mencoder解出来的质量稍微差一点,可能是因为YUV变换,平均/插值算法不够好.


                          IP属地:北京22楼2008-12-13 18:43
                          回复
                            好吧,经过尝试和对比,决定使用swscale缩放和YUV转换.
                            PS: 用VC编译ffmpeg的部分代码速度奇慢.


                            IP属地:北京24楼2008-12-14 00:33
                            回复
                              我暂时还没办法转换内嵌汇编,而且工作量很大,对于只解单帧来说,无优化的速度已经可以接受了.hd-photo的源代码也没有汇编优化.
                              打算再过一周的调整,完善,测试再发布.


                              IP属地:北京26楼2008-12-14 10:35
                              回复