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

FFMPEG相关解密,打水印,合并,推流,

1:ffmepg进行打水印解密

前提ffmepg安装利用静态版就可以这个什么都有,不用再配置其他信息:(这个利用ffmpeg终端命令是没问题的,但是如果要是再C++中调用ffmpeg库那么还需要从新编译安装下)

各个版本

Index of /ffmpeg/old-releases

1.1 获取水印的列表

def get_json2txt(jsonpath):with open(jsonpath,'r',encoding='utf8')as fp:            datajson = json.load(fp)list_json = datajson["heart_beats"]watermark_texts =["none"]*20for i in range(len(list_json)):# text =[]train_id    =  "车号  "+list_json[i]['train_id']task_number =  "车次  "+list_json[i]['task_number']speed       =  "速度  "+str(list_json[i]['speed'])K_NUM = int(list_json[i]['mileage'])//1000LEF_NUM = int(list_json[i]['mileage'])%1000mileage     = "位置  "+f'K{K_NUM}+{LEF_NUM}'timetimestamp = int(list_json[i]['capturedAt'])dtime=dt.datetime.fromtimestamp(timetimestamp,tz=dt.timezone(dt.timedelta(hours=8)))formatted_time= "时间  "+ dtime.strftime("%Y-%m-%d %H-%M-%S")text= train_id +'\n' + task_number +'\n' + str(speed) +'\n' + mileage +'\n' +  formatted_timewatermark_texts[i]=text# print(text)return watermark_texts

1.2 将水印列表打印到视频上

def create_dynamic_watermark_stable(input_video, output_video, text_list,key):"""更稳定的动态水印实现方案使用时间表达式来模拟列表索引变化"""# 构建包含多个drawtext滤镜的命令filters = []for i, text in enumerate(text_list):# 每个文本显示1秒start_time = iend_time = i + 1filters.append(f"drawtext=text='{text}':fontcolor=white:fontsize=40:box=1:boxcolor=black@0.5:boxborderw=5:x=10:y=10:enable='between(t\\,{start_time}\\,{end_time})'")filter_str = ",".join(filters)cmd = ['/home/administrator/workspace/SJPTFF/ffmpeg-4.4.1-amd64-static/ffmpeg','-decryption_key',key,#这个是解密用'-i', input_video,'-vf', filter_str,'-c:a', 'copy',# '-c:v', 'copy','-y',output_video,]try:result = subprocess.run(cmd, capture_output=True, text=True)if result.returncode == 0:logger_ffmpeg.info(f"成功生成带动态水印的视频: {output_video}")else:logger_ffmpeg.error(f"处理视频时出错: {result.stderr}")except Exception as e:logger_ffmpeg.error(f"发生错误: {e}")

2 ffmpeg进行合并

 def concat_videos_subprocess(self,concatvideo,videoslist,flag=0):'''绝对路径,list内也包含绝对路径'''concat_videospath = os.path.dirname(concatvideo)concat_videos_path = os.path.join(os.path.dirname(concat_videospath),'videos_de')concat_list_txt = os.path.join(concat_videospath,'concat_list.txt')with open(concat_list_txt,"w") as f:# if flag:#     f.write(f"file '{concatvideo}' \n")for videos_path_index in range(len(videoslist)):videos_abspath = os.path.join(concat_videos_path,videoslist[videos_path_index][1])f.write(f"file '{videos_abspath}' \n")self.update_mile_time(videoslist,os.path.dirname(concat_videospath))output_path = concatvideo.rstrip('.mp4')+'temp.mp4'cmd = ['ffmpeg','-f','concat','-y','-safe','0','-i',concat_list_txt,'-c','copy',output_path]subprocess.run(cmd,check=True)os.system(f'cp {output_path}  {concatvideo}')

3 ffmpeg 进行推流

3.1 部署srs服务

SRS (Simple Realtime Server) 是一个用 C++ 编写的开源流媒体服务器,支持 RTMP、WebRTC、HLS、HTTP-FLV、SRT、GB28181 等多种协议。它设计简洁、性能高、易于部署,适合构建低延迟、高并发的实时音视频系统。

GitHub 项目地址:https://github.com/ossrs/srs

3.2 ffmpeg推流

http://www.dtcms.com/a/346735.html

相关文章:

  • 基于Python对酷狗音乐排行榜数据分析可视化【源码+LW+部署】
  • 安卓开发实战:从零构建一个天气应用
  • 【Android】使用FragmentManager动态添加片段
  • C# 项目“交互式展厅管理客户端“针对的是“.NETFramework,Version=v4.8”,但此计算机上没有安装它。
  • week4-[字符数组]字符统计
  • STAR-CCM+|K-epsilon湍流模型溯源
  • c语言学习_数组使用_扫雷1
  • 【小沐学GIS】基于Godot绘制三维数字地球Earth(Godot)
  • HTTP的状态码有哪些,并用例子说明一下
  • 人工智能之数学基础:离散随机变量和连续随机变量
  • react中多个页面,数据相互依赖reducer解决方案
  • 变频器实习DAY35
  • 深入理解Java多线程:状态、安全、同步与通信
  • Day12 数据统计-Excel报表
  • 基于llama.cpp的量化版reranker模型调用示例
  • 目标跟踪 YOLO11 单目标跟踪
  • Uipath查找元素 查找子元素 获取属性活动组合使用示例
  • 【数据结构】线性表——链表
  • 基于springboot购物商城系统源码
  • 灵动AI:工业级商品图AI生成工具
  • 【剖析高并发秒杀】从流量削峰到数据一致性的架构演进与实践
  • GaussDB 数据库架构师修炼(十八) SQL引擎-解析器
  • 慢查询该怎么优化
  • 【文献阅读】Lossless data compression by large models
  • 【卷积神经网络详解与实例】2——卷积计算详解
  • Hive中的join优化
  • 解决散点图绘制算法单一导致的数据异常问题
  • DeepSpeed v0.17.5发布:优化性能与扩展功能的全新升级
  • Axure:有个特别实用的功能
  • 寻找AI——高保真还原设计图生成App页面