Ppt文档转视频

我们采用asponse.slides工具解析ppt生成对应视频,步骤如下:

  1. ppt解析成图片
    2.为每一页图片插入对应讲解音频
    3.最后通过ffmpeg合成完整视频
    其中存的问题是asponse.slides解析ppt文档中的的动画效果该如何处理才能保持音视频同步
    能否给出相关的代码解决案例或建议指导,谢谢!

@chengzhi,
感谢您联系支持。

Aspose.Slides 可以以特定的每秒帧数(FPS)生成整个动画的一组帧。然后可以使用 FFmpeg 等工具使用这些帧来创建视频。下面的代码示例演示了将演示文稿导出为视频的操作,帧速率设置为 30 FPS:

final int FPS = 30;
Presentation presentation = new Presentation("sample.pptx");
try {
    PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
    try {
        PresentationPlayer player = new PresentationPlayer(animationsGenerator, FPS);
        try {
            player.setFrameTick((sender, args) ->
            {
                try {
                    ImageIO.write(args.getFrame(), "PNG", new File("frame_" + sender.getFrameIndex() + ".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();
}

很遗憾,我无法向您建议如何为每一页的图像插入相应的音频解释,并同步音频和视频。

com.aspose.slides.exceptions.ArgumentException: Culture Name: zh-CN-#Hans is not a supported culture
我在解析ppt生成图片的时候出现此问题,版本使用的是apsone.slides的版本是24.4

@chengzhi,
请分享以下文件和信息:

  • 您使用的示例 PowerPoint 演示文件
  • 用于重现错误的代码示例
  • 执行代码的操作系统版本
  • 您应用程序中的 JDK 目标版本

已经处理,程序执行开头设置了语言区域支持
Locale locale = new Locale(“zh”, “cn”);
Locale.setDefault(locale);

这个技术点对我们公司很重要,希望贵公司内部寻找下一些解决方案。目前我想的是否可以利用aspose.slides接口动态插入音频,然后aspose.slides提供另存为视频的能力接口,这样就可以直接转视频了,不知贵公司aspose.slides是否有这个能力,谢谢!

@chengzhi,
抱歉,您提供的信息不足以研究您遇到的问题。请提供上面请求的信息。

@andrey.potapov
您好,我用您给的例子采用帧生成的图片,有些图片被截取了,如图:
image.png (185.8 KB)
完整的图片效果如图:
image.jpg (128.0 KB)
arguments.getFrame() 这个获取的图片宽度被截断了。
核心代码设计实现如下:

Locale locale = new Locale("zh", "cn");
Locale.setDefault(locale);
Presentation presentation = new Presentation(pptPath);
int pageSize = presentation.getSlides().size();
final int fps = 120;
for(int i = 0; i < pageSize; i ++) {
    ISlide slide = presentation.getSlides().get_Item(i);
    Presentation presentationPage = new Presentation();
    presentationPage.getSlides().addClone(slide);
    PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentationPage);
    PresentationPlayer player = new PresentationPlayer(animationsGenerator, fps);
    final int pageNo = i;
    player.setFrameTick((sender, arguments) -> {
        String frame = String.format("/Users/chengzhi/myfile/convertppt/page%d_frame_%04d.png", pageNo, sender.getFrameIndex());
        try {
            ImageIO.write(arguments.getFrame(), "PNG", new java.io.File(frame));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    });
    animationsGenerator.run(presentationPage.getSlides());
    if (player != null) player.dispose();
    if (animationsGenerator != null) animationsGenerator.dispose();
}

您可以给予一些修改意见吗?谢谢!!

@chengzhi,
谢谢您提供的详细信息。您可以分享一下您使用的演示文稿文件吗?您可以将文件压缩成zip格式并在这里上传存档。

@andrey.potapov
测试样稿.zip (4.4 MB)
这个是ppt文稿信息

@chengzhi,
当您使用Aspose.Slides创建新演示文稿时,默认幻灯片尺寸为720 x 540。您提供的PowerPoint演示文稿中的幻灯片具有不同的尺寸。因此,在克隆幻灯片之前,您应该在新创建的演示文稿中设置相同的幻灯片尺寸。

Presentation presentation = new Presentation(pptPath);
Dimension2D slideSize = presentation.getSlideSize().getSize();
float slideWidth = (float) slideSize.getWidth();
float slideHeight = (float) slideSize.getHeight();
...
...
Presentation presentationPage = new Presentation();
presentationPage.getSlides().removeAt(0);
presentationPage.getSlideSize().setSize(slideWidth, slideHeight, SlideSizeScaleType.DoNotScale);
presentationPage.getSlides().addClone(slide);

Slide Size|Aspose.Slides Documentation

@andrey.potapov
按照您给的代码修改,尺寸问题已解决,非常感谢 :+1: :+1:!!但是有些动画效果丢失了,是不是本身在支持上存在缺陷,是否可以进一步优化调整修改。
这个是原文档:
AI做课.pptx.zip (2.6 MB)
生成的最后视频动画效果:
课件合成.mp4.zip (1.4 MB)
看在动画获取上有没有一些代码修改上的意见。谢谢!!!

@chengzhi,
谢谢您的指出。我已经重现了您提到的动画问题。

我们在内部问题跟踪系统中开启了以下新的工单,并将按照 Free Support Policies 中提到的条款解决它们。

Issue ID(s): SLIDESJAVA-39462

您可以通过 Paid Support Services 获得支持,如果您需要优先支持,还可以直接联系我们的付费支持管理团队。

@andrey.potapov
感谢您的回复!请问这个 Free Support Policies如果解决这个问题,大概需要多久?这个需求是我们的核心需求,现在做技术验证,如果可以实现就向公司汇报,下一步应该就是采购。期待您的答复,谢谢!!!

@chengzhi,
抱歉,我目前无法确定问题何时解决,但我们的开发人员将尽力解决此问题。感谢您的耐心。

@andrey.potapov
感谢您积极反馈,目前我们核心需求验证下来这个是一个关键卡点,公司也特别期待他们的处理,期待用上这个产品,也希望他们能给一个大致时间,便于内部给领导汇报。

@chengzhi,
抱歉,我目前没有额外的信息提供给您。感谢您评估 Aspose.Slides for Java。

@andrey.potapov
您好,请问下aspose.slides for java 这个产品可以独立购买吗?如果购买后,这个问题是不是可以提前纳入日程去规划解决?公司想针对这个问题进行商务上的洽谈,请问可以咨询谁,能否提供一下联系方式或者渠道?谢谢!!

@chengzhi,
您可以在Aspose.Purchase论坛上联系我们的销售团队以获取Aspose.Slides for Java。您也可以通过联系Paid Support Services来优先处理问题。