YouTubeから音楽をダウンロードして再生する
まずは「Bluetoothスピーカーを使う」を参照して、スピーカーをラズパイに接続し、音声をスピーカーから流せることを確認してください。
次に、ラズパイを最新の状態にします。Terminalで、以下のコマンドをひとつづつ実行してください。
sudo apt update -y
sudo apt full-upgrade -y
youtube-dlをインストールする
YouTubeから動画をダウンロードするコマンドがyt-dlpです。以下のコマンドでインストールします。
sudo pip3 install -U yt-dlp
yt-dlpは頻繁にアップデートされているので、ときどきこのコマンドを再度実行して最新バージョンへ更新する必要があります。
YouTubeから動画をダウンロード、保存する
youtube-dlを使ってYouTubeから動画をダウンロードするには、まずその動画のURLをチェックします。動画URLは以下のようなフォーマットになっています。
https://www.youtube.com/watch?v=GR_KWvtyUbM
この動画URLを使って、以下のコマンドを実行してください。
yt-dlp https://www.youtube.com/watch?v=GR_KWvtyUbM
これで、YouTubeから対象動画がダウンロード、保存されます。動画の長さにもよりますが、それなりに時間がかかります。気長に待ちましょう。ダウンロードが終了したら、.webmファイルが保存されます。これを再生するには、VLCを使います:
vlc xyzabc.webm
ラズパイは、動画再生するには非力なので、VLCが起動して動画が再生されるまでに時間がかかると思います。より現実的なのは、ダウンロードした動画から音楽部分だけを抽出して、それを再生することです。ラズパイでも音楽の再生は問題ないはずです。
YouTubeから動画をダウンロードして音楽だけ抽出、保存する
以下、動画をダウンロードして音楽だけ抽出するコマンドです。「-x」を追加するだけです。
yt-dlp -x https://www.youtube.com/watch?v=GR_KWvtyUbM
抽出された音楽データは、.opusファイルで保存されます。これをVLCで再生するコマンドが以下です。
vlc -I dummy xyzabc.opus --play-and-exit
「-I dummy」の部分は、VLCがウィンドウを開かずに音楽を再生するための指定です。最後の部分「–play-and-exit」を追加すると、音楽再生後にコマンドが自動終了します。
以下のコマンドは、抽出する音楽データに関して追加の指定をしたものです。
yt-dlp -x --audio-quality 0 --audio-format mp3 https://www.youtube.com/watch?v=GR_KWvtyUbM
「–audio-quality 0」は音楽データの品質を(可能なら)落とさないようにする指示です。数字の「0」を大きくすると、品質を落としてファイルサイズを小さくできます。最低の品質を指定するには「10」を指定して下さい。「–audio-format mp3」は音楽データの形式をMP3にする指示です。mp3以外にaac、wavなども指定可能です。
さらに以下のコマンドでは、「-o」以降の部分で、ファイル名が短く単純なものになるよう指示しています。
yt-dlp -x --audio-quality 0 --audio-format mp3 -o '%(title)s.%(ext)s' --restrict-filenames --quiet https://www.youtube.com/watch?v=GR_KWvtyUbM
「–restrict-filenames」は、ファイル名に使う文字をアルファベット(ASCII文字)だけに限定し、「&」やスペースを使わない指示です。また、「–quiet」は、ダウンロードとデータ形式の変換に関する進捗状況のメッセージを一切表示しないモードを指示しています。
保存された.mp3ファイルを再生するには以下のコマンドを実行してください。
vlc -I dummy xyzabc.mp3 --play-and-exit
プログラムを使って音楽をダウンロード、保存する
yt-dlpを使って音楽データをダウンロード、保存するPythonプログラムが、youtube-dl.pyです。yt-dlpコマンドを2回subprocess.run()に渡して実行しています。1回目は、もともとの音楽データの名前をベースにファイル名を決めています。2回目では特定のファイル名(sample.mp3)を与えて、その名前を使っています。
プログラム冒頭の
url = "YOUTUBE-URL"
で、YOUTUBE-URLを動画URLに適宜置き換えてください。URLの前後にある”は両方ともそのままにしてください。