

# Acesso e uso da geração de vídeos
<a name="video-gen-access"></a>

Gerar um vídeo com o Amazon Nova Reel é um processo assíncrono que normalmente leva cerca de 90 segundos para um vídeo de 6 segundos e aproximadamente de 14 a 17 minutos para um vídeo de dois minutos. Depois de iniciar a geração de um vídeo, ele é gravado em um bucket do Amazon S3 na conta. Como o Amazon Bedrock grava um arquivo em um bucket do Amazon S3 em seu nome, o perfil da AWS que você usa precisa ter os consentimentos configurados para permitir as ações apropriadas do Amazon Bedrock e do Amazon S3 e a ação `s3:PutObject`. As permissões mínimas das ações necessárias para gerar um vídeo são:
+ `bedrock:InvokeModel`
+ `s3:PutObject`

No entanto, recomendamos as seguintes ações adicionais para que você possa acompanhar o status dos trabalhos de geração de vídeos:
+ `bedrock:GetAsyncInvoke`
+ `bedrock:ListAsyncInvokes`

Quando a geração do vídeo é concluída, o vídeo e as capturas que o integram são armazenados no bucket do Amazon S3 que você especificou. O Amazon Nova cria uma pasta para cada ID de invocação. Essa pasta contém os arquivos manifest.json, output.mp4 e generation-status.json criados pela solicitação da geração do vídeo. 

**Topics**
+ [Iniciar um trabalho de geração de vídeo](#video-gen-start-a-job)
+ [Parâmetros de entrada de geração de vídeo](#video-gen-input-params)
+ [Verificar o progresso dos trabalhos de geração de vídeo](#video-gen-check-progress)
+ [Acessar os resultados de um trabalho de geração de vídeo](#video-gen-read-results)

## Iniciar um trabalho de geração de vídeo
<a name="video-gen-start-a-job"></a>

Para iniciar a geração de um vídeo, chame `start_async_invoke()`. Isso cria um novo trabalho de invocação. Quando o trabalho é concluído, o Amazon Nova salva automaticamente o vídeo gerado em um bucket do Amazon S3 que você especificar.

`start_async_invoke()` usa os seguintes argumentos:
+ **modelId** (obrigatório): o ID do modelo a ser usado. Para o Amazon Nova Reel, é o “amazon.nova-reel-v1:1”.
+ **modelInput** (obrigatório): define todos os parâmetros de geração de vídeo específicos do modelo Amazon Nova Reel. Para obter mais informações, consulte [Parâmetros de entrada de geração de vídeo](#video-gen-input-params).
+ **outputDataConfig** (obrigatório): define onde o vídeo gerado deve ser salvo. O valor deve ter a seguinte estrutura:

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

## Parâmetros de entrada de geração de vídeo
<a name="video-gen-input-params"></a>

Consulte as descrições dos parâmetros a seguir para obter informações sobre como gerar vídeos usando o Amazon Nova Reel.

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

A seguinte estrutura define um trabalho de geração de vídeo para o 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}}
    }
}
```

Estes parâmetros de entrada são necessários para criar o trabalho de geração de vídeo:
+ **text** (obrigatório): um prompt de texto para gerar o vídeo. Deve ter de 1 a 512 caracteres.
+ **images** (opcional): uma única imagem JPEG ou PNG usada como quadro-chave inicial do vídeo de saída. Essa imagem de entrada é usada junto com o prompt de texto para gerar o vídeo. A imagem deve ser formatada como uma string Base64 ou armazenada em um bucket do Amazon S3.

  As imagens podem estar no formato PNG ou JPEG e devem ter 8 bits por canal de cor (RGB). As imagens PNG podem conter um canal alfa adicional, mas esse canal não deve conter pixels transparentes ou translúcidos. Atualmente, o modelo aceita somente imagens de 1280 (largura) x 720 (altura).

  As imagens incluídas por meio de um bucket do Amazon S3 não podem exceder 25 MB.
+ **durationSeconds** (obrigatório): duração do vídeo de saída. 6 é o único valor compatível atualmente.
+ **fps** (obrigatório): taxa de quadros do vídeo de saída. 24 é o único valor compatível atualmente.
+ **dimension** (obrigatório): largura e altura do vídeo de saída. “1280 x 720” é o único valor compatível atualmente.
+ **seed** (opcional): determina a configuração inicial de ruído para o processo de geração. Alterar o valor da semente enquanto mantém todos os outros parâmetros iguais produzirá um vídeo totalmente novo que ainda segue o seu prompt, as dimensões e outras configurações. É comum experimentar uma variedade de valores de semente para encontrar a imagem perfeita.

  O valor da semente deve estar entre 0 e 2.147.483.646, e o valor padrão é 42.

**Esquema imageSource**  
Ao usar uma imagem como entrada, use a seguinte estrutura para incluir a imagem na sua solicitação:

```
{
    "format": "png" | "jpeg"
    "source": {
        "bytes": {{string (base64 encoded image)}}
    }
}
```
+ **format** (obrigatório): deve corresponder ao formato da imagem de entrada. Pode ser “png” ou “jpeg”.
+ **source** (obrigatório)
  + **bytes** (obrigatório): a imagem de entrada codificada como uma string Base64. A imagem deve ter uma resolução de 1280 x 720.

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

Você pode gerar vídeos de até dois minutos de duração, em incrementos de seis segundos, com apenas um prompt de texto usando a tarefa `MULTI_SHOT_AUTOMATED`. Você pode fornecer um prompt de texto de até 4 mil caracteres, mas não pode fornecer uma imagem de entrada.

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

Estes parâmetros de entrada são necessários para criar o trabalho de geração de vídeo:
+ **text** (obrigatório): um prompt de texto para gerar o vídeo. Deve ter entre 1 a 4.000 caracteres.
+ **durationSeconds** (obrigatório): duração do vídeo de saída. Um múltiplo de 6 entre 12 e 120, inclusive.
+ **fps** (obrigatório): taxa de quadros do vídeo de saída. 24 é o único valor compatível atualmente.
+ **dimension** (obrigatório): largura e altura do vídeo de saída. “1280 x 720” é o único valor compatível atualmente.
+ **seed** (opcional): determina a configuração inicial de ruído para o processo de geração. Alterar o valor da semente e deixar todos os outros parâmetros iguais produzirá uma imagem totalmente nova que ainda segue suas instruções, dimensões e outras configurações. É comum experimentar uma variedade de valores de semente para encontrar a imagem perfeita.

  O valor da semente deve estar entre 0 e 2.147.483.646, e o valor padrão é 42.

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

Você pode usar a tarefa `MULTI_SHOT_MANUAL` para gerar vídeos de até dois minutos com vários prompts de texto e imagem de entrada. Para cada captura de seis segundos no vídeo, você pode fornecer um prompt de texto com uma imagem de entrada opcional. A duração do vídeo é determinada com base no número de capturas que você especifica.

```
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}}
    }
}
```

Estes parâmetros de entrada são necessários para criar o trabalho de geração de vídeo:
+ **shots** (obrigatório): contém informações sobre os prompts de texto e as imagens de entrada que são usadas para a geração do vídeo.
+ **text** (obrigatório): um prompt de texto para gerar o vídeo. Deve ter de 1 a 512 caracteres.
+ **image** (opcional): contém informações sobre a imagem de entrada usada para essa captura. A imagem pode ser fornecida como uma string Base64 no campo `bytes` ou como um URI do Amazon S3 no campo `s3Location`.

  As imagens podem estar no formato PNG ou JPEG e devem ter 8 bits por canal de cor (RGB). As imagens PNG podem conter um canal alfa adicional, mas esse canal não deve conter pixels transparentes ou translúcidos. Atualmente, o modelo aceita somente imagens de 1280 (largura) x 720 (altura).

  As imagens incluídas por meio de um bucket do Amazon S3 não podem exceder 25 MB.
+ **fps** (obrigatório): taxa de quadros do vídeo de saída. 24 é o único valor compatível atualmente.
+ **dimension** (obrigatório): largura e altura do vídeo de saída. “1280 x 720” é o único valor compatível atualmente.
+ **seed** (opcional): determina a configuração inicial de ruído para o processo de geração. Alterar o valor da semente e deixar todos os outros parâmetros iguais produzirá uma imagem totalmente nova que ainda segue suas instruções, dimensões e outras configurações. É comum experimentar uma variedade de valores de semente para encontrar a imagem perfeita.

  O valor da semente deve estar entre 0 e 2.147.483.646, e o valor padrão é 42.

------

O processo de geração de vídeo resultará na gravação dos seguintes arquivos no destino do Amazon S3 que você especificar:
+ **manifest.json**: um arquivo gravado no início do trabalho, contendo o ID da solicitação.
+ **video-generation-status.json**: este arquivo é gravado independentemente de o trabalho ser bem-sucedido ou falhar. Quando há uma falha no trabalho, ele conterá informações detalhadas explicando exatamente qual parte do trabalho falhou e qual medida tomar para corrigir o erro.
+ **output.mp4**: o vídeo multi-shot completo. Gravado somente se o trabalho for bem-sucedido.
+ **shot\_N.mp4**: cada captura individual também é fornecida como seu próprio vídeo. O nome do arquivo segue o formato “shot\_0001.mp4”, “shot\_0002.mp4” etc. Esses arquivos serão gravados somente se todo o trabalho for bem-sucedido.

## Verificar o progresso dos trabalhos de geração de vídeo
<a name="video-gen-check-progress"></a>

Há duas maneiras de verificar o progresso de um trabalho de geração de vídeo. Se você tiver uma referência ao ARN da invocação que foi retornado ao iniciar a invocação, você pode usar o método `get_async_invoke()` do Amazon Bedrock Runtime.

```
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}")
```

O status de um trabalho será “Completed”, “InProgress” ou “Failed”. Para obter mais detalhes sobre o uso do método `get_async_invoke()`, consulte a documentação da API de invocação assíncrona.

Se você não tiver uma referência ao ARN da invocação, ou se quiser verificar o status de vários trabalhos ao mesmo tempo, poderá usar o método `list_async_invokes()` do Amazon Bedrock Runtime.

```
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))
```

Para obter mais detalhes sobre o uso do método `list_async_invokes()`, consulte a documentação da API de invocação assíncrona.

## Acessar os resultados de um trabalho de geração de vídeo
<a name="video-gen-read-results"></a>

Após um trabalho de geração de vídeo ser bem-sucedido ou falhar, um arquivo JSON será adicionado ao bucket do Amazon S3. Esse arquivo conterá os metadados sobre as capturas que foram criadas para o vídeo. O arquivo se chama `video-generation-status.json`.

Para uma solicitação de geração de vídeo bem-sucedida, o arquivo contém a localização de cada captura individual que compõe o vídeo completo. Para uma solicitação com falha, o arquivo contém a mensagem de falha e detalhes adicionais sobre o motivo da falha na captura.

O esquema desse arquivo JSON é fornecido abaixo.

```
{
    "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**: a versão do esquema JSON.
+ **shots**: fornece informações sobre cada captura no vídeo.
  + **status**: o estado de conclusão (SUCCESS ou FAILURE) da captura.
  + **location**: o nome do arquivo e o local do Amazon S3 em que a captura é armazenada. O local estará disponível apenas quando todas as capturas forem geradas com sucesso e o vídeo completo for carregado em seu local no Amazon S3. 
  + **failureType**: fornece o motivo da falha.
  + **failureMessage**: fornece mais informações sobre o motivo da falha.
+ **fullVideo**: fornece informações sobre o vídeo completo.
  + **status**: o estado de conclusão (SUCCESS ou FAILURE) do vídeo completo.
  + **location**: o nome do arquivo e o local do Amazon S3 onde o vídeo completo está armazenado.
  + **failureType**: fornece o motivo da falha.
  + **failureMessage**: fornece mais informações sobre o motivo da falha.

Os possíveis motivos e mensagens de falha são:
+ INTERNAL\_SERVER\_EXCEPTION - "Something went wrong on the server side."
+ RAI\_VIOLATION\_OUTPUT\_VIDEO\_DEFLECTION - "The generated content has been blocked by our content filters."
+ RATE\_LIMIT\_EXCEEDED - "Service capacity limit has been reached. Please try again later."
+ ABORTED - "Request has been aborted."