linux安装ffmpeg详细教程
https://blog.csdn.net/raoxiaoya/article/details/109130549

视频来源: u5影视

顺序
1、下载m3u8
2、根据m3u8下载ts
3、将ts合成mp4

下载程序 download.go

package mainimport ("fmt""io""io/ioutil""net/http""os""regexp"
)var fileChan chan string
var endChan chan string
var tsChan chan string
var folder = "/data/www/mv/dian_shi_ju/ping_fan_de_shi_jie"
var num = 56 // 56集func main() {fileChan = make(chan string, num)endChan = make(chan string, num)tsChan = make(chan string, num)for i := 0; i < num; i++ {s := fmt.Sprintf("https://u5-web.scbaiduwk.com/dianshiju/tv_ji0cjkun/tv_ji0cjkun_%s.mp4/index.m3u8", fmt.Sprintf("%02d", i+1))fileChan <- s}// 下载m3u8for n := 0; n < 10; n++ {go consumer(fileChan, tsChan)}// 下载tsfor m := 0; m < 30; m++ {go readTs(tsChan, endChan)}k := 0for {<-endChank++if k == num {break}}
}func consumer(fc chan string, tsChan chan string) {for {str := <-fcreg := regexp.MustCompile(`tv_ji0cjkun_(\d+).mp4`)res := reg.FindAllStringSubmatch(str, -1)no := res[0][1]os.Mkdir(folder+"/"+no, os.ModePerm)response, _ := http.Get(str)filename := folder + "/" + no + "/" + no + ".m3u8"f, _ := os.OpenFile(filename, os.O_CREATE|os.O_RDWR, os.ModePerm)defer f.Close()defer response.Body.Close()io.Copy(f, response.Body)tsChan <- no}
}func readTs(tsChan chan string, endChan chan string) {for {no := <-tsChanfold := folder + "/" + no + "/"data, _ := ioutil.ReadFile(fold + no + ".m3u8")reg := regexp.MustCompile(`(segment-\d+-v1-a1.ts)`)res := reg.FindAllStringSubmatch(string(data), -1)for _, v := range res {url := fmt.Sprintf("https://u5-web.scbaiduwk.com/dianshiju/tv_ji0cjkun/tv_ji0cjkun_%s.mp4/%s", no, v[1])response, _ := http.Get(url)f, _ := os.OpenFile(fold+v[1], os.O_CREATE|os.O_RDWR, os.ModePerm)defer f.Close()defer response.Body.Close()io.Copy(f, response.Body)}endChan <- ""}
}

合成 createMp4.go

package mainimport ("fmt""os""os/exec""regexp""sort""strconv""strings"
)var dirname = "/data/www/mv/dian_shi_ju/ping_fan_de_shi_jie"
var savedir = "/data/www/mv/dian_shi_ju/00_ok"func main() {fs, err := os.Open(dirname)if err != nil {panic(err)}defer fs.Close()fiss, err := fs.Readdir(0)if err != nil {panic(err)}for _, vv := range fiss {temp := vv// 如果电脑配置好的话使用协程fold := dirname + "/" + temp.Name()f, err := os.Open(fold)if err != nil {panic(err)}defer func() {f.Close()}()fis, err := f.Readdir(0)if err != nil {panic(err)}names := make([]string, 0)toSort := make([]int, 0)for _, v := range fis {if strings.Contains(v.Name(), "segment") { // segment-1-v1-a1.tsreg := regexp.MustCompile(`segment-(\d+)-v1-a1`)res := reg.FindAllStringSubmatch(v.Name(), -1)id, _ := strconv.Atoi(res[0][1])toSort = append(toSort, id)}}sort.Ints(toSort)for _, v := range toSort {names = append(names, fold+"/"+fmt.Sprintf("segment-%d-v1-a1.ts", v))}str := strings.Join(names, "|")makeMp4(str, temp.Name())}
}// ffmpeg -i "concat:segment-1-v1-a1.ts|segment-2-v1-a1.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
func makeMp4(str string, no string) {binary, lookErr := exec.LookPath("ffmpeg")if lookErr != nil {panic(lookErr)}args := []string{"-i",fmt.Sprintf("concat:%s", str),"-acodec","copy","-vcodec","copy","-absf","aac_adtstoasc",fmt.Sprintf("%s/%s.mp4", savedir, no),}cmd := exec.Command(binary, args...)r, err := cmd.Output()fmt.Println(err)fmt.Println(string(r))
}

go run download.go

go run createMp4.go

当然也可以整合到一个程序。

golang下载m3u8格式电视剧,调用ffmpeg程序将ts文件合成mp4相关推荐

  1. 结合python使用ffmpeg将批量ts文件合成mp4。

    一.获取ts文件,如下图所示. 二.安装 ffmpeg 并配置到环境变量 linux: apt-get install ffmpeg libavcodec-extra windows: 1.进入 ht ...

  2. 下载m3u8视频及在Linux下将ts合并为mp4格式

    背景 在爬取视频时偶尔会遇见m3u8格式的视频链接,视频下载后为多个ts文件,下面分享如何下载m3u8格式视频以及在Linux下将ts文件合成mp4 文件. m3u8格式链接解析 url = xxxx ...

  3. python下载m3u8视频_使用python 下载m3u8格式视频,并使用ffmpeg 合成视频

    使用python 下载m3u8格式视频,并合成 # -*- coding: utf-8 -*- # Created on 2018/07/26 import os import requests &q ...

  4. 利用Fiddler抓包解析,轻松下载m3u8格式网络视频

    前言:有老师上课需要视频资料,联系我能不能把微信小程序中的视频课程下载下来,我说当然可以! 1. Fiddler抓包 Fiddler是一款很牛逼的抓包工具. 1.下载并打开fiddler软件: 2.微 ...

  5. python多线程下载视频_python 实现多线程下载m3u8格式视频并使用fmmpeg合并

    电影之类的长视频好像都用m3u8格式了,这就导致了多线程下载视频的意义不是很大,都是短视频,线不线程就没什么意义了嘛. 我们知道,m3u8的链接会下载一个文档,相当长,半小时的视频,应该有接近千行ts ...

  6. python下载大文件mp4_Python 下载 m3u8 格式视频

    Python requests 下载 m3u8 格式 视频 最近爬取一个视频网站,遇到 m3u8 格式的视频需要下载. 抓包分析,视频文件是多个 ts 文件,什么是 ts文件,请去百度吧: 附图:抓包 ...

  7. M3U8文件格式说明及解决大量拼接ts文件时长不对问题

    M3U8 文件简介 m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist).但无论是哪种播放 ...

  8. 使用 FFmpeg(bilibili视频blv合成mp4)

    (关于FFmpeg的安装请看上文使用 使用 FFmpeg(bilibili视频m4s合成mp4)) 我们先来看看 B 站客户端下载内容的目录结构: 10034455(视频 AV 号) ├── 1(视频 ...

  9. python 实现多线程下载m3u8格式视频,使用FFmpeg合并(升级修订自s_kangkang_A)

    基本代码源自: https://blog.csdn.net/s_kangkang_A/article/details/103071822. 感谢 s_kangkang_A https://blog.c ...

  10. 多线程下载m3u8影视资源 通过ffmpeg合并ts文件为mp4

    需要用到的ffmpeg,下载地址:Download FFmpeg  下载以后的目录. 合并.转换.切片都用到了ffmpeg.exe,其它两个我暂时没用到. <dependency>< ...

最新文章

  1. 九、数据库群集部署、配置 (二)
  2. 美丽的闭包,在js中实现函数重载
  3. Django学习笔记(5)---ForeignKey
  4. 面试必会:HashMap 实现原理解读
  5. html语言hr的用法,htmlhr各种样式使用 - 米扑博客
  6. js中奇怪的问题 同步ajax,modal遮罩层
  7. 两个局域网如何互联_如何申请使用三大航司的机上wifi服务?
  8. fopen()及相关函数使用
  9. putty mtputty 设置utf8编码
  10. python编程入门与案例详解-Python零基础必看的入门书藉:Python编程从入门到实践...
  11. ios plist_iOS属性列表(plist)示例
  12. 机器学习十大经典算法-KMeans
  13. 《剑指offer》-中序遍历下一个节点
  14. ubuntu12.04.4安装搜狗输入法
  15. php 数组 判断可以吗,php判断一个数组是否为有序
  16. Linux应急响应入侵排查思路
  17. 绘制抽样函数Sa(x)matlab代码
  18. PMP 项目进度管理 -CPI SPI CV SV
  19. 发现ULC(UltraLightClient)
  20. cpufreq 频率设置verify

热门文章

  1. Hexo主题-Icarus主题
  2. 云打码案例 python
  3. python列表画彩虹糖_原来彩虹糖是要这样用的,只需加点它进去,送你一幅绚丽彩虹画...
  4. PPSIG携手100+位contributor,共建飞桨开源社区
  5. 【软件project】 文档 - 银行业务管理 - 需求分析
  6. 窗口函数 (转) rows between unbounded preceding and current row
  7. 如何保证战略落地_【管理前沿】保障战略规划落地的三大措施
  8. Key was created with errors:报错
  9. 3D转换 透视 3D旋转魔方
  10. 王建农老师昆笛 + 简谱