我最近找到了friday,一个用于haskell的图像处理库,到目前为止似乎相当不错,但我希望能够加载视频并将其分解为图像。是否有可用于haskell的库?
答案 0 :(得分:7)
我不知道这样的图书馆是否存在,但我怀疑不是。视频编解码器非常复杂。如果存在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
答案 1 :(得分:4)
请注意,有一些光滑的ticket可以从JuicyPixel图像类型中的视频中流式传输图像。已经my own repository使friday
和JuicyPixels
发挥得很好 - 如果你真的有兴趣以干净的方式完成这项工作,我强烈建议你周五解决这个问题。
此外,由于星期五的维护人员一直忙到9月,我很乐意将您的更改与bootply的我的更改合并为一般用途。
编辑:这很有趣。获取惰性图像列表的方法是使用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)