티스토리 뷰

컴퓨터 관련

파일압축의 원리

진리와 가치를 고루고루 2007. 10. 10. 18:55

평소에 궁금하던 파일 압축의 원리를 알아보았다.

이해는 잘 안가지만,,,,,두 곳의 출처로부터 퍼옴을 해왔다.

=====

압축화일의 원리 중에서 가장 초보적인 것으로는 RLE(Run Lenght Encoding)방식인데 다음과 같
은 원리다.

aaaaabbbbccccdddeeee -> a5b4c4d3e4

위의 보기는 RLE 압축의 방식을 간단히 나타낸 것이다. 데이터에 한 문자가 'aaaaa'로 연속되어
있다면 그것을 'aaaaa -> a5'로 간단히 나타낼 수가 있다. 위의 예의 20문자는 'a5b4c4d3e4'로 10
문자로 줄일 수가 있을 것이다. 그러나 이 방식은 지금은 거의 사용하지않고 대부분 LZW(Lempel
Zip Welch) 방식을 사용하고 있다. LZW의 가장 큰 특징은 압축할 자료가 많고, 압축율이 높다는
것이다.

압축프로그램의 동작 원리

지금까지 알려진 가장 간단한 압축법이다. ARC 파일에서는 이 방법을 패킹(packing)이라고 부르
며 실행파일 압축프로그램들 중에는 SHRINK, ICE 그리고 안철수씨가 만든 MINIFY가 이 압축법
을 사용하고 있다.
RLE는 앞에서 말한 것과 같이 같은 문자가 계속 나열되는 경우에는 이것을 특수코드 - 반목 할
문자 - 반복회수의 3바이트로 표현한다. 여기서 특수코드는 어떠한 문자도 가능하다. 그러나 반복
회수는 1바이트를 차지하기 때문에 255까지의 반복회수를 가질 수 있으며 그이상 일때에는 다시
3바이트 형식으로 지정해 주어야 한다. 특수 코드는 임의의 수로 정할수도 있지만, 압축할 자료에
서 가장 빈도수가 적은 글자를 찾아 특수코드로 지정하는 것이 RLE 압축법의 압축 효율을 높이
는 요인이된다.
RLE압축법의 장점은 압축과 압축을 푸는 속도가 매우 빠르고 프로그래밍 하기가 쉬우며 프로그
램의 크기 또한 아주 작게 만들 수 있다는 점이다. 특히 같은 문자가 계속 반복되는 자료를 압축
할 때 높은 압축율을 자랑한다. 그러나 일반적인 경우에는 압축율이 낮다. RLE 압축법은 3바이트
로 표현되기 때문에 적어도 4개 이상의 동일한 문자가 인접해 있을 경우에만 효과가 있다.


<호프만 압축법>
호프만의 압축법은 다음의 네 가지를 거쳐서 이루어진다.
첫번째 압축할 파일을 읽어 각 문자들의 출현 빈도수를 구한다,
두번째 이들 가운데서 가장 빈도수가 적은 문자들끼리 연결시켜 이진 트리를 만든다.
세번째 이진 트리로부터 각 문자들을 대표하는 값을 얻는다.
네번째 파일의 문자들을 대표값으로 변환시켜 압축 파일을 만든다.

표1 압축할 파일의 구성 
( 생략 )
표2 허프만 압축법에서의 사용할 대표값 ( 생략 )

그림1 허프만의 압축법에서 이진 트리를 만드는 방법
(가) 빈도수 30 10 5 10 20 25
문 자 C A D F B E
(나) 빈도수 30 10 5 10 20 25
문 자 C A D F B E
| | | | | |
| | +------+ | |
| | 15 +------+
| | | 45
| +---------+ |
| 25 |
| | |
+----------+ |
55 |
| |
+-----------------------+
Root

네 가지의 과정을 이해하기 위해 보기를 들어 설명하겠다.
100 바이트의 크기를 갖고 있으며, 6개의 문자만으로 이루어진 파일이 있다고 가정하자. 각 문장
의 출현 빈도가 <표1>과 같다고 하자 이 문자들을 정당히 나열한 것이 <그림 1>이다. 문자들의
나열 순서는 그림과 달라도 무방하다.
우선 나열한 문자들 중에서 가장 빈도수가 낮은 것을 두개 고른다. 여기서는 D가 가장 낮고 A
와 F 가 그 다음으로 낮다. 이때 D와 A 혹은 D와 F 가운데 어떤 조합을 선택하여도 상관이 없
다. 여기서는 D와 F를 사용하겠다. 이 둘을 묶어 하나의 노드(node)를 만들고 두 문자들의 빈도의
합을 구한다. 하나의 노드가 완성된 다음에는 다시 가장 빈도가 낮은 두 문자를 고른다. 이때 이
미 노드로 묶여있는 문자들은 한 개의 문자로 생각한다. 따라서 가장 빈도가 낮은 두문자는 (D +
F) 노드와 A 로, 이둘을 묶어 또하나의 노드를 생성한다. 이러한 방법을 모든 문자들을 하나의
노드로 연결되도록 계속 노드를 연결해 간다. 즉 모든 문자들에 대해 하나의 트리를 만드는 것이
다.(그림1의 나 참조)
트리 구조를 완성한 후에는 각 문자에 고유의 대표값을 부여한다. 즉, 가장 아래의 노드에서 시작
하여 왼쪽으로 가면 0, 오른쪽으로 가면 1의 값을 부여한다, 이렇게 한 것이 <표2>이다. 따라서 8
비트를 사용되던 문자들이 2에서 4비트만으로도 표현되어 질 수 있게되며 그만큼 압축 파일의 길
이가 줄어들게 된다. 이로써 빈도수가 많은 문자들일수록 작은 비트로 표현할 수 있고, 적은 문자
들일수록 표현하는 비트수가 많아짐을 알 수 있다

<표 3> 허프만의 압축법을 실행한 결과 
( 생략 )

따라서 허프만 압축법은 기존의 아스키코드의 값보다 더 작은 크기의 대표값을 새로 만들어 사용
하는 것이라고 말할 수 있겠다. 허프만의 압축법을 사용한 결과는 <표3>가 같다. 800비트의 길이
의 파일이 240비트로 줄었으므로 파일의 길이는 240/800 = 30 % 로 단축됐다. 그러나 압축을 풀
때에는 대표값을 생성한 트리에 대한 정보가 없으면 불가능하므로 압축파일과 트리에 대한 정보
를 같이 저장해야 한다. 트리는 5개의 노드와 6개의 문자로 구성되며 각 노드 및 문자를 표시하기
위해서 4바이트 크기의 포인터가 필요하므로 (6 + 5) * 4 = 44 바이트가 요구된다. 또한 노드 숫
자와 그외의 필요한 정보를 담기 위해 몇 바이트가 더 필요하다. 따라서 트리에 대한 정보가 50바
이트가 필요하다고 가정한다면 압축 파일의 길이는 30 + 50 = 80바이트가 되므로 원래의 파일의
길이와 비교 해 볼때 (30 + 50)/100 = 80%로 줄어들게 된다.
허프만의 단점으로는 두 가지를 들수 있다
첫째 처음 파일내의 문자가 나오는 빈도를 계산할 때와 실제로 압축하기 위해 동작할때 등 파일
을 두번 읽어야 하므로 처리 속도가 늦다. 둘째, 트리에 대한 정보도 같이 저장해야 하므로 그만
큼 압축 효율도 떨어지게 된다.


LZW는 파일을 읽어 들이면서 연속된 문자열들에 대한 표를 만들고 다음에 같은 문자열을 발견되
면 이 표를 참조하는 압축 방법이다. LZW 압축법은 기억장소 내에 문자열에 대한 표를 만드는
것으로 시작된다. 표에는 보통 4,096개의 항목이 있는데, 각 항목은 2 바이트의 선두 포인터
(prefix)와 1 바이트의 후위 문자(suffix)로 이루어진다. 이 가운데에서 0 ∼ 255번은 특별한 용도
로 사용하기 위해서 남겨둔다.
이렇듯 문자열에 대한 표를 준비한 다음에는 실제로 파일에서 연속된 두 문자를 읽어 해당 문자
열이 기억장소 내의 표에 이미 존재하는지를 검사한다. 만약 이 문자열이 존재하지 않으면 표의
다음 위치에 문자열에 대한 정보를 보관하고, 출력 파일(압축 파일)에는 해당 문자가 위치하는 주
소를 기록한다. 만약 문자열이 이미 기억장소 내에 존재한다면 출력파일에 그 문자열의 주소를 기
록하면 된다. 만약 4,096개의 항목이 나열된 표를 사용한다면 출력 파일에 기록하는 주소를 표시
하기 위해서는 12비트가 필요하다는 결론이 나온다.
LZW 압축법은 허프만 압축법에 비해 다음의 두가지 장점이있다. 첫째 파일을 한번 읽어서 압축
할 수 있기 때문에 속도가 빠르다, 둘째 압축 파일내에 트리에 정보를 같이 저장할 필요가 없으므
로 압축효율이 훨씬 높아지게 된다. 파일의 크기가 작을 때는 압축 효율이 떨어지며, 연속된 두
개의 문자열이 파일의 다른 부분에 존재하지 않을 때는 압축할 수 없다는 단점도 있다.
LZW 압축법을 응용한 방법들은 ARC 파일의 크런칭(crunching)과, 스퀘싱(squashing), ZIP 파일
의 슈링킹(shrinking) 등이 있다. 근본적으로 압축 효율은 크런칭, 스퀘싱, 슈링킹의 순으로 높다.


크런칭(crunching)은 4,096 항목의 표를 사용하는 LZW압축법이다. 처음에는 단순히 LZW 압축법
만을 사용했으나 다음의 3가지 기법을 도입해 압축율을 높였다.
첫째, RLE 압축법을 먼저 시도한 다음 LZW 압축법을 사용했다.
둘째, 압축파일 내에서 사용하는 주조의 크기를 처음의 0 ∼ 511 번까지는 9비트, 512 ∼ 1,023 까
지는 10비트, 1,023 ∼ 2,047번까지는 11비트, 2,047 ∼ 4,096번까지는 12비트를 사용하게 만들었다.
이렇게 주소를 표시하는 데 필요한 만큼의 비트를 조절하는 방법을 '동적(dynamic) LZW압축법'
이라고 한다,
셋째, 이전에는 기억장소 내의 표가 모두 채워졌을 때는 더이상 문자열을 받아들이지 않아 압축효
율이 떨어진다. 따라서 압축효율을 높이기 위해 표가 전부 채워졌을 때는 그 내용을 전부 지워버
리고 재구성하는 방법을 구사했다.. 이러한 벙법을 적응성 리셋(adaptivc reset)이라고 한다.
스퀘싱(squashing)은 PKARC 2.0 이후 버전부터 지원되기 시작한 기법으로 크런칭과는 다음의
두가지 점이 다르다. 먼저 더 많은 문자열들을 저장할 수 있도록 표에서 사용하는 항목의 수를
8,192개 로 증가, 압축효율을 높인다. 다음으로 RLE압축법을 사용하지 않는다.
슈링킹(shrinking)은 스퀘싱과 마찬가지로 8,192 항목의 표를 사용하는 LZW 압축법이다. 그러나
크런칭과 스퀘싱이 표가 채워졌을 때는 내용을 모두 지우고 새로 시작하는데 비해, 슈링킹은 출현
빈도가 낮은 문자열들에 대한 항목만 지워버리고 기존의 표를 사용한다는 점이 다르다. 이를 부분
소거(partial clcaring)라고 부르는데 압축효율을 더욱 높일 수 있는 방법이다.

================================

☆파일압축의 원리☆ {지식모음}

출처 {http://blog.naver.com/ararikim/70008494092}

컴퓨터를 사용하는 사람들 중 ‘파일 압축’ 이라는 표현을 전혀 들어보지 못한 사람은 아마도 드물 것이다. 많은 사람들의 컴퓨터에는 ‘알집’ 이나 혹은 ‘윈집(Winzip)과 같은 프로그램이 깔려 있고, 우리들 대부분은 컴퓨터에 어떤 소프트웨어를 깔거나 혹은 인터넷을 통해 프로그램을 업데이트할 때, “압축파일을 풀고 있습니다” 혹은 “압축파일을 설치하고 있습니다” 등의 메시지를 보게 된다.

물론 개인 컴퓨터 사용자가 이러한 과정이나 작동원리에 대해 반드시 세부적으로 알아야만 하는 것은 아니다. 오늘날 대개의 윈도우 기반 프로그램들은 마법사(Wizard)로 대표되는 사용자 안내프로그램을 동반하기 때문에 과거의 DOS기반 유저들과는 달리 마우스클릭 몇 번과 키보드입력 몇 번으로 프로그램 일련번호나 암호 설정을 하여 설치를 끝낼 수 있기 때문이다. 그렇지만, 파일 압축은 오늘날 컴퓨터의 작동에 필수불가결한 장치와 마찬가지이므로 컴퓨터의 작동 원리의 ‘일부’ 라고 말해도 지나치지 않을 것이다.

파일압축은, 어떤 크기를 갖는 파일을 더 작은 크기로 만드는 것을 뜻한다. 압축률은 압축된 파일의 원본 파일에 대한 크기 비율로 표시되며, %단위로 나타낸다. 파일 압축은 비손실 압축과 손실 압축으로 나뉘는데, 비손실 압축은 압축한 파일을 다시 복원할 경우에 원본 파일과 정확히 일치하도록 압축하는 방법이며, 손실 압축은 압축한 파일을 다시 복원해도 원본 파일과 완전히 일치하지는 않는, 그러나 그 불일치한 정도가 사람이 느끼기 힘든 정도에 머무르는 압축을 말한다. 예를 들면, mp3의 음질은 대개의 CD음질과 비교하여 그다지 큰 차이가 없다.
{}
초창기 컴퓨터의 경우, 가격도 매우 비쌌고 그 저장매체들 역시 비쌌다.

오늘날의 기준으로 보면 극히 작은 킬로바이트 단위의 메모리조차도 자기테이프가 필요했고, 메가바이트 단위의 저장용량은 거대한 중앙전산실에서나 취급하는 것이었다. 과거의 기록필름이나 영화를 보면 보관실에서 자기테이프를 꺼내서 오늘날의 양문형 냉장고만한 크기의 로더에 장착하고 돌려서 정보를 읽어내는 것을 볼 수 있다

당연히 저장용량을 어떻게든지 줄이는 것은 돈을 아끼는 것과 같은 말이었으므로, 많은 컴퓨터 관련자들이 어떻게 하면 정보를 잃어버리지 않고도 그 저장용량을 축소할 수 있는지에 대해 궁리하게 되었다. 이로부터 여러 가지의 파일 압축방법이 등장하였다.
그러면 메모리 용량이 1기가바이트에 달하고 하드디스크 용량은 100기가바이트가 넘는 오늘날에 와서는 더 이상 파일압축이 필요없는 것일까? 그렇지 않다. 파일압축은 오히려 더 널리 쓰이고 있다. 왜일까?

그 이유는 컴퓨터의 성능이 개선되었지만 사람들의 요구 사항도 그에 맞춰서 계속 올라가고 있기 때문이다. 과거처럼 문서 파일까지 압축해가며 360킬로바이트 용량의 디스켓에 넣으려고 시도할 필요는 없지만 프로그램들의 크기가 계속 커지고 있기 때문이다. 실제로 한국에서 PC가 본격적으로 보급되기 시작한 80년대 중반에 사용하던 5.25 인치 디스켓은 아마 30대 이상의 사람들에게는 꽤나 익숙할 것이다. 반면 CD는 최초 등장한 이후 계속 용량이 650~700MB로 머물러 있으며, 이 때문에 주로 CD에 담겨서 배포되는 프로그램들은 이 용량에 맞추기 위해 압축한다.
{}

이 방식은, 파일들을 표준화된 8비트 코드(아스키 코드)로 표현할 경우 코드문자열이 같은 것으로 반복되는 경우가 있다는 것에 착안한 것이다. 예를 들어, AAAAAAA처럼 8개의 A가 반복되는 경우에, 이것을 8A라고 표시하는 것을 생각해 볼 수 있다. 즉 8byte를 2byte로 줄이는 것이다.

그러나 단순히 이렇게만 할 경우에는 구별의 문제가 생긴다. 예를 들어, AAAAAAAABBBBBCCC4444KKK를 이 방법으로 표현할 경우에, A8B5C344K3 이 된다. 이상한 점이 보이는가? 문자열 속에 숫자가 포함되면, 저것이 C가 344개 반복된다는 건지 C가 3개이고 4가 4개인지를 구별할 수 없는 것이다.

이러한 것을 피하는 방법은, 식별부호를 하나 중간에 삽입하는 것이다. 가장 간단히 생각해 볼 수 있는 것은 쉼표로 끊어서 A8,B5,C3,44,K3 으로 하는 것이다. 이럴 경우 쉼표 다음의 첫 문자는 반복문자이고 그 뒤의 숫자 값은 반복횟수로 보도록 규칙을 정하면 혼동이 없어진다. 실제의 압축기법에서는, 쉼표처럼 자주 등장하는 부호보다는 사용 빈도가 매우 희박한 특수문자를 하나 골라서 표식으로 사용하고 진짜로 그 문자가 등장하는 극히 드문 지점에서는 “예외처리” 프로세스를 별도로 삽입하여 완성된 형태의 파일압축규칙을 만든다.


앞서 기술한 방법은, 파일 내의 문자열이 잘 반복되지 않는 경우 압축이 잘 되지 않는 약점을 갖고 있다. 그래서 이 문제를 해결하기 위해, 문자열의 빈도에 따라 다른 숫자의 비트값을 도입하는 방법이 고안되었다.
통상적인 표준 문자열 체계에서는 E처럼 문서 내에서 발생 빈도가 높은 경우나 X나 Q처럼 발생 빈도가 낮은 경우에나 마찬가지의 크기(8비트)를 할당한다. 이것을 바꿔서, 자주 발생하는 문자는 3비트 정도로 크기를 줄이고 드물게 발생하는 문자는 10비트 혹은 그 이상으로 크기를 늘려서 평균값으로는 4~5 정도로 유지하는 것이다. 이러한 방식은 총괄적으로 “엔트로피 부호화”라고 부르며, 이에 속하는 압축법에는 호프만 부호화, LZW 부호화 등이 있다.
위의 방법이 꽤 좋은 압축률을 보여 주게 되자, 이 개념을 확대하여 아예 단어 단위로 끊어서 자주 나오는 단어(a, the, get, make 같은) 단어에는 적은 비트수를 할당하고 드문 단어(synchronous와 같은 단어)에는 적은 비트수를 할당하는 방법이 구상되었다. 본질적으로, 이것은 영어사전에 나오는 단어를 출현 빈도 순서대로 다시 정렬한 다음 순서대로 0,1,10,11,100,101... 과 같이 작은 값부터 큰 값으로 순차적인 배정을 하는 것과 동일하다. 초기의 컴퓨터는 메모리 용량도 작고 CPU의 능력도 모자라서 이러한 변환 과정을 무리 없이 수행하기 어려웠으나, 컴퓨터 성능의 급속한 발달로 이런 단어장 압축기법이 적용 가능하게 되었다.
{}
손실 압축 기법이란, 압축된 파일을 복원할 경우, 원본이 그대로 나오는 것이 아니라 일부가 손상되어서 나오는 것이다. “손상된 파일이 무슨 가치가 있지?” 하고 생각할 수도 있지만, 그 손상이 파일의 본질가치에 그다지 영향을 주지 않는다면, 비용 대비 편익이라는 관점에서 선택 가능한 답이다.

당연히, 중간에 글자 몇 개 빠지면 엉터리가 되어버리는 문서나, 혹은 비트 하나만 잘못되어도 오류가 발생하는 프로그램 파일의 경우에는 이러한 압축 기법을 적용할 수 없다. 이러한 손실압축 기법은, 사진이나 음악의 경우에 주로 적용된다. 왜 사진이나 음악의 경우 손실압축이 널리 받아들여질 수 있는 것일까? 그 이유는 문자 혹은 문자열은 그 자체로 일정부분 “코드화” 가 된 것이지만 사진이나 음악의 경우에는 본질적으로 아날로그 정보이므로 컴퓨터에 의한 “완전한 기록 및 복원”이라는 것은 원천적으로 불가능하며 최대한 “자세하고 세밀하게” 디지털화 하여 사람의 눈이나 귀에 거슬리지 않도록 하는 것이 목표이기 때문이다.

그러나 이것은 초창기 컴퓨터 관련자들에게 매우 큰 부담으로 작용하는 것이었다. 사진의 경우 1024 X 768 으로 흑백 256단계 명암으로만 표현해도 총 80만 바이트인데, 이것은 웬만한 소설책 한 권 에 쓰인 글자 수와 맞먹는다. 이것을 전혀 압축하지 않고 매체에 저장하는 것은, 당시의 비싼 저장매체 가격을 생각할 때 도저히 컴퓨터상에서 사진이나 음악을 구현할 수 없다는 뜻에 가까웠다.

동영상의 경우에는 더욱 심하다. 극장에서 우리가 보는 표준형 필름의 경우 1초에 24번의 정지영상이 갱신되며, 아주 옛날 영화의 경우 12프레임/초 인 경우가 있는데 이러한 영화는 돌려보면 인물들의 움직임이 부자연스러운 것을 쉽게 알 수 있다. 그렇다면 1초 동안 앞서 말한 흑백 정지영상 24개를 보여주기 위해서는 초당 20메가바이트의 정보를 처리해야 한다는 것인데 이것은 너무나도 어려운 과제였다. (컬러로 바뀔 경우, RGB각각의 3원색에 대한 것이 별도로 되므로 처리요구량은 3배로 증가한다. 즉 총 60메가/초 가 된다.)

과학자들과 엔지니어들은 이 과제를 해결하기 위해 ‘손실 압축 기법’을 개발해 낸다. 손실 압축 기법은, 인간은 영상정보의 미세한 차이를 잘 구별하지 못한다는 점에 착안한 것이다. 실제로 사진 파일의 경우에, 맨 처음에 예시한 중복문자열 축약법(손실이 전혀 발생하지 않는) 으로도 매우 큰 압축이 가능하다. 그러나 문제는 그렇게 하여도 바로 앞에서 말했듯이 파일의 크기가 너무 크기 때문에 감당이 어렵다는 것이다.


기본 개념은, 사진의 경우 어떤 특정 화소 근처는 그 화소와 비슷한 색깔일 가능성이 높다는 데서 출발한다. 우리가 흔히 그림을 그릴 때 윤곽선을 먼저 그리고 색을 칠하는 것에 비추어 보면, 윤곽선을 제외한 나머지 부분의 “정보변화”는 매우 작고 윤곽선이 전체 그림에서 차지하는 크기는 매우 작다. 이 특성을 사진에 응용하면 매우 큰 압축이 가능하지 않을까 하여 jpg의 기본 개념이 탄생하게 된다.

jpg는 주어진 사진 화면을 가로세로 각각 여덟 칸으로 쪼갠다. 물론 왜 10칸으로 쪼개면 안 되고 혹은 4칸으로 쪼개면 안 되냐는 의문이 제기될 수 있지만 너무 적게 쪼갤 경우 분할 및 복원에 필요한 정보는 적지만 개별 cell의 압축효율이 나빠지고 너무 많이 쪼갤 경우에는 그 반대가 된다. 그러므로 8 X 8 로 쪼개는 것이 둘 사이를 적절히 조화시켜 대다수의 파일에 대해 높은 압축률을 제공할 수 있는 분할숫자로 간주된다.

이렇게 형성된 8 X 8 매트릭스(행렬)는 DCT(동영상의 경우 DPCM)라는 푸리에 변환과 유사한 변환, 양자화, 엔트로피 압축의 과정을 거쳐서 압축된 문자열을 생성한다. 정보 손실은 이들 프로세스 중 양자화에서 나타나는데, DCT변환을 거친 행렬이 좌측 상단 및 그 부근에선 매우 큰 값, 그리고 다른 영역은 매우 작은 값으로 변하기 때문에 작은 값을 0으로 놓는 양자화를 통해 정보를 압축한다. 그러므로 이 작은 값의 손실이 결과물에 약간의 영향을 준다. 다른 두 과정은 모두 거꾸로 진행될 수 있으므로(가역적) 원본 복원 시에는 양자화로 인한 손실만이 나타나며 이 손실은 대체로 사람의 눈에 잘 띄지 않는다.


대체로 화소 정보를 그대로 저장하는 비트맵 파일과 jpg파일은 거의 10배가 넘는 용량 차이를 나타낸다. 두 사진의 경우 사람의 눈으로 품질 차이를 거의 느끼기 힘들다.


음성신호의 압축에 폭넓게 적용되고 있는 MP3 압축기법과 그를 적용한 음악파일, 재생모듈 들은 컴퓨터에서 재생하는 것을 넘어서 오늘날 많은 멀티미디어 기기에 부가기능으로 탑재되고 있다. 최신 휴대폰의 경우 MP3 파일을 재생하는 기능을 탑재한 모델이 대부분이며, 최근에는 디지털 카메라, PMP(휴대형 미디어재생기) 등에도 적용이 확대되고 있다.

음성신호는 기본적으로 아날로그 신호이며, 에디슨의 최초 축음기부터 일반적으로 알려진 “카세트테이프”(요즘에는 MP3 플레이어가 거의 대부분을 대체하여 그다지 널리 사용되지 않는다) 까지 모두 아날로그로 기록하는 방식이다. 컴팩트 디스크부터 디지털 방식이 적용되었는데, 44.1kHz 로 샘플링하여 16비트의 PCM 코딩을 통해 저장된다.

컴팩트 디스크(CD)에 넣을 수 있는 음악 분량은 표준 조건으로 74분 길이이다. 그런데, MP3플레이어의 경우 128k 샘플링의 경우 1분 길이당 대략 1메가바이트 정도이므로 결국 CD의 총 데이터 저장용량인 700메가바이트와 비교하면, 거의 10배 정도 분량의 음악을 같은 용량의 CD에 넣을 수 있는 것이다.

애초부터 CD의 샘플링 주파수가 인간이 들을 수 있는 주파수의 한계치에 해당하는 20kHz의 두 배인 40kHz에서 약간 넘는 값으로 결정된 것을 감안하면 실제 CD에도 사람이 들을 수 없는 음역에 대한 정보가 기록되어 있지는 않다. 샘플링이 원본의 데이터를 충실히 반영하려면 음원의 최고 진동수값보다 2배의 진동수를 갖는 샘플링주기를 가져야 하며 음원에서 그 이상의 높은 주파수 성분은 파묻히게 된다. 그렇다면 MP3은 대체 어떤 원리로 10배로 압축하는 것일까?


이것이 가능한 이유는, 인간의 귀는 모든 음역에 대해 똑같은 예민함을 갖고 듣는 것이 아니라는 데에 있다. 실제로, 사람의 귀는 큰 소리 뒤에 바로 딸려오는 작은 소리는 큰 소리의 잔상에 묻혀서 듣지 못한다. 또 20~2만 Hz의 소리 모두를 같은 감도로 듣는 것이 아니라 실제로는 1~4kHz 정도의 영역에만 민감하여, 그 영역을 벗어나는 소리는 잘 들리지 않는다. 그리고 성대의 울림이 그대로 발성으로 이어지는 모음은 상대적으로 주파수가 낮고, 공기와 발성기관이 마찰하면서 내는 소리가 많은 자음, 특히 무성음에 해당하는 자음은 주파수가 높다.

MP3의 경우, 인간의 뇌 속에서 일어나는 이와 같은 정보처리 과정을 미리 파일에서 일부 처리하는 것이다. 음성신호를 주파수에 따라 16개, 혹은 32개 대역으로 쪼갠 다음에, 앞서의 인간 귀의 특성을 감안하면 어떤 소리가 들리지 않을 것인지를 컴퓨터 모델링을 통해 예측한 다음 여기에 해당하는 부분을 지운다. 또한, 음성은 항상 있는 게 아니라 음악파일 중에는 소리가 없는 구간 등이 있는데 이러한 부분도 앞서 언급한 중복부분 축약 (음성이 없는 구간은 0이 길게 이어지는 구간으로 표시된다)으로 압축한다.

대체로 압축률 128kbps 보다 높은 샘플링비율을 적용하여 압축된 경우, 일반인은 거의 구별하지 못하며, 그로 인해 128kbps의 압축률이 가장 널리 적용되고 있다. 이 경우 대다수 음악들이 1분 분량에 1메가바이트의 용량을 갖게 된다.


동영상의 기본 원리는, 사람의 눈은 잔상 효과로 인해 짧은 시간의 변화 또는 깜박임을 인식하지 못한다는 데서 출발한다. 일반적으로 극장에서 상영되는 영화는 초당 24프레임, 즉 1초에 24번 새로운 장면(사진)을 보여주며, 디지털 동영상의 경우에는 초당 30프레임 정도이다.

이것들을 전혀 압축하지 않고 그대로 초당 24~30장의 사진으로 사용할 경우에는 설령 앞서 설명한 jpg파일로 만든다고 해도 용량이 지나치게 커지게 된다. 1024 X 768 크기의 사진이 300kB 정도라고 가정하면 필요한 용량은 1초 분량의 동영상에 10메가바이트인데, 이럴 경우 CD-ROM 한 장에 들어갈 수 있는 동영상은 1분 남짓에 불과하다.

따라서 jpg에서 사용하는 압축법보다 더 발전된 형태의 압축, 그러면서도 화질 저하는 최소한으로 줄인 새로운 압축법이 필요하게 된다. 동영상 압축법에는 여러 종류가 있지만, 대표적인 mpeg 압축법의 기본 원리에 대해서만 살펴보기로 한다.

대개, 우리가 영화를 볼 때 인물은 자주 움직이지만 배경은 그 장면(흔히 영화에서 말하는 “컷”)이 바뀌기 전까지는 잘 움직이지 않는다. 이에 착안하여, 동영상 역시 마찬가지의 방법을 적용하여 바뀌는 부분만 갱신하고 바뀌지 않는 부분은 그대로 같은 장면을 계속 갱신하여 필요한 정보량을 줄이는 것이 가능하다. 이 방법을 응용하여, 일정 시간마다 하나의 프레임을 지정하고, 그 다음 프레임의 경우에는 지정된 프레임과 차이가 나는 부분만을 수정하여 화면을 갱신한다.

지정된 프레임을 키 프레임, 프레임과 차이가 나는 부분에 대한 정보만을 담고 있는 불완전한 프레임을 델타 프레임(델타는 차이값을 나타내는 데 관행적으로 사용되는 그리스 문자)이라고 한다. 가끔 자신이 갖고 있는 동영상 파일이 완전하지 않거나, 동영상의 중간이 깨진 경우에 불규칙하게 배열된 네모꼴이 파편 형태로 보이는 프레임이 보이는데, 이것이 델타 프레임을 볼 수 있는 한 예이다.

여기서 좀 더 발전하면, 키 프레임의 지정을 일정 시간 간격으로 하는 것이 아니라 동작의 변화가 심한 부분은 키 프레임을 자주 배정하고 동작의 변화가 적은 부분에서는 키 프레임을 적게 배정하는 방법을 생각해 볼 수 있다. 서편제와 같은 정적인 영화, 혹은 자연 다큐멘터리 같은 영화나 비슷한 특성을 갖는 장면은 키 프레임을 적게 배정하고, 마라톤 출발점의 수많은 사람들이 동시에 출발하는 장면처럼 화면 대부분이 빠르게 바뀌는 장면에서는 키 프레임을 많이 배정한다. 이 방식은 앞서 기술한 엔트로피 부호화 방법과 유사한 개념이다.

{}
한 때, 컴퓨터의 하드웨어가 발달하면 압축이 사라질 것이라는 예측이 나온 적이 있었다. 그러나 실제로는 더 다양하고 뛰어난 압축법이 계속 등장하고 있는데, 이것은 요구하는 정보량 역시 계속 증가해 왔기 때문이다. 일례로, 처음에 DVD가 나왔을 때, VCD(비디오 CD)와는 비교할 수 없는 깨끗한 고화질에 5.1채널, 다국어 지원 등의 엄청난 기능을 디스크 한 장에 담을 수 있었지만, HD방송이 서서히 현실화되면서 기본 포맷이 SD(640 X 480의 해상도)에 바탕을 두고 있는 기존 DVD로는 향후 등장할 HD급 영상물을 2시간씩 담아낼 수 없다는 판단에 의해 현재 블루레이 디스크와 HD-DVD가 치열한 표준경쟁을 벌이고 있다.

당연히, 이 차세대 저장매체는 훨씬 큰 용량을 갖지만 기본 요구 정보가 높기 때문에 (1920 X 1080의 경우 한 화면의 픽셀값의 압축 전 정보량으로 비교하면 무려 7배에 달한다) 여전히 압축이 필요하다. 또한 압축된 파일을 복원하는 과정에서 지나치게 복잡한 연산이 요구되어 CPU의 가용 자원을 심각하게 갉아먹지 않는다는 전제 하에서 압축은 같은 값으로 사람이 느끼기에 더 많은 정보를 저장 재생하는 수단이므로 비용 대비 성능에서 거의 항상 효과적이다.

향후, 기술이 더욱 발전할 경우, 인간의 신경망, 즉 시각신경이나 청각신경에 직접 전기적인 신호를 보내는 기술이 등장할 가능성이 있으며 이미 상당한 수준의 개념 연구가 선진국들에서 수행되고 있다. 이럴 경우, 해당 신경망이 느낄 수 있는 범위로만 정보를 전송하면 되므로 오늘날처럼 대량의 전력을 소비하는 거대한 대화면 TV(통상적으로 40인치 이상의 대형 TV는 300와트 가까운 전력을 소비)나 커다란 오디오 시스템처럼 에너지를 낭비하는 시스템 대신 밀리볼트-밀리암페어 범위의 작은 신호만을 직접 신경계에 보내서 같은 효과를 낼 수 있게 될 것이다.

그러한 진보는 에너지가 부족할 것으로 예상되는 미래 시대의 변화에 잘 맞는다.
또한, 오늘날 미디어가 제공하는 정보가 시각과 청각에 집중되어 있는 반면, 앞으로는 후각, 촉각, 미각 등의 감각으로 그 영역이 확대될 수 있다. 기초적인 개념의 후각, 촉각, 미각 전달은 이미 시연되고 있으며, 향후 이러한 기술이 본격적으로 발전할 경우, 후각, 촉각, 미각 등을 디지털 부호화해서 전송하는 데에 역시 압축 기술이 필요할 것이다. 즉, 앞으로도 압축 기술의 활용처는 결코 줄어들지 않을 것이다.

<저자>

⊙ Purdue University 황성출

<참고문헌>

www.zoomlife.com
http://myspeed.hanaro.com
www.sorell.co.kr
www.hdmbc.com
http://junpasa.com/pc_how909/mp3_1.htm
⊙ {http://tan.informatik.tu-chemnitz.de/~jan/MPEG/HTML/mpeg_tech.html}

<검수위원 : 국립군산대학교 전자정보공학부 조주필 교수>

댓글