如何使用Whisper和Spleeter AI工具制作卡拉OK视频
介绍
AI工具对于操控图像、音频或视频以产生新颖结果非常有用。直到最近,自动编辑图像或音频在没有耗费大量时间和计算资源的情况下很具挑战性,即使通过这种方式,通常也只能运行预设滤波器来去除音频某些频率或改变图像的调色板。采用新的方法,利用AI模型和大量的训练数据,可以运行更加复杂的滤波和变换技术。
Spleeter和Whisper是专门用于音频分析和处理的开源AI工具。它们都配备了各自预训练的语言模型,使得可以直接在您提供的输入上运行,例如MP3或AAC音频文件,而无需进行任何额外配置。Spleeter被用于将音乐的人声和乐器音轨分离。Whisper被用于为口语生成字幕。它们都具有各自的多种用途,并且它们在一起有一个特定的用途:可以用来从常规音频文件中生成卡拉OK音轨。在本教程中,您将结合使用Whisper和Spleeter来制作您自己的卡拉OK曲目,或集成到其他应用程序堆栈中。
先决条件
这些工具可以在大多数平台上使用。本教程将为Ubuntu 22.04服务器提供安装说明,按照我们的《Ubuntu 22.04初步服务器设置指南》进行操作。您将需要至少3GB内存来运行Whisper和Spleeter,因此如果您在资源受限的服务器上运行,建议您为本教程启用交换空间。
Spleeter和Whisper都是Python库,需要您安装了Python和pip,即Python的软件包管理器。在Ubuntu上,您可以参考《如何在Ubuntu 22.04服务器上安装Python 3并设置编程环境》的第一步。
此外,Spleeter 和 Whisper 均使用机器学习库,可选择在 GPU 上运行速度提高10-20倍。如果未检测到 GPU,则会自动转为在 CPU 上运行。配置 GPU 支持超出本教程的范围,但在启用 GPU 的环境中安装 PyTorch 后应该可以正常工作。
第一步-安装Spleeter、Whisper和其他工具。
首先,您需要使用pip,Python的包管理器,来安装您在此项目中将使用的工具。除了spleeter之外,您还应该安装youtube-dl,这是一个可以用来在本地下载YouTube视频的脚本,您将使用它来获取一个样本视频。使用pip install命令进行安装。
- sudo pip install spleeter youtube-dl
与其直接安装Whisper,你可以直接从Github安装另一个名为yt-whisper的库,同样使用pip。yt-whisper将Whisper作为其依赖项,因此在安装后,您将可以访问常规的whisper命令,但这样您还将获得yt-whisper脚本,这使得从YouTube下载和添加字幕变得一步到位。pip install可以通过在链接前加上git+来解析Github链接到Python代码库。
- sudo pip install git+https://github.com/m1guelpf/yt-whisper.git
最后,你需要确保已经安装了ffmpeg以进行一些额外的音频和视频处理。ffmpeg是一个通用工具,用于操作、合并和重新编码音频和视频文件。在Ubuntu上,你可以通过运行apt update后跟apt install来安装它。
- sudo apt update
- sudo apt install ffmpeg
现在您已经安装好必要的工具,下一步您将会获得示范音频和视频。
第二步-从视频中下载并分离音频。
在步骤1中安装的youtube-dl是一个用于将YouTube视频下载到本地环境的工具。尽管在使用潜在的版权材料时应当谨慎,但这在许多情况下都非常有用,特别是当您需要对视频进行额外处理或将其用作素材时。
使用youtube-dl下载您在本教程中使用的视频。此示例链接是一个公有领域歌曲“Lie 2 You”,但您也可以使用其他链接。
- youtube-dl https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt
youtube-dl将下载歌曲及其一些元数据,并将其合并为一个.webm视频文件。您可以在本地媒体播放器(如mpv)中播放此视频,但这取决于您的环境。
Note
接下来,您将从刚刚下载的视频中分离出音频轨道。这是FFmpeg擅长的任务。您可以使用以下FFmpeg命令将音频输出到一个名为audio.mp3的新文件中。
- ffmpeg -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 is the path to your input file, in this case the .webm video you just downloaded
- -c:a libmp3lame specifies an audio codec to encode to. All audio and video needs to be encoded somehow, and libmp3lame is the most common mp3 encoder.
- qscale:a 1 specifies the bitrate of your output mp3, in this case corresponding to a variable bit rate around 220kbps. You can review other options in the ffmpeg documentation.
- audio.mp3 is the name of your output file, presented at the end of the command without any other flags.
运行此命令后,FFmpeg将创建一个名为audio.mp3的新文件。
Note
在下一步中,你将使用Spleeter从你的新的audio.mp3文件中分离出器乐曲。
步骤3 – 使用Spleeter分离人声音轨
现在你已经有了独立的音频文件,可以使用Spleeter来分离人声轨道。Spleeter包含了几个用于spleeter separate命令的模型,可以让你进行更复杂的钢琴、吉他、鼓、贝斯等音轨的分离,但现在,你将使用默认的2stems模型。在audio.mp3上运行spleeter separate命令,同时提供一个输出目录的路径(-o)。
- spleeter separate -p spleeter:2stems -o output audio.mp3
如果您在没有GPU的情况下运行Spleeter,这个命令可能需要几分钟的时间才能完成。这将生成一个名为output的新目录,其中包含名为vocals.wav和accompaniment.wav的两个文件。这些文件是您分离的人声和伴奏音轨。如果遇到任何错误,或者需要进一步自定义Spleeter的输出,请参考文档。
你可以尝试在MPV或其他音频播放器中听这些文件。现在它们的文件大小相对较大,因为Spleeter直接解码为原始的WAV音频输出,但在接下来的步骤中,你将把它们重新编码为单个视频。
第四步 – 使用Whisper生成标题
现在你已经有了你的器乐音轨,你只需要从原始视频中生成字幕。你可以直接在你下载的.webm视频上运行whisper,但通过在原始YouTube视频链接上运行yt_whisper命令会更快。
- yt_whisper https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt
如果您审核yt_whisper源代码,您可以了解yt_whisper正在传递给whisper以从YouTube视频中生成字幕的预设设置。例如,它默认使用–model small参数。Whisper文档建议,此模型在内存需求、性能和准确性之间提供了一个良好的平衡。如果您需要在另一个输入源上或使用不同参数运行whisper,您可以将这些预设设置作为参考框架。
如果您在没有GPU的情况下运行Whisper,此命令可能需要几分钟才能完成。这将生成一个.vtt格式的视频字幕文件。您可以使用head命令或文本编辑器检查字幕,以验证其与歌词是否相匹配。
- head -20 Lie_2_You__ft__Dylan_Emmet____Leonell_Cassio__No_Copyright_Music.vtt
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 (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参数来将第一个(或者从0开始计数的第0个)输入映射到视频轨道,然后映射到音频,最后映射到字幕元数据,如下所示:-map 0:v -map 1:a -map 2 -metadata:s:s:0 language=eng。接下来,它指定了每个轨道使用的编解码器。
- c:v copy means that you are preserving the original video source and not reencoding it. This usually saves time and preserves video quality (video encoding is usually the most CPU-intensive use of ffmpeg by far) as long as the original source is in a compatible format. youtube-dl will almost always default to using the common H264 format, which can be used for streaming video, standalone .mp4 files, Blu Ray discs, and so on, so you should not need to change this.
- c:a aac means that you are reencoding the audio to the AAC format. AAC is the default for most .mp4 video, is supported in virtually all environments, and provides a good balance between file size and audio quality.
- c:s mov_text specifies the subtitle format you are encoding. Even though your subtitles were in vtt format, mov_text is a typical subtitle format to embed within a video itself.
Note
最后,你提供了一个输出格式final.mp4。请注意,除了在文件名中指定.mp4输出,你并没有实际上指定.mp4输出格式。FFmpeg会根据你提供的输出路径自动推断输出格式。在处理音频和视频文件时,你使用的编解码器通常比文件类型本身更重要,因为文件类型充当内容的容器。不同之处在于各种视频播放器预期能够读取哪种文件。目前,包含H264视频和AAC音频的.mp4文件是最常见的媒体文件,在几乎任何环境下都可播放,甚至可以直接在浏览器中播放,无需下载文件或配置流式传输服务器,并且它可以包含字幕,因此非常安全。.mkv是另一种受欢迎的容器格式,支持更多功能,但并未广泛部署。
你可以现在下载、分享或在墙上放映你的final.mp4视频进行卡拉OK之夜。祝你演出顺利!
现在,您有一个使用四个工具的端到端的卡拉OK视频解决方案。这些工具可以组合成一个独立的脚本,集成到另一个应用程序中,或根据需要交互式运行。
结论
在这个教程中,你使用了两个机器学习工具来从源视频中创建出一组分离的歌声和字幕,然后将它们重新合并在一起。这对于从现有音频资源中制作卡拉OK视频非常有用,但也可以应用于许多其他任务。
接下来,您可能希望配置一个视频流服务器,或者尝试一些其他的人工智能或机器学习库。