1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| package main
import ( "encoding/json" "fmt" "io/ioutil" "log" "os/exec" )
type Datas struct { Data List `json:"data"` }
type List struct { L []VideoMap `json:"list"` }
type VideoMap struct { ArticleTitle string `json:"article_title"` VideoMediaMap struct { HD struct { URL string `json:"url"` Size int64 `json:"size"` } `json:"hd"` } `json:"video_media_map"` }
var ( video Datas path string = "/Users/gxm/Movies/time_go/" )
func main() { body, err := ioutil.ReadFile("./ Go语言从入门到实战.json") # m3u8 视频列表的json文件 if err != nil { log.Fatalln(err) }
err = json.Unmarshal(body, &video)
if err != nil { log.Fatalln(err) }
for _, v := range video.L { fmt.Println(v.VideoMediaMap.HD.URL, v.ArticleTitle) merge(v.VideoMediaMap.HD.URL, v.ArticleTitle) } }
func merge(url string, name string) {
cmd := exec.Command("ffmpeg", "-i", url, "-vcodec", "copy", "-acodec", "copy", "-absf", "aac_adtstoasc", path+name+".mp4") message, err := cmd.CombinedOutput()
if err != nil { log.Println(err) }
log.Println(string(message)) }
|