Windows NT KAMIDAKI 10.0 build 19045 (Windows 10) AMD64
Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.3.9
Server IP : 192.168.3.16 & Your IP : 216.73.216.140
Domains :
Cant Read [ /etc/named.conf ]
User : SISTEMA
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
C: /
Users /
VEGETA /
OneDrive /
Área de Trabalho /
Delete
Unzip
Name
Size
Permission
Date
Action
FILMES
[ DIR ]
drwxrwxrwx
2025-05-08 21:07
SOUNDS
[ DIR ]
drwxrwxrwx
2025-06-10 21:42
SQL APP ANDROID
[ DIR ]
drwxrwxrwx
2025-03-07 15:00
path
[ DIR ]
drwxrwxrwx
2025-06-10 21:30
Discord.lnk
2.21
KB
-rw-rw-rw-
2025-07-29 23:56
Tradutor Inglês para Portugues (Clone - Old Class USUAL).py
5.41
KB
-rw-rw-rw-
2025-06-10 22:26
delet.bat
789
B
-rwxrwxrwx
2025-06-03 05:57
desktop.ini
282
B
-rw-rw-rw-
2023-01-14 20:23
~$Gerenciamento de CAIXA - Cooker Blue.xlsx
165
B
-rw-rw-rw-
2024-02-02 14:56
~$aliação Individual - EGGTICASDA-2204-681599 2204-GOVERNANÇA E ESTRATÉGIA DE TECNOLOGIA DA INFORMAÇÃO.docx
162
B
-rw-rw-rw-
2023-09-01 14:16
~$mário do Curso - Especialização Técnica de Gerenciamento e Analise de OLT GPON.docx
162
B
-rw-rw-rw-
2023-09-19 21:35
~WRL2509.tmp
13.94
KB
-rw-rw-rw-
2023-09-19 21:35
Save
Rename
import subprocess import tempfile import time import shutil import warnings import os # 1) Ajuste o PATH para incluir a pasta do FFmpeg os.environ["PATH"] += os.pathsep + r"F:\ffmpeg-2025-06-08-git-5fea5e3e11-essentials_build\ffmpeg-2025-06-08-git-5fea5e3e11-essentials_build\bin" # Suprimir o aviso de FP16 no CPU warnings.filterwarnings("ignore", message="FP16 is not supported on CPU") import whisper from deep_translator import GoogleTranslator #from gtts import gTTS # Removido gTTS #import pyttsx3 #Removido pyttsx3 #Offline Text to speech - Coqui TTS from TTS.api import TTS # Diretórios (ajuste conforme necessário) INPUT_DIR = r"C:\Users\VEGETA\OneDrive\Área de Trabalho\SOUNDS\PARA TRADUZIR" OUTPUT_BASE_DIR = r"C:\Users\VEGETA\OneDrive\Área de Trabalho\SOUNDS\TRADUZIDOS" # Carrega o modelo Whisper quantizado para CPU model = whisper.load_model("base") translator = GoogleTranslator(source='en', target='pt') # Initialize Coqui TTS tts = TTS(model_name="tts_models/pt/cv/vits").to("cuda") # Alterar para 'cpu' se não tiver GPU def ffmpeg_convert(input_path: str, output_path: str, extra_args: list = None): """Chama ffmpeg para converter um arquivo.""" cmd = ["ffmpeg", "-y", "-i", input_path] if extra_args: cmd += extra_args cmd.append(output_path) subprocess.run(cmd, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) def adjust_speech_rate_and_pitch(input_path, output_path, speed=1.35, pitch=0.58): """Ajusta velocidade e tom do áudio usando ffmpeg.""" cmd = [ "ffmpeg", "-y", "-i", input_path, "-af", f"atempo={speed},asetrate=44100*{pitch},aresample=44100", output_path ] subprocess.run(cmd, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) def translate_with_retry(text, tries=10, delay=2): """Traduz texto com retries em caso de falha.""" for i in range(tries): try: return translator.translate(text) except Exception as e: print(f"[WARN] Tradução falhou (tentativa {i+1}/{tries}): {e}") time.sleep(delay) raise RuntimeError("Tradução falhou após várias tentativas") def save_tts_with_retry(text, path, tries=3, delay=2): #Reduzido o numero de tentativas pois TTS offline é mais confiavel """Gera TTS usando Coqui TTS, com retries.""" for i in range(tries): try: # Use Coqui TTS para gerar o áudio tts.tts_to_file(text=text, file_path=path) return except Exception as e: print(f"[WARN] Coqui TTS falhou (tentativa {i+1}/{tries}): {e}") time.sleep(delay) raise RuntimeError("Coqui TTS falhou após várias tentativas") def process_file(src_path: str, dst_path: str): """ Pipeline: 1) Extrai áudio → WAV mono 16kHz 2) Whisper transcribe 3) Se não há texto, copia arquivo original 4) Traduz texto (retry) 5) Synth TTS (retry) 6) Ajusta velocidade/tom 7) Converte para OGG opus """ with tempfile.TemporaryDirectory() as tmp: # 1) WAV temporário wav_path = os.path.join(tmp, "audio.wav") ffmpeg_convert(src_path, wav_path, extra_args=["-ar", "16000", "-ac", "1", "-vn"]) # 2) Transcrição Whisper res = model.transcribe(wav_path, language="en", task="transcribe", temperature=0.2) texto_en = res["text"].strip() # 3) Se não há texto, copia original if not texto_en: os.makedirs(os.path.dirname(dst_path), exist_ok=True) shutil.copy2(src_path, dst_path) print(f"[COPIED] {os.path.basename(src_path)} (sem voz detectada)") return # Delay para evitar RATE LIMIT time.sleep(2) # 4) Tradução texto_pt = translate_with_retry(texto_en) # Delay antes do TTS time.sleep(2) # 5) Síntese TTS mp3_path = os.path.join(tmp, "audio.wav") # Coqui TTS já salva como wav save_tts_with_retry(texto_pt, mp3_path) # 6) Ajusta velocidade e tom adjusted_mp3 = os.path.join(tmp, "audio_adjusted.wav") adjust_speech_rate_and_pitch(mp3_path, adjusted_mp3) # 7) Converte para OGG opus os.makedirs(os.path.dirname(dst_path), exist_ok=True) ffmpeg_convert(adjusted_mp3, dst_path, extra_args=["-c:a", "libopus", "-b:a", "160k"]) print(f"[OK] {os.path.basename(src_path)} traduzido → {os.path.basename(dst_path)}") def main(): for root, _, files in os.walk(INPUT_DIR): for fn in files: if fn.lower().endswith((".ogg", ".mp4")): src = os.path.join(root, fn) rel = os.path.relpath(root, INPUT_DIR) dst = os.path.join(OUTPUT_BASE_DIR, rel, os.path.splitext(fn)[0] + ".ogg") # Retry completo do processamento de cada arquivo for attempt in range(10): try: process_file(src, dst) break except Exception as e: print(f"[WARN] Falha em {os.path.basename(src)} (tentativa {attempt+1}/10): {e}") time.sleep(2) else: print(f"[ERRO] {os.path.basename(src)} não foi processado após 10 tentativas") if __name__ == "__main__": main()