ffmpeg管道图像重做

加布里埃尔

我需要找到一种方法来将ffmpeg帧保存到redis变量中。

目前,我正在将ffmpeg的png图像传递到redis,但是它将所有图像连接在一起:

ffmpeg -re -i udp://127.0.0.1:5545 -c:v png -r 1-更新1-| redis-cli -x HSET sb4up

是否可以每秒用一个新帧更新redis变量?

马克·谢切尔

我一直在想这个。我不是专家,ffmpeg可能有些事情要简单得多,因此,如果有人使我意识到更好的方法,我可能会删除它。

目前,我的想法是,如果ffmpeg将JPEG或PNG写为输出,则需要一个能够解析级联流并搜索START-OF-IMAGE / END-OF-IMAGE或(JPEG SOI / EOI或PNG IHDR / IEND)标记,并了解块和节。因此,我认为强制ffmpeg写入固定长度的图像可能会更简单,然后您就可以N知道字节对应于一帧就可以读取字节,并且不需要一堆“胶水”代码来编写和维护-只需标准工具即可。

我没有您的UDP流,所以我只使用了一个.mov文件。然后,我强制RGB24编码和固定大小的调整后大小的640x480帧。然后,我将其拆分为640x480x3 RGB字节的块,并要求ImageMagick从原始视频创建PNG并将其重打包为PNG到Redis:

#!/bin/bash

# Set height and width of frame, and size in bytes
h=480
w=640
bytes=$((h*w*3))

ffmpeg -i video.mov -r 1 -s ${w}x${h} -update 1 -pix_fmt rgb24 -f rawvideo - 2> /dev/null | \
   gsplit -b $bytes --filter="magick -depth 8 -size ${w}x${h} rgb:- png:- | redis-cli -x SET sb4up"

然后,我使用OpenCV每0.5秒从Redis抓取一次图像并显示结果。

#!/usr/bin/env python3

import redis
import cv2
import numpy as np

host='localhost'
port=6379
        
r = redis.Redis(host,port)

while True:
   png=r.get('sb4up')
   frame = cv2.imdecode(np.frombuffer(png,np.uint8), cv2.IMREAD_COLOR)
   cv2.imshow("Viewer", frame)
   cv2.waitKey(500)

注意:我使用gsplitGNUsplit是因为我在Mac上。在Linux上,只需使用split

注意:显然,只要在代码的两个部分(即ingsplitImageMagick中)都对其进行更新,就可以使用不同大小的框架

注意:您不一定需要安装ImageMagick和PNG编码每个图像,因为Redis中只有一个最新的图像,因此空间不会成为问题,因为没有成千上万的帧,因此您可以省略ImageMagick并仅将原始RGB24数据写入Redis中而不使用ImageMagick然后从Redis获取原始数据,并使用np.reshape()它们将其转换为正确形状的图像。

我仍在思考,可能会想出更好的方法…… Perl可能适合在模式上分割二进制流……

另一个想法是让文件ffmpeg写入PNG一个有序号的文件,frame-%03d.png然后运行fswatch/inotify以获取各个帧并将其填充到Redis中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从视频中提取的ffmpeg管道图像

来自分类Dev

将图像系列从Java应用程序管道传输到ffmpeg子进程

来自分类Dev

在bash管道中的ffmpeg

来自分类Dev

gstreamer管道以显示图像

来自分类Dev

从gstreamer管道捕获图像

来自分类Dev

gstreamer管道以显示图像

来自分类Dev

从gstreamer管道捕获图像

来自分类Dev

如何通过管道输出ffmpeg?

来自分类Dev

如何识别ffmpeg管道结束?

来自分类Dev

ffmpeg:加载图像的功能

来自分类Dev

用ffmpeg旋转图像

来自分类Dev

ffmpeg比例输入图像

来自分类Dev

OpenCV:无法从管道读取图像

来自分类Dev

从管道中读取png图像

来自分类Dev

OpenCV:无法从管道读取图像

来自分类Dev

Scrapy 图像管道上的 IOError

来自分类Dev

Python ffmpeg子进程:管道损坏

来自分类Dev

管道Sox和FFMPEG一起

来自分类Dev

如何从 ffmpeg 到 ffplay 寻找 ffplay 或管道

来自分类Dev

在fabric js上实现撤消重做时,图像消失但在点击画布区域时出现

来自分类Dev

当ffmpeg到达命名管道的末尾时,如何阻止ffmpeg退出?

来自分类Dev

如何使用FFMPEG图像创建图像?

来自分类Dev

ffmpeg如何从视频输出图像

来自分类Dev

ffmpeg中的图像序列处理

来自分类Dev

ffmpeg实时流显示图像

来自分类Dev

ffmpeg以帧类型保存图像

来自分类Dev

ffmpeg:放大平方的图像

来自分类Dev

在 ffmpeg 中延迟图像转换

来自分类Dev

ffmpeg:连接图像和视频