

# 비디오 생성 액세스 및 사용
<a name="video-gen-access"></a>

Amazon Nova Reel을 사용하여 비디오를 생성하는 것은 비동기 프로세스로, 일반적으로 6초 비디오의 경우 약 90초, 2분 비디오의 경우 약 14\$117분이 소요됩니다. 비디오 생성을 시작하면 비디오가 사용자 계정의 Amazon S3 버킷에 작성됩니다. Amazon Bedrock은 사용자를 대신하여 Amazon S3 버킷에 파일을 작성하기 때문에 사용하는 AWS 역할에는 적절한 Amazon Bedrock 및 Amazon S3 작업과 `s3:PutObject` 작업을 허용하도록 구성된 권한이 필요합니다. 다음은 비디오를 생성하는 데 필요한 최소 작업 권한입니다.
+ `bedrock:InvokeModel`
+ `s3:PutObject`

하지만 비디오 생성 작업의 상태를 추적할 수 있도록 다음과 같은 추가 작업이 권장됩니다.
+ `bedrock:GetAsyncInvoke`
+ `bedrock:ListAsyncInvokes`

비디오 생성이 완료되면 비디오와 해당 구성 요소 샷이 지정된 Amazon S3 버킷에 저장됩니다. Amazon Nova는 각 간접 호출 ID에 대한 폴더를 생성합니다. 이 폴더에는 비디오 생성 요청으로 생성된 manifest.json, output.mp4 및 generation-status.json 파일이 있습니다.

**Topics**
+ [비디오 생성 작업 시작](#video-gen-start-a-job)
+ [비디오 생성 입력 파라미터](#video-gen-input-params)
+ [비디오 생성 작업의 진행 상황 확인](#video-gen-check-progress)
+ [비디오 생성 작업의 결과에 액세스](#video-gen-read-results)

## 비디오 생성 작업 시작
<a name="video-gen-start-a-job"></a>

비디오 생성을 시작하려면 `start_async_invoke()`를 직접적으로 호출합니다. 그러면 새 간접 호출 작업이 생성됩니다. 작업이 완료되면 Amazon Nova는 생성된 비디오를 사용자가 지정하는 Amazon S3 버킷에 자동으로 저장합니다.

`start_async_invoke()`는 다음 인수를 사용합니다.
+ **modelId**(필수) - 사용할 모델 ID입니다. Amazon Nova Reel의 경우 ‘amazon.nova-reel-v1:1’입니다.
+ **modelInput**(필수) - Amazon Nova Reel 모델에 특정한 모든 비디오 생성 파라미터를 정의합니다. 자세한 내용은 [비디오 생성 입력 파라미터](#video-gen-input-params) 섹션을 참조하세요.
+ **outputDataConfig**(필수) - 생성된 비디오를 저장할 위치를 정의합니다. 값의 구조는 다음과 같아야 합니다.

  ```
  {
      "s3OutputDataConfig": {
          "s3Uri": string (S3 URL starting with "s3://")
      }
  }
  ```

## 비디오 생성 입력 파라미터
<a name="video-gen-input-params"></a>

Amazon Nova Reel을 사용하여 비디오를 생성하는 방법에 대한 자세한 내용은 다음 파라미터 설명을 참조하세요.

------
#### [ Text-to-video generation ]

다음 구조는 Amazon Nova Reel에 대한 비디오 생성 작업을 정의합니다.

```
{
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {
        "text": string,
        "images": ImageSource[] (list containing a single ImageSource)
    },
    "videoGenerationConfig": {
        "durationSeconds": int,
        "fps": int,
        "dimension": string, 
        "seed": int
    }
}
```

이러한 입력 파라미터는 비디오 생성 작업을 생성하는 데 필요합니다.
+ **text**(필수) - 비디오를 생성하기 위한 텍스트 프롬프트입니다. 1\$1512자 길이여야 합니다.
+ **images**(선택 사항) - 출력 비디오의 시작 키프레임으로 사용되는 단일 JPEG 또는 PNG 이미지입니다. 이 입력 이미지는 텍스트 프롬프트와 함께 비디오를 생성하는 데 사용됩니다. 이미지는 base64 문자열 형식이거나 Amazon S3 버킷에 저장되어야 합니다.

  이미지는 PNG 또는 JPEG 형식이어야 하며 색상 채널당 8비트(RGB)여야 합니다. PNG 이미지에는 추가 알파 채널이 포함될 수 있지만 해당 채널에 투명 또는 반투명 픽셀이 포함되지 않아야 합니다. 현재 모델은 1280(너비) x 720(높이)의 이미지만 허용합니다.

  Amazon S3 버킷을 통해 포함된 이미지는 25MB를 초과할 수 없습니다.
+ **durationSeconds**(필수) - 출력 비디오의 기간입니다. 현재 지원되는 값은 6뿐입니다.
+ **fps**(필수) - 출력 비디오의 프레임 속도입니다. 현재 지원되는 값은 24뿐입니다.
+ **dimension**(필수) - 출력 비디오의 너비 및 높이입니다. ‘1280x720’이 현재 지원되는 유일한 값입니다.
+ **seed**(선택 사항) - 생성 프로세스의 초기 노이즈 설정을 결정합니다. 다른 모든 파라미터를 동일하게 유지하면서 시드 값을 변경하면 프롬프트, 치수 및 기타 설정을 여전히 준수하는 완전히 새로운 비디오가 생성됩니다. 완벽한 이미지를 찾기 위해 다양한 시드 값으로 실험하는 것이 일반적입니다.

  시드 값은 0\$12,147,483,646이어야 하며 기본값은 42입니다.

**imageSource 스키마**  
이미지를 입력으로 사용하는 경우 다음 구조를 사용하여 요청에 이미지를 포함합니다.

```
{
    "format": "png" | "jpeg"
    "source": {
        "bytes": string (base64 encoded image)
    }
}
```
+ **format**(필수) - 입력 이미지의 형식과 일치해야 합니다. ‘png’ 또는 ‘jpeg’입니다.
+ **source**(필수)
  + **bytes**(필수) - base64 문자열로 인코딩된 입력 이미지입니다. 이미지의 해상도는 1280 x 720이어야 합니다.

------
#### [ Automated long video generation ]

`MULTI_SHOT_AUTOMATED` 태스크를 사용하여 텍스트 프롬프트만 사용하여 최대 2분 길이의 비디오를 6초 단위로 생성할 수 있습니다. 최대 4,000자의 텍스트 프롬프트를 제공할 수 있지만 입력 이미지는 제공할 수 없습니다.

```
{
    "taskType": "MULTI_SHOT_AUTOMATED",
    "multiShotAutomatedParams": {
        "text": string,
    },
    "videoGenerationConfig": {
        "durationSeconds": int,
        "fps": int,
        "dimension": string, 
        "seed": int
    }
}
```

이러한 입력 파라미터는 비디오 생성 작업을 생성하는 데 필요합니다.
+ **text**(필수) - 비디오를 생성하기 위한 텍스트 프롬프트입니다. 1\$14,000자 길이여야 합니다.
+ **durationSeconds**(필수) - 출력 비디오의 길이입니다. 6의 배수(12\$1120)입니다.
+ **fps**(필수) - 출력 비디오의 프레임 속도입니다. 현재 지원되는 값은 24뿐입니다.
+ **dimension**(필수) - 출력 비디오의 너비 및 높이입니다. ‘1280x720’이 현재 지원되는 유일한 값입니다.
+ **seed**(선택 사항) - 생성 프로세스의 초기 노이즈 설정을 결정합니다. 다른 모든 파라미터를 동일하게 유지하면서 시드 값을 변경하면 프롬프트, 치수 및 기타 설정을 여전히 준수하는 완전히 새로운 이미지가 생성됩니다. 완벽한 이미지를 찾기 위해 다양한 시드 값으로 실험하는 것이 일반적입니다.

  시드 값은 0\$12, 147, 483, 646 사이여야 하며 기본값은 42입니다.

------
#### [ Manual long video generation ]

`MULTI_SHOT_MANUAL` 태스크를 사용하여 여러 텍스트 프롬프트와 입력 이미지로 최대 2분 길이의 비디오를 생성할 수 있습니다. 비디오의 6초 샷에 대해 선택적 입력 이미지와 함께 텍스트 프롬프트를 제공할 수 있습니다. 비디오 길이는 지정하는 샷 수에 따라 결정됩니다.

```
model_input = {
  "taskType": "MULTI_SHOT_MANUAL",
  "multiShotManualParams": {
    "shots": [
      {
        "text": "Information for shot 1"
      },
      {
        "text": "Information for shot 2",
        "image": {
          "format": "png", # Must be "png" or "jpeg"
          "source": {
            "bytes": "<base64 image string>"
          },
        },
      },
      {
        "text": "Information for shot 3",
        "image": {
            "format": "png",  # Must be "png" or "jpeg"
            "source": {
                "s3Location": {
                    "uri": "<S3 URI string>",
                    "bucketOwner": "<S3 bucket owner string>" # Optional
                }
            }
        }
      },
    ]
  },
  "videoGenerationConfig": {
        "fps": int,
        "dimension": string, 
        "seed": int
    }
}
```

이러한 입력 파라미터는 비디오 생성 작업을 생성하는 데 필요합니다.
+ **shots**(필수) - 비디오 생성에 사용되는 텍스트 프롬프트와 입력 이미지에 대한 정보를 포함합니다.
+ **text**(필수) - 비디오를 생성하기 위한 텍스트 프롬프트입니다. 1\$1512자 길이여야 합니다.
+ **image**(선택 사항) -이 샷에 사용되는 입력 이미지에 대한 정보를 포함합니다. 이미지는 `bytes` 필드에 base64 문자열로 제공되거나 `s3Location` 필드에 Amazon S3 URI로 제공될 수 있습니다.

  이미지는 PNG 또는 JPEG 형식이어야 하며 색상 채널당 8비트(RGB)여야 합니다. PNG 이미지에는 추가 알파 채널이 포함될 수 있지만 해당 채널에 투명 또는 반투명 픽셀이 포함되지 않아야 합니다. 현재 모델은 1280(너비) x 720(높이)의 이미지만 허용합니다.

  Amazon S3 버킷을 통해 포함된 이미지는 25MB를 초과할 수 없습니다.
+ **fps**(필수) - 출력 비디오의 프레임 속도입니다. 현재 지원되는 값은 24뿐입니다.
+ **dimension**(필수) - 출력 비디오의 너비 및 높이입니다. ‘1280x720’이 현재 지원되는 유일한 값입니다.
+ **seed**(선택 사항) - 생성 프로세스의 초기 노이즈 설정을 결정합니다. 다른 모든 파라미터를 동일하게 유지하면서 시드 값을 변경하면 프롬프트, 치수 및 기타 설정을 여전히 준수하는 완전히 새로운 이미지가 생성됩니다. 완벽한 이미지를 찾기 위해 다양한 시드 값으로 실험하는 것이 일반적입니다.

  시드 값은 0\$12, 147, 483, 646 사이여야 하며 기본값은 42입니다.

------

비디오 생성 프로세스를 수행하면 지정된 Amazon S3 대상에 다음 파일이 작성됩니다.
+ **manifest.json** - 작업 시작 시 작성되는 파일로, 요청 ID를 포함합니다.
+ **video-generation-status.json** - 이 파일은 작업이 성공하든 실패하든 작성됩니다. 작업이 실패하면 작업의 어느 부분이 실패했는지, 오류를 해결하기 위해 어떤 조치를 취해야 하는지에 대한 자세한 정보가 포함됩니다.
+ **output.mp4** - 전체 멀티샷 비디오입니다. 작업이 성공하는 경우에만 작성됩니다.
+ **shot\$1N.mp4** - 각각의 개별 샷도 자체 비디오로도 제공됩니다. 파일 이름은 ‘shot\$10001.mp4’, ‘shot\$10002.mp4’ 등의 형식을 따릅니다. 이러한 파일은 전체 작업이 성공하는 경우에만 작성됩니다.

## 비디오 생성 작업의 진행 상황 확인
<a name="video-gen-check-progress"></a>

비디오 생성 작업의 진행 상황을 확인하는 방법에는 두 가지가 있습니다. 간접 호출을 시작할 때 반환된 간접 호출 ARN에 대한 참조가 있는 경우 Amazon Bedrock 런타임의 `get_async_invoke()` 메서드를 사용할 수 있습니다.

```
response = bedrock_runtime.get_async_invoke(
    invocationArn="arn:AWS:bedrock:us-east-1:account-id:async-invoke/invocation-id"
)

status = response["status"]
print(f"Status: {status}")
```

작업 상태는 ‘완료됨’, ‘진행 중’ 또는 ‘실패’가 됩니다. `get_async_invoke()` 메서드 사용에 대한 자세한 내용은 Async Invoke API 설명서를 참조하세요.

간접 호출 ARN에 대한 참조가 없거나 여러 작업의 상태를 한 번에 확인하려는 경우 Amazon Bedrock 런타임의 `list_async_invokes()` 메서드를 사용할 수 있습니다.

```
invocations_details = bedrock_runtime.list_async_invokes(
    maxResults=10,  # (Optional)
    statusEquals="InProgress",  # (Optional) Can be "Completed", "InProgress", or "Failed". Omit this argument to list all jobs, regardless of status.
    # Note: There are other supported arguments not demonstrated here.
)

print(json.dumps(invocations_details, indent=2, default=str))
```

`list_async_invokes()` 메서드 사용에 대한 자세한 내용은 Async Invoke API 설명서를 참조하세요.

## 비디오 생성 작업의 결과에 액세스
<a name="video-gen-read-results"></a>

비디오 생성 작업이 성공하거나 실패한 후 Amazon S3 버킷에 JSON 파일이 추가됩니다. 이 파일에는 비디오용으로 생성된 샷에 대한 메타데이터가 들어 있습니다. 이 파일의 이름은 `video-generation-status.json`입니다.

성공적인 비디오 생성 요청을 위해 파일에는 전체 비디오를 구성하는 각 개별 샷의 위치가 들어 있습니다. 실패한 요청의 경우 파일에 실패 메시지와 샷이 실패한 이유에 대한 추가 세부 정보가 들어 있습니다.

이 JSON 파일의 스키마는 아래와 같습니다.

```
{
    "schemaVersion": string,
    "shots": [{
            "status": enum, // where success is generation + upload
            "location": string,
            "failureType": enum,
            "failureMessage": string,
        },
        ...
    ],
    "fullVideo": {
        "status": enum, // where success is generation + upload
        "location": string,
        "failureType": enum,
        "failureMessage": string,
    }
}
```
+ **schemaVersion** - JSON 스키마의 버전입니다.
+ **shots** - 비디오의 각 샷에 대한 정보를 제공합니다.
  + **status** - 샷의 완료 상태(SUCCESS 또는 FAILURE)입니다.
  + **location** - 샷이 저장되는 파일 이름과 Amazon S3 로케이션입니다. 모든 샷이 성공적으로 생성되고 전체 비디오가 Amazon S3 로케이션에 업로드된 경우에만 해당 로케이션을 사용할 수 있습니다.
  + **failureType** - 실패 이유를 제공합니다.
  + **failureMessage** - 실패 이유에 대한 자세한 정보를 제공합니다.
+ **fullVideo** - 전체 비디오에 대한 정보를 제공합니다.
  + **status** - 전체 비디오의 완료 상태(SUCCESS 또는 FAILURE)입니다.
  + **location** - 전체 비디오가 저장되는 파일 이름과 Amazon S3 로케이션입니다.
  + **failureType** - 실패 이유를 제공합니다.
  + **failureMessage** - 실패 이유에 대한 자세한 정보를 제공합니다.

가능한 실패 이유와 메시지는 다음과 같습니다.
+ INTERNAL\$1SERVER\$1EXCEPTION - ‘서버 측에서 문제가 발생했습니다.’
+ RAI\$1VIOLATION\$1OUTPUT\$1VIDEO\$1DEFLECTION - ‘생성된 콘텐츠가 콘텐츠 필터에 의해 차단되었습니다.’
+ RATE\$1LIMIT\$1EXCEEDED - ‘서비스 용량 한도에 도달했습니다. 나중에 다시 시도하세요.’
+ ABORTED - ‘요청이 중단되었습니다.’