

# 멀티샷 비디오 생성 코드 예제
<a name="video-gen-code-examples2"></a>

다음 예제에서는 다양한 멀티샷(6초 이상) 비디오 생성 태스크의 샘플 코드를 제공합니다.

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

이 예제에서는 비디오의 모든 샷이 단일 프롬프트에서 생성되며 입력 이미지가 제공되지 않습니다.

```
import json
import os

import boto3
from dotenv import load_dotenv

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")

# Configure Nova Reel model inputs.
model_input = {
    "taskType": "MULTI_SHOT_AUTOMATED",
    "multiShotAutomatedParams": {
        "text": "Cinematic documentary showcasing the stunning beauty of the natural world. Drone footage flying over fantastical and varied natural wonders."
    },
    "videoGenerationConfig": {
        "seed": 1234,
        "durationSeconds": 18,  # Must be a multiple of 6 in range [12, 120]
        "fps": 24,  # Must be 24
        "dimension": "1280x720",  # Must be "1280x720"
    },
}

try:
    # Start the asynchronous video generation job.
    invocation = bedrock_runtime.start_async_invoke(
        modelId="amazon.nova-reel-v1:1",
        modelInput=model_input,
        outputDataConfig={"s3OutputDataConfig": {"s3Uri": "s3://your-s3-bucket"}},
    )

    # Print the response JSON.
    print(json.dumps(invocation, indent=2, default=str))

except Exception as err:
    print("Exception:")
    if hasattr(err, "response"):
        # Pretty print the response JSON.
        print(json.dumps(err.response, indent=2, default=str))
    else:
        print(err)
```

------
#### [ Manual video generation - Amazon S3 input image ]

이 예제에서는 2개의 샷 비디오가 생성됩니다. 각 샷은 Amazon S3 로케이션에 제공되는 별도의 프롬프트와 입력 이미지로 생성됩니다.

```
import json
import os

import boto3
from dotenv import load_dotenv

# === Helper Function ===


def image_to_base64(image_path: str):
    """
    Convert an image file to a base64 encoded string.
    """
    import base64

    with open(image_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())
        return encoded_string.decode("utf-8")


# === Main Code ===

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")

# Configure Nova Reel model inputs. This example includes three shots, two of
# which include images to use as starting frames. These images are stored in S3.
model_input = {
    "taskType": "MULTI_SHOT_MANUAL",
    "multiShotManualParams": {
        "shots": [
            {"text": "aerial view of a city with tall glass and metal skyscrapers"},
            {
                "text": "closeup of a vehicle wheel in motion as the pavement speeds by with motion blur",
                "image": {
                    "format": "png",  # Must be "png" or "jpeg"
                    "source": {
                        "s3Location": {
                            "uri": "s3://your-s3-bucket/images/SUV-wheel-closeup.png"
                        }
                    },
                },
            },
            {
                "text": "tracking shot, the vehicle drives through the city, trees and buildings line the street",
                "image": {
                    "format": "png",  # Must be "png" or "jpeg"
                    "source": {
                        "s3Location": {
                            "uri": "s3://your-s3-bucket/images/SUV-downtown-back.png"
                        }
                    },
                },
            },
        ]
    },
    "videoGenerationConfig": {
        "seed": 1234,
        "fps": 24,  # Must be 24
        "dimension": "1280x720",  # Must be "1280x720"
    },
}

try:
    # Start the asynchronous video generation job.
    invocation = bedrock_runtime.start_async_invoke(
        modelId="amazon.nova-reel-v1:1",
        modelInput=model_input,
        outputDataConfig={"s3OutputDataConfig": {"s3Uri": "s3://your-s3-bucket"}},
    )

    # Print the response JSON.
    print(json.dumps(invocation, indent=2, default=str))

except Exception as err:
    print("Exception:")
    if hasattr(err, "response"):
        # Pretty print the response JSON.
        print(json.dumps(err.response, indent=2, default=str))
    else:
        print(err)
```

------
#### [ Manual video generation - base64 input image ]

이 예제에서는 3개의 샷 비디오가 생성됩니다. 첫 번째 샷은 프롬프트만으로 생성되며, 다음 두 샷은 각각 새 프롬프트 및 입력 이미지로 생성됩니다.

```
import json
import os

import boto3
from dotenv import load_dotenv

# === Helper Function ===


def image_to_base64(image_path: str):
    """
    Convert an image file to a base64 encoded string.
    """
    import base64

    with open(image_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())
        return encoded_string.decode("utf-8")


# === Main Code ===

# Create the Bedrock Runtime client.
bedrock_runtime = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")

# Configure Nova Reel model inputs. This example includes three shots, two of
# which include images to use as starting frames.
model_input = {
    "taskType": "MULTI_SHOT_MANUAL",
    "multiShotManualParams": {
        "shots": [
            {
                "text": "Drone footage of a Pacific Northwest forest with a meandering stream seen from a high altitude, top-down view"
            },
            {
                "text": "camera arcs slowly around two SUV vehicles in a forest setting with a stream in the background",
                "image": {
                    "format": "png",  # Must be "png" or "jpeg"
                    "source": {"bytes": image_to_base64("images/SUV-roadside.png")},
                },
            },
            {
                "text": "tracking shot, a SUV vehicle drives toward the camera through a forest roadway, the SUV's ring-shaped headlights glow white",
                "image": {
                    "format": "png",  # Must be "png" or "jpeg"
                    "source": {"bytes": image_to_base64("images/SUV-forest-front.png")},
                },
            },
        ]
    },
    "videoGenerationConfig": {
        "seed": 1234,
        "fps": 24,  # Must be 24
        "dimension": "1280x720",  # Must be "1280x720"
    },
}

try:
    # Start the asynchronous video generation job.
    invocation = bedrock_runtime.start_async_invoke(
        modelId="amazon.nova-reel-v1:1",
        modelInput=model_input,
        outputDataConfig={"s3OutputDataConfig": {"s3Uri": "s3://your-s3-bucket"}},
    )

    # Print the response JSON.
    print(json.dumps(invocation, indent=2, default=str))

except Exception as err:
    print("Exception:")
    if hasattr(err, "response"):
        # Pretty print the response JSON.
        print(json.dumps(err.response, indent=2, default=str))
    else:
        print(err)
```

------