Python爬取百思不得姐的视频+视频的切割+给视频添加水印
2017-12-20 16:57
381 查看
1.下载视频的源码如下: import os import requests from bs4 import BeautifulSoup import threading from bj.models import Video # globals(repo_dir = './../tmp') repo_dir = './../tmp/video' # 定义请求数据的返回结果的函数 def get_response(url): # 为了防止被网站禁止访问,携带浏览器参数,假装浏览器请求 headers = { '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' } # 取出返回的数据 response =requests.get(url=url,headers=headers).content return response # 解析网页数据获取视频描述和视频下载url def get_content_video(html): # 通过bs4解析,用内置的解析器html.parser soup=BeautifulSoup(html,'html.parser') # 获取每个视频模块的信息 cont=soup.select('.j-r-list-c') # 定义一个数组存放视频desc+url urlList=[] for item in cont: # 查找第一个a标签的内容,作为我们后面保存MP4的文件名 name=item.find('a').text # 查找视频url pmUrl=item.select('.j-video')[0].get('data-mp4') # 提取视频id用于后期生成文件名 video_id=item.select('.j-video')[0].get('data-id') #以元组的形式添加到数组 urlList.append((name,pmUrl,video_id)) return urlList # 使用threading异步下载视频 def download(urlList,page): #判断'./../tmp/vodeo'文件夹是否存在 f_path=os.path.join(repo_dir,page) if not os._exists(f_path): print('路径不存在,马上创建!') os.makedirs(f_path) for item in urlList: #判断当前视频是否有url if item[1] is None: continue # 创建视频的路径-->[-3:]截取文件名后缀 f_path_video=os.path.join(f_path,'%s.%s'%(item[2],item[1][-3:])) #通过多线程的方式下载文件,增加下载速度 thread=threading.Thread(target=save_video,args=(f_path_video,item[1])) #启动线程 thread.start() #如果下载正常则将视频数据存入数据库中 Video.objects.create( video_id=item[2], video_url=item[1], video_desc=item[0], ) # 正式下载视频文件 def save_video(f_path_video,video_url): response=get_response(video_url)#调用方法返回MP4文件的二进制流数据 # 通过文件写入的方式保存成文件 with open(f_path_video,'wb') as f: f.write(response) #主函数 def main(): for i in range(1,50): print("第" + i + "页") url = 'http://www.budejie.com/video/%s' % str(i) html = get_response(url) urlList=get_content_video(html) download(urlList,str(i)) # # if __name__=="__main__": # main() ''' ** 由于我们这里仅用于测试,所以我们之抓取一页 ** 链接最后的数字表示抓取的数据页码,由于首页的1可以不写,也可以写上 ** 为了大家更好的理解多页的表示,这里我们仅抓取一页,并且链接后面写有页码1 ''' def test(): url = 'http://www.budejie.com/video/1' html = get_response(url) urlList = get_content_video(html) download(urlList, str(1))
2.视频尾部多余部分的切割(这里需要安装ffmpeg很简单,问度娘)
import os import subprocess import datetime def substring(date): r=date.decode() r=r.strip() rlist=r.split(":") result=(int(rlist[0])*60*60)+(int(rlist[1])*60)+(float(rlist[2])) return result def sub_video(): # url="/home/facelive/Downloads/videos/" # url2="/home/facelive/Downloads/sub_videos/" # 硬盘路径(原视频存放路径) url="/media/facelive/Elements/videos/" # 切割后的视频存放路径 url2="/media/facelive/Elements/sub_videos/" fileList= os.listdir(url) for file in fileList: #获取当前文件的视频长度 strcmd=["ffmpeg -i "+url+file+" 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//"] result=subprocess.run(args=strcmd,stdout=subprocess.PIPE,shell=True) date=result.stdout print(type(date)) print(date) time=substring(date) end=time-4 sub="ffmpeg -ss 0 -t "+str(end)+" -accurate_seek -i "+url+file+" -codec copy -avoid_negative_ts 1 "+url2+file+'' videoresult=subprocess.run(args=sub,shell=True) print(time) print("视频截取完成!!") def test(): url = "/home/facelive/Downloads/videos/" fileList = os.listdir(url) for file in fileList: print(file)
3.加入水印
import os import subprocess import datetime def logo_video(): # 硬盘路径 url = "/media/facelive/Elements/videos/" url3="/media/facelive/Elements/logo_videos/" fileList = os.listdir(url) for file in fileList: sub = "ffmpeg -i "+url+file+" -i /home/facelive/Downloads/image/11.png -filter_complex overlay=W-w " + url3 + file + '' videoresult = subprocess.run(args=sub, shell=True) print("视频logo完成!!")
相关文章推荐
- iOS视频裁剪、拼接、添加水印、添加背景音乐
- iOS拍摄视频,自定义拍摄界面,高清压缩,添加水印
- Python爬取百思不得姐的视频
- python一键去抖音视频水印工具
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
- ffmpeg 代码实现视频添加水印功能
- 用python简单处理图片(3):添加水印
- iOS GPUImage研究六:为视频添加图片水印
- 给PDF添加水印(Python+C#)
- ffmpeg 视频教程 添加水印附源码
- 视频特效制作:如何给视频添加边框、水印、动画以及3D效果
- python3给图片添加水印
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
- 视频特效制作:如何给视频添加边框、水印、动画以及3D效果
- 叶孤城大神之--视频特效制作:如何给视频添加边框、水印、动画以及3D效果
- GPUImage给视频添加水印
- ffmpeg 视频教程 添加水印附源码
- 视频特效制作:如何给视频添加边框、水印、动画以及3D效果
- java视频添加水印(logo)和视频的自动取帧
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作