python + ffmpeg爬取视频,转化为mp4格式
项目需求
-
网址链接:https://taobaolive.taobao.com/room/index.htm?spm=a1z9u.8142865.0.0.434f34edQAItBB&feedId=654b215c-7f98-4642-a16a-24d8ef23894b
-
需要将其中的这个视频下载下来,转换为mp4格式
解决方案
其实看起来挺简单的,我们就是进去找他的视频接口就行了,然后下载就行了。结果F12进去控制台后发现他没有视频连接,有的返回的是一些ts文件【疑问】
于是我就拉到视频最后发现他是有228个ts文件组成的,研究后发现他是按照视频时长【每11秒】进行一个视频流的切割,这样子可以降低服务器的压力,并且可以很好的达到视频的流畅度!
那知道了这个后对于我们爬取老手就很简单了,直接使用requests进行访问,之后合并就行了
import requests
for i in range(1,229):
url = 'https://livecbing.alicdn.com/mediaplatform/654b215c-7f98-4642-a16a-24d8ef23894b/'+str(i)+'.ts'
res = requests.get(url)
with open('./'+t+'.ts', 'wb') as f:
f.write(res.content)
就是上面这个直接写成ts文件,好的第一步搞定。然后我们就需要将视频进行整合。其实很简单,只需要一条命令
copy /b *.ts video.ts
【敲黑板】这会出错了,发现合并的视频只有十分钟,还没有画面。这是怎么回事?
仔细看看执行过程,发现!!!【原谅我没有截图】
我们需要对生成的ts文件进行排序,有人说1-288不是已经排序了吗?但是我跟你说,他是按照先首位开始依次比较,比如1,11,111,2,21,22…而不是1,2,3…没有按照我们设想的规定执行,那应该怎么办?
其实很简单,自己规定一下顺序就行,来上代码!
import requests
for i in range(1,229):
url = 'https://livecbing.alicdn.com/mediaplatform/654b215c-7f98-4642-a16a-24d8ef23894b/'+str(i)+'.ts'
res = requests.get(url)
# print(res.content)
if len(str(i))==1:
t='00'+str(i)
if len(str(i))==2:
t='0'+str(i)
if len(str(i)) == 3:
t = str(i)
with open('./'+t+'.ts', 'wb') as f:
f.write(res.content)
看到没就加几句话就行了,意思自己打印出来看很简单的!
那么现在我们已经拿到了228个ts视频流,并且通过执行 copy /b *.ts video.ts后将他成功整合为一个视频。那么接下来就是将他转换为mp4格式就OK了
- 一种方案:直接修改后缀.mp4,这个方法大家可能觉得离谱。但是事实上博主真的测试过,是真的可以。对了这里建议你使用potplay这个软件。Windows自带的播放器是有问题的,只会播出音频。我可是亲自测试的
- 第二种方案:使用ffmpeg这个很轻大的流媒体处理库,轻松搞定!
还是老样子直接上代码:
import os
ffmpeg = r'D:\ffmpeg-N-99631-g9018257751-win64-gpl-shared\bin\ffmpeg.exe' # 写自己的安装路径
#由于路径中有空格,所以路径需要用上双引号,否则会找不到该文件
fn = r'C:\Users\admin\Desktop\自动化\视频\视频\video.ts'
output = r'C:\Users\admin\Desktop\自动化\视频\视频'+"td.mp4"
cmd = ffmpeg + " -i " + fn + " -c copy " + output
os.system(cmd)
print("done")
那么上面提到了FFmpeg的安装,这里博主给大家一个网址直接下载-解压-安装就可以。
FFmpeg网址:https://github.com/BtbN/FFmpeg-Builds/releases
我是下载的红色边框的那个,最终的结果就是寻找这个路径:
好了,写到这里基本就结束了,当然了如果出现音频和视频匹配不上的问题,可以参考博主之后的文章,如果可以帮助到大家,点歌关注!!哈哈
上一篇: nginx实现反向代理
下一篇: Nginx实现反向代理