Βασικά υπάρχει μεγάλο μπέρδεμα όσον αφορά το aspect ratio. Θα προσπαθήσω να εξηγήσω τις βασικές έννοιες όσο πιο απλά γίνεται :
aspect ratio = frame_width / frame_height
Δεν είναι τίποτα παραπάνω και τίποτα λιγότερο. Απλά αυτή η πράξη. Επειδή όμως υπάρχουν τα καταραμένα black borders, η έννοια αυτή χάνει λίγο το νόημά της. Ας εξηγηθώ. Αν έχουμε ένα frame με διαστάσεις 720x568 που έχει 16:9 flag anamorphic, σημαίνει ότι στην αναπαραγωγή θα γίνει resize το width του έτσι ώστε να ισχύει :
new_width / 568 = 16 / 9 =>
new_width= (16 * 568) /9 = 1010 ~> 1008
Πως προκύπτει το 1008; Προκύπτει επειδή θέλουμε οι διαστάσεις να είναι mod16, δηλαδή να διαιρούνται ακριβώς με το 16. (1008 / 16 = 63 ενώ 1010 / 16 = 63,125).
Αν προσέξεις όμως, 720 / 568 = 1,268 και 1008 / 568 ~= 16 / 9 . ʼρα που κολλάνε τα 1,77 και 1,87 aspect ratio που αναφέρονται στα δισκάκια DVD; Ουσιαστικά είναι τα aspect ratio του true video frame, δηλαδή το aspect ratio που προκύπτει από τις διαστάσεις του ωφέλιμου βίντεο του κάδρου, δηλαδή το κάδρο που προκύπτει μετά το cropping. Είναι λίγο περίεργο όλο αυτό αλλά δυστυχώς έτσι έχουν τα πράματα. Εγώ μπορώ να σου δώσω έναν αλγόριθμο για μετατροπές resize, στο σπίτι έχω και ένα πρόγραμμα που έφτιαξα για τη συγκεκριμένη δουλειά, αλλά στο ιντερνετ καφέ εδώ στην Αλεξανδρούπολη δεν το έχω δυστυχώς.
Αρχικά δεδομένα:
i) original video dimensions (frame_width, frame_height)
ii) crop values (x1, x2, y1, y2)
iii) aspect ratio flag (16/9, 4/3)
iv) desired new width
Υπολογισμοί :
Κώδικας:
|
1) True_width = original_width - (x1 + x2)
2) (True_width + x1 + x2) / (new_height + y1 + y2) = aspect_ratio_flag =>
=> New_height= ((true_width + x1 + x2) / aspect_ratio_flag) - (y1 + y2)
3) New_aspect_ratio = true_width / new_height
4) desired_width / calc_height = new_aspect_ratio =>
=> calc_height = desired_width / new_aspect_ratio
5) final_calc_height = closest_mod16(calc_height)
6) final_dimensions = desired_width x final_calc_height
|
Με τους παραπάνω υπολογισμούς βρίσκεις το τελικό height με βάση το επιθυμητό width. Όμως αυτό δεν ισχύει αν θέλεις να κάνεις ένα anamorphic encoding. Ισχύει όμως για όλες τις πηγές, anamorphic ή μη. Αν θέλεις να κάνεις anamorphic encode (μόνο με mkv container γίνεται αυτό απότι θυμάμαι), τότε τα πράματα είναι κάπως πιο απλά, καθώς κάνεις απλά crop, βρίσκεις τα closest mod16 των διαστάσεων που προκύπτουν, και στη συνέχεια δίνεις το aspect ratio στα αντίστοιχα flags του matroska container στον muxer που χρησιμοποιείς. Κάποιοι υπολογισμοί πάλι...
Κώδικας:
|
1) True_height = original_height - (y1 + y2)
2) (new_width + x1 + x2) / (true_height + y1 + y2) = aspect_ratio_flag =>
=> New_width= (aspect_ratio_flag / (true_height +y1 + y2)) (x1 + x2)
3) New_aspect_ratio = new_width / true_height
4) calc_width / true_height = new_aspect_ratio =>
=> calc_width = new_aspect_ratio / true_height
5) final_dimensions = calc_width x true_height
|
Τις παραπάνω διαστάσεις που προκύπτουν, τις βάζεις στα flag του matroska container και δε χρειάζονται να είναι mod16, σε αντίθεση με τις διαστάσεις του frame που θα κάνεις encode.
Ελπίζω να βοήθησα, αν και μάλλον σε μπέρδεψα, αλλά πίστεψέ με, μετά από καιρό σίγουρα θα καταλάβεις τους υπολογισμούς αυτούς!
Υ.Γ.
Ξέχασα να αναφέρω ότι κάνοντας αυτούς τους υπολογισμούς, ουσιαστικά αδιαφορείς για τα περίεργα aspect ratio που αναγράφονται πάνω στα DVD, αφού ξαναυπολογίζεις μόνος σου και μάλιστα με μεγαλύτερη ακρίβεια, αυτά τα aspect ratio!
_________________
Διαβάστε τους Κανόνες του Forum! Τα greeklish απαγορεύονται!
Διαβάστε το Playback FAQ
Feeling... nauseous already? Wait to see my anime list first...
And remember, fansubbing is NOT serious business...