设置
1. 安装 @remotion/cloudrun
- npm
- yarn
- pnpm
- bun
npm i --save-exact @remotion/cloudrun@4.0.206
npm i --save-exact @remotion/cloudrun@4.0.206
pnpm i @remotion/cloudrun@4.0.206
pnpm i @remotion/cloudrun@4.0.206
bun i @remotion/cloudrun@4.0.206
bun i @remotion/cloudrun@4.0.206
yarn --exact add @remotion/cloudrun@4.0.206
yarn --exact add @remotion/cloudrun@4.0.206
Also update
remotion and all `@remotion/*` packages to the same version.Remove all
^ character in front of the version numbers of it as it can lead to a version conflict.2. 创建 GCP 项目
转到 Google Cloud 控制台中的 管理资源 屏幕。
- 在页面顶部的选择组织下拉列表中,选择要创建项目的组织资源。如果您是免费试用用户,请跳过此步骤,因为此列表不会显示。
- 单击“创建项目”。
- 在出现的“新项目”窗口中,输入项目名称并根据需要选择结算账户。项目名称只能包含字母、数字、单引号、连字符、空格或感叹号,并且必须介于 4 到 30 个字符之间。
- 在“位置”框中输入父组织或文件夹资源。该资源将是新项目的分层父级。如果“无组织”是一个选项,您可以选择它将新项目创建为其自己资源层次结构的顶级。
- 输入新项目详细信息后,单击“创建”。
3. 在 GCP 项目中启用计费
为了启用 Cloud Run API,必须在此项目中启用计费。转到 Google Cloud 控制台中的 计费 屏幕。按照屏幕上的提示创建结算账户,然后将新项目链接到此结算账户。
4. 在 GCP 中设置权限 / API / 服务账户
Google Cloud Shell 是用于管理托管在 GCP 上的资源和应用程序的基于浏览器的命令行界面(CLI)。它提供一个带有预安装命令行工具和实用程序(包括 Google Cloud SDK 和 Terraform)的虚拟机。通过此 Shell,您可以直接在浏览器中访问您的项目、资源和服务。以下步骤将引入一个脚本,以在您的项目中启用必要的 API、资源和权限。
-
转到仪表板,确保在顶部下拉菜单中选择了您的新项目。然后,在屏幕右上角,单击激活 Cloud Shell 图标
-
在 Cloud Shell 中,输入以下命令并按照提示操作。
bashcurl -L https://github.com/remotion-dev/remotion/raw/main/packages/cloudrun/src/gcpInstaller/gcpInstaller.tar | tar -x -C . && node install.mjsbashcurl -L https://github.com/remotion-dev/remotion/raw/main/packages/cloudrun/src/gcpInstaller/gcpInstaller.tar | tar -x -C . && node install.mjs
- 选择 1来为 Remotion Cloud Run 设置此项目,或者再次运行设置以进行更新。
- 选择 2来生成新的 .env 文件,或管理已创建的密钥,以及按照这些步骤进行操作。
-
在提示应用计划时,输入
yes。在提示生成 .env 文件时,输入yes。 -
运行以下命令查看环境变量。将它们复制到本地的
.env文件中(如果不存在,则创建):bashcat .envbashcat .env -
从虚拟机中删除 .env 文件:
bashrm .envbashrm .env
5. 可选:验证权限设置
从您的代码库中运行以下命令,验证权限是否在 GCP 中正确设置。只要您的 GCP 项目与匹配的 Remotion 版本一起设置,这个步骤应该通过。
npx remotion cloudrun permissions
npx remotion cloudrun permissions
对于以下步骤,您可以在 CLI 上执行它们,也可以使用 Node.JS APIs 进行编程执行。
6. 部署服务
通过执行以下命令部署一个可以将视频渲染到您的 GCP 项目中的服务:
bashnpx remotion cloudrun services deploy
bashnpx remotion cloudrun services deploy
您可以使用 deployService() 部署一个可以将视频渲染到您的 GCP 项目中的服务。
tsconstdeployResult = awaitdeployService ({projectID : "my-remotion-project",region : "us-east1",});
tsconstdeployResult = awaitdeployService ({projectID : "my-remotion-project",region : "us-east1",});
返回的对象包含一个名为 name 的字段,您需要用它来进行渲染。
服务包含必要的二进制文件和 JavaScript 代码,可以接收一个serve URL,并从中进行渲染。服务与 Remotion 版本绑定,如果您升级 Remotion,您需要部署一个新服务。服务不包括您的 Remotion 代码,它将在下一步中部署。
将打印一个Cloud Run URL,提供访问已部署服务和执行渲染的唯一端点。或者,您可以使用也会打印的Service Name来访问已部署服务并执行渲染。
7. 部署站点
运行以下命令将您的 Remotion 项目部署到 Cloud Storage 存储桶。将项目的入口点作为最后一个参数传递。
bashnpx remotion cloudrun sites create src/index.ts --site-name=my-video
bashnpx remotion cloudrun sites create src/index.ts --site-name=my-video
将打印一个serveUrl,指向已部署项目。
在将来更新 Remotion 视频时,重新部署您的站点。传递相同的--site-name以覆盖先前的部署。如果不传递--site-name,则每次部署都会生成一个唯一的 URL。
首先,您需要在您首选的区域创建一个 Cloud Storage 存储桶。如果已经存在一个,则将使用该存储桶:
tsimportpath from "path";import {deploySite ,getOrCreateBucket } from "@remotion/cloudrun";const {bucketName } = awaitgetOrCreateBucket ({region : "us-east1",});
tsimportpath from "path";import {deploySite ,getOrCreateBucket } from "@remotion/cloudrun";const {bucketName } = awaitgetOrCreateBucket ({region : "us-east1",});
接下来,将您的 Remotion 项目上传到 Cloud Storage 存储桶。指定您的 Remotion 项目的入口点,这是调用registerRoot()的文件。
tsconst {serveUrl } = awaitdeploySite ({bucketName ,entryPoint :path .resolve (process .cwd (), "src/index.ts"),siteName : "my-video",});
tsconst {serveUrl } = awaitdeploySite ({bucketName ,entryPoint :path .resolve (process .cwd (), "src/index.ts"),siteName : "my-video",});
在将来更新 Remotion 视频时,重新部署您的站点。传递相同的siteName以覆盖先前的部署。如果不传递siteName,则每次部署都会生成一个唯一的 URL。
8. 渲染视频或静态图
-
<serve-url | site-name>在第 7 步中返回的 serve URL,用于站点部署。如果使用来自 Cloud 存储桶的 serve URL,则可以传递 site-name。 -
<composition-id>传递您想要渲染的合成物的 ID。 -
<cloud-run-url>在第 6 步中返回的 Cloud Run URL,用于服务部署。
bashnpx remotion cloudrun render <serve-url | site-name> <composition-id> --cloud-run-url=<cloud-run-url>
bashnpx remotion cloudrun render <serve-url | site-name> <composition-id> --cloud-run-url=<cloud-run-url>
<service-name>在第 6 步中返回的服务名称。<region>服务所在的区域,在第 6 步中返回。仅在使用服务名称时才需要。
bashnpx remotion cloudrun render <serve-url | site-name> <composition-id> --service-name=<service-name> --region=<region>
bashnpx remotion cloudrun render <serve-url | site-name> <composition-id> --service-name=<service-name> --region=<region>
直到视频渲染完成,进度将被打印出来。恭喜!您已经使用 Remotion Cloudrun 渲染了您的第一个视频 🚀
-
<serve-url | site-name>在第 7 步中返回的 serve URL,用于站点部署。如果使用来自 Cloud 存储桶的 serve URL,则可以传递 site-name。 -
<still-id>传递您想要渲染的静态图的 ID。 -
<cloud-run-url>在第6步骤中返回了 Cloud Run URL。
bashnpx remotion cloudrun still <serve-url | site-name> <still-id> --cloud-run-url=<cloud-run-url>
bashnpx remotion cloudrun still <serve-url | site-name> <still-id> --cloud-run-url=<cloud-run-url>
<service-name>在第6步骤中返回了服务名称。<region>服务所在的区域,在第6步骤中返回。仅在使用服务名称时需要。
bashnpx remotion cloudrun still <serve-url | site-name> <still-id> --service-name=<service-name> --region=<region>
bashnpx remotion cloudrun still <serve-url | site-name> <still-id> --service-name=<service-name> --region=<region>
恭喜!您已经使用 Remotion Cloudrun 渲染了第一个静态图 🚀
您已经在之前的步骤中获得了服务名称。但由于您只需要部署一次服务,因此在渲染视频之前以编程方式检索已部署服务的名称是有用的,以防您的 Node.JS 程序重新启动。我们可以使用 compatibleOnly 标志调用 getServices() 来仅获取具有匹配版本的服务。
tsimport {getServices ,renderMediaOnCloudrun } from "@remotion/cloudrun/client";constservices = awaitgetServices ({region : "us-east1",compatibleOnly : true,});constserviceName =services [0].serviceName ;
tsimport {getServices ,renderMediaOnCloudrun } from "@remotion/cloudrun/client";constservices = awaitgetServices ({region : "us-east1",compatibleOnly : true,});constserviceName =services [0].serviceName ;
现在我们可以使用 renderMediaOnCloudrun() 函数触发视频的渲染。
tsconstresult = awaitrenderMediaOnCloudrun ({serviceName ,region : "us-east1",serveUrl :url ,composition : "HelloWorld",inputProps : {},codec : "h264",updateRenderProgress ,});if (result .type === "success") {console .log (result .bucketName );console .log (result .renderId );}
tsconstresult = awaitrenderMediaOnCloudrun ({serviceName ,region : "us-east1",serveUrl :url ,composition : "HelloWorld",inputProps : {},codec : "h264",updateRenderProgress ,});if (result .type === "success") {console .log (result .bucketName );console .log (result .renderId );}
从 @remotion/cloudrun/client 导入,以避免导入整个渲染器,因为它无法捆绑。
渲染现在将运行,过一段时间后视频将在您的云存储桶中可用。您可以通过将函数传递给 updateRenderProgress 属性来跟踪渲染进度,以接收进度值。
恭喜!查看您的云存储桶 - 您刚刚使用 Remotion Cloud Run 渲染了第一个视频 🚀
您已经从之前的步骤中获得了服务名称。但由于您只需要部署一次服务,因此在渲染视频之前以编程方式检索已部署服务的名称是有用的,以防您的 Node.JS 程序重新启动。我们可以使用 compatibleOnly 标志调用 getServices() 来仅获取具有匹配版本的服务。
tsimport {getServices ,renderStillOnCloudrun } from "@remotion/cloudrun";constservices = awaitgetServices ({region : "us-east1",compatibleOnly : true,});constserviceName =services [0].serviceName ;
tsimport {getServices ,renderStillOnCloudrun } from "@remotion/cloudrun";constservices = awaitgetServices ({region : "us-east1",compatibleOnly : true,});constserviceName =services [0].serviceName ;
现在,我们可以使用 renderStillOnCloudrun() 函数触发静态图像的渲染。
tsconstresult = awaitrenderStillOnCloudrun ({serviceName ,region : "us-east1",serveUrl :url ,composition : "HelloWorld",inputProps : {},imageFormat : "jpeg",});if (result .type === "success") {console .log (result .bucketName );console .log (result .renderId );}
tsconstresult = awaitrenderStillOnCloudrun ({serviceName ,region : "us-east1",serveUrl :url ,composition : "HelloWorld",inputProps : {},imageFormat : "jpeg",});if (result .type === "success") {console .log (result .bucketName );console .log (result .renderId );}
从 @remotion/cloudrun/client 导入,以避免导入整个渲染器,因为它无法捆绑。
渲染现在将运行,过一段时间后,图像将在您的云存储桶中可用。
恭喜!检查您的云存储桶 - 您刚刚使用 Remotion Cloud Run 渲染了第一个静态图像 🚀
下一步
- 选择您希望在 Remotion Cloud Run 中运行的区域。
- 熟悉 CLI 和 Node.JS API(在侧边栏中列出)。
- 学习如何升级 Remotion Cloud Run。
- 在上线之前,请查看生产清单。