Аудио-стрим с youtube Python
решил написать скрипт для трансляции аудиопотока с youtube. Поискав в Интернете нашел несколько примеров, поковырял их и вот что вышло:
import pyglet
import youtube_dl
url = "https://www.youtube.com/watch?v=6aTYceNFDP4"
def download(url):
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192'
}],
'postprocessor_args': [
'-ar', '16000'
],
'prefer_ffmpeg': True,
'keepvideo': True
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
info_dict = ydl.extract_info(url, download=False)
ydl.download([url])
return ydl.prepare_filename(info_dict)
def play_sound(name):
song = pyglet.media.load(name)
song.play()
pyglet.app.run()
try:
play_sound(download(url))
except:
pass
Все работает, но не прям как надо. Он сначала скачивает аудио с видео, а потом запускает. Подскажите, есть ли какие то методы, чтобы без скачивания воспроизводить аудио-поток?
Ответы (2 шт):
Автор решения: Eugene X
→ Ссылка
Зачем изобретать велосипед, если весь нужный функционал уже реализован в ffmpeg? Вот пример как стримить аудио дорожку с видео с cover image. Допили под свои нужды.
mkfifo $pipe
cat $pipe | ffmpeg -y
-loop 1 -i cover.png
-i pipe:0
-c:v libx264 -preset ultrafast -pix_fmt yuv420p -minrate 6000k -maxrate 6000k -bufsize 12000k -b:v 6000k
-r 30 -g 30 -keyint_min 60 -x264opts "keyint=60:min-keyint=60:no-scenecut"
-s 1920x1080 -tune zerolatency
-b:a 128k -c:a aac -ar 48000
-strict experimental
-f flv rtmp://a.rtmp.youtube.com/live2/$broadcast_id
Автор решения: CGduuDE
→ Ссылка
Все оказалось намного проще:
- Скачиваем mvp mvp
Редактируем этот код:
import subprocess url = input() subprocess.Popen( "start /b " + "C:\\Users\\CGduuDE\\Desktop\\mpv\\mpv.exe " + url + " --no-video --loop=inf --input-ipc-server=\\\\.\\pipe\\mpv-pipe > output.txt", shell=True)