当前位置: 首页 > news >正文

05、Python -- 爬取ts文件格式视频思路

目录

  • 第一步:爬取一段5秒视频
    • 找url
    • 代码
    • 结果
  • 第二步:下载整个视频的所有片段
    • 代码:
    • 结果:
  • 第三步:合成视频
    • 安装模块
    • 代码:
    • 结果
  • 简洁代码
    • 代码:
    • 结果:
  • 最终代码
    • 简洁前代码
    • 简洁后代码

思路:
1、爬取视频,但是每次只能爬取一段5秒的视频。
2、一个视频有很多秒,所以需要爬取很多片段的视频
3、把所有爬取下来的片段视频合成导出。

4、最后再简洁代码

第一步:爬取一段5秒视频

找url

首先,找到需要爬取的视频,选择如图,找到对应的URL。
在这里插入图片描述

代码

然后最简单的四行爬取代码
在这里插入图片描述

结果

爬取的结果如图,里面视频只有5秒
在这里插入图片描述

第二步:下载整个视频的所有片段

代码:

在这里插入图片描述

结果:

在这里插入图片描述
把该视频所有片段都下载下来了
在这里插入图片描述

第三步:合成视频

安装模块

命令:pip install moviepy -i https://mirrors.aliyun.com/pypi/simple/

在这里插入图片描述

代码:

在这里插入图片描述

结果

在这里插入图片描述

完整合成视频并下载下来
在这里插入图片描述

简洁代码

代码:

在这里插入图片描述

结果:

在这里插入图片描述
如图:每个视频只由4秒
在这里插入图片描述

在这里插入图片描述

最终代码

简洁前代码

这里我把原本存放视频的文件夹名由《视频》改成《视频片段》
在这里插入图片描述
所以这里的【视频】,后面写代码的时候也应该改成【视频片段】
在这里插入图片描述

# 导入模块
import requestsnumber = 0
# 循环下载视频片段
while True:format_num = '{:05d}'.format(number)# f'' --> 用于在字符串中添加执行表达式url = f'https://xxxxxxxxxx.{format_num}.ts?pkexxxxxxxxxxxxx'res = requests.get(url)# 遇到404,就跳出循环if res.status_code == 404:breakopen(f'视频片段/{format_num}.ts', 'wb').write(res.content)print(f'已经下载了 {format_num}.ts文件')number += 1print(f'一共下载了 {number} 个视频 , 准备合成,请稍等几分钟')# 合成
#从moviepy这个模块的子模块editor里面导入所有的功能
from moviepy.editor import *# 列表 把这些视频加载到程序中来,保存在一个列表中
clip_list = []
for i in range(number):format_num = '{:05d}'.format(i)clip = VideoFileClip(f'视频片段/{format_num}.ts')clip_list.append(clip)# 最终视频合成
lastVideo = concatenate_videoclips(clip_list)
# 视频下载写出地址
lastVideo.write_videofile('完整视频/最终视频.mp4')

简洁后代码

# 导入模块
import requests
#从moviepy这个模块的子模块editor里面导入所有的功能
from moviepy.editor import *
number = 0
# 列表, 用于把所有片段视频加载到程序中来,保存在一个列表中
clip_list = []
# 循环下载视频片段
while True:format_num = '{:05d}'.format(number)# f'' --> 用于在字符串中添加执行表达式url = f'https://xxxxxxxhevc_1.{format_num}.ts?pkexxxxxxxxxxxxxxxxxxxxxx'res = requests.get(url)# 遇到404,就跳出循环if res.status_code == 404:break# 视频片段 就是存放一段段视频的文件夹名open(f'视频片段/{format_num}.ts', 'wb').write(res.content)clip = VideoFileClip(f'视频片段/{format_num}.ts')clip_list.append(clip)print(f'已经下载了并且加载了 {format_num}.ts文件')number += 1
print(f'一共下载了 {number} 个视频 , 准备加载,请稍等几分钟')
# 最终视频合成
lastVideo = concatenate_videoclips(clip_list)
# 视频下载写出地址
lastVideo.write_videofile('完整视频/最终视频.mp4')

相关文章:

  • 高三高考免费试卷真题押题知识点合集
  • Android拖放startDragAndDrop拖拽onDrawShadow动态添加View,Kotlin(3)
  • 多个相同地址的I2C设备,如何挂载在同一条总线上
  • Ansible脚本进阶---playbook
  • Web入门笔记
  • UE5使用Dash插件实现程序化地形场景制作
  • 网关概念及java项目中用使用网关场景
  • Ubuntu系统编译调试QGIS源码保姆级教程
  • 合并两个有序链表(C++)
  • TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
  • 【每日一题Day362】LC274H 指数 | 二分答案
  • iOS_Crash 四:的捕获和防护
  • es之null_value
  • Python——自动创建文件夹
  • 一个基于Excel模板快速生成Excel文档的小工具
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [笔记] php常见简单功能及函数
  • Android交互
  • C++入门教程(10):for 语句
  • create-react-app做的留言板
  • C语言笔记(第一章:C语言编程)
  • Fastjson的基本使用方法大全
  • Github访问慢解决办法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • javascript从右向左截取指定位数字符的3种方法
  • JavaScript对象详解
  • jquery cookie
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Redux系列x:源码分析
  • Tornado学习笔记(1)
  • vue--为什么data属性必须是一个函数
  • 多线程 start 和 run 方法到底有什么区别?
  • 高度不固定时垂直居中
  • 警报:线上事故之CountDownLatch的威力
  • 我的面试准备过程--容器(更新中)
  • Linux权限管理(week1_day5)--技术流ken
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 交换综合实验一
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #13 yum、编译安装与sed命令的使用
  • #etcd#安装时出错
  • (4)logging(日志模块)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (十六)Flask之蓝图
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)3D模板阴影原理
  • (转)http-server应用
  • (轉貼) UML中文FAQ (OO) (UML)
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET Core IdentityServer4实战-开篇介绍与规划