Ferramenta serverless para conversão de vídeos usando FFmpeg em uma função AWS Lambda (container image), com fila SQS de orquestração e bucket S3 de armazenamento.
src/
– código-fonte da Lambdatest_lambda.py
– teste local da funçãodocker-compose.yml
– definindo serviço Lambda container local.github/workflows/terraform.yml
– pipeline IaC (Terraform).github/workflows/deploy.yml
– pipeline de build e deploy da imagem
- Consumir mensagens de uma fila SQS contendo parâmetros de conversão
- Baixar vídeo de entrada de um bucket S3 (via URL)
- Converter vídeo para
output_format
eresolution
usando FFmpeg - Enviar o arquivo convertido de volta ao S3
O Lambda suporta conversão para os seguintes formatos de saída (extensões):
- MP4 (
.mp4
) - MKV (
.mkv
) - AVI (
.avi
) - MOV (
.mov
) - WEBM (
.webm
)
A seguir um exemplo de como enviar a mensagem para a fila SQS usando Laravel e o SDK da AWS:
use Aws\Sqs\SqsClient;
// Cria o cliente SQS
$client = new SqsClient([
'region' => env('AWS_REGION', 'us-east-1'),
'version' => 'latest',
'credentials' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
],
]);
// Define o payload
$payload = [
's3_input_url' => 'https://lambda-python-ffmpeg.s3.us-east-1.amazonaws.com/sample.mp4',
'output_key' => 'converted/sample_converted.mkv',
'output_format' => 'mkv',
'resolution' => '640x360',
];
// Envia a mensagem para a fila
$client->sendMessage([
'QueueUrl' => env('SQS_QUEUE_URL'),
'MessageBody' => json_encode($payload),
]);
Você também pode usar o Facade de Queue do Laravel se estiver configurando o driver SQS:
use Illuminate\Support\Facades\Queue;
Queue::connection('sqs')->pushRaw(
json_encode($payload),
env('SQS_QUEUE_NAME', 'lambda-python-ffmpeg-queue')
);
- Suba o container Lambda com Docker Compose:
docker compose up -d
- Execute o teste dentro do container:
docker-compose run --rm --entrypoint python lambda-test test_lambda.py
- Verifique saída e logs no console.
A action Deploy Lambda
em .github/workflows/deploy.yml
faz build da imagem, push para ECR e atualiza a Lambda. Utilize a trigger manual (workflow_dispatch
) definindo a versão (ex: 0.1
).
Toda a infra (S3, SQS, ECR, IAM e Lambda) é provisionada via Terraform.
Para detalhes de setup e uso, consulte:
- Abra uma Issue para discutir mudanças.
- Fork do repositório e crie sua branch (
git checkout -b feature/xyz
). - Faça commits claros e envie um Pull Request.
MIT License