将视频分解为图像以进行处理

时间:2015-07-20 09:59:07

标签: haskell image-processing video-processing friday

我最近找到了friday,一个用于haskell的图像处理库,到目前为止似乎相当不错,但我希望能够加载视频并将其分解为图像。是否有可用于haskell的库?

2 个答案:

答案 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使fridayJuicyPixels发挥得很好 - 如果你真的有兴趣以干净的方式完成这项工作,我强烈建议你周五解决这个问题。

此外,由于星期五的维护人员一直忙到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)