下載 m3u8 視頻腳本

此文版權屬於作者所有,任何人、媒體或者網站轉載、借用都必須徵得作者本人同意!

直接上代碼,python 的:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Copyright 2016 [email protected]

import contextlib
import os
import sys
import urllib2
import urlparse

def remove(path):
    try:
        os.remove(path)
    except:
        pass

def mkdir(path):
    try:
        os.mkdir(path)
    except:
        pass

def download(fname, url):
  print u'下載', fname
  print ' ', url

  with contextlib.closing(urllib2.urlopen(url)) as x:
    handle = open(fname, 'w')
    handle.write(x.read())
    handle.close()
    redirect_url = x.geturl()
    return redirect_url

  return url


def download_m3u8(url):
  base_url = url

  tmp_fname = '.tmp.m3u8'
  remove(tmp_fname)

  base_redirect_url = download(tmp_fname, base_url)

  with open(tmp_fname) as fi:
    fid = 1
    mkdir('ts')
    with open('01.m3u8', 'w') as fo:
      for line in fi:
        sline = line.strip()
        if sline and len(sline) > 1 and not sline.startswith('#'):
          fn = 'ts%s%03d.ts' % (os.sep, fid)
          fid = fid + 1
          fo.write(fn)
          fo.write('\r\n')
          sub_url = urlparse.urljoin(base_redirect_url, sline)
          print u'嘗試下載', sline
          download(fn, sub_url)
        else:
          fo.write(line)

  remove(tmp_fname)

def usage():
  print 'usage:'
  print ' ', os.path.basename(sys.argv[0]), 'url'

def main():
  if len(sys.argv) <= 1:
    usage()
  else:
    download_m3u8(sys.argv[1])

if __name__ == "__main__":
    main()

todo:

1. add UserAgent and cookie to request

2. support sub m3u8


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章