网络下载ts流媒体

embedded/2024/12/25 11:49:29/

网络下载ts流媒体

    • 查看
    • 下载
    • 排序
    • 合并

很多视频网站,尤其是微信小程序中的长视频无法获取到准确视频地址,只能抓取到.ts片段地址,下载后发现基本都是5~8秒时长。
例如:
获取到的片段地址
我们需要将以上地址片段全部下载后排序后再合成新的长视频。

查看

在此界面右键copy --> copy all list URLs 并将结果放入到一个list.txt中
例如:
list.txt

下载

将片段全部下载到ts文件夹内

python">import os
import requests
from urllib.parse import urlparse# 创建ts文件夹(如果不存在)
if not os.path.exists('ts'):os.makedirs('ts')# 读取list.txt文件
with open('list.txt', 'r') as file:urls = file.readlines()# 处理每个URL
for url in urls:url = url.strip()  # 移除换行符和空格if url:try:# 从URL中获取文件名filename = os.path.basename(urlparse(url).path)if not filename.endswith('.ts'):filename += '.ts'# 下载文件response = requests.get(url, stream=True)response.raise_for_status()  # 检查是否成功获取# 保存文件filepath = os.path.join('ts', filename)with open(filepath, 'wb') as f:for chunk in response.iter_content(chunk_size=8192):if chunk:f.write(chunk)print(f'成功下载: {filename}')except Exception as e:print(f'下载失败 {url}: {str(e)}')print('所有下载���成!')

排序

对下载后的片段名称排序,一般序列数值在名称中。
例如:4261649925_937121059_2632.ts 其中的2632就是片段序列,当然不是所有序列都是最后一个数,这个要自己分析,按照分析后的点击查看两个下载好的片段就可以了。这个给个针对此命名规则的重命名代码。

python">import osdef get_number_after_second_underscore(filename):# 分割文件名,获取第二个下划线后的数字try:parts = filename.split('_')if len(parts) >= 3:# 获取最后一部分并移除可能的.ts后缀last_part = parts[2].replace('.ts', '')return int(last_part)except (IndexError, ValueError):return Nonereturn None# 获取ts文件夹中的所有ts文件
ts_folder = 'ts'
ts_files = [f for f in os.listdir(ts_folder) if f.endswith('.ts')]# 重命名文件
for filename in ts_files:print(filename)number = get_number_after_second_underscore(filename)print(number)if number is not None:# 构建新文件名new_filename = f"{number:03d}.ts"  # 使用3位数字格式,例如:001.ts# 构建完整的文件路径old_path = os.path.join(ts_folder, filename)new_path = os.path.join(ts_folder, new_filename)try:os.rename(old_path, new_path)print(f'已重命名: {filename} -> {new_filename}')except Exception as e:print(f'重命名失败 {filename}: {str(e)}')print('重命名完成!')

合并

将排序好的视频片段合并,需要预先安装ffmpeg

python">import os
import subprocess# 获取ts文件夹中的所有ts文件
ts_folder = 'ts'
ts_files = [f for f in os.listdir(ts_folder) if f.endswith('.ts')]# # 使用自定义排序
# ts_files.sort(key=get_sort_key)print('文件排序完成,开始合并...')
print(f'共找到 {len(ts_files)} 个ts文件')# 方法1:使用ffmpeg合并(推荐)
try:# 创建临时文件列表with open('filelist.txt', 'w', encoding='utf-8') as f:for ts_file in ts_files:f.write(f"file 'ts/{ts_file}'\n")# 使用ffmpeg合并print('正在合并文件...')subprocess.run(['ffmpeg','-f', 'concat','-safe', '0','-i', 'filelist.txt','-c', 'copy','output.mp4'], check=True)print('合并完成!输出文件:output.mp4')# 清理临时文件os.remove('filelist.txt')except FileNotFoundError:print('错误:找不到ffmpeg,尝试使用备用方法合并...')# 方法2:直接合并(备用方法)try:with open('output.mp4', 'wb') as outfile:for ts_file in ts_files:print(f'正在处理: {ts_file}')with open(os.path.join(ts_folder, ts_file), 'rb') as infile:outfile.write(infile.read())print('使用备用方法合并完成!输出文件:output.mp4')except Exception as e:print(f'合并失败: {str(e)}')except Exception as e:print(f'合并失败: {str(e)}')

http://www.ppmy.cn/embedded/148605.html

相关文章

Redis——缓存雪崩

文章目录 1. 问题介绍2. 解决方案2.1 方案一:随机过期时间2.2 方案二:增强 Redis 集群的可用性2.3 方案三:多级缓存2.3.1 做法2.3.2 流程2.3.3 示例代码2.3.4 评价 2.4 方案四:限流 3. 总结 1. 问题介绍 缓存雪崩:大量…

UE5 物体自动跟随主角镜头转向

A、思路 Tick,设置物体世界旋转 旋转数值源于物体自身位置与玩家摄像机位置的差值 效果是物体自动转向,玩家镜头动,则物体也随之调整角度。 适合一些提示文字,如按键提示、帮助之类。 B、参考图

PHP医院安全(不良)事件管理系统源码,通过运用RCA分析工具,借助柏拉图、鱼骨图等分析工具,分析问题产生的根本原因

医院安全(不良)事件管理系统采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,实现以事件为主要对象,可以自动、及时、实际地反应医院的安全、不良、近失事件的情况,更好地掌握不良事件的…

Java 深拷贝全面解析

1. 引言 在 Java 编程中,对象之间的复制是一个常见的需求。根据复制的深度不同,我们可以将复制分为浅拷贝和深拷贝。本文将深入探讨 深拷贝(Deep Copy) 的概念、应用场景、具体实现方法及其优缺点,并提供一些实用的建…

项目开源能够带来什么?从中得到了什么?

开源软件项目的发展趋势和参与经验是一个多维度的话题,涉及技术进步、经济影响、社区动态以及个人成长等多个层面。以下是针对当前开源项目发展趋势的分析,以及参与开源项目时可能获得的经验和收获。 当前开源项目的发展趋势 技术领域的渗透加深&#x…

专业的内外网数据交换方案 可解决安全、效率、便捷3大问题

内外网数据交换是很多企业和行业都会面临的场景,既然隔离了内外网,重中之重就是要确保数据的安全性,其次在数据流转交换过程中,不能太繁琐复杂,需要让用户快速、便捷的进行数据交换。首先我们来看看,在进行…

太速科技-428-基于XC7Z100+ADRV9009的双收双发无线电射频板卡

基于XC7Z100ADRV9009的双收双发无线电射频板卡 一、板卡概述 基于XC7Z100ADRV9009的双收双发无线电射频板卡是基于Xilinx ZYNQ FPGA和ADI的无线收发芯片ADRV9009开发的专用功能板卡,用于5G小基站,无线图传,数据收发等领域。 二…

八股(One Day one)

最近老是看到一些面试的视频,对于视频内部面试所提到的八股文,感觉是知道是什么,但是要说的话,却又不知道该怎么说(要不咋称之为八股文呢),所以就想到写一篇八股文总结的博客,以便进…