【问题标题】:Break video into images for processing将视频分解为图像以进行处理
【发布时间】:2021-12-08 01:58:37
【问题描述】:

我最近发现了friday,这是一个用于haskell 的图像处理库,到目前为止它看起来很不错,但我希望能够加载视频并将它们分解成图像。 haskell 有这样的库吗?

【问题讨论】:

    标签: haskell image-processing video-processing


    【解决方案1】:

    我不知道这样的图书馆是否存在,但我怀疑没有。视频编解码器非常复杂。如果存在适用于 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

    【讨论】:

      【解决方案2】:

      请注意,有一些巧妙的ffmpeg bindings 可以从 JuicyPixel 图像类型的视频中流式传输图像。已经有一个 ticketfridayJuicyPixels 玩得很好 - 如果你真的有兴趣以一种干净的方式完成这件事,我强烈建议你在星期五打一个补丁来解决这个问题。

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

      【讨论】:

      • 很好,谢谢。我去看看
      • @fakedrake 我制作了一个 juicypixels 到 friday 的转换库 (github.com/TomMD/friday-juicypixels),它与 ​​ffmpeg-light 配合得很好。谢谢你的鼓励。
      • 哇,你太棒了!那么,您将如何在 haskell 中使用 ffmpeg 从视频中制作一个懒惰的星期五图像列表?
      • @fakedrake 看到我的编辑,它只是 unsafeInterleaveIO 的一个应用程序
      • 这可能是 stackoverflow 上迄今为止教会我最多的答案。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 2016-07-23
      • 1970-01-01
      相关资源
      最近更新 更多