diff --git a/Makefile b/Makefile index a1155b2..c975edc 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,30 @@ ZIP_FILE=deployment_package.zip FFMPEG_URL=https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -FFMPEG_DIR=ffmpeg +S3_BUCKET=ffmpeg-package-for-lambda +FFMPEG_S3_KEY=ffmpeg/ffmpeg-release-amd64-static.tar.xz .PHONY: build build: - @echo "Criando diretórios necessários..." - rm -rf package - mkdir -p package/tmp - @echo "Instalando dependências..." - pip install --target ./package -r app/requirements.txt - @echo "Baixando FFmpeg..." - curl -L $(FFMPEG_URL) | tar -xJ -C package/tmp --strip-components 1 - cp package/tmp/ffmpeg package/ - @echo "Compactando pacote de implantação..." - cd package && zip -r9 ../$(ZIP_FILE) . - zip -g $(ZIP_FILE) app/lambda_function.py app/src/**/* - @echo "Pacote de implantação criado: $(ZIP_FILE)" + @echo "Criando diretórios necessários..." + rm -rf package + mkdir -p package/tmp + @echo "Instalando dependências..." + pip install --target ./package -r app/requirements.txt + @echo "Compactando pacote de implantação..." + cd package && zip -r9 ../$(ZIP_FILE) . + zip -g $(ZIP_FILE) app/lambda_function.py app/src/**/* + @echo "Pacote de implantação criado: $(ZIP_FILE)" + +.PHONY: upload-ffmpeg +upload-ffmpeg: + @echo "Baixando FFmpeg..." + curl -L $(FFMPEG_URL) -o ffmpeg-release-amd64-static.tar.xz + @echo "Enviando FFmpeg para o S3..." + aws s3 cp ffmpeg-release-amd64-static.tar.xz s3://$(S3_BUCKET)/$(FFMPEG_S3_KEY) + @echo "FFmpeg enviado para o S3: s3://$(S3_BUCKET)/$(FFMPEG_S3_KEY)" .PHONY: clean clean: - @echo "Limpando arquivos temporários..." - rm -rf package $(ZIP_FILE) - @echo "Limpeza concluída." + @echo "Limpando arquivos temporários..." + rm -rf package $(ZIP_FILE) ffmpeg-release-amd64-static.tar.xz + @echo "Limpeza concluída." \ No newline at end of file diff --git a/app/src/service/ffmpeg_extract_frames.py b/app/src/service/ffmpeg_extract_frames.py index 8a406e5..a455f7c 100644 --- a/app/src/service/ffmpeg_extract_frames.py +++ b/app/src/service/ffmpeg_extract_frames.py @@ -1,7 +1,21 @@ import os import subprocess +import boto3 from src.config.config import logger +s3 = boto3.client('s3') +S3_BUCKET = 'ffmpeg-package-for-lambda' +FFMPEG_S3_KEY = 'ffmpeg/ffmpeg-release-amd64-static.tar.xz' +FFMPEG_LOCAL_PATH = '/tmp/ffmpeg-release-amd64-static.tar.xz' +FFMPEG_BIN_PATH = '/tmp/ffmpeg' + +def download_ffmpeg(): + logger.info(f"Baixando FFmpeg do S3: s3://{S3_BUCKET}/{FFMPEG_S3_KEY}") + s3.download_file(S3_BUCKET, FFMPEG_S3_KEY, FFMPEG_LOCAL_PATH) + logger.info("Extraindo FFmpeg...") + subprocess.run(['tar', '-xJf', FFMPEG_LOCAL_PATH, '-C', '/tmp', '--strip-components', '1'], check=True) + logger.info("FFmpeg extraído com sucesso.") + def extract_frames_with_ffmpeg(video_path, output_dir): """ Extrai frames de um vídeo usando FFmpeg. @@ -13,10 +27,8 @@ def extract_frames_with_ffmpeg(video_path, output_dir): """ os.makedirs(output_dir, exist_ok=True) - ffmpeg_path = '/tmp/ffmpeg' # Caminho esperado para o binário do FFmpeg - if not os.path.isfile(ffmpeg_path): - logger.error(f"FFmpeg não encontrado em {ffmpeg_path}. Verifique o download e o caminho.") - raise FileNotFoundError(f"FFmpeg não encontrado no caminho {ffmpeg_path}") + if not os.path.isfile(FFMPEG_BIN_PATH): + download_ffmpeg() if not os.path.isfile(video_path): logger.error(f"O arquivo de vídeo não foi encontrado: {video_path}") @@ -25,7 +37,7 @@ def extract_frames_with_ffmpeg(video_path, output_dir): output_frame_pattern = os.path.join(output_dir, 'frame_%04d.jpg') command = [ - ffmpeg_path, # Caminho do executável FFmpeg + FFMPEG_BIN_PATH, # Caminho do executável FFmpeg '-i', video_path, # Caminho do vídeo de entrada '-vf', 'fps=1', # Extrair 1 frame por segundo output_frame_pattern # Padrão para salvar os frames @@ -40,4 +52,4 @@ def extract_frames_with_ffmpeg(video_path, output_dir): logger.error(f"Erro ao executar FFmpeg: {e.stderr}") raise e - return output_dir + return output_dir \ No newline at end of file