问题描述
我有一个包含图像和视频的google drive文件夹。我想使用Google脚本从这些文件生成Google幻灯片演示文稿。
无法弄清楚如何插入/嵌入视频。我尝试使用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());
}
}