go语言并发下载电影和视频,根据m3u8索引url下载视频.下载网页中的图片,可以从当前页向下搜索层数.

一,根据URL的m3u8索引,下载视频文件.

二,下载网页中的图片.

为了家里小朋友,要下载一个视频,放在电视上看. 所以利用一点时间,写了这个简单下载程序.如果视频有加密,会对其解密.
最近下点图片,又增加下载图片的功能.下载当前页(包含当前页中的网址链接中的图片).

获取m3u8索引的URL方法:
需要用google或360浏览器,进入开发者模式,按F12或ctrl+shift+c,在里面点network,再把网页刷新,搜索m3u8,就可找到index.m3u8文件的URL

以下是参数,下载失败的ts会重试下载三次,图片只重试二次:

-m 用于视频,要下载的index.m3u8网址.

-i 用于图片,当前页及其中链接的图片.

-s (可以不输入)用于图片,下载图片大于该值,默认下载大于30KB的图片.例如:(-s 80)只下载大于80KB的图片.

-l (可以不输入)用于图片,以当前参数i中输入的为第一层,向下搜索几层.默认向下搜索3层.(当以主页为第一层,层数加大,可以全站下载图片,时间要久点)

-c (可以不输入)(用于图片和视频),并发数量,默认是15个并发.
(并发数量可以加大,这样可以加快下载速度.但考虑视频网站的压力,别设大了,温柔下载)

例如:

下载视频

简单用法: dmi.exe -m https://www.mmicloud.com:65/20191204/I2jpA2LP/index.m3u8

加参数用法: dmi.exe -c 20 -m https://www.mmicloud.com:65/20191204/I2jpA2LP/index.m3u8

下载图片

简单用法: dmi.exe -i https://www.abc.com/

加参数用法: dmi.exe -c 20 -s 80 -l 5 -i https://www.abc.com/

具体源码放在github上.

链接: https://github.com/jiang-ting-hua/download_m3u8_img

main.go文件.还有几个文件在github上.

package main

import (
	"flag"
	"fmt"
	"sync"
)

var (
	maxGo     int = 15        //最大并发数
	imgSize   int = 1024 * 30 //图片大于30K,才下载
	MaxLayer  int = 3         //查找网页的最大层数,用于图片下载
	waitGroup sync.WaitGroup
	m3u8Url   string //m3u8下载的URL
	imgUrl    string //img下载的URL
)

func main() {

	flag.StringVar(&m3u8Url, "m", "", "M3U8 url index file")
	flag.StringVar(&imgUrl, "i", "", "img url")
	flag.IntVar(&maxGo, "c", 15, "maximum number of goroutine")
	flag.IntVar(&imgSize, "s", 30, "Only download the above pictures (KB)")
	flag.IntVar(&MaxLayer, "l", 3, "Download page Max Layer")
	flag.Parse()

	switch {
	case m3u8Url != "":
		err := dowloadM3u8(m3u8Url)
		if err != nil {
			fmt.Println(err)
			return
		}
	case imgUrl != "":
		imgSize = 1024 * imgSize
		DownloadImg(imgUrl)

	default:
		fmt.Println(`The parameter (m  "M3U8 URL") or (i "Img url") must be entered.`)
		return
	}

}


你可能感兴趣的:(go)