如何下载 m3u8 视频? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qianyi0129
V2EX    问与答

如何下载 m3u8 视频?

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

    知道 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     Solana     1039 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:53 PVG 06:53 LAX 15:53 JFK 18:53
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86