PDA

Επιστροφή στο Forum : How To: Προσθήκη υπότιτλων σε avi αρχείο



golity
08-08-06, 22:42
Ενσωμάτωση Ελληνικών υπότιτλων srt σε avi αρχεία.

Θα χρειαστεί να έχουμε εγκατεστημένο τον mplayer www.mplayerhq.hu

Ας υποθέσουμε ότι έχουμε το αρχείο βίντεο test.avi και το αρχείο υπότιτλων test.srt στον κατάλογο /home/username/video/ και θέλουμε να ενσωματώσουμε στο βίντεο τους υπότιτλους.

Ανοίγουμε το test.srt με έναν editor με την κωδικοποίηση που έχει αρχικά π.χ utf-8, iso-8859-7 και το σώζουμε με κωδικοποίηση cp1253/Windows 1253.

Μετά από το τερματικό τρέχουμε...


mplayer /home/username/video/test.avi

στις πληροφορίες στο τερματικό γράφει την ανάλυση και το bitrate...

π.χ VIDEO: [DX50] 504x208 12bpp 23.976 fps 735.9 kbps (89.8 kbyte/s)

κλείνουμε τον mplayer.

Και γράφουμε στο τερματικό...


mencoder -vop pp=de,scale=504:208 -oac copy -ovc lavc -lavcopts keyint=25:vcodec=mpeg4:vbitrate=736:vpass=1 -subcp cp1253 -subfont-text-scale 3.63 -sub "/home/username/video/test.srt" -o "/home/username/video/out.avi" "/home/username/video/test.avi"

scale: Η ανάλυση που έχει το βίντεο
vbitrate: Ο ρυθμός δεδομένων (δεν δέχεται δεκαδικά)
subcp: Η κωδικοποίηση που έχει το αρχείο srt
subfont-text-scale: Το μέγεθος που θα έχουν οι χαρακτήρες

Η διαδικασία παίρνει 20-30 λεπτά περίπου.

george_apan
09-08-06, 21:43
Να έχουν υπόψη όμως όλοι πως με αυτό τον τρόπο ξανασυμπιέζεται το video με αποτέλεσμα η ποιότητα να είναι χειρότερη ακόμα και αν το bitrate ανέβει. Γι'αυτό και μόνο δεν συμφωνώ με τη μέθοδο αυτή.

Επίσης σύμφωνα με το man page του mplayer το -vop έχει αντικατασταθεί με το -vf, ενώ το scale που προσθέτεις δεν χρειάζεται αφού δεν αλλάζεις την ανάλυση. Το vpass πάλι δεν χρειάζεται αφού έτσι κι αλλιώς μόνο ένα πέρασμα κάνεις από ότι βλέπω.

Εγώ για να ενσωματώσω υπότιτλους σε ένα αρχείο χρησιμοποιώ matroska που κατ'εμέ είναι πιο ορθή μέθοδος/format. To μειονέκτημα είναι βέβαια πως δεν παίζει με τίποτα σε stand-alones αλλά δεν με νοιάζει γιατί δεν έχω!

golity
09-08-06, 22:40
Να έχουν υπόψη όμως όλοι πως με αυτό τον τρόπο ξανασυμπιέζεται το video με αποτέλεσμα η ποιότητα να είναι χειρότερη ακόμα και αν το bitrate ανέβει. Γι'αυτό και μόνο δεν συμφωνώ με τη μέθοδο αυτή.
Το έχεις δοκιμάσει; :hmm:

Εγώ σε 4 ταινίες που το έκανα μέχρι στιγμής δεν έχω δει (οπτικά τουλάχιστον) καμία απολύτως αλλοίωση στην εικόνα

Επίσης σύμφωνα με το man page του mplayer το -vop έχει αντικατασταθεί με το -vf, ενώ το scale που προσθέτεις δεν χρειάζεται αφού δεν αλλάζεις την ανάλυση. Το vpass πάλι δεν χρειάζεται αφού έτσι κι αλλιώς μόνο ένα πέρασμα κάνεις από ότι βλέπω.
Για το -vf δεν γνωρίζω, αν και λειτουργεί απροβλημάτιστα με το -vop, όσο για το scale, λέει στο manual ότι πρέπει να το θέσεις σαν -1 για την default ανάλυση. Θα το δοκιμάσω για το scale, αν και ο τρόπος που χρησιμοποιώ μπορεί απλά να είναι πλεονασμός, δεν προκαλεί κάποιο πρόβλημα :) Θα τσεκάρω και το -vf

Εγώ για να ενσωματώσω υπότιτλους σε ένα αρχείο χρησιμοποιώ matroska που κατ'εμέ είναι πιο ορθή μέθοδος/format. To μειονέκτημα είναι βέβαια πως δεν παίζει με τίποτα σε stand-alones αλλά δεν με νοιάζει γιατί δεν έχω!
Ο κύριος λόγος που το ήθελα και εγώ ήταν για stand-alone divx/xvid players που δεν υποστηρίζουν υπότιτλους :)

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


Υ.Γ. Οποιαδήποτε πρόταση για περαιτέρω βελτίωση δεκτή :)

george_apan
10-08-06, 00:38
Το έχεις δοκιμάσει; :hmm:

Εγώ σε 4 ταινίες που το έκανα μέχρι στιγμής δεν έχω δει (οπτικά τουλάχιστον) καμία απολύτως αλλοίωση στην εικόνα Εξαρτάται. Στην τηλεόραση γενικότερα δεν ξεχωρίζεις λεπτομέρεις όπως στην οθόνη του pc. Αν το αρχικό bitrate είναι μικρό και εσύ δώσεις (αρκετά) μεγαλύτερο τότε η απώλεια θα είναι όσο το δυνατό μικρότερη. Μην περιμένεις θαύματα όμως με 1-pass encoding. Αν το αρχικό bitrate είναι μεγάλο και εσύ το μειώσεις θα πάθεις σοκ από τα blocks και το θόρυβο.


Για το -vf δεν γνωρίζω, αν και λειτουργεί απροβλημάτιστα με το -vop, Δουλεύει αλλά άγνωστο για πόσο ακόμα. Ίσως στο οποιοδήποτε επόμενο update να εγκαταλειφθεί. Το -vf χρησιμοποιείται με τον ίδιο τρόπο, απλά πάει ανάποδα η σειρά των φίλτρων αν θυμάμαι καλά.


Ο κύριος λόγος που το ήθελα και εγώ ήταν για stand-alone divx/xvid players που δεν υποστηρίζουν υπότιτλους :) Σε αυτή την περίπτωση (αλλά μόνο αυτή) δεν υπάρχει άλλος τρόπος, οπότε θα πρέπει να κάνεις ότι καλύτερο μπορείς.

Υ.Γ. Οποιαδήποτε πρόταση για περαιτέρω βελτίωση δεκτή :) Αρχίζω λοιπόν! :p

Γενικότερα και για το transcoding στο ίδιο format ισχύουν πάνω κάτω τα ίδια που ισχύουν και για τη μετατροπή από DVD. Κατ'αρχήν θα πρέπει να υπολογιστεί σωστά το target bitrate. Αυτό μπορεί να γίνει ακόμα και online: http://www.cole2k.net/?display=Calc
Στο movie info βάλτε τη διάρκεια της ταινίας, στο Audio bitrate το bitrate του ήχου και στο MB required το τελικό μέγεθος του καινούριου αρχείου (μείον 1-2 ΜΒ για σιγουριά). Για τον υπολογισμό του τελικού μεγέθους θα πρέπει να λάβετε κυριώς υπόψη τη διάρκεια της ταινίας (μην πάτε να συμπιέσετε το lord of the rings σε 700ΜΒ, γύρω στη 1hr 30'/CD καλά είναι). Καλό θα ήταν να δείτε και πόσο εύκολα/δύσκολα συμπιέζεται (compressibility test) αλλά είναι ψιλά γράμματα. Πατήστε Calculate και σημειώστε το νούμερο που βγαίνει στο DivX 5 bitrate.

Σ'αυτό το σημείο θα πρέπει να αποφασίσετε αν θέλετε 1-pass ή 2-pass encoding. Το 2-pass θα διαρκέσει περίπου το διπλάσιο χρόνο αλλά θα έχει πολύ καλύτερα αποτελέσματα όσον αφορά την ποιότητα. Το 1-pass υπάρχει περίπτωση και να μην καταφέρει να πιάσει το σωστό bitrate (καταστροφή αν βγει μεγαλύτερο) αλλά κρατάει το μισό περίπου χρόνο...

Πριν από τη συμπίεση μπορείτε να χρησιμοποιήσετε το

Για 1-pass μπορείτε να χρησιμοποιήσετε την εντολή:

mencoder -oac copy -ovc lavc -lavcopts v4mv:mbd=1:cmp=256:vbitrate=xxx -ffourcc DIVX -ffactor 1 -subcp cp1253 -sub /path/to/subs.srt -o /path/to/output.avi /path/to/input.avi όπου xxx το bitrate που βρήκατε στην παραπάνω σελίδα. Κατά τη γνώμη μου δεν χρειάζεται post-processing με το -vf καθόλου. Το -ffourcc DIVX το έβαλα γιατί νομίζω ότι το default του mencoder είναι ένα περίεργο δικό του αλλά τα standalones μάλλον δεν το ελέγχουν καν. To ffactor το έβαλα γιατί μου αρέσουν οι υπότιτλοι περίσσότερο έτσι. :whistle:

Ενώ για 2-pass:

mencoder -nosound -ovc lavc -lavcopts v4mv:mbd=1:cmp=256:vpass=1:vqscale=2:vqdiff=2:turbo -ffourcc DIVX -ffactor 1 -subcp cp1253 -sub /path/to/subs.srt -o /dev/null /path/to/input.avi
mencoder -oac copy -ovc lavc -lavcopts v4mv:mbd=1:cmp=256:vpass=2:vbitrate=xxx:vqdiff=2 -ffourcc DIVX -ffactor 1 -subcp cp1253 -sub /path/to/subs.srt -o /path/to/output.avi /path/to/input.avi όπου xxx το ίδιο bitrate με παραπάνω. Στο 1ο πέρασμα χρησιμοποιούμε σταθερό quantizer 2 για όλα τα frames.

Υπάρχουν και άλλα που ενδέχεται να κάνουν την ποιότητα καλύτερη (b-frames, masking) αλλά υπάρχει η περίπτωση να μην τα υποστηρίζει σωστά το player οπότε θα πήγαινε χαμένος ο παραπάνω χρόνος στη συμπίεση.

Τα παραπάνω δεν αλλάζουν καθόλου το μέγεθος του video. Επειδή οι γραμμές της τηλεόρασης (δεν μιλάμε για high definition) είναι μόνο 525, αλλά interlaced το οποίο σημαίνει πως κάθε στιγμή μόνο 262 είναι ορατές κάθε στιγμή, αν το αρχικό video έχει αρχική κάθετη ανάλυση πολύ μεγαλύτερη μπορείτε να τη μειώσετε χωρίς να καταλάβετε διαφορά προσθέτοντας παντού το:

-vf scale=yyy:256 Το yyy εξαρτάται βέβαια από το aspect-ratio του αρχικού video το οποίο δεν πρέπει να αλλάξει για να μην τους βλέπετε όλους σαν τον Φασούλα! Υπολογίζεται εύκολα με τη σχέση yyy=Αρχική_Χ*256/Αρχική_Υ, αλλά το νούμερο που θα πάρετε από τη σχέση να το προσαρμόσετε στο πιο κοντινό πολλαπλάσιο του 16 αλλιώς ο decoder θα τα παίξει.

Sorry για το highjack του Howto! :p

golity
10-08-06, 01:05
Sorry για το highjack του Howto! :p

Γιατί sorry, κάθε βοήθεια είναι ευπρόσδεκτη :)

Για το bitrate γιατί να μην το βλέπουμε δίνοντας...


mplayer /home/username/video/test.avi

που είναι και πιο απλό; :hmm:

Θα δοκιμάσω και τα δικά σου να δούμε αν θα έχουμε καλύτερο αποτέλεσμα. Πάντως δοκιμάζοντας και με 2ο πέρασμα με τα παραπάνω που έδωσα στο 1ο μου μήνυμα παρατήρησα ότι υπάρχει όντως διαφορά :whistle:

EDIT1: Έβαλα να κάνει το 1ο pass και νομίζω ότι πρέπει να προσθέσεις και την επιλογή για μέγεθος χαρακτήρων (-subfont-text-scale 3.63), γιατί μου φαίνονται μεγάλοι... να δίνεται και η επιλογή στον χρήστη τι τον βολεύει καλύτερα ;)

Στο 1ο pass δεν παρατήρησα διαφορά στην ποιότητα με το παράδειγμα που έχεις παραπάνω :hmm:

EDIT2:

Ενώ για 2-pass:

mencoder -nosound -ovc lavc -lavcopts v4mv:mbd=1:cmp=256:vpass=1:vqscale=2:vqdiff=2:turbo -ffourcc DIVX -ffactor 1 -subcp cp1253 -sub /path/to/subs.srt -o /dev/null /path/to/input.avi
mencoder -oac copy -ovc lavc -lavcopts v4mv:mbd=1:cmp=256:vpass=2:vbitrate=xxx:vqdiff=2 -ffourcc DIVX -ffactor 1 -subcp cp1253 -sub /path/to/subs.srt -o /dev/null /path/to/input.avi
Το /dev/null γιατί το έβαλες, πως θα πάρουμε το output της ταινίας με τους ενσωματωμένους υπότιτλους;

george_apan
10-08-06, 08:36
mplayer /home/username/video/test.avi
που είναι και πιο απλό; :hmm:
Για την περίπτωση που θέλουμε το μέγεθος του τελικού αρχείου να είναι διαφορετικό από αυτό του αρχικού. Αλλιώς, ναι μπορείς έχεις το ίδιο με το αρχικό bitrate.


EDIT1: Έβαλα να κάνει το 1ο pass και νομίζω ότι πρέπει να προσθέσεις και την επιλογή για μέγεθος χαρακτήρων (-subfont-text-scale 3.63), γιατί μου φαίνονται μεγάλοι... να δίνεται και η επιλογή στον χρήστη τι τον βολεύει καλύτερα ;)
Θέμα γούστου είναι. Όπως είπες καλά είναι να υπάρχει η επιλογή. Το default είναι -subfont-text-scale 5


Στο 1ο pass δεν παρατήρησα διαφορά στην ποιότητα με το παράδειγμα που έχεις παραπάνω :hmm:

EDIT2:

Το /dev/null γιατί το έβαλες, πως θα πάρουμε το output της ταινίας με τους ενσωματωμένους υπότιτλους;
Το 1ο pass δεν πρέπει να το κρατάς, ούτε και να το βλέπεις σαν μέτρο ποιότητας όταν κάνεις 2-pass encoding. Το 2ο είναι το σημαντικό και αυτό που τελικά κρατάς. Γι'αυτό και στέλνω το 1ο pass στο /dev/null, για να μην κάνεις και αχρειάστα writes στο σκληρό.

golity
10-08-06, 09:01
Το 2ο είναι το σημαντικό και αυτό που τελικά κρατάς. Γι'αυτό και στέλνω το 1ο pass στο /dev/null, για να μην κάνεις και αχρειάστα writes στο σκληρό.
Στο 2ο pass στον κώδικα σου η 2η γραμμή είναι και αυτή /dev/null ;)

Το δοκίμασα σε 3 βίντεο και σε ένα μου έβγαλε στο 1ο pass από τα 2 αρκετές γραμμές με το παρακάτω και συνέχισε κανονικά

[mpeg4 @ 0x86b9608]illegal MB_type Trem: 19min 1073mb A-V:0.000 [1788:0]
[mpeg4 @ 0x86b9608]Error at MB: 292
[mpeg4 @ 0x86b9608]marker does not match f_code
[mpeg4 @ 0x86b9608]marker does not match f_code
...
...
...
[mpeg4 @ 0x86b9608]marker does not match f_code
[mpeg4 @ 0x86b9608]marker does not match f_code
[mpeg4 @ 0x86b9608]concealing 640 DC, 640 AC, 640 MV errors


Τι σημαίνει αυτό; :hmm:

golity
10-08-06, 15:37
Να προσθέσω και ένα ακόμα για XVID με δύο περάσματα...

Πρώτο πέρασμα:

mencoder "/home/username/video/test.avi" -oac copy -ovc xvid -xvidencopts pass=1 -ffourcc DX50 -subcp cp1253 -subfont-text-scale 3.63 -sub "/home/username/video/test.srt" -o /dev/null

Δεύτερο πέρασμα:

mencoder "/home/username/video/test.avi" -oac copy -ovc xvid -xvidencopts pass=2:bitrate=xxx -ffourcc DX50 -subcp cp1253 -subfont-text-scale 3.63 -sub "/home/username/video/test.srt" -o "/home/username/video/out.avi"

george_apan
10-08-06, 15:37
Στο 2ο pass στον κώδικα σου η 2η γραμμή είναι και αυτή /dev/null ;)
Ωχ! :oops: Γράψε λάθος. Διορθώθηκε...


Το δοκίμασα σε 3 βίντεο και σε ένα μου έβγαλε στο 1ο pass από τα 2 αρκετές γραμμές με το παρακάτω και συνέχισε κανονικά

[mpeg4 @ 0x86b9608]illegal MB_type Trem: 19min 1073mb A-V:0.000 [1788:0]
[mpeg4 @ 0x86b9608]Error at MB: 292
[mpeg4 @ 0x86b9608]marker does not match f_code
[mpeg4 @ 0x86b9608]marker does not match f_code
...
...
...
[mpeg4 @ 0x86b9608]marker does not match f_code
[mpeg4 @ 0x86b9608]marker does not match f_code
[mpeg4 @ 0x86b9608]concealing 640 DC, 640 AC, 640 MV errors

Τι σημαίνει αυτό; :hmm:
Αυτά είναι λάθη του decoder, όχι του encoder, οπότε έχει κάποιο πρόβλημα (ίσως μη ορατό) στο συγκεκριμένο σημείο το αρχικό σου video, ίσως από το κατέβασμα, ίσως από καμιά γρατσουνιά στο CD.

golity
10-08-06, 15:40
Ούτε συννενοημένοι να ήμασταν :p

menioutz
18-07-08, 23:11
Καλησπέρα. Υπάρχει κάποιο πρόγραμμα που να μπορεί κανείς να ενσωματώσει ελληνικούς υπότιτλους σε ταινία και να προχωρήσει στη συνέχεια σε ripping ? Για πλατφὀρμα windows ενδιαφέρομαι
Ευχαριστώ εκ των προτέρων

euklidis
19-07-08, 00:07
Καλησπέρα. Υπάρχει κάποιο πρόγραμμα που να μπορεί κανείς να ενσωματώσει ελληνικούς υπότιτλους σε ταινία και να προχωρήσει στη συνέχεια σε ripping ? Για πλατφὀρμα windows ενδιαφέρομαι
Ευχαριστώ εκ των προτέρων

Εισαι ομως σε thread για λινουξ. Oποτε θα πρεπει να ποσταρεις διπλα στα windows. Αν θες παντως να ενσωματωσεις σε avi και να το κανεις μετα dvd τοτε για windows ειναι το VSO ConvertXtoDVD.

@ ADSLgr.com All rights reserved.