Etherovamon Δημοσ. 25 Αυγούστου 2011 Δημοσ. 25 Αυγούστου 2011 Γεια σας, παιδιά. Θέλω οπωσδήποτε να ''κόψω'' κομμάτια από βίντεο κατάληξης .mkv και .avi. Έκανα έρευνα στο forum και πραγματικά πολλές απαντήσεις και tutorials ήταν άκρως βοηθητικά! Συναντώ ένα πρόβλημα όμως παρόλα αυτά.. Θα πρέπει τα κομμάτια από τα βίντεο που θέλω να κόψω να κοπούν σε συγκεκριμένα δευτερόλεπτα και όχι απλώς λεπτά. Τα πιο επικρατή και δημοφιλή προγράμματα που προτείνονται στο forum (και γενικότερα..)παρόλο που κάνουν direct cut έχουν αυτό το ελάττωμα. Eνώ ορίζω δευτερόλεπτα αρχής και τέλους κοπής βίντεο το πρόγραμμα κόβει το βίντεο 2-3 δευτερόλεπτα πριν ή μετά το δευτερόλεπτο που του όρισα αρχικά με αποτέλεσμα να μη γίνεται η δουλειά μου. Έχω αμελήσει εγώ να κάνω κάποιες επιλογές ή οι δυνατότητες των απλών αυτών προγραμμάτων περιορίζονται στο επίπεδο αυτό; Εάν χρειάζεται κάποιο πιο επαγγελματικό πρόγραμμα, παρακαλώ προτείνετέ μου κάποιο το οποίο κάνει άριστα αυτό που θέλω και χωρίς να κάνει re-encode το κομμάτι που κόβει αλλάζοντας δυστυχώς την ποιότητα του αποσπάσματος. Το pinnacle 12 για παράδειγμα που χρησιμοποίησα δοκιμαστικά (στην απόγνωσή μου) έκοβε μεν στο επιθυμητό δευτερόλεπτο, αλλά όχι με direct cut και χωρίς να διατηρεί στο αποσπώμενο κομμάτι την αρχική ποιότητα mkv. Σας ευχαριστώ προκαταβολικά
TheELF Δημοσ. 25 Αυγούστου 2011 Δημοσ. 25 Αυγούστου 2011 Δυστυχώς αυτό που θες δεν γίνεται λόγου key frame,δεν μπορείς να κόψεις όπου θες γιατί το αρχείο που θα δημιουργηθεί δεν θα είναι σωστό και δεν θα παίζει οπότε και πρέπει να τα κάνεις recode. Το κοντινότερο γίνεται με το avidemux όπου διαλέγεις δευτερόλεπτο και μετά επιλέγεις με τα πλήκτρα του σταυρού πάνω κάτω το πλησιέστερω σημείο όπου μπορείς να κόψεις,αν και δέχεται και Mp4 και h264 και mkv ωστόσο έχει πρόβλημα με τα Mkv.
parsifal Δημοσ. 25 Αυγούστου 2011 Δημοσ. 25 Αυγούστου 2011 Καλημέρα. Δεν κάνεις εσύ κάτι λάθος ούτε φταίνε τα προγράμματα που χρησιμοποιείς. Είναι εγγενής περιορισμός όλων των κωδικοποιήσεων video τύπου "interframe coding". Τί σημαίνει ακριβώς αυτό; Η σχετική θεωρία είναι κάπως περίπλοκη, αλλά θα προσπαθήσω να το εξηγήσω όσο πιο απλά μπορώ. Ένα video stream τύπου π.χ. MPEG-4 ASP ή MPEG-4 AVC/H.264, όπως αυτά που βρίσκουμε συχνά σε αρχεία AVI και MKV, απαρτίζεται από μία σειρά καρέ ή αλλιώς frames. Αυτά ομαδοποιούνται μέσα στο stream σε ομάδες που λέγονται GOP ή GOV (Group Of Pictures, Group Of Video, αντίστοιχα). Μέσα σε ένα GOP, δεν είναι όλα τα frames ισοδύναμα/ίδιου τύπου: Υπάρχουν τα keyframes ή αλλιώς I-frames. Κάθε GOP περιέχει ένα μοναδικό I-frame, το οποίο είναι πάντα το πρώτο frame του GOP. Ένα keyframe είναι αυτοτελές, δηλαδή περιέχει όλη την πληροφορία που χρειάζεται ώστε να αποκωδικοποιηθεί πλήρως από τον σχετικό decoder, χωρίς αυτός να χρειάζεται να ανατρέξει σε άλλα σημεία του αρχείου για έξτρα πληροφορία Μετά το I-frame και μέχρι το επόμενο I-frame (που σηματοδοτεί έναρξη νέου GOP), υπάρχουν P-frames και (μπορεί και) B-frames. Κανένα από αυτά δεν είναι αυτοτελές όπως τα I-frames. Για να αποκωδικοποιηθεί πλήρως ένα P-frame, χρειάζεται πρώτα να έχει αποκωδικοποιηθεί το αμέσως προηγούμενο από αυτό frame στην ομάδα. Με τα B-frames, το πράγμα μπλέκεται ακόμη περισσότερο: Ένα B-frame δεν εξαρτάται μόνο από το προηγούμενό του όπως συμβαίνει στα P-frames, αλλά και από το επόμενό του Βάσει των παραπάνω, ας δούμε ένα παράδειγμα. Έστω λοιπόν ότι έχουμε ένα αρχείο MKV με τα ακόλουθα χαρακτηριστικά: Ρυθμός αναπαραγωγής 25 fps (καρέ ανά δευτερόλεπτο) Διάρκεια 20 δευτερόλεπτα. Αυτό σημαίνει ότι απαρτίζεται συνολικά από (25 * 20) = 500 frames, με το κάθε frame να διαρκεί (1 / 25) = 0,04 δευτερόλεπτα ή 40 millisecond 2 GOPs, των 250 frames και 10 δευτερολέπτων το καθένα Έρχεσαι τώρα εσύ και θέλεις με ένα πρόγραμμα να «πετάξεις» τα 5 πρώτα δευτερόλεπτα και να κρατήσεις τα επόμενα 15. Και μάλιστα, χωρίς reencoding. Γίνεται όμως αυτό; Για να δούμε. Το video stream έχει σχηματικά την παρακάτω μορφή (για λόγους απλότητας, ας πούμε ότι δεν υπάρχουν καθόλου B-frames): > IPP...(άλλα 121 P)...P_κεντρικό...(άλλα 122 P)...PPP IPPP...(άλλα 243 P)...PPP | | | | └────────────────── GOP_1 ─────────────────────────┘ └─────── GOP_2 ─────────┘ Θες δηλαδή να κρατήσεις οτιδήποτε βρίσκεται από το Pκεντρικό και μετά και να «πετάξεις» τα πρώτα 124 frames από το GOP1. Όμως τα πρώτα 124 αυτά frames σχηματίζουν μία αλυσίδα «αλληλεξάρτησης» (λόγω της ιδιοτροπίας των P-frames να βασίζονται στο αμέσως προηγούμενο αποκωδικοποιημένο καρέ για την πλήρη αποκωδικοποίησή τους), οπότε το Pκεντρικό και όλα τα επόμενά του στο ίδιο GOP μένουν ξεκρέμαστα και δε μπορούν να δώσουν εικόνα. Ορισμένα προγράμματα αναγνωρίζουν την κατάσταση αυτή και, παρ' ο,τι εσύ έχεις ορίσει ως starting point του κοψίματος το Pκεντρικό, αυτά «σιωπηρά» το μετακινούν στο I-frame του GOP όπου βρίσκεται το μη-έγκυρο starting point που όρισες. Άλλα προγράμματα μπορεί να σου βγάλουν μήνυμα σφάλματος/προειδοποίησης και να μη σε αφήσουν να συνεχίσεις, αν δε αλλάξεις μόνος σου το starting point. Τέλος, κάποια προγράμματα σε αφήνουν, κόβουν από εκεί που τους είπες, αλλά αν πας να αναπαράγεις το τελικό αποτέλεσμα, θα δεις ότι για τα πρώτα μερικά frames του video δεν παίρνεις εικόνα, παρά μόνο ήχο. Ή παίρνεις μία περίεργη, αλλοιωμένη εικόνα. Και η εικόνα επανέρχεται πλήρως μόνο αφότου η αναπαραγωγή φτάσει στο επόμενο GOP που είναι πλήρες και όχι ακρωτηριασμένο. Ο μόνος τρόπος να αποφύγεις τα παραπάνω και να κόψεις με σωστό τρόπο εκεί που θέλεις είναι να κάνεις έναν συμβιβασμό: Να δεχτείς ότι, αν θέλεις το starting point σου να μη βρίσκεται ακριβώς στην αρχή ενός GOP αλλά σε ενδιάμεσο σημείο του, θα πρέπει στο συγκεκριμένο (και μόνο) GOP να εφαρμοστεί reencoding, με ρυθμίσεις τέτοιες που να δίνουν νέα GOPs μικρότερου μήκους, ώστε να έχεις την ακρίβεια κοψίματος που επιθυμείς. Αυτό συνήθως δε γίνεται με αυτόματο τρόπο στα διάφορα προγράμματα επεξεργασίας, θέλει αρκετά βηματάκια. Για παράδειγμα, δες αυτό το σύντομο test video που είχα ανεβάσει παλιότερα. Έχει ρυθμό 23,976 fps, διάρκεια 20,02 sec και αποτελείται από 480 frames. Αν προσπαθήσεις να αφαιρέσεις με το Avidemux π.χ. τα πρώτα 4 sec (δηλαδή τα frames 0-100), θα διαπιστώσεις ότι ισχύουν περίπου όσα ανέφερα στο παράδειγμα πιο πάνω, γιατί το video stream έχει 2 GOPs, το πρώτο από το frame 0 μέχρι και το 239, το δεύτερο από το 240 μέχρι και το 479. Η λύση εδώ (με το Avidemux πάντα) είναι: Ανοίγεις το αρχείο και στο διάλογο που σου λέει περί εναλλακτικού τρόπου ανάγνωσης και απώλεια frame accuracy, απαντάς No (θέλουμε frame accuracy) Επιλέγεις την περιοχή που αντιστοιχεί στο πρώτο GOP (frames 0-239), κρατάς το Audio σε Copy mode και στο Video επιλέγεις τύπο κωδικοποίησης ίδιο με τον πρωτότυπο (το video είναι AVC/H.264, οπότε επιλέγεις MPEG-4 AVC) Κλικ στο Configure του Video, ώστε να κάνεις ρυθμίσεις που θα αυξήσουν την ακρίβεια κοψίματος και θα μειώσουν όσο το δυνατόν λιγότερο την ποιότητα του original GOP. Εγώ δοκίμασα με Encoding Mode: Constant Rate Factor (Single Pass), δείκτη ποιότητας 18 και στην καρτέλα Frame, για Maximum GOP Size έβαλα 24 frames (ακρίβεια περίπου 100 millisecond) Σώσιμο/κωδικοποίηση του 1ου GOP σε νέο αρχείο MKV, έστω part1.mkv Έχοντας ανοικτό πάντα το ίδιο, original αρχείο, delete των selected frames του 1ου GOP που μόλις κωδικοποίησες σε νέο αρχείο Αλλάζεις το Video mode σε Copy και σώζεις το υπόλοιπο ως part2.mkv Κλείνεις το τρέχον αρχείο και ανοίγεις το part1.mkv File > Append... και επιλέγεις το part2.mkv Επιλέγεις με μεγαλύτερη ακρίβεια πλέον το starting point για το κόψιμό σου και σώζεις το απόσπασμα σε νέο MKV
Etherovamon Δημοσ. 25 Αυγούστου 2011 Μέλος Δημοσ. 25 Αυγούστου 2011 Σας ευχαριστώ πολύ για τις εκτενείς διευκρινίσεις. Με το που δοκιμάσω σύμφωνα με τις οδηγίες θα σας πω συμπεράσματα
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.