<!-- Canonical URL: https://ask.atlascloud.ai/pt/save-ai-videos-before-download-links-expire -->

# Como salvar vídeos gerados por IA antes que os links temporários expirem?

> Trate URLs do provedor como credenciais de transferência de curta duração, não como localização do ativo. Enfileire o download assim que o job terminar, transmita o arquivo para armazenamento durável, verifique tamanho, tipo e checksum e registre a URI permanente antes de concluir a produção.

<!-- Canonical URL: https://ask.atlascloud.ai/save-ai-videos-before-download-links-expire -->

# Como salvar vídeos gerados por IA antes que os links temporários expirem?

Uma geração concluída não é um ativo durável até que os bytes estejam em armazenamento sob seu controle. Muitas APIs devolvem URL assinada ou temporária para transferência, não reprodução permanente. Guardar apenas essa URL pode fazer um vídeo aprovado desaparecer horas ou dias depois.

Crie uma etapa de ingestão separada que começa na conclusão. Ela reivindica uma tarefa, obtém URL atual, transmite a mídia para objeto temporário, valida e promove para uma chave permanente determinística. Só então o job de produção deve ficar completo.

## Trate a URL como credencial

Uma URL assinada costuma conceder acesso temporário sem outro header de autorização. Por isso é sensível. Não a exponha em análises, logs visíveis, tickets ou campos permanentes sem controle rigoroso.

Guarde:

* ID do job do provedor;
* ID da saída quando disponível;
* horários de emissão e expiração observada;
* registros de tentativas de download;
* chave final de armazenamento;
* metadados de verificação e checksum.

Se houver expiração explícita, programe o primeiro download com margem. Sem duração publicada, assuma que o link é efêmero e enfileire imediatamente.

## Separe geração e ingestão

Conclusão remota e armazenamento durável são estados diferentes.

| Estado | Significado | Próxima ação |
|---|---|---|
| `generating` | Provedor cria o vídeo | Consultar ou esperar webhook |
| `output_ready` | Saída concluída | Enfileirar download |
| `downloading` | Worker possui a tentativa | Transmitir para temporário |
| `verifying` | Bytes chegaram | Inspecionar e calcular checksum |
| `stored` | Objeto durável confirmado | Salvar URI permanente |
| `complete` | Ativo e metadados confirmados | Entregar |
| `download_retry` | Falha transitória | Renovar URL e repetir |
| `needs_attention` | Não recuperável automaticamente | Escalar com evidência |

Não conclua o job em `output_ready`. Esse atalho deixa o banco apontando para links expirados.

## Confirme webhooks antes de baixar

O handler deve validar e persistir o evento, enfileirar a saída e responder rápido. Baixar um vídeo grande no webhook pode provocar timeout e entregas repetidas.

Remova duplicidade por ID de evento ou combinação de job e saída. Use uma chave idempotente:

```text
download_key = provider + provider_job_id + output_id
```

Webhooks repetidos convergem em uma tarefa. Consultas e webhooks podem chamar a mesma operação `ensure_download_task`.

## Transmita para um objeto temporário

Evite ler tudo na memória. Transmita blocos para arquivo temporário ou upload multipart enquanto calcula checksum criptográfico.

1. Reivindique a tarefa com lease que expire.
2. Obtenha URL nova se a API permitir.
3. Use limites de conexão e leitura.
4. Rejeite redirecionamentos inesperados.
5. Transmita contando bytes e calculando SHA-256.
6. Finalize o objeto temporário.
7. Valide a mídia.
8. Promova ou copie para a chave final.
9. Confirme URI e metadados.

Use contrapressão e limite concorrência por banda, tamanho e capacidade de armazenamento, não apenas por quantidade de jobs.

## Valide bytes, não apenas headers

Um HTTP `200` pode conter HTML, JSON ou arquivo truncado. `Content-Type: video/mp4` ajuda, mas não prova.

| Validação | Falha detectada |
|---|---|
| Contagem maior que zero | Resposta vazia |
| Comprimento plausível | Transferência truncada |
| Assinatura do arquivo | HTML ou JSON salvo como vídeo |
| Análise do contêiner | Estrutura corrompida |
| Duração maior que zero | Vídeo incompleto |
| Dimensões e codec | Saída fora do contrato |
| SHA-256 | Bytes alterados ou repetidos |
| Amostra de decodificação | Mídia que analisa mas não toca |

Guarde os metadados observados e compare com duração e resolução solicitadas usando tolerâncias apropriadas. Não rejeite um vídeo válido por poucos frames salvo exigência contratual.

## Use chaves duráveis determinísticas

Uma chave previsível torna repetições idempotentes e ativos rastreáveis.

```text
videos/{account}/{operation_id}/{attempt_id}/{output_id}-{sha256_prefix}.mp4
```

Escreva primeiro em namespace temporário. Após validar, promova o objeto ou confirme um ponteiro para a chave verificada. Se outro worker já salvou o mesmo checksum, reutilize-o.

Não use nomes fornecidos por usuários em caminhos sem sanitização. Preserve o nome original como metadado.

## Recupere-se de expiração e interrupção

Classifique erros para repetir com propósito.

* Reset de conexão e erro temporário de armazenamento geralmente permitem repetição.
* Autorização ou expiração pode exigir URL nova.
* Não encontrado pode indicar remoção pelo provedor.
* Falhas repetidas de checksum devem interromper automação.
* Quota ou permissão local exige ação operacional.

Preserve o ID remoto. Muitas APIs emitem URL nova para job concluído. Verifique o comportamento atual.

Retome download parcial somente se origem e destino suportarem intervalos verificados e a identidade não mudar. Caso contrário, reinicie em novo objeto temporário.

## Escolha uma repetição que respeite a expiração

Espera exponencial pode ultrapassar a vida da URL. Limite-a:

```text
next_delay = min(exponential_backoff, time_until_expiry - safety_margin)
```

Se estiver perto do vencimento, renove antes de repetir. Adicione jitter para evitar reconexão simultânea. Limite separadamente transferências e renovações.

## Proteja o caminho de armazenamento

Use buckets privados, criptografia quando apropriada, credenciais mínimas e URLs curtas para visualização.

Não copie a query da URL para metadados, pois pode conter assinatura. Remova-a dos logs ou guarde apenas host, hash do caminho, emissão e expiração.

Aplique análise de malware ou moderação quando necessário. Mantenha limites entre tenants em chaves e autorização, sem depender apenas do nome do caminho.

## Defina retenção e derivados

Durável não significa permanente.

| Classe de ativo | Consideração |
|---|---|
| Master aprovado | Contrato e custo de regeneração |
| Derivado de entrega | Pode ser recriado do master |
| Geração rejeitada | Janela curta de auditoria |
| Upload temporário | Exclusão após verificação |
| Proxy de revisão | Manter até aprovação |

Registre estado e motivo de exclusão. Para reprodutibilidade, preserve prompt, hashes, modelo, parâmetros e direitos, reconhecendo que geração não determinística pode não reproduzir os mesmos bytes.

## Monitore o tempo até a durabilidade

Meça o intervalo entre conclusão do provedor e armazenamento verificado. É a janela em que o link pode ser a única cópia.

Monitore:

* saídas aguardando download;
* idade da saída pronta mais antiga;
* percentis de conclusão até armazenamento;
* respostas de URL expirada;
* repetições e renovações;
* falhas de checksum;
* bytes baixados e armazenados;
* jobs completos sem URI durável.

A última métrica deve ser zero. Alerte antes de a fila se aproximar da menor vida observada de uma URL.

## Esclareça responsabilidades de modelo e armazenamento

[Atlas Cloud](https://www.atlascloud.ai/?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=save-ai-videos-before-download-links-expire) pode oferecer uma plataforma compatível com OpenAI para modelos de texto, imagem e vídeo. Uma plataforma unificada simplifica metadados e cobrança, mas a aplicação continua responsável por copiar saídas para armazenamento conforme seus requisitos.

Verifique o comportamento exato do endpoint. Não invente prazo de expiração nem suponha mecanismo igual em todos os modelos. Trate diferenças por configuração e checagens de capacidade.

## Conclusão

Salve vídeos tratando URLs temporárias como credenciais de transferência. Enfileire o download na conclusão, transmita para objeto temporário, valide a mídia e promova a uma chave durável. Registre URI permanente e checksum antes de concluir o job e projete renovação, repetição, retenção e monitoramento para que o link possa expirar sem levar a única cópia.

## FAQ

### Posso guardar a URL de download do provedor como localização final?

Não. URLs assinadas ou temporárias podem expirar, ser revogadas ou mudar. Guarde a chave durável e o ID do job e solicite uma nova URL quando necessário.

### O worker deve carregar o vídeo inteiro na memória?

Normalmente não. Transmita a resposta para arquivo temporário ou upload multipart enquanto calcula o checksum, evitando esgotar memória com arquivos grandes.

### O que deve ser verificado antes de marcar o vídeo como salvo?

Verifique resposta HTTP, comprimento quando disponível, assinatura do arquivo, contêiner esperado, duração maior que zero, dimensões ou codec, checksum e gravação durável.

### O que fazer se a URL expirar durante o download?

Preserve o job e o ID remoto, descarte ou isole o objeto incompleto, solicite nova URL se possível e retome ou reinicie conforme o suporte confirmado a intervalos.

### Por quanto tempo os vídeos originais devem ser mantidos?

Defina retenção conforme necessidades do cliente, requisitos legais e de privacidade, custo de regeneração e orçamento de armazenamento. Use políticas de ciclo de vida.

### Um webhook pode baixar o vídeo diretamente?

O handler deve confirmar rapidamente e enfileirar o download. Um worker separado pode repetir com segurança, verificar o ativo e evitar perda de eventos por transferências longas.
