cctalk 缓存视频后,实际缓存的是视频切片并加密的 ts 文件,将视频片段解密后,需要解决的问题就是如何合并视频片段。
每个 ts 文件都会包含时间信息,通过ffmpeg
可以查看:
1 | ffmpeg -i 0a7599cc995bdc2b4d0ff70b443f76f2.ts |
对应的输出:
1 | ffmpeg version 4.0.2 Copyright (c) 2000-2018 the FFmpeg developers |
内容非常多,我们只需要关心倒数第四行,Duration: 00:00:09.67, start: 7583.773333, bitrate: 562 kb/s
,其中的start
就是该视频的开始时间了。
只有视频能正确输出这个时间的才能排序。
所以我们的问题就变成了从终端获取信息,并且给视频设置有顺序的文件名。
读取终端输出
1 | import subprocess |
获取正确顺序的文件名
我们最终是使用cat *.ts > index.ts
来完成合并的,该命令会单纯按照文件的排序来合并,所以需要有正确的顺序。
这里的做法是根据视频的开始时间,直接将时间作为文件名。如有一个视频片段开始时间是 58:00,那么这个文件文件名就应该是 005800。从这里也能看出视频长度最好不超过 60 小时,因为超过 60 小时后文件名长度不一样,排序就会出现问题。
1 | import datetime |
更新文件名并合并
1 | import os |