from moviepy.editor import * import whisper import os from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter # Caminho da pasta principal com as subpastas de vídeos e onde os PDFs serão salvos videos_root_folder = "pasta_com_videos" # Pasta principal contendo as subpastas por cidade pdf_root_folder = "pdf" # Pasta principal para salvar os PDFs # Criar a pasta PDF principal, caso não exista if not os.path.exists(pdf_root_folder): os.makedirs(pdf_root_folder) # Carregar o modelo Whisper modelo = whisper.load_model("base") # Configurações da página PDF page_width, page_height = letter margin_left = 50 margin_top = 750 line_spacing = 14 line_length = 90 # Limite de caracteres por linha (ajuste conforme necessário) # Iterar pelas subpastas dentro da pasta principal de vídeos for city_folder in os.listdir(videos_root_folder): city_path = os.path.join(videos_root_folder, city_folder) if os.path.isdir(city_path): # Verificar se é uma pasta (cidade) # Criar a subpasta correspondente na pasta PDF city_pdf_folder = os.path.join(pdf_root_folder, city_folder) if not os.path.exists(city_pdf_folder): os.makedirs(city_pdf_folder) # Contador para nomear os arquivos de transcrição dentro da cidade contador = 1 # Iterar pelos arquivos de vídeo dentro da subpasta da cidade for video_filename in os.listdir(city_path): if video_filename.endswith(('.mp4', '.avi', '.mov')): # Filtrar apenas arquivos de vídeo # Caminho completo do arquivo de vídeo video_path = os.path.join(city_path, video_filename) # Carregar o vídeo video = VideoFileClip(video_path) # Extrair áudio do vídeo e salvar como um arquivo WAV temporário audio_path = "audio_extraido.wav" video.audio.write_audiofile(audio_path, codec='pcm_s16le') # Transcrever o áudio result = modelo.transcribe(audio_path) # Nome do arquivo PDF pdf_filename = f"transcription_{contador}.pdf" pdf_path = os.path.join(city_pdf_folder, pdf_filename) # Criar o PDF e adicionar o texto transcrito c = canvas.Canvas(pdf_path, pagesize=letter) text = result["text"] # Configurar o texto no PDF c.setFont("Helvetica", 12) # Fonte e tamanho c.drawString(margin_left, margin_top, f"Transcrição do vídeo: {video_filename}") # Título # Posição inicial do texto y_position = margin_top - 30 # Adicionar o texto transcrito ao PDF, quebrando em linhas menores for paragraph in text.split("\n"): while len(paragraph) > 0: # Pegar um trecho que caiba na linha line = paragraph[:line_length] paragraph = paragraph[line_length:] # Adicionar a linha ao PDF c.drawString(margin_left, y_position, line.strip()) y_position -= line_spacing # Se chegar ao final da página, criar uma nova if y_position < 50: c.showPage() c.setFont("Helvetica", 12) y_position = margin_top # Salvar o PDF c.save() # Excluir o arquivo de áudio temporário os.remove(audio_path) # Incrementar o contador para o próximo arquivo contador += 1 print(f"Transcrições concluídas e salvas como PDFs na pasta '{pdf_root_folder}'.")