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

介绍

直到最近,自动编辑图像或音频是难以实现的,而不使用大量的时间和计算能力,甚至在那时,它往往只能运行转钥匙过滤器从声音中删除某些频率或改变图像的颜色范畴。

SpleeterWhisper是开源AI工具,专为音频分析和操纵而设计。两者都是开发和发布的,以及他们自己的预先训练的语言模型,使他们能够直接在自己的输入上运行,如MP3或AAC音频文件,而无需任何额外的配置。Spleeter被用来从音乐的乐器轨道中分离语音轨道。Whisper被用来生成对话语言的标题。它们都有许多个别的用途,它们有一个特殊的用途:它们可以用来生成从常规的音频文件的卡拉OK轨道。在本教程中,您将使用Whisper和Speterle一起创建自己的卡拉OK选择,或集成到另一个应用程序堆。

前提条件

本教程将为 Ubuntu 22.04 服务器提供安装说明,遵循我们的指南 初始服务器设置与 Ubuntu 22.04)。

Spleeter 和 Whisper 都是 Python 库,需要您安装 Python 和 Python 包管理器 pip. 在 Ubuntu 上,您可以参阅 [如何在 Ubuntu 22.04 服务器上安装 Python 3 和设置编程环境] 的 步骤 1(https://andsky.com/tech/tutorials/how-to-install-python-3-and-set-up-a-programming-environment-on-an-ubuntu-22-04-server)。

此外,Spleter 和 Whisper 都使用机器学习库,可在 GPU 上运行速度更快 10-20 倍。如果没有检测到 GPU,则会自动回到 CPU 上运行。

步骤 1 – 安装 Spleeter, Whisper 和其他工具

首先,您需要使用pip,Python的包管理器,来安装您将在这个项目中使用的工具。除了spleeter,您还应该安装youtube-dl,一个可用于本地下载YouTube视频的脚本,您将使用它来获取样本视频。

1sudo pip install spleeter youtube-dl

相反,你可以直接从Github安装另一个名为yt-whisper的库,也可以使用pipyt-whisper包括whisper本身作为一个依赖,所以你可以在安装后访问正常的whisper命令,但这样你也会得到yt-whisper脚本,这使得从YouTube下载和标题视频是一个一步的过程。

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

最后,你想确保你安装了ffmpeg来进行一些额外的音频和视频操作。ffmpeg是一个通用工具来操纵,合并和重新编码音频和视频文件。

1sudo apt update
2sudo apt install ffmpeg

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

步骤2:从视频中下载和分离音频

「youtube-dl」是您在步骤 1 中安装的工具,用于将YouTube视频下载到您的本地环境中,尽管您在使用潜在的版权材料时应该小心,但这在许多情况下可能有用,特别是当您需要在视频上运行一些额外的处理或将其用作源材料时。

使用youtube-dl,下载您将使用的视频为本教程. 这个样本链接是给一个名为Lie 2 You的公共领域的歌曲,但你可以使用另一个:

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

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

<$>[注] **注:**由于YouTube没有明确支持使用youtube-dl,因此下载可能有时会缓慢。

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

1ffmpeg -i "Lie 2 You (ft. Dylan Emmet) – Leonell Cassio (No Copyright Music)-dA2Iv9evEK4.webm" -c:a libmp3lame -qscale:a 1 audio.mp3

这是一个ffmpeg命令语法的例子,简而言之:

  • i /path/to/input 是您输入文件的路径,在这种情况下,您刚刚下载的 .webm 视频
  • -c:a libmp3lame 指定了要编码的音频编码器. 所有音频和视频都需要以某种方式编码,而 libmp3lame 是最常见的 mp3 编码器。
  • qscale:a 1 指定了您的输出 mp3 的比特速,在这种情况下相当于大约 220kbps 的可变比特率。

运行此命令后,FFmpeg将创建一个名为audio.mp3的新文件。

<$>[注] **注:**您可以从 ffmprovisr),一个社区维护的ffmpeg命令示例目录中了解更多关于ffmpeg选项的信息,或者参阅 官方文档

在下一步中,您将使用 Spleeter 将仪器轨道从新的 audio.mp3 文件中分离出来。

步骤 3 – 使用 Spleeter 分离语音轨道

现在你有独立的音频文件,你已经准备好使用spleeter来分离语音轨道。Spleeter包含(https://github.com/deezer/spleeter/wiki/3.-Models)与spleeter separate命令一起使用的几个模型,允许你执行更复杂的钢琴,吉他,鼓, bass 轨道等等的分离,但现在,你将使用默认的2stems模型。

1spleeter separate -p spleeter:2stems -o output audio.mp3

如果您在运行 Spleeter 没有 GPU,此命令可能需要几分钟才能完成,这将产生一个名为输出的新目录,其中包含两个名为vocals.wavaccompaniment.wav的文件。

您可以尝试在MPV或其他音频播放器中聆听这些文件,它们现在将具有较大的文件大小,因为spleeter将它们直接解码到原始WAV输出中,但在下一步中,您将将它们编码回到单个视频中。

步骤 4 – 使用微笑生成字母

现在你有你的乐器音频轨道,你只需要从原始视频中生成字母。你可以直接在你下载的.webm 视频上运行whisper,但在原始 YouTube 视频链接上运行yt_whisper命令将更快:

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

如果您查看 yt_whisper 源代码,您可以理解yt_whisper正在转换为whisper的预设,以生成来自 YouTube 视频的字体。例如,它默认为--model small参数。 Whisper 文档建议该模型在内存要求、性能和精度之间提供良好的交易。 如果您需要在其他输入源或不同的参数上自行运行whisper,则可以使用这些预设作为参考框架。

如果您在不使用 GPU 运行 Whisper,此命令可能需要几分钟才能完成,这将为视频生成一个字幕文件以 .vtt 格式。您可以使用 head 或文本编辑器检查字幕,以确认它们与歌曲文本匹配:

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

现在你有你的单独的音频轨道和你的标题文件. 在最后一步,你会用ffmpeg将它们全部重新组合在一起。

步骤5 – 将音频和视频曲线与标题合并

最后,是时候将您的输出组合成一个最终的视频,其中包含 1) 原始背景视频, 2) 您使用 Spleeter 生成的孤立仪器轨道,以及 3) 您使用 Whisper 生成的标题。

1ffmpeg -i "Lie 2 You (ft. Dylan Emmet) – Leonell Cassio (No Copyright Music)-dA2Iv9evEK4.webm" -i output/audio/accompaniment.wav -i "Lie_2_You__ft__Dylan_Emmet____Leonell_Cassio__No_Copyright_Music.vtt" -map 0:v -map 1:a -map 2 -metadata:s:s:0 language=eng -c:v copy -c:a aac -c:s mov_text final.mp4

与以前的ffmpeg命令不同,这个命令使用三个不同的输入:视频.webm,音频.wav.vtt字体。它使用几个map参数来将第一个(或0th,从0计算)输入到视频轨道,然后到音频,最后一个到标题元数据,如: -map 0:v -map 1:a -map 2 -metadata:s:s语言:0=eng

c:v copy意味着你保存了原始视频源,而不是重新编码它,这通常可以节省时间,并保留视频质量(视频编码通常是迄今为止‘ffmpeg’的最密集的使用),只要原始源处于兼容格式。‘youtube-dl’将几乎总是默认使用常见的H264格式,可以用于流媒体视频,独立的‘.mp4’文件,蓝光光盘等,所以你不应该改变这一点。

  • ‘c:aac’意味着你正在重新编码音频到AAC格式。

<$>[注] 注: 您可能还想用几秒钟来抵消字幕,以帮助观众预测接下来的行。

最后,您提供一个输出格式, final.mp4. 请注意,您实际上没有指定 .mp4 输出,而不是在这个文件名中 - ffmpeg 将根据您提供的输出路径自动推断出一个输出格式。 当您使用音频和视频文件时,您使用的编码器通常比文件类型本身更重要,它们作为内容的容器。 重要的区别是视频玩家希望能够读取哪些类型的文件。 一个包含 H264 视频和 AAC 音频的 mp4 文件,作为此写作,在任何地方使用的最常见的媒体文件,并且将在任何环境中播放,包括直接在浏览器中播放,而无需下载文件或配置 流服务器,并且它可以包含

您的final.mp4视频现在可以下载,共享,或投射到墙上进行卡拉OK之夜。

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

结论

在本教程中,您使用两种机器学习工具创建一个单独的语音轨道和一组源视频的字母,然后将它们连接在一起。

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

Published At
Categories with 技术
comments powered by Disqus