تحويل PowerPoint إلى فيديو
باستخدام تحويل العرض التقديمي الخاص بك من PowerPoint إلى فيديو، ستحصل على
- زيادة في إمكانية الوصول: جميع الأجهزة (بغض النظر عن النظام) مزودة بمشغلات فيديو بشكل افتراضي مقارنة بتطبيقات فتح العروض التقديمية، لذا يجد المستخدمون أنه من الأسهل فتح أو تشغيل مقاطع الفيديو.
- وصول أكبر: من خلال مقاطع الفيديو، يمكنك الوصول إلى جمهور كبير واستهدافهم بمعلومات قد تبدو مملة بخلاف ذلك في عرض تقديمي. تشير معظم الاستطلاعات والإحصائيات إلى أن الناس يشاهدون ويستهلكون مقاطع الفيديو أكثر من أشكال المحتوى الأخرى، وعادة ما يفضلون هذا النوع من المحتوى.
تحويل PowerPoint إلى فيديو باستخدام Aspose.Slides
في Aspose.Slides 22.11، قمنا بتنفيذ دعم تحويل العرض التقديمي إلى فيديو.
- استخدم Aspose.Slides لإنشاء مجموعة من الإطارات (من شرائح العرض التقديمي) التي تتوافق مع FPS معين (إطار في الثانية)
- استخدم أداة خارجية مثل ffmpeg (لـ java) لإنشاء فيديو استنادًا إلى الإطارات.
تحويل PowerPoint إلى فيديو
- أضف هذا إلى ملف POM الخاص بك:
<dependency>
<groupId>net.bramp.ffmpeg</groupId>
<artifactId>ffmpeg</artifactId>
<version>0.7.0</version>
</dependency>
-
قم بتنزيل ffmpeg هنا.
-
قم بتشغيل كود Java لتحويل PowerPoint إلى فيديو.
يوضح لك هذا الكود كيفية تحويل عرض تقديمي (يحتوي على شكل وصفتين متحركتين) إلى فيديو:
Presentation presentation = new Presentation();
try {
// يضيف شكل ابتسامة ثم يحركه
IAutoShape smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);
ISequence mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
IEffect effectIn = mainSequence.addEffect(smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);
IEffect effectOut = mainSequence.addEffect(smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);
effectIn.getTiming().setDuration(2f);
effectOut.setPresetClassType(EffectPresetClassType.Exit);
final int fps = 33;
ArrayList<String> frames = new ArrayList<String>();
PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
try
{
PresentationPlayer player = new PresentationPlayer(animationsGenerator, fps);
try {
player.setFrameTick((sender, arguments) ->
{
try {
String frame = String.format("frame_%04d.png", sender.getFrameIndex());
arguments.getFrame().save(frame, ImageFormat.Png);
frames.add(frame);
} catch (IOException e) {
throw new 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
FFmpeg ffmpeg = new FFmpeg("path/to/ffmpeg");
FFprobe ffprobe = new FFprobe("path/to/ffprobe");
FFmpegBuilder builder = new FFmpegBuilder()
.addExtraArgs("-start_number", "1")
.setInput("frame_%04d.png")
.addOutput("output.avi")
.setVideoFrameRate(FFmpeg.FPS_24)
.setFormat("avi")
.done();
FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
executor.createJob(builder).run();
} catch (IOException e) {
e.printStackTrace();
}
تأثيرات الفيديو
يمكنك تطبيق الرسوم المتحركة على الكائنات على الشرائح واستخدام الانتقالات بين الشرائح.
تجعل الرسوم المتحركة والانتقالات عروض الشرائح أكثر جاذبية وإثارة للاهتمام - وتفعل نفس الشيء بالنسبة لمقاطع الفيديو. دعنا نضيف شريحة أخرى وانتقال إلى الكود الخاص بالعرض التقديمي السابق:
// يضيف شكل ابتسامة ويحركه
// ...
// يضيف شريحة جديدة وانتقال متحرك
ISlide newSlide = presentation.getSlides().addEmptySlide(presentation.getSlides().get_Item(0).getLayoutSlide());
newSlide.getBackground().setType(BackgroundType.OwnBackground);
newSlide.getBackground().getFillFormat().setFillType(FillType.Solid);
newSlide.getBackground().getFillFormat().getSolidFillColor().setColor(Color.MAGENTA);
newSlide.getSlideShowTransition().setType(TransitionType.Push);
يدعم Aspose.Slides أيضًا الرسوم المتحركة للنصوص. لذا نقوم بتحريك الفقرات على الكائنات، والتي ستظهر واحدة تلو الأخرى (مع التأخير المحدد لثانية واحدة):
Presentation presentation = new Presentation();
try {
// يضيف نصوصًا ورسومًا متحركة
IAutoShape autoShape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 210, 120, 300, 300);
Paragraph para1 = new Paragraph();
para1.getPortions().add(new Portion("Aspose Slides for Java"));
Paragraph para2 = new Paragraph();
para2.getPortions().add(new Portion("تحويل عرض PowerPoint مع النص إلى فيديو"));
Paragraph para3 = new Paragraph();
para3.getPortions().add(new Portion("فقرة بعد فقرة"));
IParagraphCollection paragraphCollection = autoShape.getTextFrame().getParagraphs();
paragraphCollection.add(para1);
paragraphCollection.add(para2);
paragraphCollection.add(para3);
paragraphCollection.add(new Paragraph());
ISequence mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
IEffect effect1 = mainSequence.addEffect(para1, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
IEffect effect2 = mainSequence.addEffect(para2, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
IEffect effect3 = mainSequence.addEffect(para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
IEffect effect4 = mainSequence.addEffect(para3, EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
effect1.getTiming().setTriggerDelayTime(1f);
effect2.getTiming().setTriggerDelayTime(1f);
effect3.getTiming().setTriggerDelayTime(1f);
effect4.getTiming().setTriggerDelayTime(1f);
final int fps = 33;
ArrayList<String> frames = new ArrayList<String>();
PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
try
{
PresentationPlayer player = new PresentationPlayer(animationsGenerator, fps);
try {
player.setFrameTick((sender, arguments) ->
{
try {
String frame = String.format("frame_%04d.png", sender.getFrameIndex());
arguments.getFrame().save(frame, ImageFormat.Png);
frames.add(frame);
} catch (IOException e) {
throw new 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
FFmpeg ffmpeg = new FFmpeg("path/to/ffmpeg");
FFprobe ffprobe = new FFprobe("path/to/ffprobe");
FFmpegBuilder builder = new FFmpegBuilder()
.addExtraArgs("-start_number", "1")
.setInput("frame_%04d.png")
.addOutput("output.avi")
.setVideoFrameRate(FFmpeg.FPS_24)
.setFormat("avi")
.done();
FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
executor.createJob(builder).run();
} catch (IOException e) {
e.printStackTrace();
}
فصول تحويل الفيديو
لتمكينك من أداء مهام تحويل PowerPoint إلى فيديو، يوفر Aspose.Slides PresentationAnimationsGenerator و PresentationPlayer الفصول.
يسمح لك PresentationAnimationsGenerator بتعيين حجم الإطار للفيديو (الذي سيتم إنشاؤه لاحقًا) من خلال منشئه. إذا قمت بتمرير مثيل للعرض التقديمي، فسيتم استخدام Presentation.SlideSize
ويولد رسومًا متحركة تستخدمها PresentationPlayer.
عند إنشاء الرسوم المتحركة، يتم إنشاء حدث NewAnimation
لكل رسوم متحركة تالية، والتي تحتوي على معلمة IPresentationAnimationPlayer. هذا هو فصل يمثل مشغلًا لرسوم متحركة منفصلة.
للعمل مع IPresentationAnimationPlayer، يتم استخدام خاصية Duration (المدة الكاملة للرسوم المتحركة) وطريقة SetTimePosition. يتم تعيين كل موضع لرسوم متحركة ضمن نطاق 0 إلى المدة، ثم ستعيد طريقة GetFrame
صورة BufferedImage تتوافق مع حالة الرسوم المتحركة في تلك اللحظة:
Presentation presentation = new Presentation();
try {
// يضيف شكل ابتسامة ويحركه
IAutoShape smile = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.SmileyFace, 110, 20, 500, 500);
ISequence mainSequence = presentation.getSlides().get_Item(0).getTimeline().getMainSequence();
IEffect effectIn = mainSequence.addEffect(smile, EffectType.Fly, EffectSubtype.TopLeft, EffectTriggerType.AfterPrevious);
IEffect effectOut = mainSequence.addEffect(smile, EffectType.Fly, EffectSubtype.BottomRight, EffectTriggerType.AfterPrevious);
effectIn.getTiming().setDuration(2f);
effectOut.setPresetClassType(EffectPresetClassType.Exit);
PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
try {
animationsGenerator.setNewAnimation(animationPlayer ->
{
System.out.println(String.format("المدة الإجمالية للرسوم المتحركة: %f", animationPlayer.getDuration()));
animationPlayer.setTimePosition(0); // الحالة الأولية للرسوم المتحركة
try {
// حالة الرسوم المتحركة الأولية
animationPlayer.getFrame().save("firstFrame.png", ImageFormat.Png);
} catch (IOException e) {
throw new RuntimeException(e);
}
animationPlayer.setTimePosition(animationPlayer.getDuration()); // الحالة النهائية للرسوم المتحركة
try {
// آخر إطار من الرسوم المتحركة
animationPlayer.getFrame().save("lastFrame.png", ImageFormat.Png);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
} finally {
if (animationsGenerator != null) animationsGenerator.dispose();
}
} finally {
if (presentation != null) presentation.dispose();
}
لجعل جميع الرسوم المتحركة في عرض تقديمي تعمل في نفس الوقت، يتم استخدام فصل PresentationPlayer. يأخذ هذا الفصل مثيل PresentationAnimationsGenerator وFPS للتأثيرات في منشئته ثم يستدعي حدث FrameTick
لجميع الرسوم المتحركة للحصول على تشغيلها:
Presentation presentation = new Presentation("animated.pptx");
try {
PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
try {
PresentationPlayer player = new PresentationPlayer(animationsGenerator, 33);
try {
player.setFrameTick((sender, arguments) ->
{
try {
arguments.getFrame().save("frame_" + sender.getFrameIndex() + ".png", ImageFormat.Png);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
animationsGenerator.run(presentation.getSlides());
} finally {
if (player != null) player.dispose();
}
} finally {
if (animationsGenerator != null) animationsGenerator.dispose();
}
} finally {
if (presentation != null) presentation.dispose();
}
ثم يمكن تجميع الإطارات الناتجة لإنتاج فيديو. راجع قسم تحويل PowerPoint إلى فيديو.
الرسوم المتحركة والتأثيرات المدعومة
الظهور:
نوع الرسوم المتحركة | Aspose.Slides | PowerPoint |
---|---|---|
الظهور | ||
تلاشي | ||
المجيء | ||
التطفو | ||
التقسيم | ||
المسح | ||
الشكل | ||
العجلة | ||
الأشرطة العشوائية | ||
نمو وتدوير | ||
تكبير | ||
الدوران | ||
الارتداد |
التأكيد:
نوع الرسوم المتحركة | Aspose.Slides | PowerPoint |
---|---|---|
النبضة | ||
نبضة اللون | ||
الأرجوحة | ||
الدوران | ||
النمو / الانكماش | ||
التشبع | ||
التغميق | ||
الإضاءة | ||
الشفافية | ||
لون الكائن | ||
اللون التكميلي | ||
لون الخط | ||
لون التعبئة |
المغادرة:
نوع الرسوم المتحركة | Aspose.Slides | PowerPoint |
---|---|---|
الاختفاء | ||
تلاشي | ||
المغادرة | ||
الطفو للخارج | ||
التقسيم | ||
المسح | ||
الشكل | ||
الأشرطة العشوائية | ||
انكماش وتدوير | ||
تكبير | ||
الدوران | ||
الارتداد |
مسارات الحركة:
نوع الرسوم المتحركة | Aspose.Slides | PowerPoint |
---|---|---|
خطوط | ||
اقواس | ||
تحولات | ||
أشكال | ||
حلقات | ||
مسار مخصص |