ffmpeg是一个十分强大的音视频处理工具,提供转码、播放等基础功能,功能十分全面、强大,但命令繁多复杂,通常不直接使用,而是集成在带GUI的视频处理软件中。
 

我用过一些m3u8的下载、合并工具,比如

  • TS Master:界面复杂,不好用
  • TS助手:下载速度快,但有些情况下载合并不了,比如带有key的

推荐使用TS助手,TS助手下载、合并失败的再使用ffmpeg进行处理。

 

ffmpeg的下载、配置

下载

官方github只提供了源码,需要自行编译,BtbN提供了编译好的版本,可以在BtbN的github地址下载,也可以从ffmpeg官网链接进入BtbN

选择操作系统对应的任意一个版本下载即可

 

版本说明

1、GPL

GNU General Public License的缩写,GNU公共许可证,通常具有“传染性”,如果项目中集成了GPL协议的开源项目时,项目本身也会被感染成为GPL的开源项目,即需要将其开源、免费。

比如,我开发一个桌面exe程序时,需要引用某个GPL的开源的dll,那我开发的这个exe桌面程序也会变成GPL开源项目,我在项目发布时需要将其开源、免费,有义务且必须提供整个项目的源代码。

 

2、LGPL

GNU Lesser General Public License的缩写,GNU 宽松公共许可证,允许项目通过类库引用(link)的方式使用LGPL类库,项目可以作为商业软件进行发布、销售,发布时不需要开源、免费,但前提是不能修改引用的LGPL许可的软件部分。

开源免费的项目选GPL,不开源的项目选LGPL,相比于GPL而言,LGPL更灵活,开不开源均可。

 

3、-shared

ffmpeg的gpl、lgpl版本默认将共享的链接库集成到了exe中,bin中只有三个exe文件,这三个exe文件体积都很大;

-shared没有将共享的链接库集成到exe中,bin中有一堆链接库,这些链接库可以被3个exe共用,3个exe的体积都很小,压缩包体积也比gpl、lgpl的小得多。

 

环境变量配置

bin下的三个exe

  • ffmpeg 用于视频转码
  • ffplay 用于视频播放
  • ffprobe 用于获取音视频文件的信息

在PATH环境变量中添加bin目录,方便后续使用这些命令,主要是使用ffmpeg.exe。

 

ffmpeg处理m3u8 | ts的常用命令

#合并ts文件,ts文件数量少、不需要key的时候可以用这种,
ffmpeg -i "1.ts|2.ts|3.ts|" -c copy xxx.mp4


#也可以根据文件中指定的ts文件位置进行合并,不需要key
ffmpeg -i index.m3u8 -c copy xxx.mp4


#需要key的要加上参数-allowed_extensions ALL
ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy xxx.mp4


# -protocol_whitelist指定白名单协议,添加相应的协议即支持对应的文件来源
ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,https,tls,tcp,crypto" -i https://xxx/xxx/index.m3u8 -c copy xxx.mp4
  • 最后一种的参数是最全的,也是最常用的,支持本地、网络中的m3u8文件,支持需要key的、不需要key的
  • 文件名不一定非要是index,文件后缀不一定非要是.m3u8,只要是文本文件,文件中包含了ts文件路径、所需key的路径的即可,路径支持相对路径、绝对路径、网络url,相对路径是相对于当前使用的m3u8文件
  • 如果使用本地m3u8(文本)文件,可以复制index.m3u8来改其中的ts、key的路径
  • 报错 Protocol ‘xxx’ not on whitelist ‘file,http,https,tls,tcp’! ,说明缺少该种协议设置,加到 whitelist 列表中即可

ffmpeg合并ts文件快,但使用网络中的m3u8 url地址时,会先下载所需的ts文件,ffmpeg不是专业的下载软件,下载速度慢,下载包含了大量ts的视频尤其慢。

嫌慢的可以下载m3u8到本地,获取其中的ts路径列表、key路径,转换为网络url,使用迅雷任务组进行下载到本地,修改m3u8中的路径,使用本地m3u8文件进行ts合并。

 

有的网站编码ts时使用了key,解码ts进行合并时自然也需要使用key,key文件的路径在m3u8文件中。有的网站编码时没有使用key,解码合并ts时自然也就不需要key。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐