我一直在尝试创建一种从python代码流式传输youtube
url(最好仅是音频,尽管这没什么大不了)的方法。我尝试了很多事情,但似乎没有一个真正起作用。到目前为止,我已经能够使用youtube数据API搜索视频或播放列表,获取第一个视频或播放列表,并将其传递到pafy中以获取不同的流媒体网址。有谁知道一种通过python播放youtube音频/视频而无需先下载视频的方法吗?我认为可以通过子进程使用mplayer或vlc之类的cmd线工具为cmd线弹出一个cmd并传递URL,但是我被卡住了。需要任何帮助。请!这是我的以下代码:
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),而无需先下载视频
谢谢!
pafy
根据其文档,请勿直接列出播放媒体(至少我没有找到任何播放媒体)。
但是,我们可以使用它来获取正确的url,然后使用播放器,例如vlc
直接播放而不下载。
您可以从这里下载vlc
首先,我们通过youtube
使用获得正确/最佳URLpafy
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播放它。
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命令相应地构建一个命令,例如
>>> player.pause() #-- to pause video
>>> player.resume() #-- resume paused video.
>>> player.stop() #-- to stop/end video
问题内容: 有几篇关于使用来从文章,但没有一篇是具体的或有用的。我想知道从Python脚本执行此操作的最佳方法是什么。 例如,这是下载视频的README示例: 显然,如果您只关心音频,则不希望下载整个视频… 在YouTube的-DL源仅仅是如此的帮助(即不太)。 任何建议如何编写脚本? 问题答案: 阅读开发者说明中的修改示例: 如果可能/受支持,它将下载音频文件。如果文件还不是mp3,则使用ffm
编辑:经过一些测试后,这里是关于这个主题的一些附加信息。我试着从互联网上获取音频的视频只是一个示例mp4文件: http://download.wavetlan.com/svv/media/http/mp4/convertedfiles/mediaCoder/mediaCoder_test6_1m9s_xvid_vbr_306kbps_320x240_25fps_mpeg1layer3_cbr_3
我已经搜索了Google的所有可用文档,但我找不到Python音频流上的流式语音识别示例。 目前,我正在Django中使用Python语音识别从用户那里获取音频,然后收听音频。然后,我可以保存文件并运行google语音识别,或者直接从创建的音频实例中运行。 有人能指导我如何对音频流执行流式语音识别吗?
我将从REST服务接收非常短的音频数据。它们将以WAV格式到达。然后我需要在Android设备上播放它们。我想在不将数据保存到文件的情况下完成这项工作——这只会让它变得比需要的更复杂。然而,我无法从内存流让它工作。下面是我正在使用的测试代码(使用assets文件夹中的.wav文件): 当我从文件中播放它时,它是好的,但是内存流方法给了我一个IO异常准备失败错误。我怀疑问题可能是音频/wav值。我找
我的音乐应用程序从外部应用程序启动,使用意向数据作为音乐文件。 我有mp3音频URI,类似这样 file:///storage/emulated/0/Music/Tamil/I(2014)/Ennodu Nee Irundhaal。mp3 如何从媒体获取音频详细信息。标题,媒体。相册,媒体_身份证件
我正在尝试用HLS格式录制rtsp流。我需要同时录制音频和视频。使用下面的命令,可以录制一些流的视频和音频,比如来自Internet rtsp://wowzaec2demo.streamlock.net/vod/mp4:bigbuckbunny_115k.mov的测试rtsp流。至于我的IP相机,它不工作,意味着视频被录制,但没有音频输出文件。 这是我的IP相机的命令行输出,同时开始录制上面的命令