如何使用Python从Youtube URL流音频(不下载)? [英] How to stream audio from a Youtube URL in Python (without download)?

查看:128
本文介绍了如何使用Python从Youtube URL流音频(不下载)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试创建一种从python代码流式传输youtube url(最好是音频,尽管这没什么大不了)的方法.我尝试了很多事情,但似乎没有一个真正起作用.到目前为止,我已经能够使用youtube数据API搜索视频或播放列表,获取第一个视频或播放列表,并将其传递到pafy中以获取不同的流媒体网址.有谁知道一种通过python播放youtube音频/视频而无需先下载视频的方法吗?我认为使用子播放器等mplayer或vlc这样的cmd线工具可以为cmd线弹出一个cmd并传递URL,但是我被卡住了.需要任何帮助.请!这是我的以下代码:

I have been trying to create a way to stream a youtube url (preferably audio only, although this doesn't matter too much) right from python code. I have tried numerous things but none really seem to work. So far, I am able to search for videos or playlists using youtube data api, grab the first video or playlist and pass it into pafy to get different streaming urls. Does anyone know of a way to play youtube audio/video through python without downloading the video first? I would think it is possible with a cmd line tool such as mplayer or vlc using the sub process to pop open a cmd for the cmd line and pass in the url, but I am stuck. Any help is needed. Please! Here is my following code:

import argparse
import pafy
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

DEVELOPER_KEY = 'DEVELOPER KEY'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'

def pafy_video(video_id):
    url = 'https://www.youtube.com/watch?v={0}'.format(video_id)
    vid = pafy.new(url)

def pafy_playlist(playlist_id)
    url = "https://www.youtube.com/playlist?list={0}".format(playlist_id)
    playlist = pafy.get_playlist(url)


def youtube_search(options):
  youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY)

  search_response = youtube.search().list(
    q='Hello world',
    part='id,snippet',
    maxResults=options.max_results
  ).execute()

  videos = []
  playlists = []
  channels = []
  for search_result in search_response.get('items', []):
    if search_result['id']['kind'] == 'youtube#video':
      videos.append('%s' % (search_result['id']['videoId']))
    elif search_result['id']['kind'] == 'youtube#channel':
      channels.append('%s' % (search_result['id']['channelId']))
    elif search_result['id']['kind'] == 'youtube#playlist':
      playlists.append('%s' % (search_result['id']['playlistId']))


  if videos:
    print('Videos:{0}'.format(videos))
    pafy_video(videos[0])
  elif playlists:
    print('Playlists:{0}'.format(playlists))
    pafy_video(playlists[0])

  #https://www.youtube.com/watch?v=rOU4YiuaxAM
  #url = 'https://www.youtube.com/watch?v={0}'.format(videos[0])
  #print(url)

if __name__ == '__main__':
  parser = argparse.ArgumentParser()
  parser.add_argument('--q', help='Search term', default='Google')
  parser.add_argument('--max-results', help='Max results', default=3)
  args = parser.parse_args()
  youtube_search(args)

Tldr;我想直接从python代码流式传输youtube视频(使用url或id),而无需先下载视频

Tldr; I would like to stream a youtube video (using the url or id) straight from python code without downloading the video first

谢谢!

推荐答案

pafy根据其文档不要直接列出正在播放的媒体(至少我没有找到任何媒体).

pafy according to its documentation do not list playing media directly (at least I didn't find any).

但是,我们可以使用它来获取正确的网址,然后使用诸如vlc的播放器直接播放而无需下载.

However we can use it to get correct url, and then use player such as vlc to play directly without downloading.

您可以从此处下载 vlc

首先,我们使用pafy

import pafy
import vlc

url = "https://www.youtube.com/watch?v=bMt47wvK6u0"
video = pafy.new(url)
best = video.getbest()
playurl = best.url

在此处playurl是播放的最佳URL. 然后我们使用VLC播放它.

Over here playurl is best URL to play. Then we use VLC to play it.

Instance = vlc.Instance()
player = Instance.media_player_new()
Media = Instance.media_new(playurl)
Media.get_mrl()
player.set_media(Media)
player.play()

这将打开一个无控件的窗口(播放/暂停/停止等). 您可以在repr窗口或python提示符下运行这些命令(取决于您的使用方式)
您将需要使用vlc命令(例如

This will open a window with no controls (play/pause/stop etc). You can run these command on the repr window or at python prompt (depending upon how you are using it)
You will need to build one accordingly using vlc commands such as

>>> player.pause() #-- to pause video
>>> player.resume()  #-- resume paused video.
>>> player.stop()  #-- to stop/end video

这篇关于如何使用Python从Youtube URL流音频(不下载)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆