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

网络下载ts流媒体

网络下载ts流媒体

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

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

查看

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

下载

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

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就是片段序列,当然不是所有序列都是最后一个数,这个要自己分析,按照分析后的点击查看两个下载好的片段就可以了。这个给个针对此命名规则的重命名代码。

import os


def 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 None
    return 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

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.kler.cn/a/451945.html

相关文章:

  • 傅里叶变换原理
  • 【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
  • Echarts连接数据库,实时绘制图表详解
  • 论文《Vertical Federated Learning: Concepts, Advances, and Challenges》阅读
  • Windows内核开发环境配置
  • 一网多平面
  • JVM简介—1.Java内存区域
  • VBA实现遍历Excel文件将指定的单元格内容拷贝到当前工作簿
  • whisper.cpp: PC端测试 -- 电脑端部署音频大模型
  • 图像处理-Ch6-彩色图像处理
  • 修改输出资源的名称和路径、自动清空上次打包资源
  • 【C 语言】内存节省机制
  • 深入理解.NET内存回收机制
  • 【论文复现】进行不同视角图像的拼接
  • python如何求欧几里得
  • VMware虚拟机中CentOS系统/dev/mapper/centos-home分区扩容指南
  • 稳定的碰一碰发视频、碰一碰矩阵源码技术开发,支持OEM
  • 2024年12月25日Github流行趋势
  • 【卷积神经网络】常用评价指标总结
  • 使用 C# 代码计算数学表达式
  • 代码随想录算法日记day16 | 513.找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造二叉树
  • xilinx 芯片使用vivado导出pindelay文件——FPGA学习笔记24
  • 【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
  • 《系统动力学模型构建与Vensim仿真》01系统动力学概述与行为模式
  • 基于Spring Boot的高校请假管理系统
  • VS2022 无法使用GitHub账户登录/无法使用copilot 解决方案