使用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}")

通过上述步骤,我们可以轻松实现从网络下载多个视频片段并合并成一个完整视频的功能。如果在实际应用中遇到问题,可以通过添加调试信息或检查网络连接来排查问题。希望这篇文章对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/367331.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VisualStudio2019受支持的.NET Core

1.VS Studio2019受支持的.NET Core? 适用于 Visual Studio 的 .NET SDK 下载 (microsoft.com) Visual Studio 2019 默认并不直接支持 .NET 6 及以上版本。要使用 .NET 6 或更高版本,你需要在 Visual Studio 2019 中采取额外步骤,比如安装相应…

VUE项目安全漏洞扫描和修复

npm audit 1、npm audit是npm 6 新增的一个命令,可以允许开发人员分析复杂的代码并查明特定的漏洞。 2、npm audit名称执行,需要包package.json和package-lock.json文件。它是通过分析 package-lock.json 文件,继而扫描我们的包分析是否包含漏洞的。 …

一个opencv实现检测程序

引言 图像处理是计算机视觉中的一个重要领域,它在许多应用中扮演着关键角色,如自动驾驶、医疗图像分析和人脸识别等。边缘检测是图像处理中的基本任务之一,它用于识别图像中的显著边界。本文将通过一个基于 Python 和 OpenCV 的示例程序&…

智谱AI: ChatGLM API的使用

一、获取API 1、打开网址:智谱AI开放平台 注册账号登录 2、登录,查看API key (注册后赠送100万token,实名认证后多赠送400万, 有效期一个) 二、安装及调用 安装质谱SDK pip install zhipuai调用方式 流式调用 from zhipuai import ZhipuA…

pgrouting使用

pgRouting是一个为PostgreSQL和PostGIS提供路由功能的开源库,它支持复杂的图论算法,用于在地理网络中进行最短路径搜索。以下是pgRouting的一些应用实例。 注意事项: 1、路网表中的id、source、target必须是int类型,否则创建拓扑…

记录一个关于IntelliJ IDEA查找接口的小小问题

idea中可以通过双击shift输入接口url路径直接找到在controller中对应的方法。。部分项目出现无法查找的问题,如上图所示,观察发现正常的项目里面,RequestMapping旁边会出现一个小地球的图标(注意是较新版本的IDEA才会有&#xff0…

改善员工体验的继任计划有三种方法

人才管理不仅仅是完成年度绩效评估。这是为了理解和回应员工对你组织的看法。在本文中,我们将学习如何通过继任计划改变员工的经验。 你组织的关键角色将不可避免地是空的。每个人都会退休或跳槽。你需要一个计划来填补这些职位,以最大限度地减少劳动力…

NoteLLM: 大语言模型在小红书推荐系统的落地应用

今天分享一篇小红书今年3月的论文,介绍了大语言模型在小红书笔记推荐场景下的落地应用,主要是围绕如何利用LLM的表征能力来生成更适用于i2i召回的文本embedding,思路简单,落地也容易,个人觉得实践价值非常高&#xff0…

sql拉链表

1、定义:维护历史状态以及最新数据的一种表 2、使用场景 1、有一些表的数据量很大,比如一张用户表,大约1亿条记录,50个字段,这种表 2.表中的部分字段会被update更新操作,如用户联系方式,产品的…

【数据结构|C语言版】四大排序(算法)

前言1. 插入排序1.1 直接插入排序1.2 希尔排序 2. 选择排序2.1 选择排序2.2 堆排序 3. 交换排序3.1 冒泡排序冒泡排序的步骤 3.2 快速排序快速排序的步骤 4. 归并排序归并排序的步骤:代码解释:归并排序的性能: 上期回顾: 【数据结构|C语言版】…

从0到1手写vue源码

模版引擎 数组join法(字符串) es6反引号法(模版字符串换行) mustache (小胡子) 引入mustache 模版引擎的使用 mustache.render(templatestr,data)

65.Python-web框架-Django-免费模板django-datta-able的admin_datta

目录 1.起源 2.admin_datta admin_datta\urls.py admin_datta\views.py 1.起源 前面有一篇文章介绍了django-datta-able:54.Python-web框架-Django-免费模板django-datta-able_danjon web框架商用免费-CSDN博客 页面是这个样子。 从template\include\sidebar.…

vivado联合modelsim仿真

一. 编译Vivado仿真库 打开Vivado,Tools -> Compile Simulation Libraries 二. 设置仿真工具和库路径 因为新建工程的默认仿真工具是Vivado Simulator,所以要使用Modelsim仿真,每个新工程都要设置一次,方法如下: …

CentOS 7.9 快速更换 阿里云源教程

CentOS 7.9 更换源教程 总结 # 下载 wget yum -y install wget # 备份 yum 源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # 下载阿里云的yum源到 /etc/yum.repos.d/ # 此处以 CentOS 7 为例,如果是其它版本或者系统的话&#…

亚马逊云科技AWS免费大热AI应用开发证书(含题库、开卷)

亚马逊云科技AWS官方生成式AI免费证书来了!内含免费AI基础课程!快速掌握AWS的前沿AI技术,后端开发程序员也可以速成AI专家,了解当下最🔥的AWS AI架构解决方案! 本证书内容包括AWS上的AI基础知识&#xff0c…

数字源表表征及测试纳米材料高温原位方案

01/纳米材料电学性能的表征和分析/ 与传统的材料相比,纳米材料具有原子级厚度、表面平整无悬空键、载流子迁移率好等优点,其导电性能很大程度依赖于材料本身的带隙、掺杂浓度和载流子迁移率。同样的掺杂浓度下,迁移率越大,电阻率…

【HICE】基于httpd下的web服务器搭建

1.下载httpd: dnf install httpd -y 2.进入httpd中: cd /etc/httpd cd conf.d 3.编辑一个新的vhost.conf 4.重启httpd服务 systemctl restart httpd 5.关闭防火墙 systemctl stop firewalld setenforce 0 6.文本写入(网页编辑&…

【C语言】extern 关键字

在C语言中,extern关键字用于声明一个变量或函数是定义在另一个文件中的。它使得在多个文件之间共享变量或函数成为可能。extern关键字常见于大型项目中,通常用于声明全局变量或函数,这些变量或函数的定义位于其他文件中。 基本用法 变量声明…

There are test failures.

查看详细错误信息:测试失败通常会提供详细的错误信息和堆栈跟踪。首先查看这些信息,以了解失败的原因。 理解失败原因:根据错误信息,理解测试失败的具体原因。可能的原因包括代码逻辑错误、依赖项问题、测试数据问题等。 检查测…

高质量数据不够用,合成数据是打开 AGI 大门的金钥匙吗?

编者按: 人工智能技术的发展离不开高质量数据的支持。然而,现有可用的高质量数据资源已日渐接近枯竭边缘。如何解决训练数据短缺的问题,是当前人工智能领域亟待解决的一个较为棘手的问题。 本期文章探讨了一种经实践可行的解决方案 —— 合成…