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초 이하로 짧게 설정해 주는것이 좋습니다.

2009년 1월 9일 금요일

Subversion Installation for Fedora

Subversion 을 설치하고, Apache 의 WebDAV 모듈을 이용하여 버젼을 관리하는 방법을 설명합니다.

1. Subversion Install

[root@www ~]# yum -y install subversion

2. WebDAV Module Install

[root@www ~]# yum -y install mod_dav_svn

3. Create svn linux user

adduser svn (not set password)

chmod 755 /home/svn

svn 작업 디렉토리를 /home/svn 로 하기로 합니다.

4. Create repository

[root@www svn]# svnadmin create /home/svn/test

[root@www svn]# chown -R apache.apache /home/svn

svn 작업 디렉토리 밑에 svn 이 관리하기위한 test 라는 레포지토리를 만듭니다. 프로젝트에 따라서 생성해 주면 되겠지요. 그리고 나서 svn 의 하위 디렉토리는 apache 가 관리할 수 있도록 소유권을 모두 apache 유저로 합니다.

5. Add svn user

[root@www svn]# htpasswd -c /home/svn/.htpasswd richard (-c only 1st time)

New password:

Re-type new password:

Adding password for user richard

svn 으로 작업이 가능한 유저를 추가합니다. -c 옵션은 create 의 약자로 파일이 없을때 처음에만 실행해 주면 됩니다.

5. Create or Modify /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so 
LoadModule authz_svn_module   modules/mod_authz_svn.so

 
DAV svn 
SVNParentPath /home/svn

# Limit write permission to list of valid users. 
# 
# Require SSL connection for password protection. 
# SSLRequireSSL

AuthType Basic 
AuthName "Subversion repository" 
AuthUserFile /home/svn/.htpasswd 
Require valid-user 
# 

마지막으로 subversion 의 환경설정파일을 위와같이 생성해 줍니다. (yum 으로 설치했을 경우 자동으로 디폴트 환경설정 파일이 생성되어 있습니다.) 여기서 굵은 글씨의 ~ 부분에서 # 주석문을 해제하였을 경우 모든 사람이 읽기가 가능해 집니다.

6. Everything is OK?

http://my-domain/svn/test/ 로 접속하여 아래와 같은 화면이 나타나면 성공적으로 설치된 것입니다. (설정에 따라 인증을 거쳐 아래의 화면이 나타날 수도 있습니다.) 

Revision 0: /


Powered by Subversion version 1.4.3 (r23084).

7. What is next?

TortoiseSVN 를 이용해 보는 것은 어떨까요? :)

- References

http://d.hatena.ne.jp/kazf/searchdiary?word=subversion

http://www.gside.org/Gentoo/subversion/subversion.h

2008년 12월 30일 화요일

senmail 설정하기(Mail Server -SendMail)

시작하기 전에 sendmail이 설치 되어 있는지 확인하고 설치되어 있다면 업데이트 한번 해준다. 그리고 sendmail-cf도 설치되어 있는지 확인 하고 아래를 시작 하면 된다.



출처 : http://yesyo.com/forums/showthread.php?p=1649



Sendmail SMTP 인증 설정(SMTP Auth)


Sendmail SMTP 인증 설정(SMTP Auth)

Sendmail로 아웃룩을 사용시 보내는 메일(SMTP)의 인증 설정 부분이 있습니다.
/etc/mail/access 에서 아웃룩이 접속되는 IP대역을 설정 하면 되지만, 어느 곳에서도 접속을 가능하게 하려면 SMTP Auth를 통하여 계정인증을 통해 메일 보낸는 방법이 유용하다.

sendmail.mc 을 고치면 간단히 적용시킬수 있다.



sendmail.mc 수정

아래 부분을 찾아
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
다음과 같이 앞의 dnl 을 삭제 한다.
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

아래 부분을 찾아
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
다음과 같이 앞의 dnl 을 삭제 한다.
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

아래부분을 찾아
dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl ->
다음과 같이 dnl을 삭제하고 IP를 수정한다.
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
-> 어디에서나 접속가능하도록 변경. sendmail이 8.12 버전으로 업그레이드 되면서 로컬 호스트에서만 발송가능하게끔 되어 있던 것을 주석처리해서 사용하다가, 이것을 어느 네트워크에서든지 접속할 수 있게끔 변경한다.



m4 명령으로 sendmail.cf는 다시 생성


m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

이때 sendmail-cf.rpm 이 설치되어 있어야 한다.

yum install sendmail-cf
만일 없다면 다음과 같이 메시지가 나온다.
sendmail.mc:10: m4: Cannot open /usr/share/sendmail-cf/m4/cf.m4: No such file or directory



만일 saslauthd 서비스 데몬이 실행


saslauthd 서비스 데몬이 실행 중인지 확인하십시오. 실행되어 있지 않으면 SMTP 인증이 되지 않아 계속 인증 확인창이 뜰 것입니다.

ntsysv 명령을 실행시켜 saslauthd 항목을 찾아 자동시작데몬으로 체크하여 주시고 서비스를 실행 시켜 주십시오
service saslauthd start



되고 있는지 확인하기

telnet [server] 25 : SMTP Mail(윈도우 cmd에서 실행해주세요)