【发布时间】:2019-01-23 22:35:46
【问题描述】:
我希望能够在 Mac 上使用 Ruby 读取/流式传输视频,并能够访问每一帧的像素数据。
我尝试过的
-
https://github.com/streamio/streamio-ffmpeg
它擅长将视频分割成帧,但我不知道如何在不先将每个帧保存为图像(或者如果可能的话)的情况下访问像素数据。
require 'streamio-ffmpeg'
movie = FFMPEG::Movie.new("flakes.mp4")
movie.screenshot("screenshots/screenshot_%d.jpg", { custom: %w(-vf crop=60:60:10:10), vframes: (movie.duration).to_i, frame_rate: movie.frame_rate/24 }, { validate: false })`
-
https://github.com/wedesoft/hornetseye-ffmpeg
这似乎有很大的潜力,但我认为它不再被维护了,而且它并不打算在 MacOS 上使用,所以我在那里安装它时遇到了问题(找不到标题等,没有方式来配置它afaik)。
知道我可以为这个用例使用什么工具或方法吗?
【问题讨论】:
-
我会尝试让 ffmpeg 包装器将屏幕截图写入文件流(而不是使用文件名)。然后,您可以使用任何图像库将其直接读入 Ruby,并避免在磁盘上保存/加载。查看 streamio-ffmpeg 的源代码,它是一个非常薄的命令行包装器,所以应该很简单,
-
包装器所做的只是使将选项传递给命令行工具变得更加容易。所以我需要 ffmpeg 来支持这一点,我认为它不支持(或者我找不到它)。它确实提供了一种将视频流式传输到服务器的方法,所以我认为这可能是要走的路……我希望有另一个简单的库可以做到这一点。
-
至少你可以让ffmpeg写入fifo。它会认为它正在写入一个普通文件,但你可以将它直接读入 ruby。
-
您的意思是使用
mkfifo my_fifo,然后让ffmpeg 在这个命名管道中写入,然后从我的脚本中“读取”?我只是不知道如何让 ffmpeg 输出到这个管道中。ffmpeg -i mypic.jpg > my_fifo仅在 ffmpeg 将内容输出到标准输出时才有效,不是吗?如果它实际上是在内部写入文件 mypic.jpg,我不知道如何更改它。如果您知道具体的解决方案,请告诉我。 -
@Max stackoverflow.com/questions/32584220/… 原来,我只需要在谷歌上搜索正确的东西,你肯定让我走上了正确的道路。谢谢。 (请随时发布与此相关的任何答案,我会接受)。
标签: ruby macos image-processing ffmpeg