4.1.06

dead end

[techy stuff. Οι μη techy τύποι παρακαλούνται να προσπεράσουν]

Ωραία, έχω ψάξει πιστεύω παντού, οπότε ήρθε η ώρα να πω τον πόνο μου:

Υπάρχει ΕΣΤΩ ΚΑΙ ΜΙΑ βιβλιοθήκη open source (ή να παίζει σε open source) στην οποία να μπορείς να επεξεργαστείς προγραμματιστικά ένα βιντεάκι (mpeg, avi, mov, δε με νοιάζει) καρέ-καρέ; Π.χ. να ζωγραφίσεις σε όλα τα καρέ ένα animated logo ή ένα timer; Και να υπάρχουν κάπου βασικές οδηγίες για το πώς να το πετύχεις;

Το μόνο που έχω βρει και φαίνεται να είναι πολλά υποσχόμενο είναι το Java Media Framework, αλλά η τεκμηρίωσή του δεν είναι στα επίπεδα που μας έχει καλομάθει η Sun (ούτε καν αξιοπρεπή σχόλια στα παραδείγματα δεν έχει). Και το κυριότερο: δοκίμασα να τρέξω 1-2 παραδείγματα και μου φαίνεται ότι δε δουλεύει και τόσο καλά, τουλάχιστον σε Linux. Π.χ. ενώ θα έπρεπε να βλέπω τη φάτσα του Σαντάμ για δέκα δευτερόλεπτα, βλέπω ένα μπλε πράγμα. Και δε νομίζω να έχω κάνει κάποιο λάθος, αν σκεφτείς ότι δεν άλλαξα τίποτα από τον κώδικα του παραδείγματος...

Βλέπετε les business άνοιξαν και πρέπει να σχεδιάσω ένα κατανεμημένο σύστημα που θα κάνει batch processing σε ΠΟΛΛΑ βίντεο (input: 1000 ώρες ημερησίως, output: 100 ώρες ημερησίως σε VideoCD). Υπόψη: όχι ιδιαίτερα εξεζητημένο processing. Και έχουμε το εξής πρόβλημα:
  1. Σε open source μπορείς να στήσεις πολύ εύκολα ένα κατανεμημένο σύστημα με ελάχιστο κόστος (πολύ βασικό) και πολύ καλή αξιοπιστία και scalability (ας πούμε το NFS είναι κατά πολύ ανώτερο του SMB για shared filesystem).
  2. Υπάρχει το DirectShow που σου επιτρέπει να κάνεις σχεδόν παπάδες με βιντεάκια, αλλά παίζει μόνο στα ακατανόμαστα.
  3. Πρόβλημα.

Βέβαια δεν είναι και τόσο σκούρα τα πράγματα: μπορώ πάντα να βάλω καμιά δεκαριά μηχανήματα με Linux να χειρίζονται τα δεδομένα και να παράγουν τα τελικά VideoCD, και 3-4 WinXP να κάνουν την επεξεργασία καρέ-καρέ που θέλω (δεν είναι δηλαδή εκεί το bottleneck), αλλά μου προξενεί εντύπωση ρε παιδί μου: να υπάρχει μόνο το JMF κι αυτό μισό;

Μου φαίνεται πως οι πατέντες μας έχουν κάνει μεγάλη ζημιά.

8 σχόλια:

Ανδρέας είπε...

Να ρωτήσω το αυτονόητο (αν και το έχεις μάλλον ψάξει ήδη). Τα γνωστά open source video players όπως το mplayer και vlc player τι βιβλιοθήκες χρησιμοποιούν; Δεν υποστηρίζουν αυτά που ζητάς;
Δεν έχω δυστυχώς ασχοληθεί ποτέ με κάτι παρόμοιο...

J95 είπε...

Βασικά οι βιβλιοθήκες τους απ' όσο έχω καταλάβει δίνουν API για αναπαραγωγή, για transcoding, άντε και για να πετάξεις κανέναν υπότιτλο ή να κάνεις κανένα εφεδάκι, αλλά το κοινό σημείο είναι ότι το βιντεάκι το αντιμετωπίζεις σαν ενιαίο αντικείμενο.

Δε μπορείς δηλαδή να έχεις πρόσβαση σε επίπεδο frames.

Ή τουλάχιστον δεν τη διακρίνω...

Ανδρέας είπε...

Χρησιμοποιώντας τις διαφημήσεις της Nova (είναι mpeg αρχεία) διαπίστωσα με έκπληξη πως δεν παρέχεται η δυνατότητα να δεις frame-frame τα clips σε MPlayer και VLC player (μιλώ πάντα για Mac εκδόσεις). Στο Quicktime player όμως της Apple έχω αυτή τη δυνατότητα. Πιθανότατα λοιπόν όντως δεν υπάρχει η συγκεκριμένη δυνατότητα στις open source βιβλιοθήκες.
Επειδή η quicktime βιβλιοθληκη φαίνεται να προσφέρει ό,τι ζητάς θα πρότεινα ρίξεις και μια ματιά εδώ:
http://developer.apple.com/quicktime/

Φαίνεται πως υποστηρίζει ό,τι ζητάς.

Υπάρχει SDK και για Windows όπως και Java API.
Αν το Linux είναι προϋπόθεση, ξέχασέ το.
Δεν ξέρω τι ακριβώς συμβαίνει με το licensing, νομίζω πως χρειάζεσαι license αν διανέμεις ο ίδιος με το προϊόν σου το quicktime.

Ανώνυμος είπε...

Κοίταξε λίγο το GStreamer και το Gnonlin αν και σε βλέπω να γράφεις πολύ κώδικα.

Θα υπέθετα ότι το xine-lib μπορεί να έχει κατάλληλα εργαλεία αλλά "assumption is the mother of all fuckups".

Όλα ρόδινα λοιπόν. Καλό ψάξιμο, καλό γράψιμο.

Ανώνυμος είπε...

Κοίτα και εδώ: http://www.imagemagick.org/script/index.php
Αν και είναι κυρίως για εικόνες, υποστηρίζει και video formats.

Ανώνυμος είπε...

και
matr

J95 είπε...

Ευχαριστώ ΠΑΡΑ πολύ για τις απαντήσεις σας. Μου φαίνεται όταν βρω λίγο χρόνο θα μαζέψω αυτή τη συζήτηση σε ένα post en-el ώστε να βοηθήσει κι άλλους.

Ανώνυμος είπε...

Also found this (DirectShow)

http://www.yafla.com/dennisforbes/Extracting-Video-Frames-with-NET/Extracting-Video-Frames-with-NET.html