효율적인 JPEG을 만드는 mozjpeg 사용하기

최근 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가지 서로 다른 화질 수준으로 인코딩한 동일 이미지와 원본 이미지를 보여 주는 겁니다. 해당 글씨를 누르면 확대될 겁니다.

JPEG Quality Comparison

다음은 화질별 이미지 파일을 하나씩 볼 수 있는 링크입니다.

(이미지 출처 위키미디어 사용자 Soulmatesphotography, 저작자표시-동일조건변경허락3.0 Unported)

실험을 좀 해 보십시오. 숱한 사람들은 그러질 않아서 파일 크기의 확연한 절감을 경험해보지 못하곤 합니다. 그 사람들은 종종 “화질값 80 정도면 괜찮은 타협인 것 같은데, 사람들이 대부분 그런다고 들었으니까 나도 그렇게 할래” 이런 선에서 생각하는 겁니다. 만일 여러분들이 화질값 77과 80을 적용한 이미지 사이의 차이를 말할 수 없다면, 여러분은 자신들에게 문자 그대로 아무런 화질상의 손실도 없이 파일 크기를 확실히 절약할 수 있는 기회를 놓치고 있는 겁니다.

프로그레시브 대 베이스라인 JPEG

cjpeg의 mozjpeg 버전은 기본적으로 프로그레시브 방식의 JPEG를 생성하는데 그 이유는 그 파일 크기가 베이스라인 JPEG보다 대략 4%씩은 더 작은 편이기 때문입니다. 프로그레시브 JPEG는 내려받아질 때 처음부터 전체 크기로 보이는 대신 흐릿한 윤곽만 표시되다가 온전한 해상도로 나타나는 형식입니다. 베이스라인 JPEG는 간단하게 맨 윗부분부터 아랫부분으로 불러들여지는 형식이고요.

베이스라인:
jpeg-baseline

프로그레시브:
jpeg-progressive

(이미지 출처 위키미디어 사용자 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

Mincheol Im가 작성한 문서들…


댓글이 없습니다.

댓글 쓰기