1. video标签src指向blob视频下载问题
<video class="vjs-tech" playsinline="playsinline" webkit-playsinline="true" x5-playsinline="true" x5-video-player-type="h5" x5-video-player-fullscreen="false" id="vjs_video_3_html5_api" tabindex="-1"
src="blob:http://tclearn.cmbchina.cn/5a8c0e2a-0cd9-4a50-ac4e-aa96fdadc15a"/>
因为指向的不是http开头的,是blob开头的,有加密,不能直接下载。
刷新网页,network可以看到http://tclearn.cmbchina.cn:8080/webFile/course/1032/1682761200786/playlist.m3u8
有好多行video-0000.ts,说明视频被分隔为好多份。
2. python下载ts视频
先安装包
pip install requests
# 用于 AES加解密
pip install pycryptodome
python脚本 get-ts.py
import requests
from Crypto.Cipher import AES
import base64
import binascii
# m3u8请求 返回 #EXT-X-KEY:METHOD=AES-128,URI="/webFile/enc.key",IV=0x1903894e42ae1cdb9eea5bb8fd92963f
# 发现是AES加密 CBC模式,注意这里IV是16进制字符串,需要转为byte
key_url = 'http://tclearn.cmbchina.cn:8080/webFile/enc.key'
# 经postman调用,发现这个网站请求需要请求头,否则会返回资源禁止访问
headers = {
"Referer": "http://tclearn.cmbchina.cn/",
"Origin": "http://tclearn.cmbchina.cn"
}
key = requests.get(key_url, headers = headers).content
print('开始下载')
# 下载ts文件 video-0000.ts video-0213.ts
for i in range(0, 213 + 1):
a=str(i)
if len(a) == 1:
a = '000' + a
if len(a) == 2:
a = '00' + a
if len(a) == 3:
a = '0' + a
filename = 'video-'+ a +'.ts'
ts_url = 'http://tclearn.cmbchina.cn:8080/webFile/course/3653/1680123121435/'+ filename
res_ts = requests.get(ts_url, headers = headers).content
# 下载的 video-0000.ts video-0213.ts 文件保存目录
with open('D:/upload/tmp/' + filename,'wb') as ts:
# 解密
cryptor = AES.new(key, AES.MODE_CBC, binascii.a2b_hex('1903894e42ae1cdb9eea5bb8fd92963f'))
ts.write(cryptor.decrypt(res_ts))
print('下载:' + filename)
print('下载完成')
3. 简单合并ts文件为mp4
combine-ts.py
import os
# 合并ts文件
# 注意这里路径必须双反斜杠,否则cmd命令行无法正常执行
dir_path = 'D:\\upload\\tmp\\'
dir_path2 = 'D:\\upload\\mp4\\'
cmd = 'copy /b ' + dir_path + '*.ts ' + dir_path2 + 'my.mp4'
#print(cmd)
os.system(cmd)
print('合并完成')
4. 使用ffmpeg处理ts文件转为mp4
步骤3中处理ts为mp4质量不高,只是能正常播放,想要更好的mp4视频,需要ffmpeg
1. http://www.ffmpeg.org/download.html#build-windows ffmpeg 官网 下载 ffmpeg-master-latest-win64-gpl
解压 添加 D:\Program Files\ffmpeg-master-latest-win64-gpl\bin 到 环境变量 path中
验证是否安装成功 ffmpeg -version
先把生成的多个ts文件合并为一个 copy /b D:\\upload\\tmp\\*.ts D:\\upload\\mp4\\my.ts
然后 ffmpeg -i my.ts -c copy my.mp4