1、使用工具介绍
chrome浏览器(或者其他浏览器)
安装chrome浏览器或者其他浏览器都可以,目的是要打开视屏链接。
复制代码
ffmpeg工具
ffmpeg简介
FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。
**主要参数**
\-i——设置输入档名。
\-f——设置输出格式。
\-y——若输出文件已存在时则覆盖文件。
\-fs——超过指定的文件大小时则结束转换。
\-t——指定输出文件的持续时间,以秒为单位。
\-ss——从指定时间开始转换,以秒为单位。
\-t从-ss时间开始转换(如-ss 00:00:01.00 -t 00:00:10.00即从00:00:01.00开始到00:00:11.00)。
\-title——设置标题。
\-timestamp——设置时间戳。
\-vsync——增减Frame使影音同步。
\-c——指定输出文件的编码。
\-metadata——更改输出文件的元数据。
\-help——查看帮助信息。
ffmpeg的官网地址是:[https://www.ffmpeg.org/](https://www.ffmpeg.org/)
ffmpeg的Github项目地址是:[https://github.com/FFmpeg/FFmpeg](https://github.com/FFmpeg/FFmpeg)
更多详细内容请参考[维基百科](https://zh.wikipedia.org/wiki/FFmpeg)。
复制代码
windows安装
-
下载编译好的Windows版本:ffmpeg.zeranoe.com/builds/(与官网同步)
FFmpeg分为3个版本:Static、 Shared、 Dev前两个版本可以直接在命令行中使用。包含了三个exe:ffmpeg.exe,ffplay.exe,ffprobe.exe
Static版本中的exe体积较大,那是因为相关的Dll都已经编译进exe里面去了。
Shared版本中exe的体积相对小很多,是因为它们运行的时候还需要到相关的dll中调用相应的功能
Dev版本用于开发,里面包含了库文件xxx.lib以及头文件xxx.h -
环境变量的配置
1、将下载的ffmpeg解压到指定目录下,博主解压在:G:\【1】软件(已经过测试)目录下;
2、右击此电脑——>属性——>高级系统设置——>环境变量。在系统变量的path变量里添加解压的路径。
例如:G:\【1】软件(已经过测试)\ffmpeg-4.0-win64-static\ffmpeg-4.0-win64-static\bin
3、配置完成后运行cmd,输入ffmpeg,若显示如下界面,则说明配置成功。
mac安装
略
复制代码
下载视屏
加密后的ts文件不能直接合并或播放,需要使用key对每个ts文件进行解密。
分为两种情况:
(1).如果ts文件已经全部下载好,则可以直接在本地通过ffmpeg快速解密合并。
(2).如果ts文件没有下载好,则可以通过vlc直接下载整个视频,或者通过ffmpeg下载并转换。
无论是哪种情况,都要去视频源地址下载m3u8文件。如果可以下载key(有些网站加密方式比较严谨,不那么容易获取到key),把key文件也下载好。
下载m3u8文件的方式是去源地址网站,按F12找到m3u8文件,或者从右键-->网页源代码中找到地址。两种方式都试一试。
例如,从浏览器的F12中找:
这里能找到两个m3u8和一个key文件,都下载好。记事本打开两个m3u8,其中有一个包含了ts文件列表,这个m3u8文件是我们所需要的。例如我这里的是HdNz1kaz.m3u8文件,以下是一小部分内容。
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="/20180125/NfJJpxIH/1482kb/hls/key.key"
#EXTINF:12.5,
/20180125/NfJJpxIH/1482kb/hls/GBDYO3576000.ts
#EXTINF:12.5,
/20180125/NfJJpxIH/1482kb/hls/GBDYO3576001.ts
#EXTINF:12.5,
/20180125/NfJJpxIH/1482kb/hls/GBDYO3576002.ts
复制代码
1.情形一:ts文件已经下载好
假如我的ts文件全部下载好,放在e:\20180125\目录下。
同时假设key文件已经下载好,也放在e:\20180125\目录下。
修改m3u8文件中key的uri路径和ts文件的路径为本地路径。下面是HdNz1kaz.m3u8文件修改后的一小部分内容
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="e:/20180125/key.key"
#EXTINF:12.5,
e:/20180125/GBDYO3576000.ts
#EXTINF:12.5,
e:/20180125/GBDYO3576001.ts
#EXTINF:12.5,
e:/20180125/GBDYO3576002.ts
复制代码
然后用ffmpeg进行合并。
ffmpeg -allowed_extensions ALL -i HdNz1kaz.m3u8 -c copy new.mp4
复制代码
我一般会把ts文件下载好,因为用下载工具(比如迅雷)下载比ffmpeg或者vlc下载速度要快的多,因为这两个工具都是串行下载的。
2.情形二:ts文件没有下载
同样,下载好m3u8文件(key可下载可不下载,因为可以直接在m3u8文件中指定key的网络uri路径)。
修改m3u8文件中key和ts的uri路径。下面是HdNz1kaz.m3u8文件修改后的一小部分内容。
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="http://www.example.com/20180125/key.key"
#EXTINF:12.5,
http://www.example.com/20180125/GBDYO3576000.ts
#EXTINF:12.5,
http://www.example.com/20180125/GBDYO3576001.ts
#EXTINF:12.5,
http://www.example.com/20180125/GBDYO3576002.ts
复制代码
然后,使用ffmpeg下载并合并。
ffmpeg -i HdNz1kaz.m3u8 -c copy new.mp4
复制代码
3.openssl解密ts文件
假如key的值为:asdjklfjaskdlf
key的IV值(m3u8文件中已经记录)为"0x0123456789abcdef0123456789abcdef"
则解密 GBDYO3576000.ts的方法为:
strkey=asdjklfjaskdlf
iv=0x0123456789abcdef0123456789abcdef
openssl aes-128-cbc -d -in GBDYO3576000.ts -out out_0.ts -nosalt -K $strkey -iv $iv
复制代码
4.使用vlc下载并保存ts文件
播放列表的下方有播放进度条,它表示下载的进度,不要去动,也不要去点击播放、暂停、停止等,放着别管就是了,直到播放进度条完成了,就表示文件合并完成。去文件保存位置的地方看看就知道了。
ffmpeg报错
错误:
Malformed AAC bitstream detected: use the audio bitstream filter 'aac_adtstoasc' to fix it ('-bsf:a aac_adtstoasc' option with ffmpeg)
需要在合并视频的时候,加上-bsf:a aac_adtstoasc
ffmpeg -i index.m3u8 -c copy -bsf:a aac_adtstoasc new.mp4
ffmpeg -i index.m3u8 -c:a copy -bsf:a aac_adtstoasc new.mp4
复制代码
错误:
Codec for stream 0 does not use global headers but container format requires global headers
Codec for stream 1 does not use global headers but container format requires global headers
需要加上global header
ffmpeg -i index.m3u8 -c:a copy -flags +global_header new.mp4
复制代码