1

我想录制 youtube 直播并使用 python 将其保存到文件中。

我尝试使用 pytube 库,但它可能适用于视频,而不适用于直播。

我想录制流并将其保存到视频格式为 avi 或类似的文件中。

4

2 回答 2

2

根据@wownis 的回答进行修改。
(我试过这个答案,但是,它不起作用。)

# pip install urllib
# pip install m3u8
# pip install streamlink
import urllib
import m3u8
import streamlink


def get_stream(url):
    """
    Get upload chunk url
    """
    streams = streamlink.streams(url)
    stream_url = streams["best"]

    m3u8_obj = m3u8.load(stream_url.args['url'])
    return m3u8_obj.segments[0]


def dl_stream(url, filename, chunks):
    """
    Download each chunks
    """
    pre_time_stamp = 0
    for i in range(chunks+1):
        stream_segment = get_stream(url)
        cur_time_stamp = \
            stream_segment.program_date_time.strftime("%Y%m%d-%H%M%S")

        if pre_time_stamp == cur_time_stamp:
            pass
        else:
            print(cur_time_stamp)
            file = open(filename + '_' + str(cur_time_stamp) + '.ts', 'ab+')
            with urllib.request.urlopen(stream_segment.uri) as response:
                html = response.read()
                file.write(html)
            pre_time_stamp = cur_time_stamp


url = "https://www.youtube.com/watch?v=2U3JnFbD-es"
dl_stream(url, "live", 15)

输出如下:

./
live_20200713-103739.ts   
live_20200713-103744.ts   
...
于 2020-07-13T11:09:32.297 回答
0

我找到了一个解决方案,并将我的代码放在 python 中:

导入 urllib
导入 m3u8
导入流链接


def 记录流(网址,文件名,迭代):
    最后一部分 = 0
    对于我在范围内(迭代+1):

        流 = streamlink.streams(url)
        stream_url = 流[“最佳”]
        打印(stream_url.args['url'])

        m3u8_obj = m3u8.load(stream_url.args['url'])

        previous_part_time = last_part
        last_part = m3u8_obj.segments[-1].program_date_time

        如果我 >= 1:
         对于范围内的 j(1,len(m3u8_obj.segments)):
            如果 m3u8_obj.segments[-j].program_date_time == previous_part_time:
               休息

         打印(j)

         文件=打开(文件名+“.ts”,“ab+”)
         对于范围内的 i (j-1,0,-1):
            以 urllib.request.urlopen(m3u8_obj.segments[-i].uri) 作为响应:
               html = response.read()
               文件.write(html)


url = "https://www.youtube.com/watch?v=BgKGctL0u1U"
记录流(网址,“文件”,10)

10 表示 10 次迭代,如果块有 2s,则表示记录 20s 的流

于 2019-05-07T10:21:47.697 回答