python使用ffmpeg分割视频为Hls分片文件/使用OpenSSL加密m3u8和TS文件

 FFmpeg和OpenSSL是一个开源免费的软件,在官网上就能下载, FFmpage网址(建议选择文件名full结尾的文件):Builds - CODEX FFMPEG @ gyan.dev OpenSSL网址(建议选择win64的MSI文件):Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

 添加到环境变量

 Windows下下载安装OpenSSL和FFmpeg  参考以下链接

http://t.csdnimg.cn/CM81h

注意 ffmpeg openssl 都要添加到系统环境变量

ffmpeg -version #查看ffmpeg版本命令
openssl version #查看openssl版本命令

import os
import subprocess
from cryptography.fernet import Fernet# 生成加密密钥
key = Fernet.generate_key()# 视频文件路径
video_path = 'ceshi.mp4.mp4'# HLS输出目录
hls_output_dir = 'hls_output'# 使用ffmpeg分割视频
split_command = f'ffmpeg -i {video_path} -c:v libx264 -c:a aac -strict experimental -map 0 -f ssegment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts'# 执行命令
subprocess.run(split_command, shell=True, check=True)# 使用OpenSSL加密m3u8和TS文件
encrypt_command = f'openssl enc -aes-256-cbc -in playlist.m3u8 -out playlist.m3u8.enc -iv 00000000000000000000000000000000 -K {key.decode("utf-8")}'for i in range(1, 100):ts_file = f'output{i:03d}.ts'encrypt_command += f' -in {ts_file} -out {ts_file}.enc -iv 00000000000000000000000000000000 -K {key.decode("utf-8")}'# 执行命令
subprocess.run(encrypt_command, shell=True, check=True)# 删除原始的m3u8和ts文件,只保留加密版本
os.remove('playlist.m3u8')
for i in range(1, 100):ts_file = f'output{i:03d}.ts'os.remove(ts_file)os.renames(f'{ts_file}.enc', ts_file)print("HLS encryption completed.")# 这个命令使用了FFmpeg工具来分割视频文件。让我逐步解释每个部分的含义:
#
#     ffmpeg: 这是调用FFmpeg工具的命令。
#
#     -i {video_path}: -i 选项后面跟着视频文件的路径 {video_path},表示输入文件的位置。在这里,{video_path}应该是你想要分割的视频文件的路径。
#
#     -c:v libx264: -c:v 选项指定视频编解码器,这里选择了 libx264,它是一个用于H.264视频编码的开源编码器。这意味着输出的视频文件将使用 H.264 编码。
#
#     -c:a aac: -c:a 选项指定音频编解码器,这里选择了 aac,表示输出的音频将使用 AAC 编码。
#
#     -strict experimental: 这个选项告诉FFmpeg在使用某些编解码器时采用实验性的严格模式。
#
#     -map 0: 这个选项将输入的所有流映射到输出。-map 0 表示将输入文件的所有流(视频、音频等)都包含在输出中。
#
#     -f ssegment: -f 选项用于指定输出格式,这里选择了 ssegment,表示输出为分段流格式。
#
#     -segment_list playlist.m3u8: -segment_list 选项指定了分段流的播放列表文件名。在这里,生成的播放列表文件名为 playlist.m3u8,它是一种常见的用于指定分段流的播放列表格式。
#
#     -segment_time 10: -segment_time 选项指定了每个分段的时长,这里设置为 10 秒,表示每个分段视频的时长为 10 秒。
#
#     output%03d.ts: 这是输出文件的命名模式。%03d 表示输出文件名中的数字部分使用三位数字,例如 output001.ts、output002.ts 等。.ts 表示输出文件的格式为 MPEG-2 Transport Stream 格式。
#
# 综合起来,这个命令的作用是将输入的视频文件分割成多个时长为 10 秒的分段视频,并生成一个名为 playlist.m3u8 的播放列表文件,用于指定分段视频的播放顺序。#
# for i in range(1, 100):
#     ts_file = f'output{i:03d}.ts'
#     encrypt_command += f' -in {ts_file} -out {ts_file}.enc -iv 00000000000000000000000000000000 -K {key.decode("utf-8")}'
#
# # 执行命令
# subprocess.run(encrypt_command, shell=True, check=True)
#
#
# 这段代码是在循环中对每个分段视频文件进行加密操作,并将加密后的文件保存在原始文件名后加上 .enc 后缀的新文件中。
#
# 让我们逐行分析:
#
#     for i in range(1, 100):: 这是一个循环语句,它会对 i 从 1 到 99 进行迭代。
#
#     ts_file = f'output{i:03d}.ts': 这一行使用了 f-string 格式化字符串的功能,将 i 格式化为三位数字,并拼接到字符串 'output' 后面,然后再加上 .ts 后缀,形成每个分段视频文件的文件名。例如,当 i 为 1 时,ts_file 的值为 'output001.ts'。
#
#     encrypt_command += f' -in {ts_file} -out {ts_file}.enc -iv 00000000000000000000000000000000 -K {key.decode("utf-8")}':
#     这一行构建了一个命令字符串,用于执行加密操作。-in {ts_file} 指定了输入文件为当前循环迭代中的分段视频文件,
#     -out {ts_file}.enc 指定了输出文件为输入文件名后加上 .enc 后缀的新文件,即加密后的视频文件。-iv 00000000000000000000000000000000 指定了初始化向量 (IV),
#     这里使用了全零的 IV。-K {key.decode("utf-8")} 指定了加密密钥,使用了之前生成的密钥,并将其解码为字符串形式。
#
#     subprocess.run(encrypt_command, shell=True, check=True): 这一行执行了加密命令,使用了 subprocess.run() 函数来执行命令字符串 encrypt_command。
#     shell=True 参数表示使用 shell 来执行命令,check=True 参数表示如果命令执行失败则抛出异常。
#
# 综合起来,这段代码的作用是对每个分段视频文件进行加密,并将加密后的文件保存在原始文件名后加上 .enc 后缀的新文件中。

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

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

相关文章

maven依赖管理:依赖仓库管理

1、Maven的依赖如何存放管理? Maven中存在依赖组件(常用的是jar包、war包、pom等,也可把Zip包等通过POM文件定义为依赖组件)的地方称为仓库(Repository)。 在Maven中,仓库有三种类型&#xff1…

CSS中grid网格布局(秒懂如何实现网格布局)-菜鸟教程

目录 一、概念 二、使用 1.网格元素 2.display属性 3.网格轨道 4.fr 单位 5.网格单元 6.网格区域 7.网格列与行 8.CSS 网格属性 三、网格容器 display: grid-template-columns 和 grid-template-rows: grid-gap、grid-row-gap 和 grid-column-…

如何使用SQL注入工具?

前言 今天来讲讲SQL注入工具,sqlmap。如何使用它来一步步爆库。 sqlmap官方地址如下。 sqlmap: automatic SQL injection and database takeover tool 前期准备,需要先安装好docker、docker-compose。 一个运行的后端服务,用于写一个存在…

计算机网络-TCP断开连接阶段错误应对机制

连接断开阶段 四次挥手机制:TCP连接的断开需要四次挥手,这是因为双方都需要独立地关闭数据传输。第二次和第三次挥手不能合并,因为在回复第二次挥手的时候,可能还有数据没有接收完成,所以需要先回复ACK报文&#xff0c…

【U8+】打开固定资产卡片,提示:运行时错误‘91’,未设置对象变量或with block变量。

【问题描述】 用友U8软件,固定资产模中打开某张卡片后, 提示:运行时错误‘91’,未设置对象变量或with block变量。 Ps:但不是所有卡片打开的时候都会提示,有的正常。 【解决方法】 跟踪数据库后&#xff…

SpringBoot入门(Hello World 项目)

SpringBoot关键结构 1.2.1 Core Container The Core Container consists of the Core, Beans, Context, and Expression Language modules. The Core and Beans modules provide the fundamental parts of the framework, including the IoC and Dependency Injection featur…

C语言易错知识点(3):字符数组的修改、sscanf、sprintf

字符数组是一个很细节的语法,涉及很多知识点,这篇文章我主要分享一下如何理解字符数组,以及对应的sscanf、sprintf有什么用 1.字符数组的初始化以及内容修改易错点 字符数组的初始化方式有两种,一种是直接用字符串进行初始化&am…

每日一题---OJ题: 相交链表

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题---相交链表,准备好了吗? Ready Go! ! ! emmm,看这道题好像不怎么难,我们一起画图分析分析 上图中,A链表有5个结点,分别为 a1,a2,c1,c2,c3 ; B链表有6个结点,分别为 b1,b2,b3,c1,c2,c3 ; A链表和B链表在c1结点相交 …

渗压计在测压管与测井中的安装方法

在地下水动态监测与工程安全评估中,渗压计扮演着至关重要的角色。它能够精准地测量地下水压力的变化,为工程师提供决策依据。本文将详细阐述在测压管或测井中如何正确安装渗压计,以确保其准确度和可靠性。 一、建立零读数并浸透透水石 在安装…

PandasAI的应用与实战解析(一):环境安装、运行demo

文章目录 1.源码包下载、明确依赖版本2.安装python依赖3.运行demo 本博客源码仓库地址:gitlab,本篇博客对应01分支python版本为3.10.x 什么是PandasAI?一句话总结的话,PandasAI就是一个结合了Pandas和AI的开源工具,更…

windwos安全加固

一、账号管理 按用户类型分配账号 目的:根据系统要求,设定不同账户和组,管理员、数据库 sa、审计用户、来宾用户等 实施方法: 打开本地用户和计算机管理器 ​ 1.打开运行,输入lusrmgr.msc 2.根据用户要求将账户加入…

秋招算法刷题7

20240410 1.接雨水 方法一,动态规划,时间复杂度O(n^2),空间复杂度O(n) public int trap(int[] height) { int nheight.length; if(n0){ return 0; } …

java:字符集和字符流

字符集 规定了字符和二进制之间对应关系的一张表 字节是计算机最基本的存储单位 字符则是通过字符组成和编码而成的文本 常见字符集 1,ASCII字符集 基础字符编码标准,包含128个字符,只包括英文字母,数字和一些常见的符号 一个字节表示一个字符 所有的字符集均兼容ASCII…

open-sora

Open-Sora,高效复现类Sora视频生成方案开源!魔搭社区最佳实践教程来啦!https://mp.weixin.qq.com/s/WMQIDgZs2MBPGtx18XSXgw Open-Sora开源方案讲解开源但“平替”的方案。https://mp.weixin.qq.com/s/nPYCzgBA7hIsPZ6PCyXxKQOpen-Sora/docs…

数据分析案例(一):地区收入的PCA主成分分析

练习1 地区收入的PCA主成分分析 0.变量说明 1.导包操作 核心思路:导入基础数据操作库包,PCA、k-means 库包,数据可视化库包 import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing i…

YOLOV5训练KITTI数据集实践

目录 一、YOLOV5下载安装二、KITTI数据集三、标签格式转换四、修改配置文件五、训练六、测试 一、YOLOV5下载安装 git clone https://github.com/ultralytics/yolov5.git conda create -n yolov5 python3.8 -y conda activate yolov5 cd yolov5 pip install -r requirements.t…

2024最火的情感短视频素材在哪下载?这里有几个素材网站可以下载

在这个看似无边无际的短视频海洋中,我就像那个手握罗盘、脚踏破旧木筏的勇敢航海家,时刻准备着发现新大陆。而我的罗盘,就是那些能够指引我找到珍稀素材的网站。让我带你领略一下我的航海日记吧。九才素材网: 九才素材网提供了丰…

青少年体能素质教育平台

一、项目背景与意义 随着社会的快速发展和人们生活水平的提高,青少年体能素质教育逐渐受到社会各界的广泛关注。体能素质作为青少年全面发展的重要组成部分,对于提升他们的健康水平、增强自信心、培养团队协作精神和创新能力具有重要意义。然而&#xf…

继承【C/C++复习版】

目录 一、什么是继承?怎么定义继承? 二、继承关系和访问限定符? 三、基类和派生类对象可以赋值转换吗? 四、什么是隐藏?隐藏vs重载? 五、派生类的默认成员函数? 1)派生类构造函…

关于转义符 \ 在php正则中的匹配问题

今天做题遇到一个很经典的问题&#xff0c;记录一下&#xff0c;先看一段代码 <?php $str&#xff0c;&#xff0c;"\\"; $pattern&#xff0c;&#xff0c;"/\\/"; if(preg_match($partern,$str,$arr)) { &#xff0c;&#xff0c;&#xff0c;&…