تحويل عروض PowerPoint إلى فيديو باستخدام JavaScript
عن طريق تحويل عرض PowerPoint إلى فيديو، ستحصل على
- زيادة في إمكانية الوصول: جميع الأجهزة (بغض النظر عن المنصة) مزودة بأدوات تشغيل الفيديو بشكل افتراضي مقارنةً بتطبيقات فتح العروض، لذلك يجد المستخدمون أنه من الأسهل فتح أو تشغيل الفيديوهات.
- وصول أوسع: من خلال الفيديوهات، يمكنك الوصول إلى جمهور كبير واستهدافه بمعلومات قد تبدو مملة في عرض تقديمي. معظم الاستطلاعات والإحصاءات تشير إلى أن الأشخاص يشاهدون الفيديوهات ويستهلكونها أكثر من غيرها من أشكال المحتوى، وعادةً ما يفضلون هذا النوع من المحتوى.
تحويل PowerPoint إلى فيديو في Aspose.Slides
يدعم Aspose.Slides تحويل العروض إلى فيديو.
- استخدم Aspose.Slides لتوليد مجموعة من الإطارات (من شرائح العرض) التي تتطابق مع معدل إطارات معين (FPS)
- استخدم أداة طرف ثالث مثل ffmpeg (للجافا) لإنشاء فيديو بناءً على هذه الإطارات.
تحويل PowerPoint إلى فيديو
- نزّل ffmpeg هنا.
- نفّذ شفرة JavaScript الخاصة بتحويل PowerPoint إلى فيديو.
تُظهر لك هذه الشفرة كيفية تحويل عرض (يحتوي على شكل وتأثيرين حركيين) إلى فيديو:
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 {
// صورة الحالة الأولية للرسوم المتحركة
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 للEffects في مُنشئها ثم تُستدعي حدث 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.
الحركات والEffects المدعومة
الدخول:
| نوع الحركة | Aspose.Slides | PowerPoint |
|---|---|---|
| Appear | ![]() |
![]() |
| Fade | ![]() |
![]() |
| Fly In | ![]() |
![]() |
| Float In | ![]() |
![]() |
| Split | ![]() |
![]() |
| Wipe | ![]() |
![]() |
| Shape | ![]() |
![]() |
| Wheel | ![]() |
![]() |
| Random Bars | ![]() |
![]() |
| Grow & Turn | ![]() |
![]() |
| Zoom | ![]() |
![]() |
| Swivel | ![]() |
![]() |
| Bounce | ![]() |
![]() |
التأكيد:
| نوع الحركة | Aspose.Slides | PowerPoint |
|---|---|---|
| Pulse | ![]() |
![]() |
| Color Pulse | ![]() |
![]() |
| Teeter | ![]() |
![]() |
| Spin | ![]() |
![]() |
| Grow/Shrink | ![]() |
![]() |
| Desaturate | ![]() |
![]() |
| Darken | ![]() |
![]() |
| Lighten | ![]() |
![]() |
| Transparency | ![]() |
![]() |
| Object Color | ![]() |
![]() |
| Complementary Color | ![]() |
![]() |
| Line Color | ![]() |
![]() |
| Fill Color | ![]() |
![]() |
الخروج:
| نوع الحركة | Aspose.Slides | PowerPoint |
|---|---|---|
| Disappear | ![]() |
![]() |
| Fade | ![]() |
![]() |
| Fly Out | ![]() |
![]() |
| Float Out | ![]() |
![]() |
| Split | ![]() |
![]() |
| Wipe | ![]() |
![]() |
| Shape | ![]() |
![]() |
| Random Bars | ![]() |
![]() |
| Shrink & Turn | ![]() |
![]() |
| Zoom | ![]() |
![]() |
| Swivel | ![]() |
![]() |
| Bounce | ![]() |
![]() |
مسارات الحركة:
| نوع الحركة | Aspose.Slides | PowerPoint |
|---|---|---|
| Lines | ![]() |
![]() |
| Arcs | ![]() |
![]() |
| Turns | ![]() |
![]() |
| Shapes | ![]() |
![]() |
| Loops | ![]() |
![]() |
| Custom Path | ![]() |
![]() |
الأسئلة المتكررة
هل يمكن تحويل العروض المحمية بكلمة مرور؟
نعم، يتيح Aspose.Slides العمل مع العروض المحمية بكلمة مرور. عند معالجة هذه الملفات، تحتاج إلى تقديم كلمة المرور الصحيحة حتى يتمكن المكتبة من الوصول إلى محتوى العرض.
هل يدعم Aspose.Slides الاستخدام في الحلول السحابية؟
نعم، يمكن دمج Aspose.Slides في التطبيقات والخدمات السحابية. تم تصميم المكتبة للعمل في بيئات الخوادم، مما يضمن أداءً عاليًا وقابلية توسع لمعالجة دفعات الملفات.
هل هناك قيود على حجم العروض أثناء التحويل؟
يستطيع Aspose.Slides التعامل مع عروض بحجم شبه غير محدود. ومع ذلك، عند العمل مع ملفات كبيرة جدًا قد تحتاج إلى موارد نظام إضافية، ومن المستحسن أحيانًا تحسين العرض لتحسين الأداء.

