在SpringBoot中使用FFmpegFrameGrabber捕获本地视频第一帧并保存

本文介绍了如何在Java后端使用FFmpegFrameGrabber从MP4文件中抓取第一帧,并将其保存为图片。通过UUID生成唯一文件名,存储图片路径到数据库,以便前端调用显示。作者提到前端实现相对复杂,因此选择在后端处理这个问题。
摘要由CSDN通过智能技术生成

目的是在上传MP4文件的时候就抓取到第一帧,保存在一个文件夹里,到时候前端调用就可以显示。毕设需要哈哈哈所以就做了。前端实现有点复杂,因为我还涉及了v-for的img去给js函数传参的问题。所以转用后端做一下。

特别感谢这位博主,提供了非常好的方法:StringBoot 通过FFmpegFrameGrabber获取视频首帧作为图片展示_揽月随风醉的博客-CSDN博客

具体把测试改了一下,放到了我的Controller里面。这边posterURL就是我准备放生成的图片的地方,videoURL就是存放本地视频的地址。

String posterUrl=UUID.randomUUID().toString()+".jpg";
boolean tempPath = GetVideoGainImg.getTempPath("我准备放第一帧图片的地方"+posterUrl, videoUrl);
System.out.println("获取首帧是否成功!"+tempPath);

数据库存的大概就是这样子的字符串:

 然后前端就可以显示了。(原谅我做的丑丑的前端)

Java萌新(已经大四了不算萌新?)第一次使用FFmpegFrameGrabber,谢谢大家。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何在python使用OpenCV接收视频流,并发送某一到mqtt,同时通过mqtt接收一保存在本地。我将为您提供一些思路和代码示例。 首先,您需要安装paho-mqtt库,它是一个Python实现的MQTT客户端,用于和MQTT服务器进行通信。您可以使用以下命令进行安装: ``` pip install paho-mqtt ``` 接下来,您需要使用OpenCV捕获视频流,并使用paho-mqtt将某一图像发送到MQTT服务器。以下是一个简单的示例: ```python import cv2 import paho.mqtt.client as mqtt # 定义MQTT服务器地址和端口号 MQTT_SERVER = "localhost" MQTT_PORT = 1883 # 连接MQTT服务器 client = mqtt.Client() client.connect(MQTT_SERVER, MQTT_PORT) # 打开视频流 cap = cv2.VideoCapture(0) while True: # 读取一图像 ret, frame = cap.read() # 将图像转为JPEG格式,减小大小 encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90] _, jpeg = cv2.imencode('.jpg', frame, encode_param) # 发送图像到MQTT服务器 client.publish("video/frame", jpeg.tobytes()) # 按下q键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源 cap.release() cv2.destroyAllWindows() ``` 在上面的代码,我们首先定义了MQTT服务器的地址和端口号,然后连接到MQTT服务器。接下来,我们打开视频流并不断读取一图像。将图像转换为JPEG格式,并使用`client.publish()`方法将其发送到MQTT服务器。最后,通过按下q键退出循环,释放资源。 接下来,我们来看如何通过MQTT接收一图像并保存在本地。以下是一个简单的示例: ```python import cv2 import paho.mqtt.client as mqtt import numpy as np # 定义MQTT服务器地址和端口号 MQTT_SERVER = "localhost" MQTT_PORT = 1883 # 连接MQTT服务器 client = mqtt.Client() client.connect(MQTT_SERVER, MQTT_PORT) # 订阅MQTT主题 client.subscribe("video/frame") # 定义回调函数,接收MQTT消息 def on_message(client, userdata, msg): # 将消息转为图像 nparr = np.frombuffer(msg.payload, np.uint8) frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR) # 保存图像 cv2.imwrite('frame.jpg', frame) # 设置回调函数 client.on_message = on_message # 开始循环 client.loop_forever() ``` 在上面的代码,我们首先定义了MQTT服务器的地址和端口号,然后连接到MQTT服务器。接下来,我们订阅MQTT主题,并定义了一个回调函数`on_message()`,用于接收MQTT消息并将其转换为图像。最后,我们设置回调函数,并开始循环以接收MQTT消息。 希望这些代码可以帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值