Comment diffuser la musique d'un live Youtube (Chillhop) dans OBS ?

par Korben -

En tant que streamer professionnel sur Twitch depuis plusieurs années, j’ai développé au fil du temps des compétences et une audience qui me permet de bosser en live les lundis, mardi et jeudi après-midi.

Évidemment, moi qui discute avec les gens dans le chat, c’est cool. Mais avec un petit fond sonore, c’est mieux !

Mais on ne peut pas diffuser n’importe quelle musique sur Twitch car sinon, ces derniers coupent le son pour des questions de droits d’auteur.

Je suis donc passé par le site Chillhop qui propose des morceaux Lo-Fi / Chill parfaits pour faire un fond sonore sympa dans mon stream. Pour intégrer leur musique, j’avais alors 2 possibilités : Streamer leur playlist via Spotify ou streamer leur live YouTube, directement depuis OBS.

Spotify, je m’en sers pour écouter ma musique copyrightée toute la journée donc je ne pouvais pas le dédier à ça. J’ai donc créé une source browser chargeant une page HTML de mon cru permettant de jouer la playlist Chillhop en auto play.


C’était cool et ça fonctionnait bien. Jusqu’au jour où Chillhop (ou YouTube) a bloqué l’autoplay sur ses Lives.

Plus de musique de fond sur mes streams. J’étais tristesse. Puis au bout d’un moment, mes millions de viewers ont commencé à me réclamer de la musique en fond sonore.

N’écoutant que mon abnégation à leur égard, j’ai donc décidé de trouver la parade pour streamer un live YouTube dans OBS. Je vais vous détailler tout ça, étape par étape. Pensez bien à envoyer l’URL de cet article à votre streamer ou streameuse préférée.

Je suis donc parti (grâce aux conseils de ma communauté) sur l’option VLC qui permet de tout faire et surtout de lire une vidéo YouTube directement depuis le player comme ceci (je suis sous macOS, mais pour Windows ou Linux, c’est le même principe) :

/Applications/VLC.app/Contents/MacOS/VLC 'https://www.youtube.com/watch?v=7NOSDKb0HlU'

Je sais, il y a une source VLC dans OBS, mais je n’ai jamais réussi à la faire fonctionner correctement. Donc je suis parti sur VLC, mais chargé à l’extérieur d’OBS.

Sauf que je n’ai pas besoin de la vidéo, mais uniquement du son. J’ai donc rajouté ce paramètre :

/Applications/VLC.app/Contents/MacOS/VLC 'https://www.youtube.com/watch?v=7NOSDKb0HlU' --no-video

À ce moment-là, le logiciel que j’utilise pour ma table de mixage (Loopback) n’est pas encore compatible avec la dernière version de macOS. Je ne pouvais donc pas récupérer le son provenant de VLC.

Il fallait donc que je me débrouille sans ça.

J’ai donc entrepris de créer toujours avec VLC, un streaming du live YouTube de Chillhop, qui serait accessible via l’URL http://localhost:2323 que je pourrais alors charger dans une source “Media Source” dans OBS.

Ca donne donc ceci :

/Applications/VLC.app/Contents/MacOS/VLC 'https://www.youtube.com/watch?v=7NOSDKb0HlU' --no-video --sout '#standard{access=http,mux=ogg,dst=localhost:2323}'

Impeccab’ comme dirait le chef Michel Dumas. Je peux alors créer ma nouvelle Media Source dans OBS et avoir le son de Chillhop.

Mais il y a deux problème à cette ligne de commande :

  • Il faut que je pense à la lancer avant de démarrer mon live.
  • Et quand je la lance, ça démarre VLC qui est alors visible comme ceci :

C’est moche et si par réflexe, je ferme le terminal ou VLC, ça coupe la musique.

Alors pour masquer l’interface de VLC, il suffit de le lancer avec ce paramètre :

/Applications/VLC.app/Contents/MacOS/VLC -I http 'https://www.youtube.com/watch?v=7NOSDKb0HlU' --no-video --sout '#standard{access=http,mux=ogg,dst=localhost:2323}'

Impeccab’ again.

Toutefois, penser à le lancer à chaque fois, c’est relou. C’est là que j’ai appris l’existence des scripts dans OBS. En effet, on peut coder des scripts pour interagir avec OBS, soit en Python, soit en LUA. Je suis fan de Python donc je me dis que ça va être vite torché, mais malheureusement, j’ai eu beau spécifier le bon interpréteur Python dans OBS, impossible de faire tourner le moindre script Python. Même un hello world ça ne fonctionnait pas.

Je ne pouvais pas non plus y passer des heures, donc je me suis rabattu sur le LUA. J’ai donc pondu ce script en LUA pour appeler ma ligne de commande VLC. Vous allez voir, c’est plusieurs centaines de lignes de code ultra complexes. Non, je déconne, c’est juste une ligne de merde :

-- Script LUA pour charger la musique de Chillhop dans OBS - https://korben.info
os.execute("/Applications/VLC.app/Contents/MacOS/VLC -I http 'https://www.youtube.com/watch?v=7NOSDKb0HlU' --no-video --sout '#standard{access=http,mux=ogg,dst=localhost:2323}'")

J’ai sauvegardé ce script en le nommant chillhop.lua, puis je me suis rendu dans OBS, menu “Tools” > “Scripts” et j’ai simplement ajouté mon script Lua dedans :

J’ai relancé OBS et là, je me suis rendu compte que ça freezait tout mon OBS. En effet, en se chargeant, VLC bloque la suite du chargement de l’application. J’ai donc rajouté un petit & à la fin de la commande pour que OBS reprenne immédiatement la main et n’attende pas comme un con que VLC ait terminé.

os.execute("/Applications/VLC.app/Contents/MacOS/VLC -I http 'https://www.youtube.com/watch?v=7NOSDKb0HlU' --no-video --sout '#standard{access=http,mux=ogg,dst=localhost:2323}' & ")

Et voilà, ça fonctionne. OBS démarre, exécute le script LUA qui à son tour lance VLC en arrière plan pour lire la musique et OBS peut alors récupérer dans sa Media Source le son diffusé via l’adresse localhost. C’est transparent et rapide.

Ce qui est cool avec tout ça, c’est que ça ouvre un monde de possibilité pour augmenter et piloter OBS tout en script. C’est donc à creuser. Il ne me manque plus que les bonnes idées maintenant.