20190728-Python爬取视频&切割视频&视频加水印
1.视频爬取
1 1.下载视频的源码如下: 2 import os 3 import requests 4 from bs4 import BeautifulSoup 5 import threading 6 from bj.models import Video 7 8 # globals(repo_dir = './../tmp') 9 repo_dir = './../tmp/video' 10 11 # 定义请求数据的返回结果的函数 12 def get_response(url): 13 # 为了防止被网站禁止访问,携带浏览器参数,假装浏览器请求 14 headers = { 15 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' 16 } 17 18 # 取出返回的数据 19 response =requests.get(url=url,headers=headers).content 20 return response 21 22 23 # 解析网页数据获取视频描述和视频下载url 24 def get_content_video(html): 25 # 通过bs4解析,用内置的解析器html.parser 26 soup=BeautifulSoup(html,'html.parser') 27 # 获取每个视频模块的信息 28 cont=soup.select('.j-r-list-c') 29 # 定义一个数组存放视频desc+url 30 urlList=[] 31 for item in cont: 32 # 查找第一个a标签的内容,作为我们后面保存MP4的文件名 33 name=item.find('a').text 34 # 查找视频url 35 pmUrl=item.select('.j-video')[0].get('data-mp4') 36 37 # 提取视频id用于后期生成文件名 38 video_id=item.select('.j-video')[0].get('data-id') 39 #以元组的形式添加到数组 40 urlList.append((name,pmUrl,video_id)) 41 return urlList 42 43 # 使用threading异步下载视频 44 def download(urlList,page): 45 #判断'./../tmp/vodeo'文件夹是否存在 46 f_path=os.path.join(repo_dir,page) 47 if not os._exists(f_path): 48 print('路径不存在,马上创建!') 49 os.makedirs(f_path) 50 for item in urlList: 51 #判断当前视频是否有url 52 if item[1] is None: 53 continue 54 # 创建视频的路径-->[-3:]截取文件名后缀 55 f_path_video=os.path.join(f_path,'%s.%s'%(item[2],item[1][-3:])) 56 57 #通过多线程的方式下载文件,增加下载速度 58 thread=threading.Thread(target=save_video,args=(f_path_video,item[1])) 59 #启动线程 60 thread.start() 61 62 #如果下载正常则将视频数据存入数据库中 63 Video.objects.create( 64 video_id=item[2], 65 video_url=item[1], 66 video_desc=item[0], 67 ) 68 69 70 # 正式下载视频文件 71 def save_video(f_path_video,video_url): 72 response=get_response(video_url)#调用方法返回MP4文件的二进制流数据 73 # 通过文件写入的方式保存成文件 74 with open(f_path_video,'wb') as f: 75 f.write(response) 76 77 78 79 #主函数 80 def main(): 81 for i in range(1,50): 82 print("第" + i + "页") 83 url = 'http://www.budejie.com/video/%s' % str(i) 84 html = get_response(url) 85 urlList=get_content_video(html) 86 download(urlList,str(i)) 87 88 # 89 # if __name__=="__main__": 90 # main() 91 92 93 ''' 94 ** 由于我们这里仅用于测试,所以我们之抓取一页 95 ** 链接最后的数字表示抓取的数据页码,由于首页的1可以不写,也可以写上 96 ** 为了大家更好的理解多页的表示,这里我们仅抓取一页,并且链接后面写有页码1 97 ''' 98 def test(): 99 url = 'http://www.budejie.com/video/1' 100 html = get_response(url) 101 urlList = get_content_video(html) 102 download(urlList, str(1)) 103
2. 切割视频 - 视频尾部多余部分的切割(这里需要安装ffmpeg很简单,问度娘)
1 import os 2 import subprocess 3 import datetime 4 def substring(date): 5 r=date.decode() 6 r=r.strip() 7 rlist=r.split(":") 8 result=(int(rlist[0])*60*60)+(int(rlist[1])*60)+(float(rlist[2])) 9 return result 10 11 12 def sub_video(): 13 # url="/home/facelive/Downloads/videos/" 14 # url2="/home/facelive/Downloads/sub_videos/" 15 16 # 硬盘路径(原视频存放路径) 17 url="/media/facelive/Elements/videos/" 18 # 切割后的视频存放路径 19 url2="/media/facelive/Elements/sub_videos/" 20 fileList= os.listdir(url) 21 22 23 for file in fileList: 24 #获取当前文件的视频长度 25 strcmd=["ffmpeg -i "+url+file+" 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//"] 26 result=subprocess.run(args=strcmd,stdout=subprocess.PIPE,shell=True) 27 date=result.stdout 28 print(type(date)) 29 print(date) 30 time=substring(date) 31 end=time-4 32 sub="ffmpeg -ss 0 -t "+str(end)+" -accurate_seek -i "+url+file+" -codec copy -avoid_negative_ts 1 "+url2+file+'' 33 34 videoresult=subprocess.run(args=sub,shell=True) 35 print(time) 36 print("视频截取完成!!") 37 38 39 def test(): 40 url = "/home/facelive/Downloads/videos/" 41 fileList = os.listdir(url) 42 for file in fileList: 43 print(file)
3. 视频加水印
1 import os 2 import subprocess 3 import datetime 4 5 def logo_video(): 6 7 # 硬盘路径 8 url = "/media/facelive/Elements/videos/" 9 url3="/media/facelive/Elements/logo_videos/" 10 fileList = os.listdir(url) 11 12 for file in fileList: 13 14 sub = "ffmpeg -i "+url+file+" -i /home/facelive/Downloads/image/11.png -filter_complex overlay=W-w " + url3 + file + '' 15 16 videoresult = subprocess.run(args=sub, shell=True) 17 print("视频logo完成!!")
转载:https://blog.csdn.net/wsywb111/article/details/78855145
“
Python爬取百思不得姐的视频+视频的切割+给视频添加水印
”