Μετάφραση .srt eng σε gr

Αρχικά για να λύσεις το πρόβλημα πρέπει να το σπάσεις σε μικρότερα κομμάτια.

  • Πρώτον, πρέπει να μελετήσεις ένα αρχείο *.srt υποτίτλων για να καταλάβεις την δομή του.
    Εάν ανοίξεις ένα τέτοιο αρχείο με κάποιον text editor θα δεις πχ κάτι σαν αυτό:
23
00:02:44,065 --> 00:02:45,196
-Τι γίνεται;
-Για να δω.

Περιλαμβάνει λοιπόν έναν ακέραιο αριθμό, μια διάρκεια χρονική και το κείμενο των υπότιτλων.

  • Δεύτερον, πρέπει να αναζητήσεις το καλύτερο εργαλείο για την δουλειά. Αναφέρεσαι σε script προφανώς bash σε Linux, αλλά έχεις σκεφτεί μήπως μια γλώσσα προγραμματισμού με έτοιμες βιβλιοθήκες θα ταίριαζε καλύτερα?

Η Python έχει την pysrt βιβλιοθήκη για να διαβάζεις και να τροποποιείς αρχεία *.srt:

  • Τρίτον, για μετάφραση χρειάζεσαι έναν μεταφραστή, όπως το GoogleTranslate, το DeepL (πολύ καλύτερο) κτλπ. Αυτές οι υπηρεσίες δίνουν συνήθως API τα οποία μπορείς να χρησιμοποιήσεις στον κώδικά σου, με πληρωμή ή χωρίς.

Η Python έχει το python-translate module που είναι δωρεάν:

Ενώ το API με εγγραφή δωρεάν (μέχρι 500.000 χαρακτήρες τον μήνα) της DeepL προσφέρεται εδώ :

Αντίστοιχα υπάρχει για Python και της Google Translate το API.

Στο πρόβλημα σου τώρα, εγκαθιστώντας το pysrt και python-translate για την διανομή σου, ένας μικρός κώδικας σε Python, σαν τον παρακάτω:

import pysrt
from translate import Translator

def translate_subs():
    translator= Translator(to_lang="el")
    subs = pysrt.open("english.srt")
    for sub in subs:
        grsub = translator.translate(sub.text)
        sub.text = grsub
    subs.save('greek1.srt')


if __name__ == '__main__':
    translate_subs()

κάνει αυτό που θέλεις για ένα αρχείο υποτίτλων με το όνομα english.srt και δημιουργεί ένα καινούριο αρχείο με το όνομα greek.srt.

  • Τέταρτον, ο χρόνος εκτέλεσης, εάν δοκιμάσεις τον παρακάτω κώδικα θα δεις ότι μεταφράζει μία πρόταση σε ένα δευτερόλεπτο, καταλαβαίνεις λοιπόν αντίστοιχα τους χρόνος μετατροπής των διαλόγων μια ολόκληρης ταινίας. Εδώ έρχεται η βελτιστοποίηση και πώς μπορείς να κάνεις τα πράγματα αποδοτικότερα.

  • Συμβουλή: Το ChatGPT είναι εργαλείο, για τέτοια προβλήματα κάνε δωρεάν έναν λογαριασμό με ένα gmail και ρώτα πράγματα κατά την υλοποίηση.

Τώρα για να φτιάξεις ένα Translation memory αρχείο όπως αναφέρει ο @kalligator θα μπορούσες, εάν! είναι ίδιος ο αριθμός των υπότιτλων στο αγγλικό (english.srt)και στο ελληνικό αρχείο (greek.srt) (εδώ έρχεται το data preprocessing) με τον παρακάτω κώδικα (πρόχειρα) να κάνεις κάτι τέτοιο:

import pysrt

def generate_subs():
    subs = pysrt.open("english.srt")
    total_sub=[]
    for number in range(len(subs)):
        total_sub.append(subs[number].text + "\n")
    subs_gr = pysrt.open("greek.srt")
    for number_gr in range(len(subs_gr)):
        total_sub.insert(2*number_gr+1, subs_gr[number_gr].text + "\n")
    f = open("all_subs.txt", "w")
    for _ in total_sub:
        f.write(_)
    f.close()


if __name__ == '__main__':
    generate_subs()

Όπου θα υπάρχουν εναλλάξ, στο νέο αρχείο all_subs.txt, γραμμές με τα αγγλικά και τα ελληνικά.

Τέλος για την περίπτωση που έχεις ένα νέο αρχείο υπότιτλων στα αγγλικά (english_test.srt), με τον παρακάτω όχι και τόσο αποδοτικό τρόπο μπορείς να σκανάρεις την database all_subs.txt και να δημιουργήσεις ένα νέο αρχείο υπότιτλων με το όνομα greek_test.srt.

import pysrt

def find_subs():
    subs = pysrt.open("english_test.srt")
    f = open("all_subs.txt", "r")
    with open("all_subs.txt") as all_subs_file:
        lines = f.readlines()
        for i in range(len(lines)):
            for sub in subs:
                if sub.text + "\n" == lines[i]:
                    print(sub.text)
                    sub.text = lines[i+1]
    subs.save('greek_test.srt')
    f.close()



if __name__ == '__main__':
    find_subs()

Από την διαδικασία ελπίζω να καταλάβεις αυτά που σου είπαν και οι προηγούμενοι. Σκέψουν την περίπτωση ότι ένα όνομα μόνο να αλλάζει σε μια κοινή πρόταση σε μια ταινία θα δημιουργήσει προβλήματα ή ακόμα και οι χρόνοι υλοποίησης σε μια μεγάλη βάση δεδομένων αποδεικνύουν ότι είναι ένα αρκετά πολύπλοκο πρόβλημα.

2 «Μου αρέσει»

Καλή χρονιά σε όλους σας φίλοι μου.
Σας ευχαριστώ για τις απαντήσεις σας.
Με ενδιαφέρει πολύ το κομμάτι Translation memory αρχείο γιατί κάπως έτσι το έχω στο μυαλό μου. Υπάρχει τρόπος μιας και δεν γνωρίζω προγραμματισμό phyton κλπ να φτιαχτεί ένα πιο “απλό” ;;;;; πώς το φαντάζομαι
1 φάκελος που θα έχει 2 αρχεία την βιβλιοθήκη με τις μεταφράσει και το script. Θα έβαζα μέσα σε αυτόν τον φάκελο το υποτιθέμενο υπότιτλο που θα ήθελα να μεταφράσω. Θα έτρεχα το script και ότι κοινό έβρισκε θα το άλλαζε ότι δεν έβρισκε δεν θα το πείραζε. Αυτά που δεν θα άλλαζαν θα έκανα με το χέρι οπότε υποθετικά από τις 100 προτάσεις θα μεταφράζει τις 20 ( ίσως ) τις υπόλοιπες θα τις πρόσθετα και στην βιβλιοθήκη οπότε θα έχω μελλοντικό κέρδος 0.001%. Σε όλο αυτό θέλω να πω το εξής. Κάποιοι στο opensubtitles αφιλοκερδώς έχουν αφιερώσει χρόνο και κόπο και έχουν κάνει αμέτρητες σωστές μεταφράσεις οπότε γενικά υπάρχει μια " μαγιά " ώστε μελλοντικά να πετύχω ένα ποσοστό μετάφρασης 80% ή έτσι ελπίζω. Καλή χρονιά και πάλι με υγεία σε όλους μας και καλό κουράγιο για την καινούργια χρονιά

1 «Μου αρέσει»

Αυτό κάνει το τελευταίο python script που σου έγραψα παραπάνω.
Εκτέλεσε το μέσα σε έναν φάκελο με τα 2 αρχεία με την εντολή

python3 find_subs.py

αφού έχεις εγκαταστήσει την pysrt βιβλιοθήκη.
Σε Debian/Ubuntu την εγκαθιστάς με την εντολή:

sudo apt install python3-pysrt
3 «Μου αρέσει»

Θα σου ήταν εύκολο να που κάνεις ένα παράδειγμα πως να αποθηκεύσω στο αρχείο .txt της μεταφράσεις για να μην κάνω κάποιο λάθος;

Εγώ έτσι έκανα ένα .srt από τα Πολωνικά στα Αγγλικά για να δω μια ταινία στα Μεξικάνικα. :joy:

Μια χαρά ήταν για την δουλειά που το ήθελα, αλλά για σοβαρή και ποιοτική μετάφραση ίσως δεν λέει.

Επίσης…

Υπάρχει ένα πρόγραμμα σε linux που λέγεται translate-shell. Απ’ό,τι βλέπω μπορείς να του δώσεις και ολόκληρα αρχεία να κάνει μετάφραση.

Όπως είπε και ο lI_Simo_Hayha_Il, τα srt είναι απλά αρχεία κειμένου με timestamps.

1
00:05:00,400 --> 00:05:15,300
This is an example of
a subtitle.

2
00:05:16,400 --> 00:05:25,300
This is an example of
a subtitle - 2nd subtitle.

Μπορείς για παράδειγμα να δοκιμάσεις με το translate-shell γράφοντας

trans :el /path/to/subtitle.srt > /path/to/subtitle-gr.srt

για να στο σώσει σε νέο αρχείο

Σημείωση: επειδή εμένα το Google Translate δεν δεχόταν αρχεία .srt, του άλλαξα απλά την επέκταση σε .txt και το πήρε μια χαρά

Δοκίμασε και πες μας!

3 «Μου αρέσει»

Το 2ο script που σου έστειλα κάνει αυτό, εάν είναι ακριβώς ίδιος ο αριθμός των υπότιτλων.
Η πιο απλή μορφή που θα μπορούσε να έχει το αρχείο *.txt, θα ήταν να έχει την αγγλική πρόταση και την ελληνική μετάφραση από κάτω:

Denmark in the 18th century.
To increase tax revenues...
<i>Η Δανία τον 18ο αιώνα.
Για να αυξήσουν τους φόρους</i>
...Danish kings try to domesticate and settle
the vast moorland of the Jutland peninsular.
<i>Οι Δανοί βασιλείς επιχειρούν να εξοικήσουν
τις απέραντες ελώδεις εκτάσειςτης χερσονήσου της Γιουτλάνδης.</i>
But nature is unforgiving, the soil is poor,
the countryside is infested with vagabonds...
<i>Αλλά η φύση είναι αμείλικτη, το έδαφος
φτωχό, η ύπαιθρος γεμάτη περιπλανώμενους</i>
The moorland cannot be farmed.
<i>Οι βάλτοι δεν μπορούν
να καλλιεργηθούν.</i>
2 «Μου αρέσει»