Skip to menu

본문시작

방문자

Total : 8,533,608
today : 12,232
yesterday : 12,522

Pageview

Total : 50,634,052
today : 73,640
yesterday : 73,942


Views 5301 Votes 0 Comment 3
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print Attachment
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print Attachment


안녕하세요. 취미로 인코딩에 세계에 들어온 후배입니다. 모르는 게 많아서 질문 드려요 ㅜㅜ  

MeGUI는 너무 배우기 복잡하고 난해하여 지금까지 다음팟 인코더만 쓰다가 

샤나 인코더라는 신세계를 알게 되었는데……. 궁금한 게 많아요.…….  

대충 구글링하여 몇 개는 알아봤는데  

설정 값에서 모르는 게 너무 많아서 그게 뭔지좀 질문 드립니다.…….  

목표로하는것은 적은용량에 최대한의 화질을 추구합니다.

코덱 고급설정에서 어떻게 어떤설정값을 어느정도 수치로 줘야 용량대비 초고화질로 영상을 뽑을수있는지 궁금합니다. 인터넷 설명만으로는 말이 너무어려워 이해도 힘들고 어떻게 줘야 가능할까요...


p.s :  B-Frames 설정을 사용한 인코딩 영상은 컴퓨터에서는 재생이 잘되지만 타기기(모바일기기, IPTV플스, 태블릿등등)에서는 재생시 끊김현상이 발생할수도있다고 하는데 사실인가요?



[샤나님의 글] 인코딩 모드

libx264 줄여서 x264 코덱에서는 여러 가지 모드가 있으며 퀄리티, 퀀타이저, 비트레이트로 총 3가지 모드를 선택할 수 있습니다.

6f21f319c97781ec506e71951388029a.png

1. 퀄리티 모드(CRF: Constant Rate Factor)
샤나인코더에서 기본적인 값으로 설정되어있는 모드입니다.
이 모드의 장점은 한 번의 인코딩으로 수준 높은 품질을 유지하면서 인코딩을 할 수 있습니다.
퀄리티 모드의 적절한 값은 18~28 사이이고 0은 무손실 값으로 설정되며 23은 기본값이고 51은 거의 형체가 보이지 않을 정도로 나쁜 값입니다.
시각적으로 손실되어 보이지 않을 정도의 값은 18이지만 기술적으로 무손실은 아닙니다.
이 모드의 단점은 예상 용량을 예측할 수 없습니다.

2. 퀀타이저 인코딩
퀀타이저도 적절한 값은 18~28 사이이고 0은 무손실 값으로 설정되며 23은 기본값이고 69(10비트는 81)는 거의 형체가 보이지 않을 정도로 나쁜 값입니다.
퀀타이저는 퀄리티와 다르게 Q(양자화) 값이 고정이 되어버리기 때문에 용량대비 화질의 효율은 없습니다.
고정화질 모드라고 생각하시면 됩니다.

3. 비트레이트 인코딩 
비트레이트 모드를 선택하면, 기본적으로 ABR(Average Bit Rate)모드로 인코딩됩니다.
ABR은 평균 비트레이트로 설정한 비트레이트를 기준으로 비트레이트가 움직이며 2패스 인코딩할 때 유용합니다.

2패스 모드에 대해서
2패스 비트레이트 모드는 예상용량을 예측하면서 인코딩할 수 있는 모드입니다.
그렇지만 한 개의 파일을 두 번 인코딩하기 때문에 시간이 좀 더 오래 걸립니다.
2패스를 선택하면 첫 번째 패스를 느리게 하는 옵션이 있는데 원래 기본적으로 첫 번째 패스를 빠르게 인코딩하지만 이 옵션을 선택하게 되면 첫 번째 옵션도 느리게 인코딩이 됩니다.



7fae2cdc632dfdfa7f9a1fa03cd699c1.png7328b01e00aa651555cdfaf9151bbf46.pngfe98062d03ed2a294ce0db3443eee9fb.png

여기서 high10은 10bit로 인코딩된다는 뜻인가요???
프리셋쪽은 하나도 모르겠습니다...
Fast Decode , Zero Latency 요 두개는 뭔가요...













1) IDR프레임,I프레임,P프레임,B프레임 중 어떤 종류의 프레임으로 압축할지를 결정합니다.

  프레임의 종류가 결정되면 각각의 프레임은 다시 매크로블럭(Macroblock)이라는 16x16 크기의

  작은 블럭으로 나눠지는데 이 매크로블럭을 압축하는 방식에는 크게 Intra코딩과 Inter코딩이 있습니다.

  IDR, I프레임은 프레임 내의 모든 매크로블럭이 Intra코딩되는 프레임 이고,

  P프레임 내의 매크로블럭은 Intra코딩과 Inter코딩(전방향)의 두가지 방식이 모두 가능합니다.

  B프레임 내의 매크로블럭도 Intra코딩과 Inter코딩(전방향, 후방향, 양방향)의 두가지 방식이 가능합니다.


  1-1) Inter코딩은 움직임예측(Motion Estimation)을 사용하는 압축방식입니다.

       이미 압축돼있는 프레임을 참조하여 현재 압축하려는 블럭을 예측(Inter Prediction)하고

       예측된 블럭과 실제 블럭의 차이값인 예측오류데이터(Residual Data)를 계산합니다.

       이 때, 예측에 사용된 부분이 참조프레임의 어디에 있는지를 나타내는 움직임벡터(Motion Vector)도

       구해야 하는데 여기에서도 예측이 사용됩니다.

       H.264/AVC 표준 상에 정의된 여러가지 방법으로 PMV(Predicted Motion Vector) 즉, 예측된 움직임벡터를 산출합니다.

       이렇게 산출된 PMV와 움직임예측으로 구해진 실제 움직임벡터와의 차이값(MVD : Motion Vector Difference)을 구합니다.

  1-2) Intra코딩은 움직임예측을 사용하지않는 압축방식입니다.

       움직임벡터가 필요한 프레임 간 예측(Inter Prediction)을 샤용하지 않는 대신, 인접한 주변 블럭들의

       픽셀값을 직접 사용해서 현재 압축하려는 블럭을 예측하는 프레임 내 예측(Intra Prediction)을 사용합니다.

       Inter코딩과 마찬가지로 예측된 블럭과 실제 블럭의 차이값인 예측오류데이터를 구하는게 목적입니다.


2) 1번 과정에서 구해진 예측오류데이터를 압축하기 위해서 먼저 주파수변환을 수행합니다.

  주파수변환은 픽셀 영역의 예측오류데이터를 주파수 영역의 계수들로 변환하는 과정을 말합니다.

  주파수변환을 통해 예측오류데이터를 주파수 계수들로 분리함으로써 이후의 양자화 과정에서 효율적인 압축이 가능합니다.

  H.264/AVC 표준은 이전의 표준에서 사용되었던 8x8 DCT대신에 DCT를 약간 수정한 4x4 정수변환을 사용합니다.

  High Profile 이상에서는 4x4 정수변환과 8x8 정수변환을 선택적으로 사용할 수 있습니다.


3) 2번 과정에서 구해진 주파수 계수들을 양자화(Quantization)합니다.

  불필요하거나 덜 중요하다고 판단되는 주파수 계수들을 줄이거나 제거함으로써 압축을 수행합니다.

  이 과정에서 줄어들거나 제거된 주파수 계수들은 디코딩 과정에서 정확한 복원이 불가능하기 때문에

  실질적으로 데이터의 손실이 발생하는 과정입니다.


4) 양자화된 계수들은 다시 한 번 압축되는데 이 과정을 엔트로피 코딩이라고 합니다.

  엔트로피 코딩은 확률적인 방법을 사용해서 데이터의 크기를 줄이는 무손실 압축방식입니다.

  H.264/AVC 표준에서는 Exp-Golomb, CAVLC, CABAC 등의 방식이 사용되는데 양자화된 예측오류데이터에는

  CAVLC와 CABAC이 선택적으로 사용됩니다. (CABAC은 Main Profile 이상에서만 사용이 가능합니다.)




[ Frame Type ]

98cb04e55ecb1f27e51e7acd9ce52d56.png

H.264 Features

  - Deblocking : H.264/AVC 표준의 In-loop Deblocking 필터와 관련된 옵션입니다. In-loop Deblocking 필터는 1-1)번 과정에서

  참조프레임에 Deblocking 필터를 적용함으로써 좀 더 효율적인 움직임 에측이 가능하게 합니다.

  참조프레임은 이미 압축된 프레임이기 떄문에 블럭화 현상이 나타나는 경우가 많은데 이런 블럭화 현상을 줄여줌으로써

  Inter코딩시 에측오류데이터를 줄일 수 있습니다.

  Strength는 Deblocking 필터의 강도를 결정합니다. 낮은 값일수록 필터의 강도가 약해집니다.

  Threshold는 얼마나 많은 블럭에 Deblocking 필터를 적용할지를 결정합니다.

  낮은 값일수록 더 많은 블럭에, 더 낮은 강도의 Deblocking 필터가 적용됩니다. 

  각각 0이 기본값이고 -3 ~ 3 사이의 값이 주로 사용됩니다.


1-1) Inter코딩은 움직임예측(Motion Estimation)을 사용하는 압축방식입니다.

       이미 압축돼있는 프레임을 참조하여 현재 압축하려는 블럭을 예측(Inter Prediction)하고

       예측된 블럭과 실제 블럭의 차이값인 예측오류데이터(Residual Data)를 계산합니다.

       이 때, 예측에 사용된 부분이 참조프레임의 어디에 있는지를 나타내는 움직임벡터(Motion Vector)도

       구해야 하는데 여기에서도 예측이 사용됩니다.

       H.264/AVC 표준 상에 정의된 여러가지 방법으로 PMV(Predicted Motion Vector) 즉, 예측된 움직임벡터를 산출합니다.

       이렇게 산출된 PMV와 움직임예측으로 구해진 실제 움직임벡터와의 차이값(MVD : Motion Vector Difference)을 구합니다.



  - CABAC : Context-Adaptive Binary Arithmetic Coding의 약자입니다.

  4)번 과정에서 엔트로피 코딩에 사용되는 방식 중 가장 효율적인 압축 방식입니다.

  CABAC을 사용하지 않으면 CAVLC(Context-Adaptive Variable Length Coding)이 대신 사용됩니다.

  CAVLC보다 CABAC의 압축 효율이 더 높기 때문에 특별한 이유가 없다면 사용하는 편이 좋습니다.

  다만 압축 효율이 높은 만큼 훨씬 복잡한 방식이기 때문에 인코딩, 디코딩 모두 부하가 커집니다.

  Main Profile이상에서만 사용 가능합니다.


4) 양자화된 계수들은 다시 한 번 압축되는데 이 과정을 엔트로피 코딩이라고 합니다.

  엔트로피 코딩은 확률적인 방법을 사용해서 데이터의 크기를 줄이는 무손실 압축방식입니다.

  H.264/AVC 표준에서는 Exp-Golomb, CAVLC, CABAC 등의 방식이 사용되는데 양자화된 예측오류데이터에는

  CAVLC와 CABAC이 선택적으로 사용됩니다. (CABAC은 Main Profile 이상에서만 사용이 가능합니다.)


GOP Size
  I프레임은 참조프레임 없이 Intra코딩되는 프레임이기 때문에 키프레임이라고 하면 보통은 I프레임을 말합니다.
  하지만 다수의 참조프레임을 사용하는 H.264/AVC 표준에서는 단순히 I프레임인 것 만으로는 키프레임의 역할을 할 수 없습니다.
  I프레임의 뒤에 위치한 프레임이 다수의 참조프레임을 사용한다면, I프레임의 앞에 위치한 프레임을 참조하는 경우도
  있을 수 있기 때문입니다. 이렇게 프레임 간의 참조 관계가 I프레임을 경계로 하지 않을 수도 있기 때문에 특정한 I프레임에는
  IDR(Instantaneous Decoding Refresh)이라는 플래그를 달아줍니다. 이렇게 IDR플래그가 있는 IDR-I프레임은 뒤에 위치한 프레임이
  IDR-I프레임의 앞에 위치한 프레임을 참조하지 못하게 합니다. 따라서 IDR-I프레임만이 실질적인 키프레임의 역할을 하게됩니다.
  아래의 옵션들은 IDR-I프레임과 관련된 옵션들이고 IDR-I프레임이 아닌 I프레임과는 상관이 없습니다.
  - Maximum GOP size : IDR-I프레임 간의 최대 간격을 설정합니다. 기본값은 250입니다.
  - Minimum GOP size : IDR-I프레임 간의 최소 간격을 설정합니다. 기본값은 25입니다.
  - Open GOP : Open GOP란 GOP의 마지막 프레임을 B프레임으로 압축함으로써 다음 GOP의 키프레임을 해당 GOP의 B프레임이
  참조할 수 있도록 만드는 GOP 구조를 말합니다. Open GOP로 압축되는 경우에는 키프레임에 IDR-I프레임을 사용할 수 없고 대신
  Recovery Point SEI가 삽입된 I프레임을 사용합니다. 이렇게 함으로써 GOP 사이즈가 작은 경우에 약간의 이득을 얻을 수 있습니다.
  x264는 기본적으로 Closed GOP를 사용하고 여기에 체크하면 Open GOP가 사용됩니다.


Slice
????????????????????????????????????????????????????


B-Frames
  - B-Frames : 연속한 B프레임의 최대 개수를 정하는 옵션입니다.
  Adaptive B-Frames옵션과 함께 사용하는 편이 좋습니다.
  기본값은 3이고 최대 16까지 사용 가능합니다. 3 ~ 5 사이의 값이 주로 사용됩니다.
 - B-Frame bias : Adaptive B-Frames에 적용되는 옵션입니다.
  연속한 B프레임의 수를 조절할 때 얼마나 적극적으로 B프레임을 사용할지 정하는 옵션입니다.
  기본값은 0이고 높일수록 B프레임이 많이 사용됩니다. 특별한 이유가 없다면 기본값을 사용하는 편이 좋습니다.
  - Adaptive B-Frames : 연속한 B프레임의 수를 정해진 범위안에서 유동적으로 조절해 주는 옵션입니다.
  연속한 B프레임의 수를 고정시키는 것보다 상황에 맞게 효율적으로 조절해 주기 때문에 화질면에서 유리합니다.
  기본값은 Fast입니다. Optimal과 Fast가 주로 사용됩니다.
  - B-Pyramid : 1-1)번 과정에서 움직임예측시 B프레임도 참조프레임으로 사용될 수 있도록 허용하는 옵션입니다.
  이전의 표준들에서는 B프레임이 참조프레임으로 사용되지 못하지만 H.264/AVC 표준에서는 Inter코딩시 B프레임도
  참조프레임으로 사용될 수 있습니다. 기본값은 Normal이고 기본값을 사용하는 편이 좋습니다.
  블루레이 스펙은 H.264/AVC 표준과 다르게 B프레임이 참조프레임으로 사용될 때 약간의 제약이 있습니다.
  P프레임이 B프레임을 참조하지 못하고 B프레임도 바로 옆에 있지 않은 B프레임은 참조하지 못하게 하고 있습니다.
  이런 블루레이의 추가적인 제한을 맞춰주는 옵션이 Strict입니다.
  당연히 Normal보다는 효율이 떨어지기 때문에 특별한 경우가 아니라면 사용되지 않습니다.

1-1) Inter코딩은 움직임예측(Motion Estimation)을 사용하는 압축방식입니다.

       이미 압축돼있는 프레임을 참조하여 현재 압축하려는 블럭을 예측(Inter Prediction)하고

       예측된 블럭과 실제 블럭의 차이값인 예측오류데이터(Residual Data)를 계산합니다.

       이 때, 예측에 사용된 부분이 참조프레임의 어디에 있는지를 나타내는 움직임벡터(Motion Vector)도

       구해야 하는데 여기에서도 예측이 사용됩니다.

       H.264/AVC 표준 상에 정의된 여러가지 방법으로 PMV(Predicted Motion Vector) 즉, 예측된 움직임벡터를 산출합니다.

       이렇게 산출된 PMV와 움직임예측으로 구해진 실제 움직임벡터와의 차이값(MVD : Motion Vector Difference)을 구합니다.


  - B-Frame Weighted Prediction  : P-Frame Weighted Prediction 옵션과 마찬가지로 H.264/AVC 표준의 WP을 사용합니다.
  이 옵션에 체크하면 B프레임에서만 사용 가능한 Implicit WP이 사용됩니다.
  특별한 이유가 없다면 사용하는 편이 좋습니다.

  - P-Frame Weighted Prediction  : ??????????????????????????????


Other
  - Reference Frames : Inter코딩시 사용되는 참조프레임의 수를 결정합니다.
  값이 클수록 압축 효율이 높아지지만 역시 인코딩 시간은 늘어납니다.
  기본값은 3이고 3 ~ 5 사이의 값이 주로 사용됩니다.
  Minimum GOP size, Maximum GOP size값에 따라서 IDR 또는 I프레임이 조건에 맞게 사용됩니다.
  - Adaptive I-Frame Decision : IDR-I프레임과 I프레임(Extra I-Frame)을 유동적으로 사용할지 결정하는 옵션입니다.
  이 옵션에 체크하면 장면이 전환되는 부분에서 IDR 또는 I프레임을 적응적으로 사용하게 됩니다.
  - Extra I-Frames : IDR-I프레임 또는 I프레임(Extra I-Frame)을 얼마나 사용할지 결정하는 옵션입니다.
  장면이 전환되는 부분이나 급격하게 화면이 변하는 경우에는 Inter코딩의 효율이 낮아지는데 이 때 IDR프레임 또는 I프레임을
  사용함으로써 얍축 효율을 높일 수 있습니다. 값을 높일수록 사용 빈도가 높아집니다.
  기본값은 40이고 특별한 이유가 없다면 기본값을 사용하는 편이 좋습니다.

- lnterlaced mode : ?????????????????????????????????????
- Use Periodic lntra Refresh : ?????????????????????????????????
- Enable constralned intra prediction : ??????????????????????????????


[ Rate Control ]

6cc8d19b7b8eaa6ddc1ea77ceb6cfa82.png

Quantizers

  주파수변환된 계수들을 얼마나 양자화할 것인지 결정하는 수치인 QP값에 관련된 옵션들입니다.


  - Min/Max/Step : 프레임당 양자화 수치(QP)의 최소값, 최대값 그리고 연속한 프레임 간에 증가하거나

  감소하는 QP값의 최대치를 조절하는 옵션입니다.

  기본값은 각각 0, 69, 4이고 특별한 이유가 없다면 기본값을 사용하는 편이 좋습니다.

  - Quantizer (I-P / P-B) Ratio  : I:P 수치는 P프레임을 기준으로 I프레임의 QP값을 산출할 때 사용되는 가중치입니다.

  P:B 수치는 P프레임을 기준으로 B프레임의 QP값을 산출할 때 사용되는 가중치입니다.

  P:B 수치는 MB-Tree옵션과 함께 사용되면, 지정된 값이 무시되고 MB-Tree에 의해서 자동으로 조절됩니다.

  각각 기본값은 1.40, 1.30입니다. 특별한 이유가 없다면 기본값을 사용하는 편이 좋습니다.

 

  - Chroma and Luma QP Offset : H.264/AVC 표준에서는 Chroma블럭의 QP값은 따로 계산되지 않고 Luma블럭의 QP값에 따라서 자동으로 산출되는데, Chroma블럭의 QP값을 산출할 때 사용되는 가중치입니다.

  -12 ~ 12 사이의 값이 사용 가능하고 기본값은 0입니다. 특별한 이유가 없다면 기본값을 사용하는 편이 좋습니다.

  Psy-RD, Psy-Trellis 옵션이 사용되면 각각의 수치에 따라서 자동으로 값이 조절됩니다.


Rate Control

  - VBV Buffer Size(kbps) : 비디오 버퍼 검증기(VBV)의 버퍼 사이즈를 결정하는 옵션입니다.

  - VBV Maximum Bitrate(kbps) : VBV의 버퍼에 입력되는 최대 비트레이트를 결정하는 옵션입니다.

VBV(Video Buffer Verifier)는 비디오 버퍼의 크기가 제한되어 있는 하드웨어 재생을 위한 동영상을 만들거나

스트리밍처럼 전송용 동영상을 만드는 경우에 주로 사용되는 기능입니다. 기본값은 각각 0, 0으로 사용되지 않습니다.

각종 휴대기기나 하드웨어 재생기에서 재생할 목적으로 인코딩하는 경우에는 VBV를 사용하는 편이 좋습니다.

  - VBV Initial Buffer : VBV의 버퍼에 데이터가 어느정도 채워졌을 때 재생을 시작할지 결정하는 옵션입니다.

  0 ~ 1 사이의 값이 사용 가능하고 기본값은 0.9입니다. VBV가 사용되지 않으면 이 옵션도 무시됩니다.

  - Average Bitrate Variance : 1패스 평균비트레이트 모드에서 주로 사용되는 옵션입니다.

  정해진 평균비트레이트를 얼마나 정확하게 맞춰줄지를 결정하는 옵션입니다.

  1패스 평균비트레이트 모드의 목적은 정해진 비트레이트에서 크게 벗어나지 않는 동시에 효율적으로 비트를 배분하는 것인데 이 옵션값을 높일수록 비트 배분을 효율적으로 하는 대신 정해진 비트레이트에서 벗어나는 정도가 커집니다.

  기본값은 1.0이고 특별한 이유가 없다면 기본값을 사용하는 편이 좋습니다.

  - Quantizer Compression : 화면의 복잡도에 따라서 비트레이트 배분의 가중치를 결정하는 옵션입니다. 옵션값을 높일수록 영상 내의 복잡하거나 움직임이 많은 부분에서 비트레이트를 높여 줍니다. 0 ~ 1 사이의 값이 사용 가능하고 기본값은 0.6입니다.  MB-Tree와 함께 사용되면 MB-Tree의 강도를 조절해 줍니다. 값이 높을수록 MB-Tree의 강도는 낮아집니다.

  - Temp. Blur of est. Frame complexity : x264는 비트레이트를 배분할 때, 먼저 영상의 복잡하거나 단순한 정도에 따라서 복잡도(Complexity)가 계산되고 이 복잡도에 따라서 비트를 배분하게 됩니다. 이 옵션은 계산된 복잡도의 편차를 줄여줌으로써 프레임 간의 과도한 비트레이트 변동을 막아줍니다. 기본값은 20이고 특별한 이유가 없다면 기본값을 사용하는 편이 좋습니다.  Mb-Tree와 함꼐 사용되면 이 옵션은 무시됩니다.

  - Temp. Blur of Quant after CC : Temp. Blur of est. Frame complexity 옵션과 마찬가지로 프레임 간의 과도한 비트레이트 변동을 막아주는 옵션입니다. 복잡도에 따라 비트레이트를 배분한 후에 적용되어 다시 한 번 프레임 간의 비트레이트 편차를 줄여줍니다. 기본값은 0.5이고 특별한 이유가 없다면 기본값을 사용하는 편이 좋습니다.

  - Number of Frames for Lookahead : MB-Tree의 블럭 간 참조 관계를 분석하는 데에 사용되는 프레임의 수입니다. 기본값은 40이고 40 ~ 60 사이의 값이 주로 사용됩니다.

  - MB-Tree : Inter코딩시 블럭 간의 참조 관계를 분석해서 참조율이 높은 부분의 비트레이트를 높여주는 옵션입니다. 즉, Inter코딩시 여러번 참조된 부분의 비트레이트를 높여줌으로써 이후 반복되는 1-1)번 과정에서 예측오류데이터를 줄여줄 수 있습니다. Quantizer Compression 옵션으로 MB-Tree의 강도를 조절할 수 있습니다.


Adaptive Quantizers
x264의 AQ(Adaptive Quantization)은 블럭의 Variance(편평도)를 기준으로 QP값을 조절해 주는 옵션입니다.
하늘을 배경으로 하는 장면이나 화면의 어두운 부분, 또는 멀리서 바라 본 잔디밭이나 필름 그레인처럼 편평도가 큰 블럭의
비트레이트를 높여줌으로써 블럭현상을 줄이거나 미세한 디테일을 유지하는 데에 도움이 됩니다.
고정된 QP값을 사용하는 CQP 모드에서는 사용할 수 없습니다.
  - Mode : Variance AQ는 프레임마다 동일한 AQ Strength를 사용합니다.
  Auto Variance AQ는 프레임마다 AQ Strength를 자동적으로 조절해 주는 모드입니다.
  기본값은 Variance AQ입니다.
  MB-Tree 옵션을 사용하면 Variance AQ가 자동적으로 사용됩니다.
  - Strength : AQ의 강도를 결정하는 옵션입니다. 기본값은 1.0이고 0.5 ~ 1.5 사이의 값이 주로 사용됩니다.



[ Analysis ]

f4650673e471346316aed291a5f2556a.png

Motion Estimation
1)번 과정에서 사용되는 움직임예측(Motion Estimation)과 프레임 내 예측 등에 관련된 옵션들입니다.
H.264/AVC 표준은 Inter코딩시 움직임예측에 사용되는 블럭의 크기를 최소 4x4 까지 허용합니다. 16x16 크기의 매크로블럭은
16x8, 8x16, 8x8, 8x4, 4x8, 4x4 크기의 서브 파티션들로 나눠지고 각각의 서브 파티션마다 움직임예측이 수행될 수 있습니다.
Intra코딩시에는 16x16, 8x8, 4x4 크기의 서브 파티션이 선택될 수 있고 서브 파티션마다 프레임 내 예측이
수행되는데 각각 4, 9, 9 가지의 예측 모드가 정의되어 있습니다.
또한 움직임예측시 탐색의 정확도에 따라서 Full-Pel(정수 픽셀 단위), Half-Pel(1/2 픽셀 단위), Quater-Pel(1/4 픽셀 단위)로
나눌 수 있는데 x264는 Full-Pel, Half-Pel, Quater-Pel 순으로 개선해가며 움직임예측을 수행합니다.
종합하면, 움직임예측 및 프레임 내 예측은 코딩에 사용될 서브 파티션의 종류와 그에 맞는 움직임벡터 및 프레임 내 예측 모드를
선택하는 과정이라고 할 수 있습니다.
먼저 서브 파티션의 종류 및 프레임 내 예측 모드를 선택할 때 단순히 예측오류데이터가 가장 작은 종류를 선택하는 방법이 있을 수 있지만
이 방법으로는 작은 서브 파티션(4x4 또는 8x8 등)을 선택했을 때, 코딩해야 할 움직임벡터의 수와 예측 모드의 수가 증가하는 것을 고려하지
못합니다. 마찬가지로 움직임벡터를 선택할 때에도 Quater-Pel을 사용하면 예측오류데이터를 줄일 수는 있겠지만
해당 움직임벡터를 코딩하는 데에 더 많은 비트가 필요하게 되는 것을 고려하지 못합니다.
따라서 인코더는 어떤 선택을 할 때마다 그 선택으로 인한 예측오류데이터와 그 선택을 코딩하는 데에 필요한 비트를 함께
고려해야만 최선의 결정을 할 수 있는데 이를 가능하게 하는 선택 결정 방법이 RDO(Rate-Distortion Optimization)입니다.
RDO는 어떤 선택으로 인한 Distortion(예측오류데이터 등)과 그 선택에 필요한 Rate(비트)를 동시에 고려함으로써
효율적인 모드 결정을 가능하게 합니다.
RDO는 서브 파티션의 종류나 움직임벡터의 선택 외에도 프레임 내 예측 모드 등, 여러가지 대안들 중에서 어떤 선택을
해야 하는 경우에 사용될 수 있는 모드 결정 방법이라고 할 수 있습니다. 다만 정확한 Rate를 구하기 위해서는 훨씬 더 많은
계산이 필요하기 때문에 Non-RDO 모드보다 인코딩 속도는 상당히 느려집니다.

1) IDR프레임,I프레임,P프레임,B프레임 중 어떤 종류의 프레임으로 압축할지를 결정합니다.

  프레임의 종류가 결정되면 각각의 프레임은 다시 매크로블럭(Macroblock)이라는 16x16 크기의

  작은 블럭으로 나눠지는데 이 매크로블럭을 압축하는 방식에는 크게 Intra코딩과 Inter코딩이 있습니다.

  IDR, I프레임은 프레임 내의 모든 매크로블럭이 Intra코딩되는 프레임 이고,

  P프레임 내의 매크로블럭은 Intra코딩과 Inter코딩(전방향)의 두가지 방식이 모두 가능합니다.

  B프레임 내의 매크로블럭도 Intra코딩과 Inter코딩(전방향, 후방향, 양방향)의 두가지 방식이 가능합니다.


  - Chroma M.E. : 이 옵션에 체크하면 움직임예측시 Chroma 채널의 정보도 함께 계산됩니다.
  특별한 이유가 없다면 사용하는 편이 좋습니다.
  - M.E. Range : M.E. Method의 탐색 범위를 결정하는 옵션입니다. 기본값은 16이고 값이 클수록 탐색의 범위가
  넓어지기 때문에 인코딩 속도는 느려집니다. 16 ~ 24 사이의 값이 주로 사용됩니다.
  단, M.E. Method에서 Dia나 Hex을 선택할 경우 M.E. Range는 4 ~ 16 으로 제한됩니다.
  - M.E. Method : ?????????????????????????????????????????
  - Subpixel M.E : Subpixel(Half-Pel, Quater-Pel)단위의 움직임예측과 관련된 옵션입니다.
  01 ~ 05 사이의 값은 Sub-Pel 움직임예측의 강도를 결정하고 00을 선택하면 Sub-Pel 움직임예측은 사용되지 않습니다.
  06부터는 서브 파티션의 종류 선택에 RDO가 사용됩니다. 08부터는 서브 파티션의 종류 선택 외에
  움직임벡터와 프레임 내 예측 모드 선택에도 RDO가 사용됩니다.
  10에서는 매크로블럭의 QP값을 선택할 때에도 RDO가 사용됩니다.
  11에서는 인코딩 속도를 높이기 위해 적용되는 모든 최적화 알고리즘을 사용하지 않습니다.
  10 이상을 적용하려면 AQ와 trellis=2 를 사용해야 합니다.


Extra
  - MV Prediction mode : 1-1)번 과정에서 매크로블럭을 Inter코딩할 때 코딩해야하는 정보로는 예측된 움직임벡터(PMV), 실제 움직임벡터와의 차이값(MVD), 예측오류데이터라고 볼 수 있습니다. 여기서 PMV가 산출되는 방식은, 주로 주변 블럭들의 움직임벡터를 이용해서 Median벡터를 구하는 방식인데 B프레임에서는 추가적으로 Direct 예측 방식이 지원됩니다.  B프레임의 Direct 예측 방식은 Spatial과 Temporal로 나눠지는데 둘 중에서 어떤 방식을 사용할지 결정하는 옵션입니다.  Spatial은 동일한 프레임 내에 있는 주변 블럭들의 움직임벡터를 이용해서 PMV를 구하는 방식입니다. Temporal은 앞, 뒤에 있는 참조프레임에서 동일한 위치에 있는 블럭의 움직임벡터를 이용해서 PMV를 구하는 방식입니다. Auto는 두 가지 모드를 적응적으로 사용합니다. 기본값은 Spatial이고 Spatial과 Auto가 주로 사용됩니다.  x264의 1패스 모드에서는 Auto를 사용해도 적응적인 선택을 제대로 하지 못하고 대부분은 Spatial이 사용됩니다. Auto는 멀티패스 모드에서 가장 잘 작동합니다.

 1-1) Inter코딩은 움직임예측(Motion Estimation)을 사용하는 압축방식입니다.

       이미 압축돼있는 프레임을 참조하여 현재 압축하려는 블럭을 예측(Inter Prediction)하고

       예측된 블럭과 실제 블럭의 차이값인 예측오류데이터(Residual Data)를 계산합니다.

       이 때, 예측에 사용된 부분이 참조프레임의 어디에 있는지를 나타내는 움직임벡터(Motion Vector)도

       구해야 하는데 여기에서도 예측이 사용됩니다.

       H.264/AVC 표준 상에 정의된 여러가지 방법으로 PMV(Predicted Motion Vector) 즉, 예측된 움직임벡터를 산출합니다.

       이렇게 산출된 PMV와 움직임예측으로 구해진 실제 움직임벡터와의 차이값(MVD : Motion Vector Difference)을 구합니다.

  - Trellis : 3)번 과정에서 사용되는 양자화 방식의 하나입니다.
  RDO기반의 양자화 방식이고 사용 빈도에 따라서 Final MB와 Always로 나뉩니다.
  Trellis가 사용되지 않을 때에는 Deadzones가 대신 사용됩니다.
  기본값은 None이고 주로 Final MB와 Always가 사용됩니다.
  Trellis 옵션을 사용하려면 CABAC을 사용해야 합니다.
  - Psy-RD : RDO에 의한 모드 결정에서 단순히 PSNR같은 수치를 높이는 결정보다는 사람의 눈으로 봤을 때 더 좋은
  결과를 보여주는 모드를 결정하도록 조절해 주는 옵션입니다. 기본값은 1.0이고 기본값을 사용하는 편이 좋습니다.
  RDO와 관계되는 옵션이기 때문에 Subpixel Refinement 옵션에서 06 이상의 값을 사용해야 작동합니다.
  - Psy-Trellis : Trellis에 의한 양자화 과정에서 사람의 눈에 더 좋게 보이는 결과가 나오도록 양자화 방식을
  조절해 주는 옵션입니다. 기본값은 0으로 사용되지 않고 사용되는 경우에는 0.0 ~ 0.4 사이의 값이 주로 사용됩니다.
  Trellis와 관계되는 옵션이기 때문에 Trellis 옵션에서 Final MB 또는 Always를 사용해야 작동합니다.
 - No Psychovisual Enhancements : x264에서 사용되는 모든 Psychovisul Enhancements(사람의 눈에 최적화된 작동)를 사용하지않게 하는 옵션입니다. 특별한 경우가 아니라면 사용하지 않는 편이 좋습니다.
 - No DCT Decimate : 1-1)번 과정에서 Inter코딩시 구해진 예측오류데이터는 2)번 주파수변환 과정을 거쳐서 주파수 계수들로 이루어진 DCT블럭으로 바뀝니다. 이 때, DCT블럭 내의 주파수 계수들이 무시해도 좋을 만큼 작다고 판단되면 해당 DCT블럭의 모든 주파수 계수들을 0으로 만드는 옵션이 DCT Decimation입니다. 이렇게 DCT블럭 내의 주파수 계수들을 모두 제거하면 이후의 양자화 과정이나 엔트로피 과정도 생략되기 때문에 인코딩 속도를 높여줍니다. 또한 예측오류데이터를 코딩하지 않기 때문에 비트를 절약할 수 있습니다. 제거된 주파수 계수들로 인해 미세한 손실이 있을 수도 있지만 대부분의 경우에 그 차이는 구별하기 힘듭니다. 기본적으로 DCT Decimation이 사용되며, 이 옵션에 체크하면 사용하지 않게 됩니다.
  - No Fast P-Skip : 1-1)번 과정에서 매크로블럭을 Inter코딩할 때, MVD와 예측오류데이터가 0인 블럭을 Skip블럭이라고 합니다.
  즉, 예측된 움직임벡터가 실제 움직임벡터와 일치하고 예측오류데이터도 없는 경우에 해당 블럭은 Skip블럭으로 코딩되는데
  따로 코딩해야할 움직임 정보가 없기 때문에 Inter코딩 모드 중에서 가장 경제적인 모드라고 할 수 있습니다.
  Fast P-Skip은 P프레임 내의 매크로블럭을 Inter코딩할 때, MVD가 0이면서 예측오류데이터가 일정 수준을 넘지 않으면
  해당 블럭을 Skip블럭으로 코딩하고 이후의 움직임예측 과정을 생략하는 옵션입니다.
  Skip블럭으로 코딩되는 매크로블럭이 많아지기 때문에 인코딩 속도를 높여주지만 부정확한 모드 결정이 있을 수 있습니다.
  기본적으로 Fast P-Skip이 사용되며, 이 옵션에 체크하면 사용하지 않게 됩니다.
  - No Mixed Reference Frames : 1-1)번 과정에서 Inter코딩시 각각의 서브 파티션들은 독립적으로 움직임예측을 수행합니다. 따라서 각각의 서브 파티션들은 서로 다른 참조프레임을 사용하는 것이 가능하지만 이 옵션에 체크하면 매크로블럭 내의 서브 파티션들이 모두 동일한 참조프레임을 사용하도록 제한합니다. 이 옵션을 사용하면 인코딩 속도를 높여줄 수 있지만 그만큼 압축 효율이 낮아집니다.
- Fake lnterlaced : ???????????????????????????????????????
 
Macroblocks
  -All none custom Default : 1-1), 1-2)번 과정에서 움직임예측과 프레임 내 예측시 사용할 서브 파티션의 종류를 결정하는 옵션입니다. 기본값은 Default로 P4x4를 제외한 모든 서브 파티션이 선택됩니다. Default와 All이 주로 사용됩니다.
  Custom을 선택하면 서브 파티션의 종류를 사용자가 선택할 수 있습니다.
  - Adaptive 8x8 DCT : 2)번 과정에서 8x8 정수변환과 4x4 정수변환을 선택적으로 사용하는 옵션입니다.
  I8x8을 사용하려면 이 옵션을 사용해야 합니다. High Profile 이상에서만 사용 가능합니다.
  - I8x8, I4x4, P8x8, P4x4, B8x8 : 사용 가능한 서브 파티션의 종류입니다.
  H.264/AVC 표준에서는 B4x4까지도 사용이 가능하게 되어있지만, x264는 P4x4만큼이나 B4x4도 효율적이지
  못하다는 개발자들의 판단에 따라서 B4x4를 사용하지 않고 있습니다.
 
Noise Reduction :  ?????????????????????????
Deadzones : ?????????????????????

Quantizer Matrices
2), 3)번 과정에서 사용되는 Scaling Factor를 조절하는 옵션입니다.
Scaling Factor는 주파수변환된 계수들마다 양자화의 수준을 조절할 수 있게 만들어 주는 수치입니다.
주파수변환과 연계되어 사용되는 값이기 때문에 주파수변환과 마찬가지로 4x4, 8x8 크기의 매트릭스로 구성됩니다.
기본적으로 H.264/AVC 표준에 정의된 Flat(Flat16) 매트릭스가 사용되고 JVT(Joint Video Team) 매트릭스를 선택하거나
사용자가 직접 지정한 매트릭스를 사용할 수도 있습니다.


Misc ]

b77d6ef5fb5f9050734b7d9ff66e49fb.png

?????????????????????????????????

  • ?
    HEVC 2016.01.11 16:07

    hevc 코덱을 쓰시면 h264보다 좀 더 압축 가능합니다.

  • ?
    小樱 2016.01.20 18:09

    http://bbs.itzmx.com/thread-8452-1-1.html

    http://bbs.itzmx.com/thread-10176-1-1.html

    http://bbs.itzmx.com/thread-8358-1-1.html

    如果你是一个中文用户,可加QQ群探讨问题:428453461 

  • ?
    JohnMunga 2016.02.24 03:09
    영상에는 3가지 종류의 프레임이 있는데 I-프레임, P-프레임, B-프레임이죠. B-프레임이 가장 많이 압축을 많이 하는 프레임이라 B-Frame값을 높일 수록 용량은 줄어들지만 그만큼 인코딩 시간도 늘어나고 화질도 떨어집니다. 개인적으로 3~5 값이 적당합니다.

    High10은 말그대로 10비트로 인코딩 된단 뜻입니다. 10비트 영상은 8비트 영상의 가장 큰 문제점인 계조 현상(banding issue)을 완화할 수 있는 장점이 있지만 인코딩 시간은 배로 불어나고 아직도 대부분의 장치에서 H264 10비트 하드웨어 가속은 지원되지 않으니 PC에서 보실거라면 상관 없지만 모바일이나 태블릿에서 넣어서 보실 거면 비추합니다.

    Fast Decode하고 Zero Latency는 걍 무시하시면 되고요...

    인코딩 방식을 선택할 때 고정비트레이트 방식과 가변 비트레이트 방식이 있는데 위 스샷에 나와있는 비트레이트 란에 체크하는 게 고정 비트레이트 인코딩 방식입니다. 고정비트레이트 방식은 비트레이트가 일정하여 가변 비트레이트 방식에 비해 상대적으로 재생시 요구하는 사양이 적고 용량을 확실하게 예측할 수가 있죠. 그래서 대역폭에 매우 민감한 인터넷 스트리밍에서 주로 이 방식을 씁니다. 하지만 움직임이 많은 동적인 장면에선 화질 저하가 일어난다는 단점이 있습니다(비트레이트 값을 높게 설정한다면 어느 정도 완화할 수 있지만 이러면 용량이 불어나겠죠)

    가변 비트레이트 방식은 위 스샷에서 볼 수 있듯이 퀄리티, 퀀타이저 방식이 있는데 화질 대비 용량 면에선 퀄리티가 더 효율적입니다. 퀄리티 방식의 장점은 고정 비트레이트 방식과는 달리 동적인 장면에서도 화질 저하가 눈에 띄게 줄어든다는 겁니다. 또한 장면에 따라 비트레이트가 다르게 되기 때문에 경우에 따라 퀄리티 방식이 고정 비트레이트 방식보다 용량면에 있어서 더 효율적일수도 있습니다. 단점은 동적인 장면에서는 비트레이트를 많이 부어주기 때문에 이러한 장면이 많을 수록 용량은 커집니다. 그리고 고정 비트레이트 방식에 비해 사양도 좀 더 먹고 용량도 예측할 수가 없죠.

    윗 분 말대로 H265 코덱을 쓰면 거의 두배 가까운 압축 효율을 낼 수 있긴 합니다. 다만 그만큼 시간도 오래 걸리고 이제 막 시험 단계 수준이라 명령어는 직접 입력하셔야 할 거에요.

List of Articles
No. Subject Author Date Views Votes
Notice [알림] 질문하시기 전에 지켜주셨으면 하는 것들 2 file sSTSs 2019.09.16 774 1
Notice [알림] 질문 먹튀하지 마시기 바랍니다 9 sSTSs 2018.10.12 3629 2
Notice 자유게시판에서는 자유롭게 글을 올리고 질문 및 답변을 할 수 있는 공간입니다. 1 샤나 2017.03.13 2509 0
533 avisynth 때문에 질문드립니다 murcielago00 2016.02.24 299 0
532 구버전 샤나인코더를 받고 싶은데 방법이 없을까요 1 마가레트 2016.02.23 432 0
531 지포스 드라이버 최신버전(361.91)으로 업데이트한 후 OpenCL 가속 사용시 오류가 발생합니다. Zoesparkler 2016.02.22 422 0
530 음성 선택 어떻게 하나요? 1 눈팅의본좌 2016.02.17 385 0
529 동적인 부분에서 영상이 blur되는데 어떻게 인코딩해야 수정할 수 있을까요?+그 외 1 newb 2016.02.11 177 0
528 리프인코더 2 핥아버지 2016.02.10 569 0
527 인터레이스로 인코딩하는 법 4 랩을한다홍홍홍 2016.02.08 592 0
526 사진과 음악을 합칠수있나요? 1 TomKim 2016.02.06 325 0
525 동영상 자체자막 제거 방법좀 알려주세요 1 All 2016.01.31 1889 0
524 ASS 자막 효과 중 \fade, \fad (자막이 천천히 사라지는 효과)가 적용 안 됩니다. CKPZ 2016.01.29 403 0
523 자막이 날라갑니다. 2 file 임피역 2016.01.28 261 0
522 프리셋 설정이 영상품질과 관련있나요? 2 file TomKim 2016.01.26 1841 0
521 일본어 자막합칠때 파일 깨지는 현상 3 file TomKim 2016.01.26 941 0
520 전문가님들 저 프리셋 좀 부탁드리겠습니다.. 3 아이써리 2016.01.25 612 0
519 저장될폴더 = 원본파일위치 체크기능 넣어주세요 베이컨 2016.01.22 163 0
» 인코딩 전문가님들 도와주세요... 3 file 캐릭생성 2016.01.09 5301 0
517 플레이어에서 미디어 정보가 안나오게 하는 명령어나 설정이 있을까요? 미르 2016.01.06 173 0
516 전문가님들 제 인코딩 설정이 잘못된건가요??? 2 file 유령사냥 2016.01.04 1152 0
515 idx+sub 자막 입힐수있나요? 1 화이트크리스마스 2015.12.31 1082 0
514 인코딩시 에러 문의 드립니다.. 0지존0 2015.12.29 252 0
Board Pagination Prev 1 ... 66 67 68 69 70 71 72 73 74 75 ... 97 Next
/ 97