반응형

VCi의 핵심 프로그램인 ffmpeg에 적용한 옵션들이 적절한지를 확인해보기로 했다.

현재 선택 가능한 옵션이 너무 많다는 생각이 들었기 때문이다.


비디오와 오디오를 구분해서 인코딩 시험을 해봤다.

소스는 [다크 나이트 라이즈]의 어떤 장면…


BGM: "Why Do We Fall?"


1. 비디오


비디오 시험의 초점은 세 가지이다.


a. 2-passes slow / fast / very fast / ultra fast 는 정말로 성능과 품질의 차이가 있는가

b. 1-pass default의 성능과 품질은 다른 것과 비교해서 어떠한가?

c. 현재 VCi 배포본에 포함된 0.11.1과 최신 버전인 git-498e1c6(2013.1.4)의 차이는 있는가


동일한 소스에 대해 인코딩해본 결과 아래와 같은 결과가 나왔다.

old는 0.11.1을, new는 git-498e1c6을 의미한다.



눈에 잘 띄지 않는 숫자를 좀 더 쉽게 볼 수 있도록 그래프로 그려봤다.

우선 처리 시간…



일단, ffmpeg의 버전에 따른 처리 시간의 차이는 미미했다.

그리고, very fast와 ultra fast의 처리 시간 차이가 거의 없다는 것을 알 수 있었다.

또한, default(1-pass)는 ultra fast를 제외한 모든 2-passes보다 빨랐다.

심지어는 very fast보다도 조금 빨랐다.


다음은 PSNR…



ultra fast는 다른 프리셋에 비해 PSNR이 상당히 낮다.

very fast와 ultra fast의 처리시간이 별 차이가 없다는 점을 보면 ultra fast의 필요성 자체가 의문이다.

그리고, default(1-pass)가 fast(2-passes)보다 미미하게 PSNR이 높다.


비디오 시험 결론…


a. fast preset은 사실상 별 의미 없고, 이 자리는 default가 대체

b. ultra fast preset는 전혀 의미 없고, 그냥 삭제

c. 버전에 따른 차이는 미미함



2. 오디오


오디오 시험의 초점 역시 세 가지이다.


a. ffmpeg은 Nero 인코더를 대체할 수 있는 수준인가[각주:1]

b. ffmpeg의 기본 AAC 인코더(시험 버전임)와 libvo_aacenc의 차이는 있는가[각주:2]

c. 현재 VCi 배포본에 포함된 0.11.1과 최신 버전인 git-498e1c6(2013.1.4)의 차이는 있는가


역시 동일한 소스에 대해 인코딩해본 결과 아래와 같은 결과가 나왔다.

f-old/new는 기본 AAC 인코더를, f-old/new vo는 libvo-aac를 의미한다.


PSNR만 보면 가볍게 Nero를 발라버리는 나머지 인코더들… ㄷㄷㄷ


처리 시간을 그래프로 나타내면 아래와 같다.



Nero와 ffmpeg의 기본 AAC 인코더는 처리 시간이 비슷한 수준이고, libvo-aac는 세 배 이상 빠르다.


다음은 PSNR…



ffmpeg의 인코더들은 오디오 용량에 따라 PSNR이 달라진다.

용량이 작을수록 PSNR이 떨어지고, 클수록 높아진다.

그런데, Nero는 특이하게도, 오디오 용량에 무관하게 일정한 값을 보여준다.


위의 데이터만으로는 Nero 인코더를 쓸 필요가 없다.

속도도 무척 빠르고, PSNR도 높은 libvo-aacenc가 최고다.

게다가, 시험용 버전도 아니다.


그러나…


이 오디오들을 직접 귀로 들어보면 얘기는 달라진다.

ffmpeg의 인코더들은 전체적으로 오디오가 많이 뭉개진다.

높은 PSNR이 보여주는 건 단지 수치적으로 원본과 차이가 적다는 것 뿐이다.


게다가, 더 큰 문제가 있다.

ffmpeg으로 만들어진 AAC를 다시 PCM-WAVE 파일로 변환해보면 크기가 미묘하게 변한다.

단지 몇 ms에 지나지 않기는 하지만, 디지털 세상에서 데이터의 크기가 변한다니!


오디오 시험 결론...


a. Nero가 여전히 갑임

b. ffmpeg의 AAC 인코더 및 libvo-aacenc는 관심 끊어야겠음




최종 결론은 아래와 같다.


a. 비디오 인코딩 preset 중 fast, ultra fast는 별 의미 없으므로 삭제 (super fast도 같은 이유로 삭제)

b. 비디오 인코딩 preset 중 default는 fast를 대체

c. 오디오 인코딩은 여전히 Nero가 갑임. 앞으로도 변하진 않을 듯



  1. 현재 AAC 인코더의 대세는 Nero와 Quicktime 인코더 둘임 [본문으로]
  2. ffmpeg의 공식 배포버전에는 두 가지 AAC 인코더가 내장되어있음 [본문으로]
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band