使用Google脚本将Google Drive视频插入Google幻灯片 问题和解决方法:模式1:模式2: Patten 3:参考文献:

问题描述

我有一个包含图像和视频的google drive文件夹。我想使用Google脚本从这些文件生成Google幻灯片演示文稿。

遵循此tutorial,使用图像效果很好。

无法弄清楚如何插入/嵌入视频。我尝试使用insertVideo方法,但是失败了,因为它期望与驱动器的File对象类型不对应的Video对象。

我很好奇是否有人找到了实现此目标的方法。任何帮助表示感谢,谢谢!

var deck = SlidesApp.create('My Slides');

function addAsset(assetFile) {
    var slide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);

    if (assetFile.getMimeType().startsWith('image')) {
      slide.insertimage(assetFile);
    } else {
      slide.insertVideo(assetFile);
    }
}

function main() {
  var folder = DriveApp.getFoldersByName('my assets').next();
  var files = folder.getFiles();

  while (files.hasNext()) {
    var file = files.next();
    addAsset(file);
  }
}

解决方法

问题和解决方法:

我认为您遇到问题的原因是该文件无法直接用于insertVideo。 insertVideo的参数是Google幻灯片的URL和视频对象。我认为您遇到问题的原因是由于这个原因。

关于参数的URL,在当前阶段,似乎使用insertVideo的方法时,视频内容必须是公开共享的YouTube的URL。

从上述情况来看,作为解决您的问题的一种解决方法,我想提出以下三种模式。

模式1:

首先,以这种模式创建一个包含视频内容的新Google幻灯片。在这种情况下,需要手动将视频放到新的Google幻灯片中。并且,此幻灯片用作模板幻灯片。当您要将视频内容放入要使用的Google幻灯片时,可使用脚本来使用模板幻灯片的视频内容。这样,您可以使用insertVideo实现目标。

模式2:

在这种模式下,首先,您要使用的所有视频都会手动放入YouTube。而且,当您要将视频内容放入要使用的Google幻灯片时,YouTube的视频内容将通过脚本使用。这样,您可以使用insertVideo实现目标。

Patten 3:

在此模式下,使用Slides API。使用Slides API时,可以使用文件ID将Google云端硬盘上的文件直接放入Google幻灯片。修改脚本后,它如下所示。这用于此替代方法。使用此脚本之前,请please enable Slides API at Advanced Google services

function main() {
  var deck = SlidesApp.create('My Slides');
  var slide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  deck.saveAndClose();
  deck = SlidesApp.openById(deck.getId());
  slide = deck.getSlides()[1];
  var pageObjectId = slide.getObjectId();
  var folder = DriveApp.getFoldersByName('my assets').next();
  var files = folder.getFiles();
  var videos = [];
  while (files.hasNext()) {
    var file = files.next();
    if (file.getMimeType().startsWith('image')) {
      slide.insertImage(file);
    } else if (file.getMimeType().startsWith("video")) {
      videos.push({createVideo: {source: "DRIVE",id: file.getId(),elementProperties: {pageObjectId: pageObjectId}}});
    }
  }
  if (videos.length > 0) {
    Slides.Presentations.batchUpdate({requests: videos},deck.getId());
  }
}

参考文献:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...