Video και Audio

VirtualDub - Αφαίρεση Hardsubbed Υποτίτλων ή Λογοτύπων

11/10/10 12:05 PM | parsifal από parsifal


VirtualDub - Αφαίρεση Hardsubbed Υποτίτλων ή Λογοτύπων

 

 

__TOC__

 

 

==Εισαγωγή==

Για τον υποτιτλισμό αρχείων video υπάρχουν διάφορες προσεγγίσεις :

  • Δημιουργία ενός ξεχωριστού αρχείου κειμένου, το οποίο περιέχει το περιεχόμενο της κάθε ατάκας μαζί με πληροφορίες για το χρόνο που πρέπει να εμφανισθεί. Προαιρετικά, μπορεί να ορίζεται και η γραμματοσειρά (font) με την οποία θα φαίνονται οι υπότιτλοι και η γεωμετρική θέση τους μέσα στο video, ανάλογα με το format υποτίτλων που χρησιμοποιείται (SRT/SSA/SUB κλπ)
  • Δημιουργία ενός ξεχωριστού αρχείου, το οποίο όμως δεν περιέχει τους υποτίτλους σε μορφή κειμένου, αλλά σε μορφή γραφικών bitmap. Εδώ, όπως είναι αντιληπτό δε μπορεί να υπάρχει ελευθερία επιλογής font, μπορεί όμως να ορισθεί ο χρονισμός και η γεωμετρική θέση των υποτίτλων μέσα στο video. Σε τέτοιο format είναι τα ζεύγη αρχείων τύπου IDX+SUB που μπορούν να εξάγουν το VobSub και το VSRip από μία DVD ταινία που έχουμε μεταφέρει στο σκληρό μας δίσκο με ripping. Το συγκεκριμένο format δίνει μάλιστα τη δυνατότητα να έχουμε πολλαπλά streams υποτίτλων στο ίδιο ζεύγος αρχείων IDX+SUB
  • Ενσωμάτωση αρχείων των προηγούμενων δύο τύπων ως ξεχωριστό stream, μέσα στο ίδιο το αρχείο video. Αυτή η δυνατότητα περιορίζεται από το container format του αρχείου video και από τη διαθεσιμότητα εργαλείων γι' αυτήν τη δουλειά. Π.χ. σε ένα αρχείο video τύπου MKV (Matroska container format), μπορούμε να ενσωματώσουμε ως streams ένα η περισσότερα αρχεία υποτίτλων σε διάφορα text ή bitmap formats, που ίσως να μη μπορούσαμε σε containers άλλου τύπου (π.χ. AVI)
  • Οι παραπάνω τρόποι δίνουν τη δυνατότητα για selectable υποτίτλους. Δηλαδή, μπορούμε συνήθως να απενεργοποιήσουμε από τον video player (ή το DirectShow φίλτρο που αναλαμβάνει το rendering τους, π.χ. ffdshow) την προβολή των υποτίτλων ή ακόμη και να αλλάξουμε τη γλώσσα τους, αν υπάρχουν πολλαπλά streams. Οι υπότιτλοι δεν έχουν καμμία σχέση με το ίδιο το video stream, απλά το πρόγραμμα αναπαραγωγής προκαλεί σε πραγματικό χρόνο μία υπέρθεση (overlay) της εικόνας των υποτίτλων επάνω στην κινούμενη εικόνα του video. Γι' αυτό και οι μορφές αυτές ονομάζονται softsubs.
     
    Σε αντιδιαστολή με τα παραπάνω, υπάρχει και ένας άλλος τρόπος υποτιτλισμού που προκαλεί μόνιμη προσθήκη των υποτίτλων επάνω στην εικόνα. Χρησιμοποιείται ένα φίλτρο που διαβάζει τους υποτίτλους, κάνει το rendering (τους ζωγραφίζει δηλαδή, αν πρόκειται για text μορφή) και προκαλεί υπέρθεσή τους επάνω στην κινούμενη εικόνα του raw video που έχουμε ως πηγή. Στη συνέχεια, το αποτέλεσμα κωδικοποιείται με κάποιον video codec. Το video stream που προκύπτει, όπως αναφέρθηκε, έχει μόνιμα ενσωματωμένους τους υποτίτλους, με ότι πληροφορία/λεπτομέρεια υπήρχε στο video ακριβώς «πίσω» από τη θέση των υποτίτλων να έχει χαθεί για πάντα. Γι' αυτό, τέτοιοι υπότιτλοι ονομάζονται hardsubs.

 

[DIV=border-width: none; margin:0 auto; width:60%; text-align:center; background-color:gold]

Αν η ορολογία που χρησιμοποιείται δεν είναι κατανοητή, ανατρέξτε στο άρθρο DirectShow και βασικές έννοιες video

 

[/DIV]

 

 

Στο παρόν άρθρο θα δούμε μία μέθοδο για τη μόνιμη αφαίρεση ανεπιθύμητων υποτίτλων από ένα hardsubbed αρχείο video. Επισημαίνεται ότι η επέμβαση κατά τέτοιο τρόπο στο αρχείο δίνει ως αποτέλεσμα ένα RAW video stream το οποίο θα πρέπει να επανακωδικοποιήσουμε στη συνέχεια με κάποιον video codec, με ότι αυτό σημαίνει για τον απαιτούμενο χρόνο και την αναπόφευκτη μείωση στην τελική ποιότητα. Αυτός είναι και ο λόγος που θα πρέπει να προτιμάται όπου είναι δυνατόν το softsubbing

 

 

 

==Απαιτούμενο λογισμικό==

Θα χρειαστούμε:

  • VirtualDub - ~1.3MB
  • Το φίλτρο Logoaway - ~16KB
  • Έναν video codec (XviD, DivX, x264 κλπ) που να μπορεί να χρησιμοποιήσει το VirtualDub για την περαιτέρω κωδικοποίηση του video stream που θα προκύψει από την επεξεργασία
  • Ένα πρόγραμμα προβολής ή επεξεργασίας γραφικών που να μπορεί να μας δώσει πληροφορίες για τις συντεταγμένες ενός σημείου μέσα σε μία εικόνα. Στο παράδειγμα χρησιμοποιείται το δωρεάν IrfanView - ~1.1MB

 

Η εγκατάσταση των παραπάνω και οι δοκιμές έγιναν, χωρίς κανένα πρόβλημα ασυμβατοτήτων ή λαθών, σε έναν Intel Core 2 Duo E6600 με πλατφόρμα Αγγλικών Windows XP Professional SP2, πλήρως ενημερωμένων με τα τελευταία patches από Windows Update. Εκτός από τα Windows patches, είναι πάντα καλή πρακτική να έχουμε το σύστημά μας ενημερωμένο με τους πιο πρόσφατους chipset, video και sound card drivers, όπως και το DirectX.

 

 

==Προεργασία==

Αποσυμπιέζουμε το αρχείο του VirtualDub στον κατάλογο της επιλογής μας και δημιουργούμε συντόμευση προς το εκτελέσιμο VirtualDub.exe στην τοποθεσία της επιλογής μας. Επίσης, αποσυμπιέζουμε το αρχείο του φίλτρου στον υποκατάλογο plugins του κυρίως καταλόγου του VirtualDub. Στη συνέχεια, εκκινούμε το VirtualDub :

 

010.png

 

Από το μενού File --> Open video file... (ή με CTRL+O), ανοίγουμε το αρχείο video που μας ενδιαφέρει :

 

020.png

 

Από το μενού Video --> Full processing mode, ενεργοποιούμε την πλήρη χρήση φίλτρων στο VirtualDub. Πριν προχωρήσουμε, πρέπει πρώτα να προσδιορίσουμε τις συντεταγμένες που προσδιορίζουν τον χώρο εμφάνισης των υποτίτλων. Χρησιμοποιώντας λοιπόν την μπάρα κύλισης στο κάτω μέρος του παραθύρου, ψάχνουμε μέσα στο αρχείο για να βρούμε ατάκες που εκτείνονται σε όσο το δυνατόν περισσότερες οριζόντιες γραμμές και με το μέγιστο πλάτος. Συνήθως, το μέγιστο που θα δούμε είναι ατάκες των 2 γραμμών, πολύ σπάνια 3. Αφήνουμε τη μπάρα κύλισης στο υποψήφιο για τις μέγιστες διαστάσεις έκτασης υποτίτλων frame (ας υποθέσουμε ότι είναι αυτό στο παραπάνω screenshot) και κάνουμε κλικ στο εικονίδιο 030.png . Πατάμε το πλήκτρο με το δεξί βέλος στο πληκτρολόγιό μας μία φορά ώστε να προχωρήσει το video στο επόμενο frame και κάνουμε κλικ στο εικονίδιο 040.png . Στη status bar του VirtualDub θα πρέπει να δούμε κάτι σαν αυτό : 050.png , που επιβεβαιώνει ότι επιλέξαμε ως αρχικό frame επεξεργασίας αυτό που μας ενδιέφερε και ως τελικό frame επεξεργασίας το αμέσως επόμενό του. Δηλαδή, το εύρος (range) επεξεργασίας θα είναι μοναδικό frame.

 

[DIV=border-width: none; margin:0 auto; width:60%; text-align:center; background-color:gold]

Μερικές συντομεύσεις που μπορούν να μας βοηθήσουν στην εργασία με το VirtualDub

 

Δεξί Βέλος:Μετακίνηση ένα καρέ μπροστά

Αριστερό Βέλος:Μετακίνηση ένα καρέ πίσω

CTRL+Αριστερό Βέλος:Μετακίνηση στο πρώτο καρέ του video

CTRL+Δεξί Βέλος:Μετακίνηση στο τελευταίο καρέ του video

Home:Ίδιο με το εικονίδιο 030.png

End:Ίδιο με το εικονίδιο 040.png

 

Επίσης, κρατώντας πατημένο το SHIFT ενώ μετακινούμε με το ποντίκι την μπάρα κύλισης, έχουμε πιο γρήγορη απόκριση του προγράμματος γιατί η μετακίνηση γίνεται από Keyframe σε Keyframe.

 

[/DIV]

 

Τώρα, από το μενού File --> Export --> Image sequence..., κάνουμε τις παρακάτω ρυθμίσεις (με το path και το όνομα αρχείου όπως μας βολεύει φυσικά) :

 

060.png

 

Με κλικ στο OK, θα πάρουμε το καρέ αποθηκευμένο σε ένα BMP αρχείο, το οποίο στη συνέχεια ανοίγουμε με το πρόγραμμα γραφικών μας. Στο IrfanView συγκεκριμένα όταν επιλέγουμε μία περιοχή (αριστερό κλικ πατημένο και σύρσιμο του ποντικιού) στην Title Bar του προγράμματος εμφανίζονται οι συντεταγμένες του πάνω αριστερού άκρου της περιοχής και οι διαστάσεις της, οι οποίες είναι ακριβώς οι πληροφορίες που χρειαζόμαστε. Έτσι, κυκλώνουμε την περιοχή εμφάνισης των υποτίτλων, δίνοντας και λίγα pixels χώρο για ασφάλεια :

 

070.png

 

Σημειώνουμε τα νούμερα και είμαστε έτοιμοι να δώσουμε τις πληροφορίες αυτές στο φίλτρο μας.

 

 

 

==Προσθήκη φίλτρου==

Επιστρέφουμε στο VirtualDub, όπου με τον τρόπο που περιγράφηκε πιο πάνω, ορίζουμε ως εύρος επεξεργασίας ολόκληρο το αρχείο μας (δεν έχει νόημα η αφαίρεση υποτίτλων σε ένα και μοναδικό καρέ, έτσι δεν είναι; ). Τώρα, θα ορίσουμε ένα φίλτρο επεξεργασίας από το μενού Video --> Filters... (ή με CTRL+F). Στο παράθυρο που θα ανοίξει, κλικ στο Add...:

 

080.png

 

Με διπλό κλικ στο φίλτρο, ανοίγει παράθυρο με τις ρυθμίσεις του :

 

090.png

 

1. Επιλέγουμε τον τρόπο λειτουργίας XY

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

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

4. Μπορούμε να πειραματιστούμε με αυτήν τη ρύθμιση. Καλό (υποκειμενικό) αποτέλεσμα δίνει η τέρμα δεξιά ρύθμιση και η ακριβώς μεσαία

5. Δε χρειάζεται μεγάλο ποσοστό «θολώματος» της περιοχής, μπορούμε να ορίσουμε και καθόλου

6. Ανοίγει ένα παράθυρο προεπισκόπησης του αποτελέσματος με μπάρα κύλισης, για να ελέγξουμε το αποτέλεσμα των ρυθμίσεων

 

Στο παράδειγμα, η προεπισκόπηση δίνει το παρακάτω αποτέλεσμα :

 

100.png

 

Δεν είναι και ότι πιο όμορφο, αλλά δε μπορούμε να κάνουμε και πολλά πράγματα. Αν πρόκειται να προβληθούν κατά την αναπαραγωγή (ή να προστεθούν κατά την επανακωδικοποίηση) υπότιτλοι άλλης γλώσσας στην ίδια περίπου περιοχή, το φαινόμενο δεν είναι τόσο έντονο. Για παράδειγμα, ας δούμε πώς φαίνεται το αρχείο AVI που θα προκύψει, όταν το αναπαράγουμε με Media Player Classic + ffdshow, έχοντας σε εξωτερικό αρχείο SRT ελληνικούς υποτίτλους. Το screenshot τραβήχθηκε από το μενού του Media Player Classic File --> Save Image... :

 

110.png

 

Κάπως καλύτερα! Τώρα, αφού κάνουμε τις ρυθμίσεις που θέλουμε, με κλικ στο OK επιστρέφουμε στο παράθυρο επιλογής φίλτρων :

 

120.png

 

Η αφαίρεση ενός στατικού λογοτύπου (π.χ. σήματα τηλεοπτικών σταθμών κ.ά.) ακολουθεί την ίδια λογική και δε θα πρέπει να συναντήσουμε κάποιο πρόβλημα. Αν θέλουμε να επιλέξουμε κι άλλα φίλτρα (π.χ. για hardsubbed κωδικοποίηση υποτίτλων άλλης γλώσσας), το κάνουμε τώρα και τέλος, κλικ στο OK.

 

 

 

==Κωδικοποίηση==

Στη συνέχεια, κάνουμε τις απαραίτητες ρυθμίσεις επιλογής codec από το μενού Video --> Compression..., το ίδιο για τον ήχο και ξεκινάμε την επανακωδικοποίηση του video μας. Οι ρυθμίσεις αυτές δε θα μας απασχολήσουν στο παρόν άρθρο. Υπάρχουν πολλοί σχετικοί οδηγοί διαθέσιμοι στο Διαδίκτυο.

 

 

 

==Παραρτήματα==

===Αφαίρεση υποτίτλων/λογοτύπων κατά το playback χωρίς επανακωδικοποίηση===

TODO

 

 

===Μερικά χρήσιμα links===

  • Can VirtualDub do Mov, Mpeg, Mp4, ASF, WMV, FLV... ?
     
    Εκεί θα βρείτε links σε διάφορα input filters με τα οποία το VirtualDub μπορεί να ανοίξει και άλλα container formats, πέρα από το AVI format που υποστηρίζει εγγενώς.
     
     
  • fccHandler's stuff
     
    VirtualDub plugins από τον fccHandler για ανάγνωση MPEG και WMV.

 

Ας σημειωθεί ότι το VirtualDub δε μπορεί να κάνει μη απωλεστικό κόψιμο/ράψιμο σε αρχεία που έχει διαβάσει μέσω input plugins. Θα πρέπει να τα σώσετε αναγκαστικά σε AVI, μετά από επανακωδικοποίηση.

 

 

 

===Ιστορικό αλλαγών===

  • 20081025 - Αλλαγές στον TOC, αφαίρεση "Acknowledgements", προσθήκη «Ιστορικού αλλαγών», αλλαγή του Wiki standard notice στο τέλος του άρθρου σε νέα τυποποιημένη μορφή, μικροδριορθώσεις, hosting εικόνων στον Insomnia server (parsifal)
  • 20080831 - Προσθήκη χρήσιμων links (parsifal)
  • 20080523 - Αλλαγές στον TOC (parsifal)
  • 20080128 - Προσθήκη screenshot από αναπαραγωγή με MPC (parsifal)
  • 20080126 - Αρχική έκδοση (parsifal)