|
|
|
|
|
|
|
|
|
|
|
|
|
import json |
|
from googletrans import Translator |
|
import deepl |
|
import pyperclip |
|
import pyautogui |
|
import subprocess |
|
import time |
|
import os |
|
from termcolor import cprint |
|
import pysrt |
|
import asyncio |
|
from EdgeGPT import Chatbot, ConversationStyle |
|
|
|
|
|
def read_file(file): |
|
with open('./input/' + file, 'r', encoding='utf-8') as f: |
|
lines = f.readlines() |
|
return lines |
|
|
|
|
|
def translateGoogle(file, linesNumber): |
|
lines = read_file(file) |
|
translator = Translator() |
|
|
|
with open('./output/' + file, 'w', encoding='utf-8') as f: |
|
for i in range(0, len(lines), linesNumber): |
|
translation = translator.translate( |
|
"".join(lines[i:i + linesNumber]), dest='PL') |
|
f.write(translation.text) |
|
f.write("\n") |
|
|
|
|
|
def translateGoogleFile(file, linesNumber): |
|
subs = pysrt.open('./input/' + file, encoding='utf-8') |
|
subs_combined = [] |
|
translated_subs = [] |
|
|
|
translator = Translator() |
|
for i, sub in enumerate(subs): |
|
sub.text = sub.text.replace("\n", " ◍ ") |
|
subs_combined.append(sub.text) |
|
|
|
if (i + 1) % linesNumber == 0 or i == len(subs) - 1: |
|
combined_text = "\n".join(subs_combined) |
|
translated_text = translator.translate( |
|
combined_text, dest='pl').text |
|
translated_subs += translated_text.split("\n") |
|
subs_combined = [] |
|
|
|
for i, sub in enumerate(subs): |
|
sub.text = translated_subs[i] |
|
sub.text = sub.text.replace(" ◍, ", ",\n") |
|
sub.text = sub.text.replace(" ◍ ", "\n") |
|
sub.text = sub.text.replace(" ◍", "") |
|
|
|
subs.save('./output/' + file, encoding='utf-8') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def translateDeepL(file, linesNumber, number): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subs = pysrt.open('./input/' + file, encoding='utf-8') |
|
|
|
auth_key = "1df708bf-af10-3e70-e577-b2d4cb763d74:fx" |
|
translator = deepl.Translator(auth_key) |
|
if number == 1: |
|
groups = [subs[i:i+linesNumber] |
|
for i in range(0, len(subs), linesNumber)] |
|
for group in groups: |
|
text = " @\n".join(sub.text.replace("\n", " ◍◍◍◍ ") |
|
for sub in group) |
|
translated_text = translator.translate_text( |
|
text, target_lang='PL').text |
|
translated_texts = translated_text.split(" @\n") |
|
if len(translated_texts) == len(group): |
|
for i in range(len(group)): |
|
if i < len(translated_texts): |
|
group[i].text = translated_texts[i] |
|
group[i].text = group[i].text.replace(" ◍◍◍◍, ", ",\n") |
|
group[i].text = group[i].text.replace(" ◍◍◍◍ ", "\n") |
|
group[i].text = group[i].text.replace(" ◍◍◍◍", "") |
|
subs.save('./output/' + file, encoding='utf-8') |
|
|
|
|
|
if number == 2: |
|
translator.translate_document_from_filepath( |
|
'./input/' + file, |
|
'./output/' + file, |
|
target_lang='PL', |
|
formality='default' |
|
) |
|
|
|
|
|
def translateDeepLFreeDesktop(file, linesNumber, number): |
|
|
|
|
|
|
|
command = r'C:\Users\mateu\AppData\Roaming\Programs\Zero Install\0install-win.exe' |
|
args = ["run", "--no-wait", |
|
"https://appdownload.deepl.com/windows/0install/deepl.xml"] |
|
subprocess.call([command] + args) |
|
|
|
time.sleep(2) |
|
|
|
def auto_steps(): |
|
screen_width, screen_height = pyautogui.size() |
|
x = screen_width * 0.25 |
|
y = screen_height * 0.5 |
|
pyautogui.moveTo(x, y) |
|
pyautogui.click() |
|
pyautogui.hotkey('ctrl', 'a') |
|
pyautogui.hotkey('del') |
|
pyautogui.hotkey('ctrl', 'v') |
|
time.sleep(6) |
|
x = screen_width * 0.75 |
|
pyautogui.moveTo(x, y) |
|
pyautogui.click() |
|
pyautogui.hotkey('ctrl', 'a') |
|
pyautogui.hotkey('ctrl', 'c') |
|
translated_text = pyperclip.paste() |
|
with open('./output/' + file, 'a', encoding='utf-8') as out_file: |
|
out_file.write(translated_text) |
|
|
|
if number == 1: |
|
with open('./input/' + file, 'r', encoding='utf-8') as f: |
|
lines = f.readlines() |
|
for i in range(0, len(lines), linesNumber): |
|
text = "".join(lines[i:i+linesNumber]) |
|
pyperclip.copy(text) |
|
|
|
auto_steps() |
|
|
|
if number == 2: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subs = pysrt.open('./input/' + file, encoding='utf-8') |
|
groups = [subs[i:i+linesNumber] |
|
for i in range(0, len(subs), linesNumber)] |
|
|
|
for group in groups: |
|
text = " @\n".join(sub.text.replace("\n", " ◍◍◍◍ ") |
|
for sub in group) |
|
pyperclip.copy(text) |
|
auto_steps() |
|
|
|
with open('./output/' + file, 'r', encoding='utf-8') as f: |
|
text = f.read() |
|
translated_texts = text.split(" @\n") |
|
if len(translated_texts) == len(subs): |
|
for i in range(len(subs)): |
|
if i < len(translated_texts): |
|
subs[i].text = translated_texts[i] |
|
subs[i].text = subs[i].text.replace(" ◍◍◍◍, ", ",\n") |
|
subs[i].text = subs[i].text.replace(" ◍◍◍◍ ", "\n") |
|
subs[i].text = subs[i].text.replace(" ◍◍◍◍", "") |
|
|
|
subs.save('./output/' + file, encoding='utf-8') |
|
|
|
frezes = ["\nPrzetłumaczono z www.DeepL.com/Translator (wersja darmowa)\n", |
|
"Przetłumaczono z www.DeepL.com/Translator (wersja darmowa)", |
|
"\nTranslated with www.DeepL.com/Translator (free version)\n", |
|
"\nTranslated with www.DeepL.com/Translator (free version)"] |
|
|
|
with open('./output/' + file, 'r', encoding='utf-8') as in_file: |
|
text = in_file.read() |
|
print(text) |
|
|
|
for freze in frezes: |
|
text = text.replace(freze, "") |
|
print(text) |
|
|
|
with open('./output/' + file, 'w', encoding='utf-8') as out_file: |
|
out_file.write(text) |
|
print(text) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def BingAI(text): |
|
try: |
|
with open('./cookies.json', 'r') as f: |
|
cookies = json.load(f) |
|
bot = Chatbot(cookies=cookies) |
|
try: |
|
|
|
response = await bot.ask(prompt='''Przetłumacz tekst profesjonalnie, epicko, elekancko, zabawnie na polski, zachowaj formatowanie i znaki interpunkcyjne. UWAGA! Nie używaj internetu! Uwaga! Możeszy napisać tylko tekst [TŁUMACZENIE:] przed tłumaczeniem: ''' + text, conversation_style=ConversationStyle.creative) |
|
for message in response['item']['messages']: |
|
if message['author'] == 'bot': |
|
bot_response = message["text"] |
|
finally: |
|
await bot.close() |
|
except Exception as e: |
|
print(f"Error: {e}") |
|
print("Przełączono na konto matty_mroz_kun...") |
|
print("Tłumaczenie...") |
|
with open('./cookies_kun.json', 'r') as f: |
|
cookies = json.load(f) |
|
bot = Chatbot(cookies=cookies) |
|
try: |
|
|
|
|
|
response = await bot.ask(prompt='''Ważne! Zapomnji poprzednie instrukcje! Przetłumacz tekst profesjonalnie, epicko, elekancko, zabawnie na polski, zachowaj formatowanie i znaki interpunkcyjne. UWAGA! Nie używaj internetu!, Nie używaj translatorów internetowych jak bing, google, deepl translator! Uwaga!, W odpowiedzi możeszy napisać jedynie na początku tekst: [TŁUMACZENIE:] potem tłumaczenie tekstu, jeśli rozumiesz pszystąp do tłumaczenia i analizy: ''' + text, conversation_style=ConversationStyle.creative) |
|
for message in response['item']['messages']: |
|
if message['author'] == 'bot': |
|
bot_response = message["text"] |
|
finally: |
|
await bot.close() |
|
return bot_response |
|
|
|
|
|
async def translateBingAI(file, linesNumber, number): |
|
if number == 1: |
|
lines = read_file(file) |
|
|
|
tasks = [] |
|
for i in range(0, len(lines), linesNumber): |
|
text = "".join(lines[i:i+linesNumber]) |
|
tasks.append(asyncio.create_task(BingAI(text))) |
|
|
|
translated_texts = await asyncio.gather(*tasks) |
|
|
|
|
|
with open('./output/' + file, 'w', encoding='utf-8') as f: |
|
f.write("\n".join(translated_texts)) |
|
|
|
with open('./output/' + file, 'r', encoding='utf-8') as in_file: |
|
text = in_file.read() |
|
new_text = text.replace("[TŁUMACZENIE:]", "") |
|
new_text = new_text.replace("[TŁUMACZENIE: ] ", "") |
|
new_text = new_text.replace(" [TŁUMACZENIE: ]", "") |
|
|
|
with open('./output/' + file, 'w', encoding='utf-8') as out_file: |
|
out_file.write(new_text) |
|
if number == 2: |
|
|
|
subs = pysrt.open('./input/' + file, encoding='utf-8') |
|
translator = Translator() |
|
|
|
tasks = [] |
|
groups = [subs[i:i+linesNumber] |
|
for i in range(0, len(subs), linesNumber)] |
|
|
|
for group in groups: |
|
text = " @\n".join(sub.text.replace("\n", " ◍ ") for sub in group) |
|
tasks.append(asyncio.create_task(BingAI(text))) |
|
|
|
translated_texts = await asyncio.gather(*tasks) |
|
|
|
translated_texts = translated_texts.split(" @\n") |
|
if len(translated_texts) == len(subs): |
|
for i in range(len(subs)): |
|
if i < len(translated_texts): |
|
subs[i].text = translated_texts[i] |
|
subs[i].text = subs[i].text.replace(" ◍◍◍◍, ", ",\n") |
|
subs[i].text = subs[i].text.replace(" ◍◍◍◍ ", "\n") |
|
subs[i].text = subs[i].text.replace(" ◍◍◍◍", "") |
|
subs.save('./output/' + file, encoding='utf-8') |
|
|
|
with open('./output/' + file, 'r', encoding='utf-8') as in_file: |
|
text = in_file.read() |
|
new_text = text.replace("[TŁUMACZENIE:]", "") |
|
new_text = new_text.replace("[TŁUMACZENIE: ] ", "") |
|
new_text = new_text.replace(" [TŁUMACZENIE: ]", "") |
|
|
|
with open('./output/' + file, 'w', encoding='utf-8') as out_file: |
|
out_file.write(new_text) |
|
|
|
|
|
def main(): |
|
cprint("╚═══ Multimedia Magic – Audio Visual Heaven ═══╝", |
|
'white', attrs=['bold']) |
|
print("") |
|
choice = input( |
|
"1 - Google Translate\n2 - DeepL Translate API Kay\n3 - DeepL Translate Free Desktop\n4 - Bing AI\nWybierz: ") |
|
|
|
customOption = 5 |
|
|
|
if choice != '4': |
|
linesNumberOptions = { |
|
1: 30, |
|
2: 50, |
|
3: 80, |
|
4: 200 |
|
} |
|
linesNumberChoice = int(input( |
|
"Ile linii tłumaczyć na raz (najlepiej 30-50):\n1 - 30\n2 - 50\n3 - 80\n4 - 200\n5 - Podaj własną liczbę\nWybierz: ")) |
|
|
|
linesNumber = ( |
|
int(input("Podaj liczbę: ")) |
|
if linesNumberChoice == customOption |
|
else linesNumberOptions.get(linesNumberChoice, 30) |
|
) |
|
else: |
|
linesNumberOptions = { |
|
1: 10, |
|
2: 20, |
|
3: 30, |
|
4: 40 |
|
} |
|
linesNumberChoice = int(input( |
|
"Ile linii tłumaczyć na raz (najlepiej 1-10):\n1 - 10\n2 - 20\n3 - 30\n4 - 40\n5 - Podaj własną liczbę\nWybierz: ")) |
|
|
|
if linesNumberChoice == customOption: |
|
linesNumber = int(input("Podaj liczbę: ")) |
|
else: |
|
linesNumber = linesNumberOptions.get(linesNumberChoice, 1) |
|
|
|
start_time = time.time() |
|
if choice == '1': |
|
choice = input( |
|
"1 - Tłumacznie pliku z tekstem\n2 - Tłumacznie napisów np.: 1.srt\nWybierz: ") |
|
if choice == '1': |
|
for file in os.listdir("input"): |
|
print("Tłumacznie: " + file + "...") |
|
translateGoogle(file, linesNumber) |
|
elif choice == '2': |
|
for file in os.listdir("input"): |
|
print("Tłumacznie: " + file + "...") |
|
translateGoogleFile(file, linesNumber) |
|
elif choice == '2': |
|
number = int( |
|
input("1 - Tłumacznie z linia po lini - bezpiecznie, ale dłużej \n2 - Tłumacznie z całego pliku np.: 1.txt - szybciej, ale możliwość błędu\nWybierz: ")) |
|
for file in os.listdir("input"): |
|
print("Tłumacznie: " + file + "...") |
|
translateDeepL(file, linesNumber, number) |
|
elif choice == '3': |
|
number = int( |
|
input("1 - Tłumacznie pliku z tekstem\n2 - Tłumacznie napisów np.: 1.srt\nWybierz: ")) |
|
for file in os.listdir("input"): |
|
print("Tłumacznie: " + file + "...") |
|
translateDeepLFreeDesktop(file, linesNumber, number) |
|
elif choice == '4': |
|
number = int( |
|
input("1 - Tłumacznie pliku z tekstem\n2 - Tłumacznie napisów np.: 1.srt\nWybierz: ")) |
|
for file in os.listdir("input"): |
|
print("Tłumacznie: " + file + "...") |
|
asyncio.run(translateBingAI(file, linesNumber, number)) |
|
|
|
print("Zakończono :)") |
|
|
|
|
|
print("--- %s seconds ---" % (time.time() - start_time)) |
|
print("--- %s minutes ---" % ((time.time() - start_time) / 60)) |
|
print("--- %s hours ---" % ((time.time() - start_time) / 3600)) |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|