使用Python下载并合并HLS视频片段
下载和合并视频片段的实用方法
在日常工作中,我们经常会遇到需要从网上下载视频并将其合并成一个完整视频的需求。本文将介绍如何使用 Python 下载多个视频片段,并使用 ffmpeg 将这些片段合并成一个完整的视频文件。以下是具体步骤和代码实现。
完整代码
首先,下面是完整的代码,可以直接复制粘贴到你的 Python 环境中运行:
import requests
import os# 视频下载和合并的目录
download_dir = 'downloads'
os.makedirs(download_dir, exist_ok=True)# 基础URL和总片段数
base_url = "https://demo.net/hls/contents/videos/361000/361464/361464_720p.mp4/cdn-{}-v1-a1.ts"
total_segments = 3
proxies = {'http': 'http://127.0.0.1:10809','https': 'http://127.0.0.1:10809'
}# 下载所有视频片段
for i in range(1, total_segments + 1):url = base_url.format(i)headers = {}try:r = requests.get(url, stream=True, headers=headers, proxies=proxies)r.raise_for_status() # 检查请求是否成功segment_path = os.path.join(download_dir, f"segment_{i:03d}.ts")with open(segment_path, 'wb') as f:f.write(r.content)print(f"下载完成: segment_{i:03d}.ts")except requests.RequestException as e:print(f"下载失败: segment_{i:03d}.ts - {e}")continue# 生成文件列表
filelist_path = os.path.join(download_dir, 'filelist.txt')
with open(filelist_path, 'w') as f:for i in range(1, total_segments + 1):segment_path = f"segment_{i:03d}.ts"f.write(f"file '{segment_path}'\n")# 使用ffmpeg合并视频
command = f"ffmpeg -y -f concat -safe 0 -i \"{filelist_path}\" -c copy output_video.mp4"
os.system(command)# 获取并打印视频文件的绝对路径
video_path = os.path.abspath("output_video.mp4")
print(f"视频合并完成,文件名为: output_video.mp4,存储位置为: {video_path}")
代码介绍
1. 导入必要的库
我们需要 requests 库来处理 HTTP 请求,os 库来处理文件和目录操作。
import requests
import os
2. 定义视频下载和合并的目录
创建一个名为 downloads 的目录,用于存储下载的视频片段。
# 视频下载和合并的目录
download_dir = 'downloads'
os.makedirs(download_dir, exist_ok=True)
3. 定义基础 URL 和总片段数
基础 URL 用于构建每个片段的下载链接,总片段数表示视频被分割成多少个片段。
# 基础URL和总片段数
base_url = "https://demo.net/hls/contents/videos/361000/361464/361464_720p.mp4/cdn-{}-v1-a1.ts"
total_segments = 218
proxies = {'http': 'http://127.0.0.1:10809','https': 'http://127.0.0.1:10809'
}
4. 下载视频片段
遍历所有片段,构建每个片段的 URL,发送 HTTP 请求下载视频片段,并将其保存到本地。
# 下载所有视频片段
for i in range(1, total_segments + 1):url = base_url.format(i)headers = {}try:r = requests.get(url, stream=True, headers=headers, proxies=proxies)r.raise_for_status() # 检查请求是否成功segment_path = os.path.join(download_dir, f"segment_{i:03d}.ts")with open(segment_path, 'wb') as f:f.write(r.content)print(f"下载完成: segment_{i:03d}.ts")except requests.RequestException as e:print(f"下载失败: segment_{i:03d}.ts - {e}")continue
5. 生成文件列表
生成一个文本文件,列出所有下载的视频片段路径,供 ffmpeg 使用。
# 生成文件列表
filelist_path = os.path.join(download_dir, 'filelist.txt')
with open(filelist_path, 'w') as f:for i in range(1, total_segments + 1):segment_path = f"segment_{i:03d}.ts"f.write(f"file '{segment_path}'\n")
6. 使用 ffmpeg 合并视频
调用 ffmpeg 命令,将所有视频片段合并成一个完整的视频文件。
# 使用ffmpeg合并视频
command = f"ffmpeg -y -f concat -safe 0 -i \"{filelist_path}\" -c copy output_video.mp4"
os.system(command)
7. 打印合并后的视频文件路径
获取并打印合并后的视频文件的绝对路径,方便用户查找。
# 获取并打印视频文件的绝对路径
video_path = os.path.abspath("output_video.mp4")
print(f"视频合并完成,文件名为: output_video.mp4,存储位置为: {video_path}")
通过上述步骤,我们可以轻松实现从网络下载多个视频片段并合并成一个完整视频的功能。如果在实际应用中遇到问题,可以通过添加调试信息或检查网络连接来排查问题。希望这篇文章对你有所帮助!
相关文章:
使用Python下载并合并HLS视频片段
下载和合并视频片段的实用方法 在日常工作中,我们经常会遇到需要从网上下载视频并将其合并成一个完整视频的需求。本文将介绍如何使用 Python 下载多个视频片段,并使用 ffmpeg 将这些片段合并成一个完整的视频文件。以下是具体步骤和代码实现。 完整代…...
常见的九种二极管
常见的九种二极管 文章目录 常见的九种二极管1、普通二极管2、光电二极管(LED)3、变容二级管4、发光二极管5、恒流二极管6、快恢复二极管(FRD)7、肖特基二极管8、瞬态电压抑制二极管(TVS)9、齐纳二极管(稳压࿰…...
竞赛选题 python的搜索引擎系统设计与实现
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python的搜索引擎系统设计与实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:5分创新点:3分 该项目较为新颖ÿ…...
大模型技术方向夏令营1期-对话分角色要素提取挑战赛
#AI夏令营 #Datawhale #夏令营 一、 baseline 跑通 Baseline 本身挑战性有限,关键是熟悉 LLM-centric 相关任务 coding 层面的流程方法,比如: 大模型 API(这里为科大讯飞 Spark)调用token消耗的理解如何调用大模型实现针对给定…...
类和对象(封装、继承、多态、友元)
c面相对象的三大特性为:封装、继承、多态 c 认为万事万物都皆为对象,对象上有其属性和行为 一、类和对象(封装) (一)封装的意义 封装是c面相对象的三大特性之一 封装的意义: 将属性和行为…...
关于Yolov8我踩过的那些坑
按照报错频次梳理: 致命反斜杠‘\’ 调用模型时,我喜欢‘copy relative location’,然后win系统默认反斜杠! 就导致路径读取错误!各种报错!! debug到崩溃然后发现是斜杠的问题,本吗喽…...
Linux——shell原理和文件权限
1.shell原理 在我们使用云服务器时,需要通过shell进行使用,而shell则是一种外壳程序。 我们提到过,大部分的指令实际上就是文件,当用户需要执行某种功能时,由于用户不擅长和操作系统直接交互(操作复杂&…...
网络工程师需要熟悉Docker吗?我觉得不需要精通,但是得懂基础
你好,这里是网络技术联盟站,我是瑞哥。 Docker,这个字眼大家不陌生吧,不过作为网络工程师可能平时接触不到,如果在看文章的是运维人员,那么70%以上的运维人员都会跟Docker打交道。即使网工用不到ÿ…...
c++初级-2-引用
文章目录 引用一、引用的定义二、引用做函数参数三、引用作为返回对象四、引用的本质五、常量引用 引用 即给一个变量起别名。 一、引用的定义 int a 10;//引用int& b a;cout << "a " << a << endl;cout << "b " <&l…...
如何清理电脑内存?让电脑运行如飞!
电脑内存(RAM)的清理对于维持系统的流畅运行至关重要。随着使用时间的增加,系统内存会被各种应用程序和后台进程占用,导致系统响应变慢,甚至出现卡顿现象。通过有效地清理内存,可以提升电脑的性能ÿ…...
[数据集][目标检测]人员状态跑睡抽烟打电话跌倒检测数据集4943张5类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4943 标注数量(xml文件个数):4943 标注数量(txt文件个数):4943 标注…...
Java8 - Stream API 处理集合数据
Java 8的Stream API提供了一种功能强大的方式来处理集合数据,以函数式和声明式的方式进行操作。Stream API允许您对元素集合执行操作,如过滤、映射和归约,以简洁高效的方式进行处理。 下面是Java 8 Stream API的一些关键特性和概念ÿ…...
漫步5G-A City,一份独属于上海的浪漫
作家亨利詹姆斯曾写道,“城市漫步,让我接触到了这个世界上最好的东西”。 用漫无目的地行走,来体验和观察一座城市,上海凭借丰富多元的文化特质,成为citywalk这种浪漫生活方式的流行地。 无论你是漫步在美术馆、画廊林…...
SpringBoot 如何处理跨域请求?你说的出几种方法?
引言:在现代的Web开发中,跨域请求(Cross-Origin Resource Sharing,CORS)是一个常见的挑战。随着前后端分离架构的流行,前端应用通常运行在一个与后端 API 不同的域名或端口上,这就导致了浏览器的…...
OV SSL证书年度成本概览:为企业安全护航的经济之选
在当今数字化时代,企业网站不仅是品牌展示的窗口,更是与客户沟通的桥梁。然而,随着网络威胁的不断升级,保护网站安全成为了企业不可忽视的任务。SSL证书,特别是OV SSL证书,因其对企业身份的严格验证&#x…...
歌尔气压计SPA06-003在无人机的创新应用
随着科技的不断进步,各类智能设备的功能日益强大,其中气压计作为一种能够测量大气压力的传感器,已被广泛应用于多种领域。歌尔气压计以其高精度、低功耗的特点,在无人机和智能手表上的应用尤为突出,为这两个领域的产品…...
python3多文件操作
1 介绍 有两个.py文件,分别为main.py和util.py,执行main.py时,调用util.py当中的函数。 main.py内容如下, import util if __name__ "__main__":a [3.0,4.0]length util.get_length_from_vec(a)print(f"leng…...
312. 戳气球
312. 戳气球 题目链接:312. 戳气球 代码如下: //参考链接:https://leetcode.cn/problems/burst-balloons/solutions/336390/chuo-qi-qiu-by-leetcode-solution class Solution { public:int maxCoins(vector<int>& nums) {int nnums.size()…...
深入理解C++中的锁
目录 1.基本互斥锁(std::mutex) 2.递归互斥锁(std::recursive_mutex) 3.带超时机制的互斥锁(std::timed_mutex) 4.带超时机制的递归互斥锁(std::recursive_timed_mutex) 5.共享…...
压缩pdf文件大小,压缩pdf文件大小软件哪个好
在数字化时代,PDF文件因其卓越的跨平台兼容性和稳定性而成为工作与学习的好帮手。然而,当PDF文件体积过大时,传输和存储便成了一项挑战。别担心,本文将为你揭秘如何快速压缩PDF文件,让你的文档轻装上路! 压…...
用FastMCP中间件给你的AI应用加把锁:手把手实现MySQL数据库鉴权(附完整代码)
用FastMCP中间件构建企业级AI服务安全网关 当团队内部的AI工具从原型走向生产环境时,安全往往成为最容易被忽视的环节。上周我接手了一个金融数据分析平台的审计工作,发现开发团队竟然直接将未加密的股票查询接口暴露在公网,仅通过IP白名单控…...
深入解析 Linux 内核中的 PCI 中断向量分配机制:pci_alloc_irq_vectors
1. PCI中断向量分配机制入门指南 第一次接触PCI设备中断处理时,我被各种专业术语搞得晕头转向。直到在项目里实际调试一个网卡驱动时,才真正理解pci_alloc_irq_vectors这个函数的重要性。想象一下,你的电脑就像个繁忙的快递分拣中心…...
探索:空间网格编码SpatialGridCoding在北斗导航与地理实体管理中的应用
1. 空间网格编码:北斗导航的"数字身份证" 想象一下,当你打开手机导航时,系统如何快速锁定你的位置并规划路线?这背后离不开空间网格编码技术的支持。简单来说,空间网格编码就像给地球表面贴满二维码…...
Charticulator:突破传统桎梏的自定义数据可视化革新——从模板依赖到自由创作
Charticulator:突破传统桎梏的自定义数据可视化革新——从模板依赖到自由创作 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 数据可视化工具是否常常…...
为什么AI Coding、Skills、Agent智能体都偏爱Markdown?
为什么AI Coding、Skills、Agent智能体都偏爱Markdown? 更多问题讨论和资料获取,请关注文章最后的微信公众号 从ChatGPT的输出到GitHub Copilot的提示,从Claude的记忆存储到智能体的工作流配置——Markdown无处不在。这不是巧合,…...
Homebrew卸载与重装指南:彻底清理残留文件的正确姿势
Homebrew深度清理与重装实战:从残留文件追踪到ARM架构优化 每次系统升级或开发环境切换时,那些隐藏在系统深处的Homebrew残留文件就像房间里扫不尽的灰尘——明明已经卸载了所有公式,却在重新安装时遇到各种诡异的权限错误或版本冲突。作为m…...
如何用League-Toolkit提升你的英雄联盟游戏体验
如何用League-Toolkit提升你的英雄联盟游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾经在英雄联盟游戏中感到效…...
Outline数据迁移架构解析:构建跨平台知识库的无缝衔接方案
Outline数据迁移架构解析:构建跨平台知识库的无缝衔接方案 【免费下载链接】outline Outline 是一个基于 React 和 Node.js 打造的快速、协作式团队知识库。它可以让团队方便地存储和管理知识信息。你可以直接使用其托管版本,也可以自己运行或参与开发。…...
从单体到微服务:用Ruoyi-Vue-Plus框架快速搭建多租户后台系统(含AI模块开发避坑指南)
从单体到微服务:Ruoyi-Vue-Plus框架的多租户实战与AI模块开发精要 当企业级应用需要同时服务多个客户群体时,如何确保数据隔离与系统性能的平衡成为架构设计的核心挑战。Ruoyi-Vue-Plus作为一款基于Spring Boot的快速开发框架,其多租户实现机…...
OpenClaw+GLM-4.7-Flash:智能爬虫与数据分析
OpenClawGLM-4.7-Flash:智能爬虫与数据分析 1. 为什么需要智能爬虫与数据分析 最近我在做一个小型竞品分析项目时,遇到了一个典型的数据收集困境:需要从20多个竞品网站抓取产品功能描述、定价策略和用户评价,然后整理成结构化数…...
