V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qianyi0129
V2EX  ›  问与答

如何下载 m3u8 视频?

  •  
  •   qianyi0129 · 2018-02-09 17:44:03 +08:00 · 31621 次点击
    这是一个创建于 2477 天前的主题,其中的信息可能已经有所发展或是发生改变。

    知道 m3u8 地址 ,也可以播放 mac 上

    下载这个有啥技术难度么?为啥找不到相关程序

    第 1 条附言  ·  2018-02-11 09:21:53 +08:00
    31 条回复    2020-03-09 14:52:13 +08:00
    catror
        1
    catror  
       2018-02-09 18:35:25 +08:00   ❤️ 1
    没啥技术难度,m3u8 本身是一个文本文件,里面存的是一堆视频片段的 URL,一个个下载下来再合并就行。
    你可以直接用 ffmepg 来下载,搜一下"ffmpeg m3u8 转 mp4",会有你要得结果。
    sen506
        3
    sen506  
       2018-02-09 18:50:02 +08:00 via iPhone   ❤️ 1
    ffmpeg -i your_url -codec copy out.flv
    qianyi0129
        4
    qianyi0129  
    OP
       2018-02-09 20:10:31 +08:00
    @catror 所以这么简单为啥没人整出来一个一体化的工具
    crab
        5
    crab  
       2018-02-09 21:14:34 +08:00
    @qianyi0129 善用搜索
    sundayhk
        6
    sundayhk  
       2018-02-09 21:15:40 +08:00 via Android
    github 有 m3u8-download
    liuwenxu
        7
    liuwenxu  
       2018-02-09 22:01:01 +08:00 via iPhone
    win 我一直用的 potplayer,每天定时录制,mac vlc 应该可以录制,这玩意只能叫录制
    nicevar
        8
    nicevar  
       2018-02-09 23:05:20 +08:00
    @qianyi0129 github 上一搜一堆,python 实现的也不少,弄下来直接用就行了,因为 m3u8 可以搞出些花样来,一体化的工具并不那么适用,不如代码根据实际需求修改
    JoostShao
        9
    JoostShao  
       2018-02-09 23:35:30 +08:00
    加密的怎么下载?
    rainfox
        10
    rainfox  
       2018-02-10 01:51:06 +08:00
    rainfox
        11
    rainfox  
       2018-02-10 01:53:34 +08:00
    Valyrian
        12
    Valyrian  
       2018-02-10 05:16:39 +08:00
    不推荐直接用 ffmpeg,单线程的,特别慢
    shellcmd
        13
    shellcmd  
       2018-02-10 09:53:45 +08:00 via Android
    好像手机上 uc 直接就可以下载
    lrz0lrz
        14
    lrz0lrz  
       2018-02-10 10:23:49 +08:00
    @qianyi0129 #4 所以这么多工具为啥你找不到
    qianyi0129
        15
    qianyi0129  
    OP
       2018-02-10 13:43:24 +08:00
    @lrz0lrz github 上那些啊 停更很久了
    haoliang
        16
    haoliang  
       2018-02-10 14:01:00 +08:00
    伸手党
    lm902
        17
    lm902  
       2018-02-10 14:24:13 +08:00
    前不久做的 M3U8 下载工具,在 bin 下的 Debug 目录中可以看到编译好的文件 https://share.weiyun.com/f549cc174b675e0d0afa0f49f88f9d24
    acupnocup
        18
    acupnocup  
       2018-02-10 15:45:09 +08:00 via iPhone
    IDM 复制地址就下载
    param
        19
    param  
       2018-02-10 20:25:46 +08:00 via Android
    ffmpeg 即可。參見 3 樓。
    cyp777777
        20
    cyp777777  
       2018-02-28 14:03:00 +08:00 via Android   ❤️ 1
    qianyi0129
        21
    qianyi0129  
    OP
       2018-02-28 18:01:25 +08:00
    @cyp777777 我用 mac
    cyp777777
        22
    cyp777777  
       2018-03-03 20:06:26 +08:00 via Android
    @qianyi0129 那就不会写咯😄
    c4f36e5766583218
        23
    c4f36e5766583218  
       2019-01-03 16:35:50 +08:00
    @sen506 ffmpeg 可以只下载并保存文件,但不合并吗?
    yanbook
        24
    yanbook  
       2019-04-04 12:25:25 +08:00
    @cyp777777 这个最好,可以修改连接数满速下载.其它的下载工具只能一个一个文件下载,慢死了 .谢谢. 另外这个工具好像没法指定下载位置,默认输出到软件目录下的 output 文件夹.
    cyp777777
        25
    cyp777777  
       2019-05-11 17:24:50 +08:00 via Android
    @yanbook 下载位置可以用配置来指定。改默认的话,可能得下个大版本吧
    shuangyeying
        26
    shuangyeying  
       2019-06-14 18:29:46 +08:00   ❤️ 1
    我也来补充一下,Downie 可以下载 M3U8。
    Spoter
        27
    Spoter  
       2019-06-29 15:19:42 +08:00
    brMu
        28
    brMu  
       2019-09-02 16:36:12 +08:00
    @cyp777777 多线程下载,速度敢敢地,特来感谢!
    leehon
        29
    leehon  
       2020-02-04 06:16:55 +08:00
    iHTCboy
        30
    iHTCboy  
       2020-03-09 14:50:55 +08:00
    Python 来一波!

    ```python3

    import os
    import requests

    # 下载 m3u8 格式的视频
    def download_m3u8(video_download_url, multimedia_path):
    print("start download video")
    all_content = requests.get(video_download_url).text # 获取 M3U8 的文件内容
    file_line = all_content.split("\n") # 读取文件里的每一行
    length = len(file_line)
    print('video length:', length)
    # 通过判断文件头来确定是否是 M3U8 文件
    if file_line[0] != "#EXTM3U":
    raise BaseException(u"非 M3U8 的链接")
    else:
    unknow = True # 用来判断是否找到了下载的地址
    for index, line in enumerate(file_line):
    if "EXTINF" in line:
    unknow = False
    # 拼出 ts 片段的 URL
    pd_url = video_download_url.rsplit("/", 1)[0] + "/" + file_line[index + 1]
    res = requests.get(pd_url)
    print(length, '-', index)
    with open(multimedia_path, 'ab') as f:
    f.write(res.content)
    f.flush()
    if unknow:
    raise BaseException("未找到对应的下载链接")
    else:
    print("video download finish~")


    ```
    iHTCboy
        31
    iHTCboy  
       2020-03-09 14:52:13 +08:00
    格式没有了-x-,还是补一个原格式的: https://gist.github.com/iHTCboy/ba60fab028de5eff266dd3e70d70eff2
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3355 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:59 · PVG 12:59 · LAX 20:59 · JFK 23:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.