최근 mozjpeg 프로젝트가 2.1 버전으로 나왔습니다. 그 목적은 JPEG 인코딩의 효율을 기존 인코더보다 향상되게 하면서 기존 디코더 대다수와의 호환성을 유지하는 겁니다.
저는 여러분들에게 JPEG의 크기를 줄이는 데 이 소프트웨어를 사용할 수 있는 방법을 설명하려고 합니다. 특히 저는 mozjpeg의 cjpeg
명령줄 유틸리티 사용 요령 전반을 다루겠습니다.
mozjpeg 빌드하기
그냥 내려받을 수 있는 공식 mozjpeg 바이너리는 존재하지 않기 때문에, 여러분들은 소스코드에서 프로젝트를 빌드해야 할 겁니다. 우선 최신 릴리즈의 소스코드를 내려받고 거기 포함된 BUILDING.txt파일에 나온 지시사항을 따르세요.
리눅스와 OS X 환경에서 빌드하긴 꽤 쉽습니다. 윈도에서 할 경우에는 약간 더 복잡하긴 하지만, 여전히 비교적 쉽죠. mozjpeg 프로젝트는 나중에 바이너리 형태로 배포하는 걸 고려하는 중입니다.
여러분이 mozjpeg를 빌드할 때 cjpeg
라 불리는 명령줄 도구를 생성하게 됩니다. 이건 mozjpeg와 함께 나오는 인코딩 프로그램입니다. 디코더는 djpeg
라 불리죠.
이미지 포맷 입력
cjpeg
도구는 targa, bmp, ppm, jpg 형식으로 입력되는 파일을 다룰 수 있습니다.
JPEG파일을 입력받아 처리하는 능력은 mozjpeg에서 새로운 기능입니다. 다른 프로젝트에서 제공되던 기존 cjpeg
도구엔 이런 기능이 없었죠. 새로운 기능은 재압축(re-compression) 작업진행을 더 쉽게 만들기 위해 추가됐습니다. JPEG를 BMP나 다른 형식으로 변환한 다음 다시 (JPEG로) 재인코딩하는 대신, 여러분은 그냥 JPEG를 직접 cjpeg
인코더로 처리할 수 있습니다.
여러분이 만일 cjpeg
에서 지원되지 않는 파일 형식에서 JPEG를 만들어내고 싶다면, 이 ImageMagick tools를 살펴보세요. 여기에 convert
라 불리는 명령줄 도구가 들었는데 이게 여러 이미지 형식을 변환해 줍니다.
명령줄 도구 cjpeg
기본 사용법
mozjpeg의 cjpeg
를 쓰는 사람들 대부분이 쓰는 가장 단순한 (명령어) 형식은:
$ cjpeg -quality 80 foo.bmp > bar.jpg
이러면 “foo.bmp”라는 파일을 입력받아 “bar.jpg”라 불리는 화질 80짜리 이미지를 생성합니다. cjpeg
는 JPEG 파일을 처리한 결과를 즉시 내놓기 때문에, 만일 여러분들이 그걸 디스크에 기록하고자 한다면, 아마 그러시겠지만, 그 결과를 기록할 파일에 ‘>’로 지정해야 할 겁니다.
화질 수준 선택
화질 범주는 최저 0부터 최고 100까지입니다. 대부분의 사람들은 60과 90 사이에 있는 값으로 화질을 결정하려고 합니다. 여러분은 만족할 수 있을만큼의 화질을 갖춘 동시에 가능한한 낮은 (화질)값으로 이미지를 만들어내길 원할 겁니다. 왜냐면 더 낮은 값으로 만들어낸 이미지일수록 더 작은 파일 크기로 나오기 때문이죠.
아래 이미지는 mozjpeg의 cjpeg
를 써서 5가지 서로 다른 화질 수준으로 인코딩한 동일 이미지와 원본 이미지를 보여 주는 겁니다. 해당 글씨를 누르면 확대될 겁니다.
다음은 화질별 이미지 파일을 하나씩 볼 수 있는 링크입니다.
(이미지 출처 위키미디어 사용자 Soulmatesphotography, 저작자표시-동일조건변경허락3.0 Unported)
실험을 좀 해 보십시오. 숱한 사람들은 그러질 않아서 파일 크기의 확연한 절감을 경험해보지 못하곤 합니다. 그 사람들은 종종 “화질값 80 정도면 괜찮은 타협인 것 같은데, 사람들이 대부분 그런다고 들었으니까 나도 그렇게 할래” 이런 선에서 생각하는 겁니다. 만일 여러분들이 화질값 77과 80을 적용한 이미지 사이의 차이를 말할 수 없다면, 여러분은 자신들에게 문자 그대로 아무런 화질상의 손실도 없이 파일 크기를 확실히 절약할 수 있는 기회를 놓치고 있는 겁니다.
프로그레시브 대 베이스라인 JPEG
cjpeg
의 mozjpeg 버전은 기본적으로 프로그레시브 방식의 JPEG를 생성하는데 그 이유는 그 파일 크기가 베이스라인 JPEG보다 대략 4%씩은 더 작은 편이기 때문입니다. 프로그레시브 JPEG는 내려받아질 때 처음부터 전체 크기로 보이는 대신 흐릿한 윤곽만 표시되다가 온전한 해상도로 나타나는 형식입니다. 베이스라인 JPEG는 간단하게 맨 윗부분부터 아랫부분으로 불러들여지는 형식이고요.
(이미지 출처 위키미디어 사용자 Soulmatesphotography, 저작자표시-동일조건변경허락3.0 Unported)
만일 여러분이 베이스라인 JPEG를 생성하고 싶다면 이런 식으로 쓰면 됩니다.
$ cjpeg -baseline -quality 80 foo.bmp > bar.jpg
화질 측정방식 지정
mozjpeg의 cjpeg
가 갖춘 멋진 기능으로 여러분이 4가지 화질값 측벙방식 PSNR, PSNR-HVS-M, SSIM, MS-SSIM 가운데 어떤 것에든 최적화할 수 있다는 겁니다. 이 측정방식들은 이미지의 화질을 원본과 비교해 계산하는 알고리즘입니다. 좀 더 과학적으로 표현하자면, 이는 흔히 왜곡률을 가리킵니다.
이 알고리즘들은 화질을 정의하는 방법과는 달라서, 한 측정방식에 최적화한 결과가 다른 측정방식의 결과에 나쁜 영향을 줄 수도 있습니다. 이게 어떻게 보일 수 있는지에 대한 많은 사례를 알고 싶다면 2014년 7월 모질라에서 수행한 손실 압축 이미지 연구를 참조하세요.
mozjpeg는 기본값으로 PSNR-HVS-M 방식에 맞춰져 있습니다. 이 방식이 전체 화질 측정방식에 대체로 잘 맞게 해주거든요.
만일 여러분이나 또는 속한 조직이 다른 화질 측정방식에 비해 특정한 방식 한 가지를 더 신뢰하기로 결정했다면, 여러분은 mozjpeg의 cjpeg
도구에 여러분의 기본 설정사항을 제시해 그 측정방식에 알맞게 조정할 수 있습니다.
결론
이제 여러분들이 자신있게 JPEG를 최적화하는 방법으로 mozjpeg를 쓰기 시작할만큼 충분히 알았기를 바랍니다. 만일 여러분에게 어떤 문제가 생긴다면 그 내용을 mozjpeg의 기트허브 이슈트래커에 보고해 주십시오.
원저자: Josh Aas – 원문으로 가기
작성자: Mincheol Im
https://twitter.com/mincheolim
댓글이 없습니다.