Μετατροπή παρουσιάσεων PowerPoint σε βίντεο με JavaScript

Εισαγωγή

Με τη μετατροπή της παρουσίασης PowerPoint σε βίντεο, αποκτάτε

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

Μετατροπή PowerPoint σε Βίντεο στο Aspose.Slides

Το Aspose.Slides υποστηρίζει τη μετατροπή παρουσίασης‑προς‑βίντεο.

  • Χρησιμοποιήστε το Aspose.Slides για να δημιουργήσετε ένα σύνολο καρέ (από τις διαφάνειες της παρουσίασης) που αντιστοιχούν σε συγκεκριμένο FPS (καρέ ανά δευτερόλεπτο)
  • Χρησιμοποιήστε ένα εργαλείο τρίτου μέρους όπως το ffmpeg (για java) για να δημιουργήσετε ένα βίντεο με βάση τα καρέ.

Μετατροπή PowerPoint σε Βίντεο

  1. Κατεβάστε το ffmpeg εδώ.

  2. Εκτελέστε τον κώδικα JavaScript μετατροπής PowerPoint σε βίντεο.

Αυτός ο κώδικας JavaScript σας δείχνει πώς να μετατρέψετε μια παρουσίαση (που περιλαμβάνει ένα σχήμα και δύο εφέ κίνησης) σε βίντεο:

var presentation = new aspose.slides.Presentation();
try {
    // Προσθέτει ένα σχήμα χαμόγελου και μετά το ανιματίζει
    var smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.SmileyFace, 110, 20, 500, 500);
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effectIn = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.TopLeft, aspose.slides.EffectTriggerType.AfterPrevious);
    var effectOut = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.BottomRight, aspose.slides.EffectTriggerType.AfterPrevious);
    effectIn.getTiming().setDuration(2.0);
    effectOut.setPresetClassType(aspose.slides.EffectPresetClassType.Exit);
    final var fps = 33;
    var frames = java.newInstanceSync("java.util.ArrayList");
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, fps);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    var frame = java.callStaticMethodSync("java.lang.String", "format", "frame_%04d.png", sender.getFrameIndex());
                    arguments.getFrame().save(frame, aspose.slides.ImageFormat.Png);
                    frames.add(frame);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
    // Διαμόρφωση φακέλου δυαδικών αρχείων ffmpeg. Δείτε αυτή τη σελίδα: https://github.com/rosenbjerg/FFMpegCore#installation
    var ffmpeg = java.newInstanceSync("FFmpeg", "path/to/ffmpeg");
    var ffprobe = java.newInstanceSync("FFprobe", "path/to/ffprobe");
    var builder = java.newInstanceSync("FFmpegBuilder").addExtraArgs("-start_number", "1").setInput("frame_%04d.png").addOutput("output.avi").setVideoFrameRate(java.getStaticFieldValue("FFmpeg", "FPS_24")).setFormat("avi").done();
    var executor = java.newInstanceSync("FFmpegExecutor", ffmpeg, ffprobe);
    executor.createJob(builder).run();
} catch (e) {console.log(e);
    console.log(e);
}

Εφέ Βίντεο

Μπορείτε να εφαρμόζετε κινήσεις σε αντικείμενα στις διαφάνειες και να χρησιμοποιείτε μεταβάσεις μεταξύ των διαφανειών.

Οι κινήσεις και οι μεταβάσεις κάνουν τις παρουσιάσεις πιο ελκυστικές και ενδιαφέρουσες—και το ίδιο ισχύει για τα βίντεο. Ας προσθέσουμε μια ακόμη διαφάνεια και μετάβαση στον κώδικα της προηγούμενης παρουσίασης:

// Προσθέτει ένα σχήμα χαμόγελου και το ανιματίζει
// ...
// Προσθέτει μια νέα διαφάνεια και κινούμενη μετάβαση
var newSlide = presentation.getSlides().addEmptySlide(presentation.getSlides().get_Item(0).getLayoutSlide());
newSlide.getBackground().setType(aspose.slides.BackgroundType.OwnBackground);
newSlide.getBackground().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
newSlide.getBackground().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "MAGENTA"));
newSlide.getSlideShowTransition().setType(aspose.slides.TransitionType.Push);

Το Aspose.Slides υποστηρίζει επίσης κίνηση για κείμενα. Έτσι κάνουμε κίνηση σε παραγράφους σε αντικείμενα, που θα εμφανίζονται μία μετά την άλλη (με καθυστέρηση ενός δευτερολέπτου):

var presentation = new aspose.slides.Presentation();
try {
    // Προσθέτει κείμενο και κινήσεις
    var autoShape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 210, 120, 300, 300);
    var para1 = new aspose.slides.Paragraph();
    para1.getPortions().add(new aspose.slides.Portion("Aspose Slides for Node.js via Java"));
    var para2 = new aspose.slides.Paragraph();
    para2.getPortions().add(new aspose.slides.Portion("convert PowerPoint Presentation with text to video"));
    var para3 = new aspose.slides.Paragraph();
    para3.getPortions().add(new aspose.slides.Portion("paragraph by paragraph"));
    var paragraphCollection = autoShape.getTextFrame().getParagraphs();
    paragraphCollection.add(para1);
    paragraphCollection.add(para2);
    paragraphCollection.add(para3);
    paragraphCollection.add(new aspose.slides.Paragraph());
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effect1 = mainSequence.addEffect(para1, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect2 = mainSequence.addEffect(para2, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect3 = mainSequence.addEffect(para3, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    var effect4 = mainSequence.addEffect(para3, aspose.slides.EffectType.Appear, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
    effect1.getTiming().setTriggerDelayTime(1.0);
    effect2.getTiming().setTriggerDelayTime(1.0);
    effect3.getTiming().setTriggerDelayTime(1.0);
    effect4.getTiming().setTriggerDelayTime(1.0);
    final var fps = 33;
    var frames = java.newInstanceSync("java.util.ArrayList");
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, fps);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    var frame = java.callStaticMethodSync("java.lang.String", "format", "frame_%04d.png", sender.getFrameIndex());
                    arguments.getFrame().save(frame, aspose.slides.ImageFormat.Png);
                    frames.add(frame);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
    // Διαμόρφωση φακέλου δυαδικών αρχείων ffmpeg. Δείτε αυτή τη σελίδα: https://github.com/rosenbjerg/FFMpegCore#installation
    var ffmpeg = java.newInstanceSync("FFmpeg", "path/to/ffmpeg");
    var ffprobe = java.newInstanceSync("FFprobe", "path/to/ffprobe");
    var builder = java.newInstanceSync("FFmpegBuilder").addExtraArgs("-start_number", "1").setInput("frame_%04d.png").addOutput("output.avi").setVideoFrameRate(java.getStaticFieldValue("FFmpeg", "FPS_24")).setFormat("avi").done();
    var executor = java.newInstanceSync("FFmpegExecutor", ffmpeg, ffprobe);
    executor.createJob(builder).run();
} catch (e) {console.log(e);
    console.log(e);
}

Κλάσεις Μετατροπής Βίντεο

Για να σας επιτρέψει να εκτελείτε εργασίες μετατροπής PowerPoint σε βίντεο, το Aspose.Slides παρέχει τις κλάσεις PresentationAnimationsGenerator και PresentationPlayer.

PresentationAnimationsGenerator σας επιτρέπει να ορίσετε το μέγεθος των καρέ για το βίντεο (που θα δημιουργηθεί αργότερα) μέσω του κατασκευαστή του. Εάν περάσετε μια παρουσίαση, θα χρησιμοποιηθεί Presentation.getSlideSize και δημιουργεί κινήσεις που χρησιμοποιεί το PresentationPlayer.

Κατά τη δημιουργία κινήσεων, παράγεται ένα συμβάν NewAnimation για κάθε επακόλουθη κίνηση, το οποίο έχει τη παράμετρο του παίκτη κίνησης παρουσίασης. Η τελευταία είναι μια κλάση που αντιπροσωπεύει έναν παίχτη για μια ξεχωριστή κίνηση.

Για να εργαστείτε με τον παίκτη κίνησης παρουσίασης, χρησιμοποιούνται οι μέθοδοι getDuration (η συνολική διάρκεια της κίνησης) και setTimePosition. Η θέση κάθε κίνησης ορίζεται μέσα στο εύρος 0 έως διάρκεια, και έπειτα η μέθοδος getFrame επιστρέφει ένα BufferedImage που αντιστοιχεί στην κατάσταση της κίνησης εκείνη τη στιγμή:

var presentation = new aspose.slides.Presentation();
try {
    // Προσθέτει ένα σχήμα χαμόγελου και το ανιματίζει
    var smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.SmileyFace, 110, 20, 500, 500);
    var mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
    var effectIn = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.TopLeft, aspose.slides.EffectTriggerType.AfterPrevious);
    var effectOut = mainSequence.addEffect(smile, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.BottomRight, aspose.slides.EffectTriggerType.AfterPrevious);
    effectIn.getTiming().setDuration(2.0);
    effectOut.setPresetClassType(aspose.slides.EffectPresetClassType.Exit);
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        animationsGenerator.setNewAnimation(animationPlayer -> {
            console.log(java.callStaticMethodSync("java.lang.String", "format", "Animation total duration: %f", animationPlayer.getDuration()));
            animationPlayer.setTimePosition(0);// αρχική κατάσταση κίνησης
            try {
                // bitmap αρχικής κατάστασης κίνησης
                animationPlayer.getFrame().save("firstFrame.png", aspose.slides.ImageFormat.Png);
            } catch (e) {console.log(e);
                throw java.newInstanceSync("java.lang.RuntimeException", e);
            }
            animationPlayer.setTimePosition(animationPlayer.getDuration());// τελική κατάσταση της κίνησης
            try {
                // τελευταίο καρέ της κίνησης
                animationPlayer.getFrame().save("lastFrame.png", aspose.slides.ImageFormat.Png);
            } catch (e) {console.log(e);
                throw java.newInstanceSync("java.lang.RuntimeException", e);
            }
        });
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Για να κάνετε όλες τις κινήσεις σε μια παρουσίαση να παίζονται ταυτόχρονα, χρησιμοποιείται η κλάση PresentationPlayer. Αυτή η κλάση λαμβάνει μια παρουσίαση PresentationAnimationsGenerator, καθώς και FPS για τα εφέ στον κατασκευαστή της και στη συνέχεια καλεί το συμβάν FrameTick για όλες τις κινήσεις ώστε να παιχτούν:

var presentation = new aspose.slides.Presentation("animated.pptx");
try {
    var animationsGenerator = new aspose.slides.PresentationAnimationsGenerator(presentation);
    try {
        var player = new aspose.slides.PresentationPlayer(animationsGenerator, 33);
        try {
            player.setFrameTick((sender, arguments) -> {
                try {
                    arguments.getFrame().save(("frame_" + sender.getFrameIndex()) + ".png", aspose.slides.ImageFormat.Png);
                } catch (e) {console.log(e);
                    throw java.newInstanceSync("java.lang.RuntimeException", e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) {
                player.dispose();
            }
        }
    } finally {
        if (animationsGenerator != null) {
            animationsGenerator.dispose();
        }
    }
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Στη συνέχεια τα δημιουργημένα καρέ μπορούν να συνδυαστούν για την παραγωγή βίντεο. Δείτε την ενότητα Convert PowerPoint to Video.

Υποστηριζόμενες Κινήσεις και Εφέ

Entrance:

Τύπος Κίνησης Aspose.Slides PowerPoint
Εμφάνιση not supported supported
Ξεθώριασμα supported supported
Πτήση Εισόδου supported supported
Αιώρηση Εισόδου supported supported
Διαίρεση supported supported
Σκούπισμα supported supported
Σχήμα supported supported
Τροχός supported supported
Τυχαίες Γραμμές supported supported
Ανάπτυξη & Στροφή not supported supported
Ζουμ supported supported
Στροφή supported supported
Αναπήδηση supported supported

Emphasis:

Τύπος Κίνησης Aspose.Slides PowerPoint
Παλμός not supported supported
Παλμός Χρώματος not supported supported
Ταλάντωση supported supported
Περιστροφή supported supported
Ανάπτυξη/Σμίκρυνση not supported supported
Αποκορεσμός not supported supported
Σκοτείνιασμα not supported supported
Ασάφεια not supported supported
Διαφάνεια not supported supported
Χρώμα Αντικειμένου not supported supported
Συμπληρωματικό Χρώμα not supported supported
Χρώμα Γραμμής not supported supported
Χρώμα Γέμισμα not supported supported

Exit:

Τύπος Κίνησης Aspose.Slides PowerPoint
Εξαφάνιση not supported supported
Ξεθώριασμα supported supported
Πτήση Εξόδου supported supported
Αιώρηση Εξόδου supported supported
Διαίρεση supported supported
Σκούπισμα supported supported
Σχήμα supported supported
Τυχαίες Γραμμές supported supported
Σύσπαση & Στροφή not supported supported
Ζουμ supported supported
Στροφή supported supported
Αναπήδηση supported supported

Motion Paths:

Τύπος Κίνησης Aspose.Slides PowerPoint
Γραμμές supported supported
Τόξα supported supported
Στροφές supported supported
Σχήματα supported supported
Βρόχοι supported supported
Προσαρμοσμένη Διαδρομή supported supported

Συχνές Ερωτήσεις

Μπορεί να γίνει μετατροπή παρουσιάσεων που είναι προστατευμένες με κωδικό;

Ναι, το Aspose.Slides επιτρέπει τη χρήση παρουσιάσεων προστατευμένων με κωδικό. Κατά την επεξεργασία τέτοιων αρχείων, πρέπει να παρέχετε τον σωστό κωδικό ώστε η βιβλιοθήκη να έχει πρόσβαση στο περιεχόμενο της παρουσίασης.

Υποστηρίζει το Aspose.Slides χρήση σε λύσεις cloud;

Ναι, το Aspose.Slides μπορεί να ενσωματωθεί σε εφαρμογές και υπηρεσίες cloud. Η βιβλιοθήκη έχει σχεδιαστεί για να λειτουργεί σε περιβάλλοντα διακομιστών, εξασφαλίζοντας υψηλή απόδοση και κλιμάκωση για μαζική επεξεργασία αρχείων.

Υπάρχουν περιορισμοί μεγέθους για τις παρουσιάσεις κατά τη μετατροπή;

Το Aspose.Slides μπορεί να διαχειριστεί παρουσιάσεις πρακτικά οποιουδήποτε μεγέθους. Ωστόσο, όταν εργάζεστε με πολύ μεγάλα αρχεία, μπορεί να απαιτηθούν πρόσθετοι πόροι συστήματος, και μερικές φορές συστήνεται η βελτιστοποίηση της παρουσίασης για βελτίωση της απόδοσης.