AI卡拉OK视频制作:Whisper与Spleeter智能工具教程

AI工具简介:图像、音频与视频处理的新纪元

AI工具在图像、音频或视频处理方面展现出卓越的能力,能够生成前所未有的新颖结果。过去,在不耗费大量时间和计算资源的情况下,自动编辑图像或音频极具挑战性,即便如此,通常也只能运行预设滤镜,例如去除音频的特定频率或改变图像的调色板。如今,借助创新的AI模型和海量的训练数据,我们可以实现更复杂的滤波和转换技术。

Spleeter和Whisper是两款专为音频分析和处理设计的开源AI工具。它们各自配备了预训练的语言模型,可以直接处理您提供的输入,例如MP3或AAC音频文件,无需额外配置。Spleeter主要用于将音乐中的人声和乐器音轨分离,而Whisper则专注于为口语生成字幕。这两款工具各自拥有广泛的应用场景,但当它们结合使用时,则能实现一个特定目标:从常规音频文件中生成卡拉OK音轨。在本教程中,您将学习如何结合使用Whisper和Spleeter来制作自己的卡拉OK曲目,或将其集成到其他应用程序堆栈中。

先决条件:环境准备与工具安装

这些工具可在大多数主流平台上运行。本教程将以Ubuntu 22.04服务器为例,提供详细的安装说明。请确保您的服务器已按照我们的《Ubuntu 22.04初步服务器设置指南》进行配置。运行Whisper和Spleeter至少需要3GB内存,因此如果您的服务器资源受限,建议为本教程启用交换空间。

Spleeter和Whisper都是Python库,因此您需要安装Python及其包管理器pip。在Ubuntu上,您可以参考《如何在Ubuntu 22.04服务器上安装Python 3并设置编程环境》的第一步来完成Python环境的搭建。

此外,Spleeter和Whisper均使用机器学习库,在GPU上运行可将速度提升10-20倍。如果未检测到GPU,它们将自动切换到CPU运行。配置GPU支持超出了本教程的范围,但在已启用GPU的环境中安装PyTorch后,它们应该能正常工作。

第一步:安装Spleeter、Whisper及其他辅助工具

首先,您需要使用Python的包管理器pip来安装本项目所需的所有工具。除了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

现在,您已安装好所有必要的工具。下一步,您将获取示范音频和视频。

第二步:从视频中下载并分离音频

在第一步中安装的youtube-dl是一个用于将YouTube视频下载到本地环境的工具。尽管在使用潜在的版权材料时应谨慎,但在许多情况下,这都非常有用,特别是当您需要对视频进行额外处理或将其用作素材时。

使用youtube-dl下载本教程中使用的视频。此示例链接是一个公有领域歌曲“Lie 2 You”,但您也可以使用其他链接:

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

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

注意:由于YouTube并未明确支持使用youtube-dl工具,因此下载速度可能偶尔会较慢。

接下来,您将从刚刚下载的视频中分离出音频轨道。这是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:输入文件的路径,在本例中是您刚刚下载的.webm视频。
  • -c:a libmp3lame:指定要编码的音频编解码器。所有音频和视频都需要某种方式进行编码,而libmp3lame是最常见的mp3编码器。
  • -qscale:a 1:指定输出mp3的比特率,在本例中对应于大约220kbps的可变比特率。您可以在FFmpeg文档中查看其他选项。
  • audio.mp3:输出文件的名称,在命令末尾呈现,不带任何其他标志。

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

注意:您可以从ffmprovisr这个社区维护的FFmpeg命令示例目录中了解更多有关FFmpeg选项的信息,或者参考官方文档

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

第三步:使用Spleeter分离人声音轨

现在,你已经拥有了独立的音频文件,接下来将使用Spleeter来分离人声轨道。Spleeter内置了多个模型,可用于执行更复杂的音轨分离任务,例如钢琴、吉他、鼓和贝斯等。但在此次操作中,我们将使用默认的`2stems`模型。在`audio.mp3`文件上运行`spleeter separate`命令,并指定一个输出目录路径(`-o`)。

  1. 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`命令会更快。

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

 

如果你审查`yt_whisper`的源代码,你会发现`yt_whisper`在从YouTube视频生成字幕时,会向Whisper传递预设参数。例如,它默认使用`–model small`参数。Whisper文档建议,此模型在内存需求、性能和准确性之间提供了良好的平衡。如果你需要在其他输入源上或使用不同参数运行Whisper,可以将这些预设设置作为参考。

如果在没有GPU的情况下运行Whisper,此命令可能需要几分钟才能完成。执行成功后,将生成一个`.vtt`格式的视频字幕文件。你可以使用`head`命令或文本编辑器检查字幕,以验证其是否与歌词匹配。

  1. 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将它们全部重新组合在一起。

第五步 – 将音频和视频轨道与字幕进行合并

整合最终视频:卡拉OK视频制作的最后一步

终于,是时候将你的所有成果整合到一个最终的视频中了。这个视频将包含:1)原始背景视频,2)使用Spleeter分离出的乐器音轨,以及3)使用Whisper生成的字幕。这可以通过一个稍微复杂一些的FFmpeg命令来完成。

  1. 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)输入映射到视频轨道,然后将第二个输入映射到音频轨道,最后将第三个输入映射到字幕元数据,具体如下:-map 0:v -map 1:a -map 2 -metadata:s:s:0 language=eng。接下来,它指定了每个轨道使用的编解码器。

  • -c:v copy:这意味着你将保留原始视频源,而不对其进行重新编码。只要原始源是兼容的格式,这通常可以节省时间并保持视频质量(视频编码通常是FFmpeg中最消耗CPU的操作)。youtube-dl几乎总是默认使用常见的H264格式,该格式可用于流媒体视频、独立的.mp4文件、蓝光光盘等,因此你通常不需要更改此设置。
  • -c:a aac:这意味着你将音频重新编码为AAC格式。AAC是大多数.mp4视频的默认音频格式,几乎在所有环境中都受支持,并在文件大小和音频质量之间提供了良好的平衡。
  • -c:s mov_text:这指定了你正在编码的字幕格式。即使你的字幕是VTT格式,mov_text也是一种典型的嵌入视频内部的字幕格式。

注意:你可能还想将字幕提前几秒,以帮助观众预判下一行将要出现的内容。你可以通过在FFmpeg命令中添加-itsoffset -2来实现这一点。最后,你提供了一个输出文件名final.mp4。请注意,除了在文件名中指定.mp4扩展名外,你并没有实际指定.mp4输出格式。FFmpeg会根据你提供的输出路径自动推断输出格式。在处理音频和视频文件时,你使用的编解码器通常比文件类型本身更重要,因为文件类型充当内容的容器。不同之处在于各种视频播放器预期能够读取哪种文件。目前,包含H264视频和AAC音频的.mp4文件是最常见的媒体文件,几乎在任何环境下都可播放,甚至可以直接在浏览器中播放,无需下载文件或配置流媒体服务器,并且它可以包含字幕,因此非常安全。.mkv是另一种受欢迎的容器格式,支持更多功能,但并未广泛部署。

现在,你可以下载、分享或在卡拉OK之夜将你的final.mp4视频投射到墙上。祝你演出顺利!

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

结论

在这个教程中,你使用了两个机器学习工具来从源视频中创建一组分离的乐器音轨和字幕,然后将它们重新合并在一起。这对于从现有音频资源中制作卡拉OK视频非常有用,但也可以应用于许多其他任务。

接下来,你可能希望配置一个视频流服务器,或者尝试一些其他的人工智能或机器学习库。

bannerAds