원문: http://www.digital-digest.com/articles/x264_options_page1.html

이곳의 내용에 본인의 경험을 덧붙였습니다.

<2. 프레임의 기초>

현대의 비디오압축기술은 3가지형태의 타입으로 만들어진다. 하나는 Intra(I) frame (일반적으로 keyframe이라고 부른다). 다른하나는 Predictive(P) frame, 그리고 마지막으로 Bidirectional(B) frame이다. 위 3가지의 프레임은 referencing, 즉 프레임과 프레임사이의 정보 전체가 아니라 픽셀정보의 차이점에 대한 정보만을 저장하는 방식으로 데이터를 압축하는데 이 과정에서 해당프레임의 정보를 가져올수 없어 여러가지 문제가 발생하기도 한다.

- I-Frame: 이미지 전체를 포함하고있으며 최소한의 압축상태로 되어있다. 비디오Seeking을 수행하게 되면 이 I-Frame을 기준으로 찾아가게 된다.
만약 다음 I-Frame이 비어있는경우 seeking의 수행이 느려질수 있다.

- P-Frame: I-Frame혹은 뒤에 따라올 P-Frame간의 데이터정보의 차이에 대한 정보를 저장하고있다. 이러한 프레임과 프레임 사이의 차이점을 referencing이라고 부른다. 즉, 다시말하면 P-Frame은 실제 데이터가 아니라 프레임과 프레임에 존재하는 서로다른 픽셀정보의 차이를 저장하고 있다는 뜻이다. 그러므로 여기에는 충분한 데이터를 지니고 있어야하며 그렇지 않은 경우 I-Frame이 더 많이 필요하게 된다. 이것이 인코딩기술. (모션보정)

- B-Frame: 이것 역시 프레임과 프레임사이의 픽셀차이정보를 담고있다. 다만 이놈은 reference할수 없다. (다른프레임에서 이프레임의 정보를 읽어낼수 없다는 뜻이다. P-Frame은 이것이 가능하다.) 따라서 이녀석은 최소한의 정보를 남겨둔채로 압축을 행한다. x264의 경우 "B-Frame피라미드"를 지원하는데, 이것이 무엇이냐면 B-Frame에서 다음에 올 B-Frame에 대한 정보를 읽어낼수 있지만 그 다음에 올 B-Frame에 대한 정보는 읽을수 없는 방식의 기술이다. 따라서 최소한의 정보만을 담고있다.

자, 그럼 I,P,B프레임에 대한 해설이 끝났으니 이제 실제로 동영상이 어떻게 압축되는지 알아보자.


<3. x264 기본옵션>
- mode
  • bitrate single pass:  고정비트레이트로 비디오를 한번만 인코드한다
  • quantizer single pass: quantizer값으로 비디오를 한번만 인코드한다. 값이 작을수록 화질이 좋아지고 값이 클수록 화질이 나빠진다.
  • quality single pass: 주어진 비디오를 quality 백분율값으로 인코드한다. 만약 90으로 준다면 주어진 비디오에서 90%의 퀄리티로 떨어뜨려서 압축한다는 뜻이된다.
  • 2 pass: 영상을 두번에 걸쳐서 인코드한다. 첫번째는 영상을 분석해 정보를 세트하고. 두번째는 첫번째에에서 세트한 정보로 실제인코딩을 한다.
  • 3 pass: 2 pass와 같지만 추가로 인코드를 더 실행해 퀄리티를 보정해간다. 보통은 1,2,3의 순으로 행한다고 착각하기 쉽지만 그 반대로 1,3,2의 순으로 (물론 1,3,3도 유효. 현재 megui가 사용하는 automate 3pass가 이 오더를 따르고 있다) 두번째에 3이 들어가는데 3이 들어가는곳에 인코드를 한번 더해 1,3,3,2가 되면 4pass, 같은 방법으로 1,3,3,3,2가 되면 5pass 인코딩이 된다. 이러한 횟수는 계속 늘려갈수 있지만 어디까지가 한계인지는 모른다.
    본인이 본것으로는 1200k 로 20pass를 실시해 12000k 급의 퀄리티를 낸 것도 본적이 있다.


원문: http://circle.zoome.jp/nicodou/media/1730
이놈이 바로그것 ㄱ-

- quantizer:
single pass에서만 가능한 것으로 주어진 값으로 인코딩을 하는데 값이 높을수록 화질을 떨어뜨린다. 10까지는 거의 무손실급의 화질을 내는 수준이고 15정도가 울트라초고화질, 16, 17 정도가 초고화질수준, 18, 19 정도가 고화질수준, 20부터 25정도 까지가 웹에서 볼수있는 고화질수준이고 그 이후부터는 중간급이라고 보면 된다. 보통 애니메이션이나 영화의 경우 세밀한 퀄리티와 높은 화질을 추구하지만 값이 작아지면 퀄리티는 올라가지만 용량도 그만큼 올라가기 때문에 값을 올려 용량을 줄이는 대신 생상패치를해 화질을 보정하는 경우가 많다.

- quality:
single pass에서 사용하며 영상을 해당백분율의 퀄리티로 인코딩한다.

- B-Frames:
인코딩에 사용할 B-Frame의 갯수를 지정한다. Adaptive옵션을 선택했을경우 이 수치는 유효한 Maximum값으로 인식한다. B-Frame은 사이즈를 줄이는대신 화질을 보정해주는 역할을 하는데 Adaptive옵션과 함께 사용하면 얼마나 많은 B-Frame을 사용할것인지를 선택하게 된다. 보통 3정도의 값을 권장한다.

- Reference Frames:
reference프레임에 사용할 최대프레임수를 지정한다. reference프레임이란 다음프레임에서 현재프레임의 정보를 읽어내는 것을 말하는데 값이 클수록 화질은 올라가지만 인코딩속도가 느려진다. 일반적으로 3에서 5정도의 값을 사용하며 애니메이션이나 영화의 경우는 8에서 10까지도 사용한다.

- Loop Filter:
보통 deblocking이라고 알려진 필터이다. 알파와 베타세팅을 서로 연결해주는 역할을 한다. 보통 계단현상이라고 영상에 사각형의 큰점이 보인적이 있을것이다. 그 값을 세팅해주는 부분인데 영상이 매우 좋은 깨끗한 화질이라면 0,0 정도를 세팅하면 된다.

- Alpha / Beta:
위의 Loop Filter에서 사용하는 녀석인데 Strengh (Alpha) 와 Threshold (Beta)라고 알려져있다. 알파는 디블록킹의 크기, 베타는 이것을 분석해 보여주는 역할을 한다. 보통은 0,0을 권장하지만 -2 아래나 3 위로 올리지 말라고 권하고 있다.

<4. x264 B-Frame옵션>
- direct mode:
이 옵션은 압축률에 영향을 준다. 기본값은 disable이고 보통 auto를 사용하지만 spatial 을 쓰는 경우도 있다.

- bias:
B-Frame에 얼마나 많은 bias를 사용할 것인지를 세트한다. (값이 클수록 더 B-Frame을 더 많이 쓴다는 뜻이 된다.) 100으로 설정한다고해서 adaptive와 같은 것이 되진 않은다.
기본값은 0이고 B-Frame을 세트한경우 적어도 1밑으로 세트해선 안됀다.

- adaptive:
유효한 B-Frame을 사용한다.. 기본값은 on. 이 값이 작동하려면 적어도 B-Frame이 1 이상 세트되어야 한다.

- pyramid:
피라미드를 사용한다.. 다음 B-Frame에서 이전 B-Frame을 reference할수 있게 한다. 기본값은 on이고 이 값이 작동하려면 B-Frame이 2 이상 세트되어야 한다.

- rdo:
RDO를 on/off한다. on으로 할경우 인코딩속도는 올라가지만 퀄리티는 보장 못한다. 최소한 B-Frame이 1 이상은 있어야만 "Subpixel Motion Estimation"옵션의 6,7 값을 사용할수 있다.

- weighted prediction:
weighted prediction을 사용한다.. 이 옵션은 보다 정밀한 결과를 내주지만 1개이상의 B-Frame이 세트되어야 한다. 기본값은 on

- bidirectional M.E:
bidirectional M.E를 사용한다. 다음 B-Frame에서의 모션을 미리 예측하는데 사용하며 기본값은 on

<5. x264 프레임 옵션>
- scene cut:
이 옵션은 장면이 미리 바뀔것을 예측하고 그곳에 적절한 키프레임을 삽입한다. 장면변화가 심한 영상에서는 이 값을 높게잡으면 된다. 기본값은 40이고 액션영화의 경우 +-5정도 주면 된다.

- cabac:
Context Adaptive Binary Arithmetic Coding를 사용한다. 재생에 직접적인 영향을 주는 부분인데 x264는 하드웨어적인 부분을 많이 가리기 때문에 재생시에 부드럽게 보여주기 위해선 이 값을 사용해야한다. 그렇지 않은경우 제대로 감상이 힘들정도가 된다.

- gop size (min / max):
이 값은 영상내에 얼마나 많은수의 키프레임을 삽입할것인지를 지정한다. min에는 framerate와 같은수치를 지정하면 1초마다 키프레임을 삽입하게 되고 1초단위로 seek를 수행할수가 있게 된다. 다만 이 값이 framerate에 영향을 받으며 값이 클수록 파일용량이 커지게 된다.
이와 비슷하게 max는 적어도 x 프레임마다 키프레임을 지정하게하는 역할을 한다. 키프레임이 없는 영상은 화질이 떨어지게되고 seek도 수행하는데 문제가 생길수 있다.
권장값은 framerate의 10배정도로 하는것이 좋다.

<6. x264 분석옵션>
- mixed references:
Reference Frame의 컨트롤을 보다 효율적으로 하게한다. 특정의 경우엔 Reference Frame을 높게 잡아야 하는 경우도 있다.

- no fase p skip:
fast p skip은 인코딩속도를 올리지만 화질이 그만큼 떨어지게 된다. 화질을 생각하면 off로 해둘것을 권장한다.

- motion estimation method:
빠르고 화려한 움직임을 감지해내는 방법을 세트한다. 어떤코덱이든 마찬가지이지만 여러프레임의 타입, 비트레이트가 할당된 프레임들사이의 차이점을 분석한다.
  • diamond -> 가장 속도가 빠름
  • hexagon -> 퀄리티가 약간 좋아진다.
  • multi hex: 가장 일반적으로 세트하는 타입. 화질과 인코딩속도가 아주 좋다.
    exhausitive: 가장 느림. 세트하지 말것.

- subpixel motion estimation:
partition decision이라고 알려져있다. motion estimation에 있어서 가장 중요한 요소인데 1에서7까지의 옵션이 있다. 물론 1이 가장 빠르지만 화질이 가장 나쁜것이고 7이 제일 느리지만 화질이 가장 좋은놈이다. 보통은 6으로 세트하는데 7로설정하면 아주 쩌는 화질을 낼수있다. rdo b-frame을 사용하려면 이 값이 6이상 세트되어야 한다.

- trellis rd quantization:
이 값을 on으로 하면 화질을 끌어올릴수 있다. 하지만 인코딩속도가 매우 느려진다. 화질은 또한 주관적일수 있다. PC사양이 좋지 않다면 2pass이상의 인코딩에선 off해두길 권장한다.
single pass quantizer모드에선 절대로 on하지 말것. 어떠한 결과를 초래할지 장담할수 없다.

<7. x264 파티션옵션>
- partition:
파티션의 검색타입을 결정한다. 일반적으로 all로 세트하지만 특정경우는 P4*4옵션의 경우는 P8*8을 필요로 하는 경우가 있다.

- 8*8 dct:
이 옵션은 위의 것하고는 다르게 구분하는데, 이놈만 특수하게 command-line 플래그가 다르기 때문. 위에서 I8*8을 선택하였을경우 이 옵션이 필요하다.

<7. x264 입출력옵션>
- show progress indicator:
이 옵션은 재생시에 얼마만큼의 프레임을 재생하였고 남은프레임이 얼마인지 보여주게 한다. on으로 하는것이 좋고 원하지 않으면 꺼도 상관없다.

- disable psnr computation:
이 옵션은 noise redution 계산을 쓰지 못하게한다. 그냥 on으로 놔두길 권장한다.

- threads:
인코딩에 얼마나 많은 CPU thread를 사용할지 결정한다. 하이퍼스레딩이 되는 인텔 펜티엄 프로세서의 경우는 2. 듀얼코어의 경우도 2. 하이퍼스레딩이 되는 듀얼코어는 4로 설정한다.

- output type:
출력파일의 이름이다. 확장자를 .264로 둘경우 RAW데이터를 의미한다.
Posted by MOBIUS!
,