ホワイトパソコンやスプリーターAIツールを使って、カラオケ動画を作る方法
はじめに
AIツールは、画像や音声、ビデオを操作して新たな結果を生み出すのに役立ちます。以前は、自動的に画像や音声を編集することは、かなりの時間と計算力を使わなければ実装することが難しく、それでも音声から特定の周波数を削除するためのキーターンフィルターを実行するか、画像の色パレットを変更することしかできませんでした。AIモデルと膨大な量のトレーニングデータを使用した新しいアプローチでは、より洗練されたフィルタリングと変換技術を実行することが可能です。
SpleeterとWhisperはオーディオの分析と操作のために設計されたオープンソースのAIツールです。両方とも独自の事前学習言語モデルと共に開発され、MP3やAACの音声ファイルなどの入力を提供するだけで直接実行することができます。Spleeterは音楽のボーカルトラックと楽器トラックを分離するために使用されます。Whisperは話される言語の字幕を生成するために使用されます。両方とも個別に多くの用途があり、特に一緒に使用すると、通常の音声ファイルからカラオケトラックを生成することができます。このチュートリアルでは、WhisperとSpleeterを一緒に使用して独自のカラオケ曲を作成したり、他のアプリケーションスタックに統合したりします。
前提条件
これらのツールはほとんどのプラットフォームで利用可能です。このチュートリアルでは、Ubuntu 22.04 サーバーにインストールする方法を説明します。Ubuntu 22.04 の「初期サーバーセットアップガイド」に従ってください。Whisper と Spleeter を実行するには、少なくとも3GBのメモリが必要です。リソースに制約のあるサーバーを使用している場合は、このチュートリアルではスワップを有効にすることを検討してください。
SpleeterとWhisperの両方はPythonライブラリであり、Pythonとpip(Pythonパッケージマネージャー)のインストールが必要です。Ubuntuでは、Ubuntu 22.04サーバー上でPython 3をインストールし、プログラミング環境を設定する方法のステップ1を参照できます。
また、SpleeterとWhisperの両方は、オプションでGPU上で10〜20倍高速に動作することができる機械学習ライブラリを使用しています。GPUが検出されない場合、自動的にCPU上で動作するようになります。GPUサポートの設定は、このチュートリアルの範囲外ですが、GPU対応環境でPyTorchをインストールすると動作するはずです。
ステップ1 – Spleeter、Whisper、およびその他のツールのインストール
最初に、このプロジェクトで使用するツールをインストールするために、Pythonのパッケージマネージャーであるpipを使用する必要があります。spleeter以外にも、YouTubeの動画をローカルにダウンロードするために使用するスクリプトであるyoutube-dlもインストールする必要があります。pip installコマンドを使用して、以下のようにインストールしてください。
- sudo pip install spleeter youtube-dl
Whisperを直接インストールする代わりに、pipを使用してGithubからyt-whisperという別のライブラリを直接インストールすることもできます。yt-whisperにはWhisper自体が依存関係として含まれているため、インストール後は通常のwhisperコマンドにアクセスできますが、これによりyt-whisperスクリプトも取得できます。このスクリプトを使用すると、YouTubeからビデオをダウンロードして字幕を追加する作業がワンステップで行えます。pip installは、PythonリポジトリへのGithubリンクをgit+で開始することで解析することができます。
- 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
必要なツールがインストールされているので、次のステップではサンプルのオーディオとビデオを取得します。
ステップ2- ビデオから音声をダウンロードして分離します。
Step1でインストールした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を使用して新しい音声ファイルの伴奏トラックを分離します。
ステップ3 – Spleeterを使用してボーカルトラックを分離する
独立したオーディオファイルを手に入れたので、音声トラックを分離するためにスプリーターを使う準備が整いました。スプリーターには、別々のコマンドを使用するための数種類のモデルが含まれており、ピアノ、ギター、ドラム、ベーストラックなどのより高度な分離を行うことができますが、今回はデフォルトの2stemsモデルを使用します。オーディオ.mp3ファイルに対して、スプリーターの分離コマンドを実行し、-o出力ディレクトリへのパスも指定してください。
- spleeter separate -p spleeter:2stems -o output audio.mp3
もしGPUを使用せずにSpleeterを実行している場合、このコマンドは完了するまで数分かかる場合があります。これにより、vocals.wavとaccompaniment.wavという2つのファイルを含むoutputという新しいディレクトリが作成されます。これらは、分離されたボーカルと楽器トラックです。エラーが発生した場合や、Spleeterの出力をさらにカスタマイズする必要がある場合は、ドキュメントを参照してください。
これらのファイルは、MPVや他のオーディオプレーヤーで試しに聞くことができます。今の段階では、Spleeterが直接生のWAV出力に変換するため、ファイルサイズは相対的に大きくなっています。しかし、次のステップでは、これらを単一のビデオにエンコードしなおすことになります。
ステップ4 – Whisperを使用してキャプションを生成する。
インストゥルメンタルのオーディオトラックを手に入れたので、あとは元のビデオから字幕を生成する必要があります。ダウンロードした.webmビデオに直接whisperを実行することもできますが、オリジナルのYouTubeビデオリンクにyt_whisperコマンドを実行すればさらにスピーディです。
- yt_whisper https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt
yt_whisperのソースコードをレビューすると、YouTubeの動画からキャプションを生成するためにyt_whisperがwhisperに渡すプリセットが理解できます。例えば、デフォルトでは–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を使用して再結合します。
ステップ5 – キャプション付きのオーディオとビデオトラックのマージ
最後に、出力したものを統合して完成したビデオを作成する時間です。それには、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コマンドとは異なり、このコマンドでは3つの異なる入力が使用されています。具体的には、.webm形式の映像、.wav形式の音声、そして.vtt形式の字幕です。それぞれの入力を適切なトラックにマッピングするために、複数のマップ引数が使用されています。最初の(または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の出力形式は、このファイル名以外で明示的に指定していませんが、ffmpegは提供された出力パスに基づいて自動的に出力形式を推測します。音声やビデオファイルを扱う際には、コンテンツのコンテナとして機能するファイルの種類よりも使用するコーデックの方が一般的に重要です。重要な違いは、どのビデオプレーヤーがどの種類のファイルを読み込むことができるかという点にあります。本文執筆時点では、H264ビデオとAACオーディオを含む.mp4ファイルがどこでも最も一般的に使用され、ほとんどの環境で再生されるため、非常に安全なターゲットとなっています。.mkvは他の機能をサポートする人気のあるコンテナ形式ですが、広く展開されているわけではありません。
最終的な.mp4ビデオは、ダウンロード、共有、または壁に映し出してカラオケの夜に利用することができます。パフォーマンスがんばってください!
現在、4つのツールを使ったエンドツーエンドのカラオケビデオソリューションが利用できます。これらは単体のスクリプトに組み合わせることも、他のアプリケーションに統合することもでき、必要に応じて対話的に実行することもできます。
結論
このチュートリアルでは、2つの機械学習ツールを使用して、元のビデオから別々のボーカルトラックとキャプションセットを作り、それらを再結合しました。これは既存のオーディオソースからカラオケ動画を作成するのにユニークに役立つだけでなく、他の多くのタスクにも応用できます。
次に、ビデオストリーミングサーバーの設定をしたり、他のAIや機械学習のライブラリで実験することもできます。