前言

昨天接到了一个任务,给一个会议录屏。由于笔者的失误,导致环境声音也被录了进去。不过幸好有回放。但是下一个问题又来了。这个回放依然是直播形式的。也就是说,这个视频是由许多个长度只有几秒的小视频组合而成,并不能直接下载。

解决方法

笔者找到了一种可以下载这种视频的方法,亲测有效。其实思路非常简单直接,就是将所有的这些小片段全部下载下来再拼到一起。好,现在思路有了,具体如何实现呢?可以分下面几个步骤。每个步骤的解决方法和实现可能有多种形式,笔者只介绍自己这次用的。

1. 抓取m3u8文件

首先,我们需要先找到这场直播的网页中的m3u8格式的文件。这个文件会首先被发送过来。如果把接下来服务器端传过来的几百上千个ts文件(也就是视频文件)比作书的每一章节,那么这个m3u8文件就是这本书的目录,指示每一章节的位置以及页数。

使用记事本打开后,这个文件的内部结构如下(链接的中间部分已打码):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD

#EXTINF:3.989,
http://v5.vzan.com/*****/23897465441-3_3989_225.ts
#EXTINF:4.011,
http://v5.vzan.com/*****/23897465441-3_4011_226.ts
#EXTINF:3.989,
http://v5.vzan.com/*****/23897465441-3_3989_227.ts
#EXTINF:4.011,
http://v5.vzan.com/*****/23897465441-3_4011_228.ts
#EXTINF:3.99,
......

这些链接就是接下来组成这个视频的每个小片段的ts文件的下载链接。我们将这些链接提取出来,然后放到下载器里批量下载就可以了。

抓包文件和提取链接笔者使用了一个浏览器插件“猫抓”,大家可以自行下载。

批量下载可以使用“迅雷”,多个链接输入进去以后打包为一个任务组,接下来等待就可以了。

2. 合并所有的ts文件

现在我们得到了一个m3u8文件和一大堆ts文件。

2.png

那么如何把这堆ts文件合并到一起呢?可以使用一个开源软件“ffmpeg”,功能非常强大。先去它的官网https://ffmpeg.org/下载一个适合你的版本。解压完以后将它的bin目录添加到环境变量path中。

接下来打开命令行,输入ffmpeg -version看一下是不是安装成功了。出现下图类似的文字就是安装成功。

4.png

接下来cd到你放ts文件与m3u8文件的文件夹目录中,这两种文件需要在同一目录下(或者在接下来的命令里写明目录,小白尽量按笔者这个来),执行如下命令:

1
ffmpeg -i xxx.m3u8 -vcodec copy -acodec copy xxxx.mp4

xxx与xxxx分别为你的m3u8文件的名字和输出视频的名字。

注意!你的m3u8文件中如果是链接的形式,需要将前面的链接前缀去掉,改为ts文件的名字。以之前的文件示例为例,需要改成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD

#EXTINF:3.989,
23897465441-3_3989_225.ts
#EXTINF:4.011,
23897465441-3_4011_226.ts
#EXTINF:3.989,
23897465441-3_3989_227.ts
#EXTINF:4.011,
23897465441-3_4011_228.ts
#EXTINF:3.99,
......

如果你看到这个画面,就说明已经成功了~

3.png

其他问题

如果视频太大想要切割视频,可以使用格式工厂或者bandicut软件。