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,一经查实,立即删除!

相关文章

TS中interface和type的区别

前言 在面试中如果问TS的话,经常会问的一个问题就是interface和type有什么区别,这里做个记录 interface和type的区别 Interface 支持声明合并:如果你有两个相同名称的接口,TypeScript会合并它们 interface User {name: string…

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。 一个运行的后端服务,用于写一个存在…

Composer安装与配置详解

目录 第一章:Composer简介 1.1 什么是Composer? 1.2 Composer与传统的依赖管理工具的区别 1.3 Composer的发展历程 1.4 本章小结 第二章:Composer安装 2.1 全局安装与项目内安装 2.1.1 全局安装 安装步骤 2.1.2 项目内安装 安装步骤 2.2 不同操作系统下的安装方…

计算机网络-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结点相交 …

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

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

Yarn vs npm的大同小异Yarn是什么?

Yarn vs npm的大同小异&Yarn是什么? 一、Yarn、npm是什么?二、Yarn vs npm:特性差异总结 一、Yarn、npm是什么? npm是Node.js的包管理器,是由Chris Korda维护。 npm,它全称为Node Package Manager,是…

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; } …

【Deep Learning】Variational Autoencoder ELBO:优美的数学推导

Variational Autoencoder In this note, we talk about the generation model, where x x x represents the given dataset, z z z represents the latent variable, θ , ϕ \theta,\phi θ,ϕ denote the parameters of models. Latent Variable Model Generate x x x…

爬楼梯问题算法

小乐爬楼梯的问题是一个经典的动态规划问题,也被称为斐波那契数列问题。因为小乐每次可以选择爬1级或2级台阶,所以到达第n级台阶的方法数等于到达第n-1级台阶的方法数加上到达第n-2级台阶的方法数。 具体来说: 如果小乐到达第n-1级台阶&…

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…