동영상 인코더

1 개요

동영상을 인코딩하기 위해서 존재하는 프로그램.

동영상 인코딩 기능을 내장한 프로그램은 다양한 종류가 있겠지만, 특정 프로그램을 가리켜 동영상 인코더라 할 경우에는 편집 기능은 없거나 최소한으로만 갖고 있고 인코딩 기능에 집중한 것을 말한다. 별 것 아닌 것 같지만 동영상이 손실 압축 포맷인 만큼 화질 열화를 가능한 제어하면서 용량을 줄이는 기술에 의미가 있다. 혹은 다른 영상 편집기와 달리 클릭 한두번으로 인코딩이 끝날 정도로 쓰기 쉽다는데 의미가 있을 수도 있다.

이미 존재하는 파일을 다른용도로 사용하기 위해 변환하는 부류와, 실시간으로 영상과 오디오 입력등을 받아 파일형태로 인코딩하는 형태 등 크게 두가지 부류로 나눌수 있다

일반적으로 지나치게 큰 용량을 줄여서 특정 기기에서 돌아가도록 하거나(재인코딩) 혹은 UCC 업로드를 위해서 사용하며, PMP스마트폰, MP4 플레이어가 본격적으로 보급되기 시작한 2000년대 들어서 널리 보급되기 시작했다. 안드로이드폰이 코덱을 가리지 않게 되고, 대부분 동영상이 h264 코덱을 쓰면서 점점 잊혀지기 시작했다.

CPU 성능에 절대적으로 의존하기 때문에 고성능 CPU에서 구동하는 것이 좋다. '인코딩은 닥치고 클럭 빨'이라는 말이 나올 정도로 CPU 성능에 크게 좌우된다(코어 개수와 고클럭 모두 중요[1]). GPU를 이용하는 인코딩 프로그램도 있으며 그 인코딩 속도는 CPU 따위 저리가라 할 정도로 빠르지만,[2] GPU를 이용하면 인코딩 품질이 매우 좋지 않으므로[3], 실제로는 거의 이용되지는 않는다. 반면에 동영상 디코딩 시에는 GPU를 사용하는 것이 이득이다(AMD UVD, DXVA 등).

업무용인코더의 경우는 별도의 하드웨어 인코더가 장착된 가속장비와 영상입출력 인터페이스를 내장한 형태로 카메라나 vcr등에서의 입력을 실시간으로 압축하여 파일형태로 보관하게 된다. 대개의 경우 영상의 재편집이나 납품의 특정한 포맷을 위한 경우가 많다. 여기서 더 발전된 형태로는 스트리밍 기능을 부여하여 생방송용 장비로 운용된다.

그리고 멀티코어 CPU를 지원하는 코덱[4] 및 프로그램을 이용하는 것이 좋다. 본인의 CPU가 멀티코어인데 멀티코어를 지원하지 않는 코덱 및 프로그램을 사용하면 효율이 떨어진다.

2 GPU 가속 인코딩

GPU 가속을 거치지 않고 인코딩을 해야 가장 좋은 화질을 얻을 수 있지만, 일상적인 경우에는 속도 차이 때문에 GPU 가속을 자주 쓰게된다.

GPU 가속은 하드웨어에 따라 쓸 수 있는 기능이 다르다.

  • 인텔 퀵 싱크 : 속도가 가장 빠르며, 화질 저하도 가장 크다. 왜냐하면 이 자체가 인텔 HD 그래픽 내에 들어있는 전용 하드웨어 인코더를 사용하기 때문.
  • CUDA : 엔비디아용으로 속도는 다소 느리며, 화질 저하는 보통이다.
  • NVENC : 엔비디아용 그레픽카드에 올라가는 하드웨어 코덱. 속도는 인텔 퀵 싱크에 맞먹지만 화질이 CUDA보다 떨어진다. 정확하겐 인텔 퀵싱크랑 비슷하게 엔비디아의 동영상 처리 하드웨어 코덱을 제어하는데 쓰이는 것이다. CUDA 는 쉐이더 코어 자체를 조작하지만 NVENC 는 그레픽 코어가 아닌 영상 처리 코어들을 조작한다.
  • OpenCL : AMD인텔이 지원하며, 라이센스가 공개되어있기 때문에 지원하는 기기가 더욱 많아질 가능성이 높다. 속도는 가장 느리며, 화질 저하는 가장 적다.

CPU만 이용해서 인코딩하는 x264의 경우 옵션을 낮추면 속도가 비약적으로 증가한다. 특수한 경우가 아니면 굳이 속도를 위해 GPU인코딩을 할 이유가 없다.

3 동영상 인코더 목록

네이티브 인코더

  • x264(무료, 오픈소스)[5]

MeGUI 계열

  • MeGUI(무료, FFmpeg와 양대산맥. 인코딩을 전문적으로 한다면 꼭 배워야할 프로그램)

FFmpeg 계열

  1. 단, 멀티코어를 제대로 자원하지 않는다면 코어빨은 의미가 없어진다
  2. CPU는 서버용이래봐야 칩 하나당 코어가 22개지만(2016년 기준), GPU는 칩 하나에 그래픽 전용 병렬연산 코어가 1000개 단위로 들어간다.
  3. OpenGL 기반일경우만 해당. OpenCL혹은 CUDA기반은 이론상으로 품질이 떨어지지 않는다. 여담으로 OpenGL이 품질이 떨어지는 이유는 OpenGL이 3D 그래픽 처리용 라이브러리라 정밀도는 신경을 안쓰기 때문
  4. x264는 멀티 코어를 완전히 지원한다. CPU 코어 수가 많을 수록 다다익선
  5. x264는 FFmpeg에 종속된 프로젝트가 아니며 독립되어 있고 오히려 FFmpeg쪽에서 x264 소스를 받아다 쓰는 관계이다.