File size: 4,076 Bytes
b2437ae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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}'.")