2009년 2월 23일 월요일

인코딩 용어 설명 - 코덱, 비트레이트, 키프레임

초보자가 동영상 인코딩을 처음 접하면, 모르는 용어가 많아서 혼란스러운 경우가 많습니다.

이러한 어려움을 줄이고자 동영상 인코딩시 알아야할 용어들을 정리해 봅니다.

* 코덱
동영상 파일은 음성과 영상 데이터로 이루어 지며, 파일의 크기를 줄이기 위해서 이 데이터를
압축하여서 저장하게 됩니다. ( 압축을 하지 않을 경우 최대 100배 정도 파일 크기가 커집니다. )
인코딩시 압축(COding)을 하고, 재생시 압축을 푸는(DECoding) 모듈을 합쳐서 코덱(CODEC)이라고 부릅니다.
영상 코덱은 MPEG4, XVID, DIVX, WMV 등이 많이 사용되며, 음성 코덱은 MP3,WMV,AAC 등이
보통 많이 사용됩니다.

* 비트레이트
동영상 인코딩시 사용되는 압축 방식은 손실압축입니다. 데이타의 양은 줄어들지만 원본의 데이타를 100% 보존하는것이 아니라 손실시키면서 줄이는 방식이므로 압축을 많이 할수록 화질/음질이 많이 떨어지게 됩니다.
비트레이트는 1초간의 영상/음성을 얼마만큼의 데이타를 차지하게 압축을 할것인지를 지정하는 단위 입니다.
비트레이트가 높을수록 압축율이 떨어지면서 화질/음질이 좋게 되고 비트레이트가 낮으면 인코딩된 파일의 크기는 줄어들지만 그만큼 화질/음질도 나빠지게 됩니다.
비트레이트의 정확한 단위는 BITS PER SECOND 이며 8BIT 는 1BYTE 이므로 800kbps 로 인코딩
된 동영상은 재생시간 1초당 100kbytes 의 크기를 가지게 됩니다.

* 키프레임
초기의 영상 코덱은 화면 한장 한장을 jpeg 처럼 이미지 파일로 압축하여 저장하는 방식을 사용 하였습니다.
이런방식은 구현하기 매우 쉽다는 장점이 있지만, 화면이 전혀 움직이지 않는 경우에도 많은 데이타를 사용하여야 하기 때문에 압축율을 높이기가 쉽지 않게 됩니다. 이러한 단점을 극복하기 위해서 mpeg 코덱부터는 영상의 변화율을 감지하여서 변화된 부분의 데이타만을 저장하는 방식으로 압축 효율을 높이기 시작하였습니다.
이러한 방식의 문제점은, 데이타가 화면의 변화된 내용만을 담고 있으므로 동영상 재생시 중간으로
점프하고자 할 경우 처리가 매우 어려워 지기 때문에 중간 중간에 키프레임이라는 영상의 모든 정보를 가지고 있는 부분을 만들어 두는 방식을 사용하게 됩니다.
보통의 경우 키프레임은 5~10초에 하나씩 만들게 되며 특수한 경우 1초 정도로 짧게 설정하여야 할
경우도 있습니다.
( 키프레임의 짧게 설정하면 탐색시 유리하지만, 용량대비 화질이 나빠지는 단점이 있습니다. )

비트레이트 개념의 이해

동영상 파일은 내부적으로 음성 데이타 + 영상 데이타 두가지로 이루어 진다.

동영상 파일의 크기는 이 두가지 데이타를 합한 크기와 같게 되는데, 이때 어떠한 데이타가

얼마만큼의 크기를 차지하는가를 표현하는 방법이 비트레이트라는 개념이다.


비트레이트의 단위는 BITS PER SEC (bps) 이며, 음성이든 영상이든 1초동안 재생하는데 필요한

데이타의 크기를 의미한다.

예를 들자면 128kbps MP3 오디오 데이타의 재생시간이 3분 이라면 128kbits*60*3 이

해당 데이타의 크기인 것이다.

다시 계산하자면, 8bits 는 1BYTE 이기 때문에 128*1024*60*3/8 = 2.8MBytes 가 된다.

이 계산 방식은 영상에도 동일하게 적용된다.

영상이 1.5mbps, 음성이 128k 인 1시간짜리 동영상의 크기는

(1.5*1024+128)*1024*60*60/8 = 731MBytes 로 계산이 된다.


따라서 인코딩된 동영상파일의 크기는 [비트레이트*재생 시간] 에 비례하며, 영상의 크기,프레임수,

원본의 크기 와 같은 다른 요소는 전혀 영향을 끼치지 못한다.



이와 관련된 질문과 답변을 정리하면,

질문 1) 원본파일은 100MB 인데, 인코딩하니까 200MB가 되었네요.
: 비트레이트 설정을 원본보다 높게 설정하면 오히려 파일의 크기가 커진다. 하지만 절대로 화질이 더 좋아지거나 하는일은 없다.

질문 2) 이 프로그램은 저 프로그램에 비해서 인코딩하면 화질은 좋은데, 파일이 커져요
: 프로그램과 상관없이 인코딩 설정에서 비트레이트를 동일하게 맞추면 동일한 크기의 파일이 생성된다. 따라서, 파일 크기가 다른 동영상의 화질 비교는 의미가 없으며, 동일한 설정으로 동일한 크기로 생성된 파일의 화질을 비교하여야 한다.

질문 3) 동영상의 해상도가 커지면 파일도 커지는것 아닌가요?
: 동영상의 해상도,프레임수는 파일의 크기와 전혀 상관없다. 인코딩 설정에서 비트레이트를 고정하면 해상도와 프레임수를 바꾸어도 결과물의 파일 크기는 동일하게 나온다.
따라서, 원하는 동영상의 해상도와 프레임수에 따라서 적절한 최상의 비트레이트의 값을 알고 있어야 효율적인 동영상 인코딩이 가능해 진다.

키프레임 간격 설정이란?

동영상 파일은 키프레임이라고 하는, 동영상 재생시 이정표와 같은 역할을 하는 프레임이 몇초마다 하나씩 존재합니다.

키프레임을 길게 설정할 경우, 같은 화질일 경우 동영상 파일의 크기가 작아진다는 장점이 있지만,
동영상 재생 프로그램에서 탐색 기능을 이용할 경우 탐색 시간이 느려진다는 단점이 발생하며,

반대로 키프레임을 짧게 설정할 경우( 5초 이하 )는 이와로 반대로 파일의 크기가 약간 더 커지는 대신
탐색기능이 빠르게 작동하는 장점이 있습니다.

보통 PC에서는 성능이 빠르기 때문에 키프레임의 간격이 10초 이상 되어도 별다른 문제가 없지만,
휴대용 기기의 경우 5초 이하로 짧게 설정해 주는것이 좋습니다.