ffmpeg的使用 | m3u8视频下载、合并
目录ffmpeg的下载、配置下载版本说明环境变量配置ffmpeg处理m3u8 | ts的常用命令 ffmpeg是一个十分强大的音视频处理工具,提供转码、播放等基础功能,功能十分全面、强大,但命令繁多复杂,通常不直接使用,而是集成在带GUI的视频处理软件中。 我用过一些m3u8的下载、合并工具,比如TS Master:界面复杂,不好用TS助手:下载速度快,但有些情况下载合并不了,
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。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)