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

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.xdnf.cn/news/18492.html

相关文章:

  • 鸿蒙中Snapshot分析
  • Vue3+ElementPlus倒计时示例
  • 应用服务器和数据库服务器的区别
  • 机器学习案例——预测矿物类型(数据处理部分)
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk
  • `sudo apt update` 总是失败
  • Linux问答题:调优系统性能
  • 李宏毅NLP-12-语音分类
  • 基于Labview的旋转机械AI智能诊断系统
  • 2015-2018年咸海流域1km归一化植被指数8天合成数据集
  • html-docx-js 导出word
  • Linux问答题:归档和传输文件
  • 探秘北斗卫星导航系统(BDS):架构、应用与未来蓝图,展现中国力量
  • 文件系统挂载详细分析(《图解Linux内核》虚拟文件系统篇笔记二)
  • UDP报文的数据结构
  • 可转换债券高频交易Level-2五档Tick级分钟历史数据分析
  • 20250823解决荣品RD-RK3588-MID核心板的底板的adb不通
  • 超越基础:Glide 高级优化与自定义实战
  • 12.Shell脚本修炼手册--函数的基础认知与实战演练(fock炸弹!!)
  • 第1.2节:早期AI发展(1950-1980)
  • Mybatis Plus - 代码生成器简单使用
  • Baumer高防护相机如何通过YoloV8深度学习模型实现社交距离的检测识别(python)
  • 【204页PPT】某著名企业信息化规划方案(附下载方式)
  • 【攻防世界】Web_php_include
  • GitLab CI:安全扫描双雄 SAST vs. Dependency Scanning 该如何抉择?
  • 阿德莱德多模态大模型导航能力挑战赛!NavBench:多模态大语言模型在具身导航中的能力探索
  • C++ csignal库详细使用介绍
  • 密码管理中Null 密码
  • 第九届86358贾家庄短片周在山西汾阳贾家庄举办
  • 齐次变换矩阵的逆变换:原理与SymPy实现