تحويل PowerPoint إلى فيديو
من خلال تحويل عرض PowerPoint الخاص بك إلى فيديو، ستحصل على
- زيادة في الوصول: جميع الأجهزة (بغض النظر عن النظام الأساسي) مزودة بمشغلات فيديو بشكل افتراضي مقارنة بتطبيقات فتح العروض التقديمية، لذا فإن المستخدمين يجدون أنه من الأسهل فتح أو تشغيل الفيديوهات.
- نطاق أوسع: من خلال مقاطع الفيديو، يمكنك الوصول إلى جمهور كبير واستهدافهم بمعلومات قد تبدو مملة بخلاف ذلك في عرض تقديمي. تشير معظم الاستطلاعات والإحصائيات إلى أن الناس يشاهدون ويستهلكون مقاطع الفيديو أكثر من أشكال المحتوى الأخرى، وعادة ما يفضلون هذا المحتوى.
تحويل PowerPoint إلى فيديو في Aspose.Slides
في Aspose.Slides 22.11، قمنا بتطبيق دعم تحويل العرض التقديمي إلى فيديو.
- استخدم Aspose.Slides لإنشاء مجموعة من الإطارات (من الشرائح التقديمية) التي تتوافق مع FPS معين (الإطارات في الثانية)
- استخدم أداة خارجية مثل ffmpeg (للجافا) لإنشاء فيديو بناءً على الإطارات.
تحويل PowerPoint إلى فيديو
- أضف هذا إلى ملف POM الخاص بك:
<dependency>
<groupId>net.bramp.ffmpeg</groupId>
<artifactId>ffmpeg</artifactId>
<version>0.7.0</version>
</dependency>
-
قم بتحميل ffmpeg هنا.
-
قم بتشغيل كود Java لتحويل PowerPoint إلى فيديو.
يظهر هذا الكود بك من Java كيفية تحويل عرض تقديمي (يحتوي على شكل وصفتين مؤثرات الحركة) إلى فيديو:
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 {
// حالة الرسوم المتحركة الأولية bitmap
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 |
---|---|---|
خطوط | ||
أقواس | ||
تقلبات | ||
أشكال | ||
دواليب | ||
مسار مخصص |