【发布时间】:2021-12-08 01:58:37
【问题描述】:
我最近发现了friday,这是一个用于haskell 的图像处理库,到目前为止它看起来很不错,但我希望能够加载视频并将它们分解成图像。 haskell 有这样的库吗?
【问题讨论】:
标签: haskell image-processing video-processing
我最近发现了friday,这是一个用于haskell 的图像处理库,到目前为止它看起来很不错,但我希望能够加载视频并将它们分解成图像。 haskell 有这样的库吗?
【问题讨论】:
标签: haskell image-processing video-processing
我不知道这样的图书馆是否存在,但我怀疑没有。视频编解码器非常复杂。如果存在适用于 haskell 的东西,它很可能是 ffmpeg 包装器。无论如何,如果您只需要从某些视频中提取帧,我会直接使用ffmpeg 命令行工具。或者使用系统调用动态地执行此操作。
ffmpeg 命令对于这个任务非常简单:
ffmpeg -i "input.mov" -an -f image2 "output_%05d.jpg"
https://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/image_sequence
【讨论】:
请注意,有一些巧妙的ffmpeg bindings 可以从 JuicyPixel 图像类型的视频中流式传输图像。已经有一个 ticket 让 friday 和 JuicyPixels 玩得很好 - 如果你真的有兴趣以一种干净的方式完成这件事,我强烈建议你在星期五打一个补丁来解决这个问题。
此外,由于周五维护人员一直忙到 9 月,我很乐意将您的更改与我在 my own repository 上的更改合并以供一般使用。
编辑:这很有趣。一种获取惰性图像列表的方法是使用unsafeInterleaveIO:
module LazyDemo where
import Vision.Image.JuicyPixels
import Vision.Image (RGBA)
import Codec.FFmpeg
import System.IO.Unsafe
lazyStream :: FilePath -> IO [RGBA]
lazyStream fp = do
initFFmpeg
(rd,close) <- imageReader fp
go rd close
where
go rd close = do
mi <- rd
case mi of
Nothing -> close >> return []
Just i -> (toFridayRGBA i : ) <$> unsafeInterleaveIO (go rd close)
【讨论】: