如何使用 Whisper 和 Spleeter AI 工具制作卡拉 OK 视频

2023-11-17

介绍

人工智能工具可用于处理图像、音频或视频以产生新颖的结果。直到最近,在不使用大量时间和计算能力的情况下,自动编辑图像或音频仍然具有挑战性,即使如此,通常也只能运行交钥匙滤波器来删除声音中的某些频率或更改图像的调色板。较新的方法使用人工智能模型和大量训练数据,能够运行更复杂的过滤和转换技术。

Spleeter and Whisper是专为音频分析和操作而设计的开源人工智能工具。两者都是与自己的预训练语言模型一起开发和发布的,因此可以直接在您自己提供的输入(例如 MP3 或 AAC 音频文件)上运行它们,而无需任何额外的配置。 Spleeter 用于将音乐的声乐轨道与器乐轨道分开。 Whisper 用于生成口语字幕。它们各自都有许多用途,而且它们一起有一个特定的用途:它们可以用于从常规音频文件生成卡拉 OK 曲目。在本教程中,您将一起使用 Whisper 和 Spleeter 来制作您自己的卡拉 OK 选择,或集成到另一个应用程序堆栈中。

先决条件

这些工具在大多数平台上都可用。本教程将按照我们的指南提供 Ubuntu 22.04 服务器的安装说明使用 Ubuntu 22.04 进行初始服务器设置。您将需要至少 3GB 内存来运行 Whisper 和 Spleeter,因此如果您在资源有限的服务器上运行,您应该考虑启用交换对于本教程。

Spleeter 和 Whisper 都是 Python 库,需要您安装 Python 和pip,Python 包管理器。在Ubuntu上,您可以参考Step 1 of 如何在Ubuntu 22.04服务器上安装Python 3并设置编程环境.

此外,Spleeter 和 Whisper 都使用机器学习库,可以选择在 GPU 上运行速度提高 10-20 倍。如果未检测到 GPU,它们将自动回退到在您的 CPU 上运行。配置 GPU 支持超出了本教程的范围,但在安装后应该可以使用PyTorch在启用 GPU 的环境中。

第 1 步 – 安装 Spleeter、Whisper 和其他工具

首先,您需要使用pip,Python 的包管理器,用于安装您将用于此项目的工具。此外spleeter,你还应该安装youtube-dl,一个可用于在本地下载 YouTube 视频的脚本,您将用它来检索示例视频。安装它们pip install:

  1. sudo pip install斯普利特 youtube-dl

您可以安装另一个名为的库,而不是直接安装 Whisperyt-whisper直接来自 Github,也可以使用pip. yt-whisper包含 Whisper 本身作为依赖项,因此您可以访问常规的whisper安装后命令,但这样你也会得到yt-whisper脚本,这使得从 YouTube 下载视频并为其添加字幕成为一个步骤。pip install可以通过在 Python 存储库前面加上 来解析 Github 链接git+:

  1. sudo pip installgit+https://github.com/m1guelpf/yt-whisper.git

最后,您需要确保您拥有ffmpeg安装来做一些额外的音频和视频操作。ffmpeg是用于操作、合并和重新编码音频和视频文件的通用工具。在 Ubuntu 上,您可以通过运行以下命令使用系统包管理器来安装它apt update其次是apt install:

  1. sudo apt update
  2. sudo apt install ffmpeg

现在您已经安装了必要的工具,您将在下一步中获得示例音频和视频。

第 2 步 – 下载并从视频中分离音频

youtube-dl您在步骤 1 中安装的 是一个用于将视频从 YouTube 下载到本地环境的工具。尽管您在断章取义地使用可能受版权保护的材料时应该小心,但这在许多情况下都很有用,特别是当您需要对视频进行一些额外处理或将它们用作源材料时。

Using youtube-dl,下载您将在本教程中使用的视频。此示例链接指向名为“Lie 2 You”的公共领域歌曲,但您可以使用另一个链接:

  1. youtube-dl https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt

youtube-dl将下载歌曲以及一些元数据并将其合并为一首歌曲.webm视频文件。您可以在本地媒体播放器中播放该视频,例如mpv,但这取决于您的环境。

Note:因为使用youtube-dlYouTube 未明确支持,下载有时会很慢。

接下来,您将从刚刚下载的视频中分离出音轨。这是一个任务,其中ffmpeg表现出色。您可以使用以下内容ffmpeg命令将音频输出到名为的新文件audio.mp3:

  1. ffmpeg -i “Lie 2 You(ft. Dylan Emmet)- Leonell Cassio(无版权音乐)-dA2Iv9evEK4.webm” -c:alibmp3lame-qscale:a 1音频.mp3

这是一个例子ffmpeg命令语法。简单来说:

  • -i /path/to/input是输入文件的路径,在本例中是.webm您刚刚下载的视频
  • -c:a libmp3lame指定要编码的音频编解码器。所有音频和视频都需要以某种方式进行编码,并且libmp3lame是最常见的mp3编码器。
  • qscale:a 1指定输出 mp3 的比特率,在本例中对应于 220kbps 左右的可变比特率。您可以查看其他选项ffmpeg 文档.
  • audio.mp3是输出文件的名称,出现在命令末尾,没有任何其他标志。

运行此命令后,FFmpeg 将创建一个名为audio.mp3.

Note:您可以了解更多有关ffmpeg选项来自ffm提供者,社区维护的目录ffmpeg命令示例,或参考官方文档.

在下一步中,您将使用 Spleeter 将乐器曲目与新曲目隔离开来。audio.mp3 file.

步骤 3 – 使用 Spleeter 分离音轨

现在您已经有了独立的音频文件,可以使用了spleeter分离音轨。斯普利特包含几种型号与使用spleeter separate命令,允许您对钢琴、吉他、鼓、贝司音轨等进行更复杂的分离,但现在,您将使用默认值2stems模型。跑步spleeter separate在你的audio.mp3,还提供了一条路径-o output目录:

  1. 分裂的-p碎叶:2茎-o输出音频.mp3

如果您在没有 GPU 的情况下运行 Spleeter,则此命令可能需要几分钟才能完成。这将产生一个名为的新目录output,包含两个名为vocals.wav and accompaniment.wav。这些是您分开的声乐和器乐曲目。如果您遇到任何错误,或者需要进一步自定义 Spleeter 输出,请参阅文档.

您可以尝试在 MPV 或其他音频播放器中收听这些文件。目前它们的文件大小相对较大,因为spleeter将它们直接解码为原始 WAV 输出,但在接下来的步骤中,您将它们编码回单个视频。

步骤 4 – 使用 Whisper 生成字幕

现在您已经有了乐器音轨,您只需从原始视频生成字幕即可。你可以跑whisper直接在.webm您下载的视频,但运行速度会更快yt_whisper原始 YouTube 视频链接上的命令:

  1. yt_whisper https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt

如果您回顾yt_whisper 源代码,你可以理解预设yt_whisper正在传递到whisper从 YouTube 视频生成字幕。例如,它默认为--model small范围。这耳语文档表明该模型在内存需求、性能和准确性之间提供了良好的权衡。如果你需要跑步whisper单独在另一个输入源上或使用不同的参数,您可以使用这些预设作为参考框架。

如果您在没有 GPU 的情况下运行 Whisper,则此命令可能需要几分钟才能完成。这将为视频生成一个字幕文件.vtt格式。您可以使用检查标题head或文本编辑器来验证它们是否与歌词匹配:

  1. head -20Lie_2_You__ft__Dylan_Emmet____Leonell_Cassio__No_Copyright_Music.vtt
Output
WEBVTT 00:00.000 --> 00:07.000 I need feeling you on me And I guess in a way you do 00:07.000 --> 00:19.000 All my breath on revelin' emotions I need some space to think this through 00:19.000 --> 00:29.000 Call me all night long Try to give you hints in a hard to see 00:29.000 --> 00:39.000 Right on the line, no Losing it on you is the last thing I need 00:39.000 --> 00:49.000 If I'm honest, I'll just make you cry And I don't wanna fight with you 00:49.000 --> 00:57.000 I would rather lie to you But if I'm honest, now's not the right time

您现在拥有单独的音轨和字幕文件。在最后一步中,您将使用以下命令将它们全部重新组装在一起ffmpeg.

步骤 5 – 将音频和视频轨道与字幕合并

最后,是时候将您的输出合并到最终视频中,其中包含 1) 原始背景视频,2) 使用 Spleeter 生成的独立乐器轨道,以及 3) 使用 Whisper 生成的字幕。这可以通过一个稍微复杂的单一的来完成,ffmpeg命令:

  1. ffmpeg -i “Lie 2 You(ft. Dylan Emmet)- Leonell Cassio(无版权音乐)-dA2Iv9evEK4.webm” -i输出/音频/伴奏.wav-i “Lie_2_You__ft__Dylan_Emmet____Leonell_Cassio__No_Copyright_Music.vtt” -map 0:v -map 1:a -map 2-元数据:s:s:0language=eng -c:v copy -c:a aac -c:smov_text 最终.mp4

与早期不同的是ffmpeg命令,该命令使用三个不同的输入:.webm视频、.wav音频,以及.vtt字幕。它使用了几个map参数将第一个(或第 0 个,从 0 开始计数)输入映射到视频轨道,然后映射到音频,最后映射到字幕元数据,如下所示:-map 0:v -map 1:a -map 2 -metadata:s:s:0 language=eng。接下来,它指定每个轨道使用的编解码器:

  • c:v copy意味着您保留原始视频源而不是重新编码。这通常可以节省时间并保持视频质量(视频编码通常是 CPU 最密集的使用)ffmpeg到目前为止)只要原始来源是兼容的格式。youtube-dl几乎总是默认使用常见的 H264 格式,该格式可用于流媒体视频、独立.mp4文件、蓝光光盘等,因此您不需要更改此设置。

  • c:a aac意味着您正在将音频重新编码为 AAC 格式。大多数情况下 AAC 是默认设置.mp4视频,几乎在所有环境中都受支持,并在文件大小和音频质量之间提供了良好的平衡。

  • c:s mov_text指定您正在编码的字幕格式。即使你的字幕是vtt格式,mov_text是嵌入视频本身的典型字幕格式。

Note:您可能还需要将字幕偏移几秒钟,以帮助观众预测接下来要播放的台词。您可以通过添加来做到这一点-itsoffset -2 to the ffmpeg命令。

最后,您提供输出格式,final.mp4。请注意,您实际上并未指定.mp4输出除此文件名之外的内容 —ffmpeg将根据您提供的输出路径自动推断输出格式。处理音频和视频文件时,您使用的编解码器通常比文件类型本身更重要,文件类型本身充当内容的容器。重要的区别在于视频播放器期望能够读取哪种类型的文件。一个.mp4截至撰写本文时,包含 H264 视频和 AAC 音频的文件是最常见的媒体文件,几乎可以在任何环境中播放,包括直接在浏览器中播放,无需下载文件或配置流媒体服务器,并且它可以包含字幕,所以它是一个非常安全的目标。.mkv是另一种流行的容器格式,支持更多功能,但部署并不广泛。

Your final.mp4现在可以下载、共享视频,或者在卡拉 OK 之夜将视频投影到墙上。祝您演出顺利!

您现在拥有使用四种工具的端到端卡拉 OK 视频解决方案。这些可以组合成一个独立的脚本,集成到另一个应用程序中,或者根据需要交互式运行。

结论

在本教程中,您使用两个机器学习工具从源视频创建一个单独的音轨和一组字幕,然后将它们重新连接在一起。这对于从现有音频源制作卡拉 OK 视频特别有用,但也可以应用于许多其他任务。

接下来,您可能想要配置视频流服务器,或尝试其他一些人工智能或机器学习库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Whisper 和 Spleeter AI 工具制作卡拉 OK 视频 的相关文章

随机推荐

  • 如何在 CentOS 8 上安装 TensorFlow

    TensorFlow是谷歌打造的一个开源机器学习平台 它可以在不同设备上的 CPU 或 GPU 上运行 并被许多组织使用 包括 Twitter PayPal 英特尔 联想和空客 TensorFlow 可以安装在系统范围内 Python 虚拟
  • 在 CentOS 7 上安装 PHP 7

    CentOS 7 附带 PHP 版本 5 4 该版本已正式 EOL 相当长一段时间 不再受支持 通过使用 PHP 7 您的应用程序将加载更快并消耗更少的系统资源 在本教程中 我们将解释如何安装或升级到 PHP 7 0 CentOS 7 系统
  • 如何在 Linux 中移动文件和目录(mv 命令)

    移动文件和目录是您经常需要在 Linux 系统上执行的最基本任务之一 在本教程中 我们将解释如何使用mv移动文件和目录的命令 如何使用mv命令 The mv命令 move 的缩写 用于将文件和目录从一个位置重命名和移动到另一个位置 语法为m
  • 如何在 CentOS 8 上安装 Xrdp 服务器(远程桌面)

    Xrdp 是 Microsoft 远程桌面协议 RDP 的开源实现 允许您以图形方式控制远程系统 使用 RDP 您可以登录到远程计算机并创建真实的桌面会话 就像登录到本地计算机一样 本教程介绍如何在 CentOS 8 上安装和配置 Xrdp
  • 如何在 Ubuntu 18.04 上安装 Flask

    Flask 是一个免费 开源的 Python 微型 Web 框架 旨在帮助开发人员构建安全 可扩展和可维护的 Web 应用程序 烧瓶是基于Werkzeug和用途Jinja2作为模板引擎 Unlike Django 默认情况下 Flask 不
  • Linux 中的 Whoami 命令

    在本文中 我们将介绍whoami命令 顾名思义 whoami命令打印有效用户 ID 的用户名 换句话说 它显示当前登录用户的名称 如何使用whoami命令 语法为whoami命令如下 whoami OPTION 要显示当前登录用户的名称 请
  • 如何在 CentOS 8 上安装和配置 Redmine

    Redmine 是一款免费的开源项目管理和问题跟踪应用程序 它是跨平台和跨数据库的 构建在 Ruby on Rails 框架之上 Redmine包括对多个项目 wiki 问题跟踪系统 论坛 日历 电子邮件通知等的支持 本教程介绍如何在 Ce
  • Linux 中的 Stat 命令

    stat是一个命令行实用程序 显示有关给定文件或文件系统的详细信息 本文介绍了如何使用stat命令 使用stat命令 语法为stat命令如下 stat OPTION FILE stat接受一个或多个输入FILE名称并包含许多控制命令行为和输
  • 如何在 CentOS 8 上安装 Python 3.8

    Python 是世界上使用最广泛的编程语言之一 凭借其简单易学的语法 Python 成为初学者和经验丰富的开发人员的热门选择 Python 是一种非常通用的编程语言 它可用于构建各种应用程序 从简单的脚本到复杂的机器学习算法 CentOS
  • Linux 中的 Chgrp 命令(更改组)

    在 Linux 中 每个文件都与一个所有者和一个组相关联 并具有确定哪些用户可以读取 写入或执行该文件的权限 本文介绍了如何使用chgrp命令更改给定文件的组所有权 chgrp命令语法 The chgrp命令采用以下形式 chgrp OPT
  • 如何在 CentOS 7 上安装 Ruby

    Ruby 是当今最流行的语言之一 它具有优雅的语法 是 Ruby on Rails 框架背后的语言 本文展示了在 CentOS 上安装 Ruby 的几种不同方法 每种安装方法都有自己的优点 您可以选择最适合您的一种安装方法 先决条件 在开始
  • 如何每 5 分钟、10 分钟或 15 分钟运行一次 Cron 作业

    cron 作业是按指定时间间隔执行的任务 可以将任务安排为按分钟 小时 每月的某一天 每月 每周的某一天或这些的任意组合运行 Cron 作业通常用于自动化系统维护或管理 例如备份数据库或数据 使用最新的安全补丁更新系统 检查磁盘空间使用情况
  • Bash:追加到文件

    在 Bash 中 有多种方法可以将文本附加到文件中 本文解释了其中一些 要将文本附加到文件 您需要对其具有写入权限 否则 您将收到权限被拒绝的错误 使用重定向运算符附加到文件 gt gt 重定向允许您捕获命令的输出并将其作为输入发送到另一个
  • 在 C/C++ 中使用 INT_MAX 和 INT_MIN

    在本文中 我们将了解在 C C 中使用 INT MAX 和 INT MIN 这些实际上是有用的宏 它们表示最大和最小整数值 让我们用一些例子来看看它 使用 INT MAX 和 INT MIN INT MAX 是一个表示最大整数值的宏 同样
  • Google Guice 依赖注入示例教程

    谷歌指南是在应用程序中自动执行依赖项注入的框架 如果您直接遇到这里 我建议您查看一下依赖注入示例在这里我们了解了传统对象创建方法的问题以及依赖注入的实现优势 在上一篇教程中 我们学习了如何在应用程序中手动实现依赖注入 但是 当应用程序中的类
  • 如何在 CentOS 7 上安装 MySQL

    介绍 MySQL是一个开源数据库管理系统 通常作为流行的一部分安装LEMP Linux Nginx MySQL MariaDB PHP Python Perl 堆栈 它使用关系数据库和 SQL 结构化查询语言 来管理其数据 CentOS 7
  • 如何配置 DNS 循环负载平衡以实现高可用性

    介绍 尽管这是一种更有争议的技术 但利用提供商的全球影响力在地理上分发应用程序的一个好方法是使用和管理 DNS 响应 即返回的 IP 地址列表 除非您愿意在硬件和基础设施成本上花费一点钱 否则使用 DNS 来实现高可用性可能是一个很好的方法
  • 如何在 CentOS 7 上使用 FreeIPA 设置集中式 Linux 身份验证

    介绍 FreeIPA是 Linux 的开源安全解决方案 提供帐户管理和集中身份验证 类似于 Microsoft 的 Active Directory FreeIPA 构建在多个开源项目之上 包括 389 Directory Server M
  • Spring Boot 教程

    欢迎来到 Spring Boot 教程 春季启动是 Pivotal Team The Spring Team 的一个全新项目 它是在现有 Spring 框架之上开发的框架 Spring Boot 教程 Spring Boot使用全新的开发模
  • 如何使用 Whisper 和 Spleeter AI 工具制作卡拉 OK 视频

    介绍 人工智能工具可用于处理图像 音频或视频以产生新颖的结果 直到最近 在不使用大量时间和计算能力的情况下 自动编辑图像或音频仍然具有挑战性 即使如此 通常也只能运行交钥匙滤波器来删除声音中的某些频率或更改图像的调色板 较新的方法使用人工智