---
title: "FWM Hybrik 전처리기 가이드"
description: "도브러너 FWM Hybrik 전처리기는 Dolby Hybrik 서비스를 통한 동영상 트랜스코딩 과정에서 포렌식 워터마킹 전처리를 수행할 수 있는 모듈입니다."
---
> For the complete documentation index, see [llms.txt](/llms.txt).

![](/img/content-security/dolby-hybrik-logo.png)

도브러너 FWM Hybrik 전처리기는 Dolby Hybrik 서비스를 통한 동영상 트랜스코딩 과정에서 포렌식 워터마킹 전처리를 수행할 수 있는 모듈입니다.

전처리기 모듈이 적용된 Hybrik 인코더를 통해 A/B 버전 (0/1 버전) mp4 영상을 만들어내고 각각의 파일을 DASH 또는 HLS로 패키징할 수 있습니다. 포렌식 워터마크와 DRM을 모두 적용하는 경우, [Hybrik DRM 연동 가이드](/content-security/multi-drm/packaging/dolby-hybrik-drm-integration/)를 참고해 CPIX API를 통한 DRM 패키징도 함께 적용할 수 있습니다.

```mermaid
sequenceDiagram
    participant A as 콘텐츠 서비스 사이트<br/>(고객사)
    participant B as 고객사 S3 스토리지
    participant C as 고객사 EC2 인스턴스<br/>(Hybrik 실행)
    participant D as Dolby Hybrik 콘솔<br/> 또는 API 
    participant E as 도브러너 서비스
    A ->> D: AWS Credential 등록 (S3, EC2 권한 부여)
    A ->> B: 원본 영상 업로드
    A ->> D: 트랜스코딩/패키징 작업 등록
    D ->> C: Hybrik 인스턴스 생성
    B ->> C: 원본 영상 복사
    C -->> C: 인코딩/트랜스코딩 
    Note right of C: A/B 전처리 (FWM<br/> Hybrik 전처리기)
    C -->> C: DASH/HLS 패키징
    opt 멀티DRM 적용
    C ->> E: 암호화 키 요청 (CPIX 연동)
    E ->> C: 암호화 키 전달
    C -->> C: 콘텐츠 암호화
    end
    C ->> B: 전처리 및 패키징 결과물
    Note right of B: DASH / HLS 콘텐츠<br/>(각각 A/B 두 벌)
```

Dolby Hybrik 미디어 프로세싱 서비스에 대한 자세한 정보와 가이드는 아래 링크들을 참고하시기 바랍니다.

- [Dolby Hybrik 미디어 프로세싱](https://professional.dolby.com/technologies/cloud-media-processing/)
- [Hybrik API 문서](https://docs.hybrik.com/)
- [Hybrik 튜토리얼](https://tutorials.hybrik.com/)

## 샘플 다운로드

`연동 방법`에서 설명된 전체 설정에 대한 예제 JSON 파일을 아래 링크에서 다운로드할 수 있습니다. (우클릭 후 다른 이름으로 저장)

[**전체 예제 JSON 파일**](/files/hybrik-fwm-full-example.json)

## 연동 방법

### 1. 서비스 가입 및 키 획득

도브러너 서비스 가입 후 `wm key file`과 `access key`를 획득합니다.

### 2. FWM 전처리기 인증 정보 설정

FWM 전처리기의 인증 정보를 다음과 같이 설정합니다. 

  ```json
  {
    "definitions": {
      ...
      "wm_key_file_base64": "yxFNjptzCUNHE5d/gJ5g+fWZHi0XUFuZxHuFD0ycQCZvuVpQUMZO79OqVat5VMp9gZIRTrC63Lf3otykHBL9sVyEDr3jAqDnEBXD9JPiNne9bFf1k1hH1hUiIrj1YeYRtfNVdDstmC2JMBzApHdGjGPSRBE=",
      "wm_access_key": "FOR_INKA_FORENSIC_WATERMARK_TEST",
      ...
    },
    ...
  }
  ```

:::note 

위 예시는 트라이얼을 위한 `데모` 모드 예시이며, FWM 상용 플랜에 가입한 후에는 1단계에서 발급되는 값을 사용해야 합니다.

:::

### 3. 인코딩 및 FWM 전처리기 설정

Hybrik에서 FWM 전처리기를 사용하려면 트랜스코딩 작업의 일부 영상 속성을 다음과 같이 지정해야 합니다.

- `target/container/kind: "fmp4"`
- `target/container/segment_duration_sec: 2`
- `target/video/codec: "h264"` 또는 `"h265"`
- `target/video/use_scene_detection: false`
- `target/video/use_closed_gop: true`

[지원 사양](https://docs.doverunner.com/ko/content-security/forensic-watermarking/getting-started/fwm-concepts/#%EC%A7%80%EC%9B%90-%EC%82%AC%EC%96%91)에 따라 다음 FPS를 지원하며, FPS별로 `target/video/idr_interval/frames`를 다음과 같이 지정해야 합니다.

| FPS | `target/video/idr_interval/frames` |
|:-:|:-:|
| 23.976, 24 | 48 |
| 25 | 50 |
| 29.97, 30 | 60 |
| 47.952, 48 | 96 |
| 50 | 100 |
| 59.94, 60 | 120 |

[세그먼트 랜더링](https://tutorials.hybrik.com/segmented_rendering/)을 사용할 때에도 `"duration_sec"`은 IDR 길이에 따라 2초, 혹은 2.002초의 배수로 지정해야 합니다.

각각 `0`과 `1`에 해당하는 워터마크 심볼이 적용된 A/B 버전 파일을 생성해야 하므로, 동일한 원본 영상에 대하여 트랜스코딩을 두 번 수행해야 합니다. 이 때, Akamai CDN과 호환되도록 반드시 `B` 버전 (심볼 1) 파일명은 `A` 버전 (심볼 0) 파일명 앞에 `b.`가 추가된 형태, 즉 `b.<A 버전 파일명>`이어야만 합니다. ([Unlabeled A variant 방식](https://techdocs.akamai.com/adaptive-media-delivery/docs/source-content-preprocessing))

다음은 A 버전 파일명이 `"{source_basename}{default_extension}"`인 경우의 예시입니다. 해당 파일명은 예시와 다른 값으로 변경 가능하지만, 이 경우 B 버전 파일명도 동일하게 변경 후 맨 앞에 `b.`을 추가해야 합니다.

- `A`버전 (심볼 0) 파일명 - `target/file_pattern: "{source_basename}{default_extension}"`
- `B`버전 (심볼 1) 파일명 - `target/file_pattern: "b.{source_basename}{default_extension}"`

또한 `0` 또는 `1` 심볼을 전처리하기 위하여 FWM 전처리 플러그인을 연결한 후 아래 속성들을 지정합니다.

- `target/video/filters/kind: "plugin_docker"`
- `target/video/filters/payload/docker_image/image_urn: "public.ecr.aws/pallycon/wm_plugin_pub:latest"`
- `target/video/filters/payload/docker_image/registry/kind: "ecr"`
- `target/video/filters/payload/config/wm_key_file_base64: "{{wm_key_file_base64}}"`
- `target/video/filters/payload/config/wm_access_key: "{{wm_access_key}}"`
- `target/video/filters/payload/config/wm_fwm_symbol: 0` 또는 `1`

다음은 위 내용을 적용한 FWM 전처리 설정 예시입니다.

```json
{
  ...,
  "payload": {
    "elements": [
      ...,
      {
        "uid": "transcode_video_wm0_task",
        "kind": "transcode",
        "payload": {
          ...,
          "targets": [
            {
              ...,
              "container": {
                "kind": "fmp4",
                "segment_duration_sec": "2"
              },
              "video": {
                ...,
                "use_scene_detection": false,
                "use_closed_gop": true,
                "frame_rate": "30000/1001",
                "idr_interval": {
                  "frames": 60
                },
                "filters": [
                  {
                    "kind": "plugin_docker",
                    "payload": {
                      "docker_image": {
                        "image_urn": "public.ecr.aws/pallycon/wm_plugin_pub:latest",
                        "registry": {
                          "kind": "ecr"
                        }
                      },
                      "config": {
                        "wm_key_file_base64": "{{wm_key_file_base64}}",
                        "wm_access_key": "{{wm_access_key}}",
                        "wm_fwm_symbol": 0
                      }
                    }
                  }
                ]
              },
              ...
            }
          ]
        }
      },
      {
        "uid": "transcode_video_wm1_task",
        "kind": "transcode",
        "payload": {
          ...,
          "targets": [
            {
              ...,
              "container": {
                "kind": "fmp4",
                "segment_duration_sec": "2"
              },
              "video": {
                ...,
                "use_scene_detection": false,
                "use_closed_gop": true,
                "frame_rate": "30000/1001",
                "idr_interval": {
                  "frames": 60
                },
                "filters": [
                  {
                    "kind": "plugin_docker",
                    "payload": {
                      "docker_image": {
                        "image_urn": "public.ecr.aws/pallycon/wm_plugin_pub:latest",
                        "registry": {
                          "kind": "ecr"
                        }
                      },
                      "config": {
                        "wm_key_file_base64": "{{wm_key_file_base64}}",
                        "wm_access_key": "{{wm_access_key}}",
                        "wm_fwm_symbol": 1
                      }
                    }
                  }
                ]
              },
              ...
            }
          ]
        }
      }
    ],
    ...
  }
}
```

### 4. DASH / HLS 패키징 설정

생성된 A/B 버전 mp4 파일을 각각 DASH 및 HLS로 패키징합니다. 패키징 시 다음 사항에 유의해야 하며 기타 사항은 [HLS and DASH Packaging Tutorial](https://tutorials.hybrik.com/hls_dash/)을 참고하시기 바랍니다.

- A/B 버전 미디어 세그먼트들은 동일한 디렉토리에 위치해야 합니다.
- 미디어 재생 시 사용자는 A 버전 매니페스트를 재생해야 하며, B 버전 매니페스트를 재생하면 안됩니다. 패키징 시 B 버전 매니페스트가 A 버전 매니페스트를 덮어쓰지 않도록 주의하세요. 이를 위하여 B 버전 매니페스트 파일의 위치와 이름을 A 버전 매니페스트와 상이하게 하고 패키징 후 삭제하는 것이 좋습니다.
- A 버전 매니페스트를 재생할 것이므로, 오디오는 A 버전에만 포함시키면 됩니다.
- `segmentation_mode`는 반드시 `segmented_mp4` 또는 `segmented_ts`여야만 합니다.

### 5. 작업 연결

트랜스코딩 작업과 패키징 작업을 연결합니다. `A 버전(0)`의 트랜스코딩 결과물은 A 버전 DASH/HLS 패키징으로, `B 버전(1)`의 결과물은 B 버전 패키징으로 각각 연결해야 합니다.

위에서 예시로 든 작업을 연결하면 다음과 같습니다.

```json
{
  {
    ...,
    "connections": [
      {
        "from": [
          {
            "element": "source"
          }
        ],
        "to": {
          "success": [
            {
              "element": "transcode_video_wm0_task"
            },
            {
              "element": "transcode_video_wm1_task"
            },
            {
              "element": "transcode_audio_task"
            }
          ]
        }
      },
      {
        "from": [
          {
            "element": "transcode_video_wm0_task"
          },
          {
            "element": "transcode_audio_task"
          }
        ],
        "to": {
          "success": [
            {
              "element": "dash_seg_mp4_wm0"
            },
            {
              "element": "hls_seg_ts_wm0"
            }
          ]
        }
      },
      {
        "from": [
          {
            "element": "transcode_video_wm1_task"
          }
        ],
        "to": {
          "success": [
            {
              "element": "dash_seg_mp4_wm1"
            },
            {
              "element": "hls_seg_ts_wm1"
            }
          ]
        }
      }
    ]
  }
}
```

### 6. 작업 시작 및 결과 확인

위 과정을 통해 설정한 트랜스코딩 및 패키징 작업을 Hybrik 콘솔 또는 API를 통해 실행합니다. 해당 작업의 결과물은 출력 스토리지로 지정한 S3 버킷에서 확인할 수 있습니다.

## 다음 단계

Hybrik 전처리기 연동을 통해 생성된 A/B(0/1) 버전의 DASH 또는 HLS 콘텐츠는 [세션 매니저 API](/ko/content-security/forensic-watermarking/embedding/session-manager/)와 [CDN 연동](/ko/content-security/forensic-watermarking/embedding/cloudfront-embedder/)을 통해 재생 시점에 실시간으로 워터마크를 적용할 수 있습니다. 자세한 사항은 해당 가이드를 참고하시기 바랍니다.