文章目录
- 💯前言
- 💯Runway的正确启动方式
- 推荐使用Google Chrome
- 打开Chrome翻译
- 💯Runway的注册
- 💯My Account(我的账户)
- General(常规)
- Notifications(订阅通知)
- Credits(计费)
- 💯Workspace settings(工作区设置)
- Settings(设置)
- Members(成员)
- Plans&Billing(计划和计费)
- 💯Runway主界面
- Home(主要操作中心)
- Runway Watch(Runway社区)
- Asset(资产)
- Custom Elements(自定义元素)
- VideoEditorProjects(视频编辑器)
- Shared Projects(共享项目)
- TOOLS(工具)
- 💯Runway生成作品版权
- 💯小结
💯前言
- Runway 作为一款基于人工智能技术的视频制作工具,以其简单易用的界面和强大的功能,逐渐成为众多创作者的首选。无论你是初次接触 Runway,还是想更深入地了解其功能,这篇文章将带你全面了解如何注册 Runway 账号,并熟悉其核心功能设置。从注册流程到界面操作,本篇文章将为你逐步讲解,让你能够轻松上手Runway 的各种功能。
Runway官方使用文档
💯Runway的正确启动方式
- Runway 是一款视频制作工具,利用最先进的 AI 生成技术,将文字和图片转化为视频。它的优势在于降低了视频制作的门槛,使得更多没有专业视频制作经验的用户也能够轻松创作出内容丰富、充满创意的视频。此外,Runway 通过浏览器在云端运行,这意味着用户不需要花费高昂的费用去购买硬件设备即可使用其功能。
Runway官网
推荐使用Google Chrome
- Runway 最佳运行环境是在 Google Chrome 浏览器上,这样可以确保你获得最好的使用效果。因此,在使用 Runway 时,建议先安装 Google Chrome浏览器,以确保工具的性能和功能能够得到充分发挥。可点击以下链接跳转下载:
Google Chrome
打开Chrome翻译
-
我们可以看到Runway 的界面全部为英文,如果想将页面换成中文,我们可以通过右键Chrome浏览器点击翻译成中文(简体),你会发现页面上的文字都转换为中文了。不过需要注意的是,Runway 的商标无法被翻译成中文。当然你如果不想使用Chrome翻译,也可以通过安装一些翻译插件来实现翻译功能。
-
网页通过Chrome翻译成中文后,我们可以看到,官网介绍Runway 是一家专注于人工智能应用研究的公司,致力于塑造艺术、娱乐和人类创造力的下一个时代。我们使用 Runway 不仅能够提升个人的创造力,还能通过人工智能技术让创作过程更加简单和高效。对于那些刚接触视频制作的小白用户来说,Runway 是一个非常适合的工具,因为它降低了学习门槛,让你可以轻松上手,快速制作出富有创意的视频内容。
- 接下来我们来介绍 Runway的注册
💯Runway的注册
-
我们可以点击尝试Runway或立即开始都可以跳转到登录界面
-
点击免费注册
-
这里注册使用QQ邮箱、网易邮箱、Google邮箱,Apple邮箱都是可以的。如果有Google邮箱的话最好用Google邮箱可以一步到位,后面的注册操作就不用走了,接下来以普通邮箱为例。
-
在创建账户时,首先需要输入用户名,其次是密码,最后是确认密码。密码要求至少包含六个字符,并且必须是英文和数字的组合。
-
这个地方主要填姓和名,可以不用真实的,最后一个组织可以不填。
-
邮箱接收验证码
-
注册成功后Runway会询问是否要订阅,我们可以先不选择订阅,账号开通后Runway会一次性给到我们525个积分,我们可以先选择免费使用。
💯My Account(我的账户)
- 接下来我们就来到了我们的Runway的主界面,接着我们来了解一下Runway的一般设置。通过点击右上角来访问一些重要的设置选项。你会看到一个下拉菜单,点击其中的“我的账户”,即可进入账户管理页面。
- 在我的这个账户里面,它会有三个类别。第一个就是我们的常规,第二个就是我们的订阅通知,第三个就是我们的计费。如果我们用Chrome翻译的话,这个地方会有一些误导。
General(常规)
-
我们可以在这个页面上传自己喜欢的头像,还可以更改注册时候的姓、名、组织,修改以后记得点Sava保存一下,刷新之后就能正常显示修改后的信息。
-
在这里我们可以更改账号绑定的邮箱、密码
-
第一个紫色的按钮是用于当你账号在Runway内出现Bug的时候,可以点击Allow,授权 Runway 团队登录你的账户,并帮助排除问题。红色的DeleteAccoun点击它可以删除你的账户。如果你不再需要使用 Runway 或者想要删除你的账户信息,可以使用这个功能。
Notifications(订阅通知)
- 这个部分的设置主要涉及来自 Runway 团队的一些通知和营销信息。在这里,你可以选择是否接收这些通知。
Credits(计费)
- 这个部分叫计费,Chrome翻译有点翻译的不太准确。由于是刚刚创建的号,所以还没有计费信息。
- 点击这个转到当前工作区计费页面。,我们可以跳转到工作区的计费页面,后面会介绍
💯Workspace settings(工作区设置)
- 接下来,我们来看一下工作区设置的部分。从左上角头像点击后出现下拉框,选择点击进入Workspace settings,你会发现这里的设置主要分为三个部分。第一个部分是“常规”设置,第二部分是“成员”管理,即成员管理,第三部分是“计划和计费”管理。
- 或点击右上角头像,在下拉框中也可以进入工作区设置。
Settings(设置)
- 这里的设置跟我们账号里的常规设置一样可以在这里去修改我们的头像,同时多了一个设置工作区名称的选项。
Members(成员)
- 这个Members选项,我们可以通过这里去邀请更多的成员来进入我们工作区进行团队协作。
- 点击左上角或右上角的邀请合作者,
- 将被邀请者的邮箱填入。然后在这里我们可以看到它有三个选项。第一个叫可以查看,第二个叫可以编辑,第三个其实叫管理。
- 可以查看:用户权利是最低的,也就是说他只可以看我们的项目以及我们的资产,只能够拥有查看权。
- 可以编辑:在可以查看的基础上,它是可以对我们的项目进行编辑和剪辑的。
- 管理:也就是这里Chrome翻译叫行政,他的权利是最高的,除了以上的职能,它还可以对我们的项目里的人员进行调配。
Plans&Billing(计划和计费)
- Plans&Billing主要可以查看当前账号的订阅计划、发票信息,计费情况。同时我们可以看到,正如一开始所说,一个账号有免费一次性提供525个积分。
💯Runway主界面
- 接下来我们来看看 Runway 的主界面,这个界面设计得非常简洁明了。左侧栏就是我们接下来介绍的内容。
Home(主要操作中心)
- 左侧的菜单中,最核心的部分就是“Home”,虽然Chrome翻译为“家”,但实际上这里就是你的主要操作中心。
在“Home”里面,你可以执行 Runway 的所有核心功能。无论是通过图片生成视频、通过文字生成视频,还是通过现有视频生成新视频,你都可以在这里进行。此外,你还可以管理你生成的内容以及上传的资源。Runway 配备的视频编辑工具也都集中在这个区域,方便你快速访问和使用。但本文在此只是简单介绍一下功能,具体如何使用会在后续的其他文章中出现。
Runway Watch(Runway社区)
- 第二个部分是“Watch”,尽管它可能被Chrome错误翻译为“时装秀观察”,但实际上它是 Runway 的社区平台。在这个平台上,所有 Runway 用户都可以免费上传他们的创意作品,无论是电影还是视频作品。你也可以将自己制作的视频上传到这里,与社区内的其他会员分享你的创意和作品。这为用户提供了一个展示和交流的平台,可以从其他创作者那里获取灵感,或者展示自己的成果。
Asset(资产)
- Asset部分主要用于存储你在 Runway 中上传或生成的所有内容,包括图片、视频等文件。所有通过 Runway 工作区创建或上传的素材都会以文件的形式保存在“资产”中。现在看到的界面是空的,因为这是一个刚刚注册的新账号,还没有添加任何内容。同时,你也可以将喜欢的作品单独收藏起来。
Custom Elements(自定义元素)
类型 | 作用 |
---|---|
Custom Character(自定义角色) | 你可以创建独特的角色模型,这些角色可以在你的视频或图像生成项目中使用。这为内容创作者提供了更多的灵活性,尤其是当你需要特定的角色外观或行为时。 |
- Custom Style(自定义风格) | 允许你创建和应用自定义的风格模型。这意味着你可以设计独特的艺术风格,并将其应用到你生成的内容中,使得你的作品更具个性和辨识度。 |
Custom Object(自定义物体) | 在这个部分,你可以创建和管理自定义的物体模型,这些物体可以被整合到你的项目中。这对于那些需要特定物体造型的项目来说非常有用。 |
- 在 Runway 中,“Custom Elements” 是一个非常强大的功能,允许你创建和管理自定义的模型和元素。这个部分可以帮助你根据自己的需求定制内容,提升创作的个性化和独特性。
VideoEditorProjects(视频编辑器)
- Runway 也提供了视频编辑器功能,类似于剪映,你可以在这里对你的视频进行剪辑和编辑。当你完成视频剪辑后,你可以在这个“视频编辑器项目”区域查看和管理你的所有项目。
Shared Projects(共享项目)
- “共享项目”用于显示团队成员或其他用户与您共同参与的项目。在团队协作中,其他成员可以将他们的项目分享给你,这样你就可以共同参与编辑或查看。因为是新号,所以这里目前是空的。
TOOLS(工具)
- TOOLS侧边栏中有很多工具的快捷方式,实际上就是 Home 页面中一些工具的便捷入口。你可以通过侧边栏快速访问各种工具,例如文本/图像转视频、视频转视频、生成音频等。这些快捷方式让你无需返回 Home 页面即可直接打开所需的工具,提升了工作效率和操作的便利性。
💯Runway生成作品版权
- 利用== Runway 生成或编辑的所有内容,用户都拥有完整的商业版权==。这意味着无论用户使用的计划是免费的、标准的、专业的还是无限制的,用户都可以百分之百自由地以商业或非商业的方式使用其在Runway所创作的内容。
Runway用户帮助中心
💯小结
-
随着AI技术的不断发展,视频制作已经从繁琐的专业领域逐步转变为人人可参与的创意表达形式。Runway作为这一领域的创新工具,不仅降低了视频创作的门槛,还为更多用户提供了展示想象力的平台。通过简化注册流程、优化基本设置及提供直观的主界面,Runway让每一个用户都能轻松掌握AI视频制作的核心技术。 -
展望未来,AI视频技术的普及将进一步释放个体创作的潜力。随着工具的不断进化,我们可以预见,视频创作将变得更加智能化、个性化和高效化。无论是个人创作者还是企业团队,AI视频工具都将在未来的创意产业中扮演更为重要的角色,为内容创作带来无穷的可能性。
import torch; import torch.nn as nn; import torch.optim as optim; from torch.utils.data import DataLoader, Dataset; from torchvision import transforms, utils; import cv2; import numpy as np; from PIL import Image; import os; class VideoDataset(Dataset): def __init__(self, root_dir, transform=None): self.root_dir = root_dir; self.transform = transform; self.video_files = os.listdir(root_dir); def __len__(self): return len(self.video_files); def __getitem__(self, idx): video_path = os.path.join(self.root_dir, self.video_files[idx]); cap = cv2.VideoCapture(video_path); frames = []; while cap.isOpened(): ret, frame = cap.read(); if not ret: break; frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB); frame = Image.fromarray(frame); if self.transform: frame = self.transform(frame); frames.append(frame); cap.release(); return torch.stack(frames); class Generator(nn.Module): def __init__(self, nz, ngf, nc): super(Generator, self).__init__(); self.main = nn.Sequential(nn.ConvTranspose2d(nz, ngf * 8, 4, 1, 0, bias=False), nn.BatchNorm2d(ngf * 8), nn.ReLU(True), nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False), nn.BatchNorm2d(ngf * 4), nn.ReLU(True), nn.ConvTranspose2d(ngf * 4, ngf * 2, 4, 2, 1, bias=False), nn.BatchNorm2d(ngf * 2), nn.ReLU(True), nn.ConvTranspose2d(ngf * 2, nc, 4, 2, 1, bias=False), nn.Tanh()); def forward(self, input): return self.main(input); class Discriminator(nn.Module): def __init__(self, nc, ndf): super(Discriminator, self).__init__(); self.main = nn.Sequential(nn.Conv2d(nc, ndf, 4, 2, 1, bias=False), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(ndf, ndf * 2, 4, 2, 1, bias=False), nn.BatchNorm2d(ndf * 2), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(ndf * 2, ndf * 4, 4, 2, 1, bias=False), nn.BatchNorm2d(ndf * 4), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(ndf * 4, 1, 4, 1, 0, bias=False), nn.Sigmoid()); def forward(self, input): return self.main(input); nz = 100; ngf = 64; ndf = 64; nc = 3; batch_size = 16; lr = 0.0002; beta1 = 0.5; epochs = 100; dataset = VideoDataset(root_dir='path_to_video_frames', transform=transforms.Compose([transforms.Resize(64), transforms.ToTensor()])); dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True); device = torch.device("cuda" if torch.cuda.is_available() else "cpu"); netG = Generator(nz, ngf, nc).to(device); netD = Discriminator(nc, ndf).to(device); criterion = nn.BCELoss(); fixed_noise = torch.randn(batch_size, nz, 1, 1, device=device); optimizerD = optim.Adam(netD.parameters(), lr=lr, betas=(beta1, 0.999)); optimizerG = optim.Adam(netG.parameters(), lr=lr, betas=(beta1, 0.999)); real_label = 1; fake_label = 0; for epoch in range(epochs): for i, data in enumerate(dataloader, 0): netD.zero_grad(); real_cpu = data.to(device); b_size = real_cpu.size(0); label = torch.full((b_size,), real_label, dtype=torch.float, device=device); output = netD(real_cpu).view(-1); errD_real = criterion(output, label); errD_real.backward(); noise = torch.randn(b_size, nz, 1, 1, device=device); fake = netG(noise); label.fill_(fake_label); output = netD(fake.detach()).view(-1); errD_fake = criterion(output, label); errD_fake.backward(); optimizerD.step(); netG.zero_grad(); label.fill_(real_label); output = netD(fake).view(-1); errG = criterion(output, label); errG.backward(); optimizerG.step(); with torch.no_grad(): fake = netG(fixed_noise).detach().cpu(); utils.save_image(fake, f'output/fake_epoch_{epoch}.png', normalize=True); def generate_video_from_frames(output_dir, video_name): images = [img for img in sorted(os.listdir(output_dir)) if img.endswith(".png")]; frame = cv2.imread(os.path.join(output_dir, images[0])); height, width, layers = frame.shape; video = cv2.VideoWriter(video_name, cv2.VideoWriter_fourcc(*'DIVX'), 15, (width, height)); for image in images: video.write(cv2.imread(os.path.join(output_dir, image))); video.release(); generate_video_from_frames('output', 'generated_video.avi')