人工智能工具可用于处理图像、音频或视频以产生新颖的结果。直到最近,在不使用大量时间和计算能力的情况下,自动编辑图像或音频仍然具有挑战性,即使如此,通常也只能运行交钥匙滤波器来删除声音中的某些频率或更改图像的调色板。较新的方法使用人工智能模型和大量训练数据,能够运行更复杂的过滤和转换技术。
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 的环境中。
首先,您需要使用pip
,Python 的包管理器,用于安装您将用于此项目的工具。此外spleeter
,你还应该安装youtube-dl
,一个可用于在本地下载 YouTube 视频的脚本,您将用它来检索示例视频。安装它们pip install
:
-
sudo pip install斯普利特 youtube-dl
您可以安装另一个名为的库,而不是直接安装 Whisperyt-whisper
直接来自 Github,也可以使用pip
. yt-whisper
包含 Whisper 本身作为依赖项,因此您可以访问常规的whisper
安装后命令,但这样你也会得到yt-whisper
脚本,这使得从 YouTube 下载视频并为其添加字幕成为一个步骤。pip install
可以通过在 Python 存储库前面加上 来解析 Github 链接git+
:
-
sudo pip installgit+https://github.com/m1guelpf/yt-whisper.git
最后,您需要确保您拥有ffmpeg
安装来做一些额外的音频和视频操作。ffmpeg
是用于操作、合并和重新编码音频和视频文件的通用工具。在 Ubuntu 上,您可以通过运行以下命令使用系统包管理器来安装它apt update
其次是apt install
:
-
sudo apt update
-
sudo apt install ffmpeg
现在您已经安装了必要的工具,您将在下一步中获得示例音频和视频。
youtube-dl
您在步骤 1 中安装的 是一个用于将视频从 YouTube 下载到本地环境的工具。尽管您在断章取义地使用可能受版权保护的材料时应该小心,但这在许多情况下都很有用,特别是当您需要对视频进行一些额外处理或将它们用作源材料时。
Using youtube-dl
,下载您将在本教程中使用的视频。此示例链接指向名为“Lie 2 You”的公共领域歌曲,但您可以使用另一个链接:
- youtube-dl https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt
youtube-dl
将下载歌曲以及一些元数据并将其合并为一首歌曲.webm
视频文件。您可以在本地媒体播放器中播放该视频,例如mpv,但这取决于您的环境。
Note:因为使用youtube-dl
YouTube 未明确支持,下载有时会很慢。
接下来,您将从刚刚下载的视频中分离出音轨。这是一个任务,其中ffmpeg
表现出色。您可以使用以下内容ffmpeg
命令将音频输出到名为的新文件audio.mp3
:
- 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.
现在您已经有了独立的音频文件,可以使用了spleeter
分离音轨。斯普利特包含几种型号与使用spleeter separate
命令,允许您对钢琴、吉他、鼓、贝司音轨等进行更复杂的分离,但现在,您将使用默认值2stems
模型。跑步spleeter separate
在你的audio.mp3
,还提供了一条路径-o output
目录:
如果您在没有 GPU 的情况下运行 Spleeter,则此命令可能需要几分钟才能完成。这将产生一个名为的新目录output
,包含两个名为vocals.wav
and accompaniment.wav
。这些是您分开的声乐和器乐曲目。如果您遇到任何错误,或者需要进一步自定义 Spleeter 输出,请参阅文档.
您可以尝试在 MPV 或其他音频播放器中收听这些文件。目前它们的文件大小相对较大,因为spleeter
将它们直接解码为原始 WAV 输出,但在接下来的步骤中,您将它们编码回单个视频。
现在您已经有了乐器音轨,您只需从原始视频生成字幕即可。你可以跑whisper
直接在.webm
您下载的视频,但运行速度会更快yt_whisper
原始 YouTube 视频链接上的命令:
- yt_whisper https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt
如果您回顾yt_whisper 源代码,你可以理解预设yt_whisper
正在传递到whisper
从 YouTube 视频生成字幕。例如,它默认为--model small
范围。这耳语文档表明该模型在内存需求、性能和准确性之间提供了良好的权衡。如果你需要跑步whisper
单独在另一个输入源上或使用不同的参数,您可以使用这些预设作为参考框架。
如果您在没有 GPU 的情况下运行 Whisper,则此命令可能需要几分钟才能完成。这将为视频生成一个字幕文件.vtt
格式。您可以使用检查标题head
或文本编辑器来验证它们是否与歌词匹配:
-
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
.
最后,是时候将您的输出合并到最终视频中,其中包含 1) 原始背景视频,2) 使用 Spleeter 生成的独立乐器轨道,以及 3) 使用 Whisper 生成的字幕。这可以通过一个稍微复杂的单一的来完成,ffmpeg
命令:
- 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 视频特别有用,但也可以应用于许多其他任务。
接下来,您可能想要配置视频流服务器,或尝试其他一些人工智能或机器学习库。