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

手机网站方案wordpress免

手机网站方案,wordpress免,学美工大概要多少学费,wordpress 禁止自动保存 插件本文涵盖的内容仅供个人学习使用#xff0c;如果侵犯学校权利#xff0c;麻烦联系我删除。 初衷 研究生必修选逃#xff0c; 期末复习怕漏过重点题目#xff0c;但是看学在西电的录播回放课一卡一卡的#xff0c;于是想在空余时间一个个下载下来#xff0c;然后到时候就… 本文涵盖的内容仅供个人学习使用如果侵犯学校权利麻烦联系我删除。 初衷 研究生必修选逃 期末复习怕漏过重点题目但是看学在西电的录播回放课一卡一卡的于是想在空余时间一个个下载下来然后到时候就突击复习。 环境 因为懒得用二进制安装ffmpeg所以用的Ubuntu22.04。年轻的本科生windows选手们可以自行学习二进制安装ffmpeg。 sudo apt install ffmpeg ffmpeg -version # 要有python3安装步骤略过 ... # pip依赖 pip install aiohttp pip install tqdm pip install m3u8预备知识 关于网站部分本文写于2024-12-05不保证后面会不会改 学在西电就是在学习通上再加了一层加了点新东西。录播在这个地方看。(本文默认已经登录成功) 下面的图就是录播播放界面由于有学生姓名和学号的水印我打码了。 左边是拍老师和黑板的录像右边是展示ppt的录像。 为了捕获请求我们先打开开发者面板的网络面板点击下面的某堂课跳转然后在页面刷新后获取到加载时的请求通过关键词过滤m3u8得到重要的三个请求。 注意这里有两个playback.m3u8通过上面图中那个另外的请求playVideo?info...的响应我们可以看到pptVideo和teacherTrack这两个路径分别对应ppt和老师黑板的m3u8文件的url。 {type: 2,videoPath: {pptVideo: ....m3u8,teacherTrack: ....m3u8,studentFull: ....m3u8},liveId: ...,isshowpl: 0 }在学在西电里视频文件是被切分为许多个几秒的视频块(ts文件是Transport Stream不是Typescript)通过一个m3u8协议文件保存对应视频的各个小视频块的文件名、序列号、持续时间等信息。 m3u8文件内容如下还好学在西电这里没有做加密没有#EXT-X-KEY:METHODAES-128,URI...这么一行所以我们可以用这些ts文件名直接下载(当然前面还要有http之类的前缀)。 最后使用伟大牛逼的 ffmpeg 可以将这些ts文件合并为 mp4 文件。 具体代码 1. 下载各ts 基于m3u8库解析m3u8文件aiohttp做协程下载tqdm做进度条方便查看最后记得threading加锁。 考虑到偶尔的下载异常加了个3次重试。 url按照下图获取。 实测5分钟左右下完。 # download.py import shutil import threading import m3u8 import os import logging import re import asyncio import aiohttp from tqdm import tqdmpbar:tqdm None pbar_lock threading.Lock()async def download_segment(session, ts_url, true_url, output_dir, cnt):global pbarfilename os.path.join(output_dir, true_url)try:# 实际在这里下载async with session.get(ts_url) as resp:resp.raise_for_status()with open(filename, wb) as f:async for chunk in resp.content.iter_chunked(1024):if chunk:f.write(chunk)logging.info(f下载完成: {true_url})with pbar_lock:pbar.update(1)except Exception as e:logging.error(f下载失败: {true_url}, 错误信息: {e})# 3次重试机会if cnt 3:logging.error(f重试次数达到上限跳过下载: {true_url})# 把需要手动下的单独保存with open(f{output_dir}.err, a, encodingutf-8) as file:file.write(ts_url \n)# 并且这个下了一半的ts文件需要删掉防止弄混if os.path.exists(filename):os.remove(filename)with pbar_lock:pbar.update(1)else:# 重试一下且计数器1await download_segment(session, ts_url, true_url, output_dir, cnt1)async def download_m3u8(m3u8_url, output_dir):global pbar# 日志logging_file f{output_dir}-download.logerr_file f{output_dir}.errif os.path.exists(logging_file):os.remove(logging_file)if os.path.exists(err_file):os.remove(err_file)if os.path.exists(output_dir):shutil.rmtree(output_dir)logging.basicConfig(filenamelogging_file, levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 创建输出目录os.mkdir(output_dir)# 下载并解析 m3u8 文件logging.info(f开始解析 m3u8 文件: {m3u8_url})m3u8_obj m3u8.load(m3u8_url)# 提取 base URLbase_url re.split(r[a-zA-Z0-9-_\.]\.m3u8, m3u8_url)[0]logging.info(f提取到的base URL: {base_url})# 创建 aiohttp sessionasync with aiohttp.ClientSession() as session:# 异步下载所有 ts 片段tasks []pbar tqdm(totallen(m3u8_obj.segments))logging.info(fsegment 个数: {len(m3u8_obj.segments)})for _, segment in enumerate(m3u8_obj.segments):# 真正ts的下载url是要拼起来的ts_url base_url segment.uritask asyncio.create_task(download_segment(session, ts_url, segment.uri, output_dir, 0))tasks.append(task)await asyncio.gather(*tasks)# 任务完成后关闭进度条pbar.close()logging.info(f下载完成)m3u8_url http://.../playback.m3u8 output_dir 2-4-1-1 asyncio.run(download_m3u8(m3u8_url, output_dir))2. 合并为mp4 基于命令: ffmpeg -f concat -safe 0 -i ts_list.txt -c copy video.mp4。注意这个-i如果只有少量文件可以-i concat:1.ts|2.ts|3.ts|4.ts|.5.ts| 但对于我们这种就只能让他读取一个文件名列表文件注意这个文件每行都是file文件路径。 我代码里首先获取了ts文件夹里的所有ts文件名但是因为多线程所以乱序要先排个序才能让ffmpeg按顺序拼接。 实测1分钟左右合并完成。 # merge.py import osdef main(dir_name):filename ts_list.txtif os.path.exists(filename):os.remove(filename)f open(filename, a, encodingutf-8)names []with os.scandir(dir_name) as entries:for entry in entries:# 检查是否为文件if entry.is_file():names.append(entry.name)# 注意要先排序按顺序写入文件名names.sort(keylambda x: int(x.split(_)[0]))for name in names:f.write(ffile {os.path.join(dir_name,name)}\n)f.close()mp4_name f{dir_name}.mp4if os.path.exists(mp4_name):os.remove(mp4_name)cmd rfffmpeg -f concat -safe 0 -i ./{filename} -c copy {mp4_name}os.system(cmd)main(./4-2-1-ppt)3. 执行 运行前记得改两个脚本里的链接和文件名 python download.py python merge.py其他 其实也可以直接用ffmpeg一次完成: ffmpeg -i http://.../playback.m3u8 -c copy 2-4-1.mp4只是似乎是串行依次下载ts速度不快。我也有搜到用IDM下载或者potplayer播放学长/弟/姐/妹可以自行尝试。 学在西电课程回放稳定播放方法手把手教你用IDM下载学在西电课程回放视频 关于ppt视频的忽略音频流ffmpeg可以设置参数我没看这个关于字幕生成免费方案是B站必剪支持15分钟内视频的字幕生成可以在必剪里裁剪和生成但是有点麻烦而且效果很差。其他方案请自行研究。似乎也有直接可用的m3u8播放器请自行研究。
http://www.hkea.cn/news/14352498/

相关文章:

  • 网站设计时应考虑哪些因素上海有什么公司名称
  • 洛阳霞光做网站公司企业邮箱注册申请163
  • 借贷网站建设山东服务好的seo公司
  • 绥芬河市建设局网站wordpress 开发接口
  • 刘家窑做网站wordpress难
  • 大庆免费网站建设公司五种网站类型
  • 入门做网站wordpress插件手机
  • 网站建设企业合作邀请函wordpress免登陆发布接口
  • 玉林城乡住房建设厅网站姓名logo设计免费
  • 企业推广建站用网站做数据库
  • asp资源下载网站seo网站怎么建设
  • 河北秦皇岛建设局网站河南建筑材料信息网
  • 巴中商城网站建设庆阳平面设计招聘网
  • 南宁seo计费管理seo 网站推广入门
  • 仁怀哪里有做网站的小学生手工
  • 天津做网站seo的昆明网站建设团队
  • 网站开发流程图 最网站建设及推广好学习吗
  • 无锡企业制作网站怎么用asp做网站
  • 做兼职哪个网站好设计本官方网站电脑版
  • 网站建设互联网推广wordpress留言板插件
  • wordpress如何销售卡密电商seo优化是什么
  • 服务器怎样建设网站那个网站卖数据库
  • 地方房产网站APP如何做wordpress文本框
  • 电商网站建设总结万寿路网站建设
  • 南京做网站群的公司工作服定做工厂
  • 百度的网站名建设银行激活网站
  • 建博客网站地方门户网站取名
  • 区域门户网站源码网站如何备案流程
  • 网站建设的知识sql数据库做的网站怎么发布
  • 百度入口官网西安seo优化公司