# OBS AMF

## Other source:

```none
MaxNumRefFrames=4 
HighMotionQualityBoostEnable=1 
BReferenceEnable=true 
EnableVBAQ=false 
EnablePreAnalysis=true 
PASceneChangeDetectionEnable=false 
PATemporalAQMode=1 
PAHighMotionQualityBoostMode=1 
PAFrameSadEnable=true
```

测试结果：

`PATemporalAQMode=1 PAHighMotionQualityBoostMode=1` 两项消耗较多资源，不适合开启。

### OBS Wiki:

<https://github.com/obsproject/obs-studio/wiki/AMF-Options>

### AMF配置定义：

HEVC: <https://github.com/GPUOpen-LibrariesAndSDKs/AMF/blob/master/amf/public/include/components/VideoEncoderHEVC.h>

AVC: <https://github.com/GPUOpen-LibrariesAndSDKs/AMF/blob/master/amf/public/include/components/VideoEncoderVCE.h>

## H264

```none
MaxNumRefFrames=4 HighMotionQualityBoostEnable=1 BReferenceEnable=true EnableVBAQ=false EnablePreAnalysis=true PASceneChangeDetectionEnable=false PAFrameSadEnable=true FillerDataEnable=false EnforceHRD=true MinQP=13 MaxQP=27 PeakBitrate=8000000 VBVBufferSize=20000000
```

配合 VBR 码率控制

```none
MaxNumRefFrames=4 HighMotionQualityBoostEnable=1 BReferenceEnable=true EnableVBAQ=true EnablePreAnalysis=false FillerDataEnable=false EnforceHRD=true MinQP=0 MaxQP=32 PeakBitrate=10485760 VBVBufferSize=10485760
```

* 码率控制中，QP 范围优先于 Bitrate
* 在 VBR 中，AMF 会尝试保持 QP 稳定，如果画面突然变得变化更剧烈，所需码率增大，则缓慢提升 QP 来将码率降回指定码率。此 QP 变化范围受相应参数限制。
  * 在指定了 PeakBitrate 和 VBVBufferSize 的情况下，会严格将码率限制在 PeakBitrate 内，同时超出平均码率的部分会消耗 BufferSize，消耗完毕后强制回归平均码率。
  * PeakBitrate 和 VBVBufferSize 的单位是 bits
  * 如不指定这两个参数，其默认值较少，以致无法显著超出平均码率。

如何限制在 10M 以内：

kirin lemon: QP=32\~35

karby 海盗船8人团队战下雨：QP=42

画质，以海盗船下雨时屏幕文字为例：30可以接受，32有点劣化，35很明显

 ![35，文字明显劣化](https://minio.outline.bleatingsheep.org/outlinefixing/uploads/8682f6d2-0f23-4aae-b075-aa3805b8ee99/e159359b-bab9-4d31-b587-8c6ec30aff17/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=460a9d18e7106f67%2F20261003%2Fcn-homelab-1%2Fs3%2Faws4_request&X-Amz-Date=20261003T141500Z&X-Amz-Expires=86400&X-Amz-Signature=c5ef95236bf863134cf4cdd92b4c4bab6531d4f500e0474d6acf93984372fc53&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject " =503x719")

 ![32文字好一些](https://minio.outline.bleatingsheep.org/outlinefixing/uploads/8682f6d2-0f23-4aae-b075-aa3805b8ee99/acb747f9-14b0-4c7d-89d8-c5e1fa4c812f/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=460a9d18e7106f67%2F20261003%2Fcn-homelab-1%2Fs3%2Faws4_request&X-Amz-Date=20261003T141500Z&X-Amz-Expires=86400&X-Amz-Signature=8874340fe3aacccef8c68bf57b21328e9d7ac7f94f6f753f7412bc3800b5bd0e&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject " =665x974")

 ![30更好一些](https://minio.outline.bleatingsheep.org/outlinefixing/uploads/8682f6d2-0f23-4aae-b075-aa3805b8ee99/1a504488-3036-423d-bfb2-67ba26bfddc2/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=460a9d18e7106f67%2F20261003%2Fcn-homelab-1%2Fs3%2Faws4_request&X-Amz-Date=20261003T141500Z&X-Amz-Expires=86400&X-Amz-Signature=362b3743f4abbfff6f3c4604e43885160e68ee548a5d1c4971b736a2245b0266&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject " =606x922")

## H265

```none
HevcMaxNumRefFrames=4 HevcHighMotionQualityBoostEnable=1 HevcEnableVBAQ=false HevcEnablePreAnalysis=true PASceneChangeDetectionEnable=false PAFrameSadEnable=true HevcFillerDataEnable=false HevcEnforceHRD=true HevcMinQP_I=1 HevcMinQP_P=10 HevcMaxQP_I=35 HevcMaxQP_P=30 PeakBitrate=16777216 VBVBufferSize=67108864 HevcInitialVBVBufferFullness=0
```

配合 VBR 码率控制

---

**Documents**

- [SRS](https://notes.bleatingsheep.org/s/livestreaming/doc/srs-iJL6gP9wH0)
- [OBS AMF](https://notes.bleatingsheep.org/s/livestreaming/doc/obs-amf-RTy6RcDDc1)