【问题标题】:Raw extraction of frames from a movie从电影中原始提取帧
【发布时间】:2016-09-23 13:39:40
【问题描述】:

我想从灰度mj2 电影中提取图像。每个像素使用 16 位编码。由于这是一部技术电影,我需要在不进行处理的情况下提取每个像素的值,因为这些值线性映射到物理量(来自红外摄像机的热图)。我正在使用 Scala,但我没有找到任何适合直接提取的解决方案(在 Scala 或 Java 中,但我是初学者)。因此,我打算使用 ffmpeg 提取磁盘上的单个帧,然后将它们作为 Scala 中的 BufferedImage 加载并进行处理。

这是一个好方法吗?我应该使用哪种格式来避免数据中的任何转换?我希望每个提取的帧都尽可能“原始”吗?是否可以直接输出包含上述值的csv?

【问题讨论】:

  • 您能发布一个简短的示例吗?最好是具有已知值的(在某些像素处)。
  • 很遗憾,该数据受保密协议保护。
  • 能否生成相同格式的合成数据?
  • 不知道数据是怎么生成的,无法重新创建...只知道文件有效且没有损坏,因为我可以在mplayer中打开mj2文件。

标签: java image scala image-processing ffmpeg


【解决方案1】:

一般的答案,不看样本,是使用段复用器

ffmpeg -i in.mj2 -f segment -segment_time 0.01 -map 0 -segment_format data frame%d.raw

但由于输入的编解码器是JPEG-2000,你也许可以运行

ffmpeg -i in.mj2 -c copy frame%d.jp2 

【讨论】:

  • 我读到不同相机的原始格式不同,第一个命令的原始文件格式是什么?
  • 第二个命令生成我无法打开的 jp2 文件。但是,当我应用它时,我在这里收到了消息:pastebin.com/83bhdyyW。特别是,Stream #0:0: Video 在输入 (l.20) 和输出 (l.32) 中是不同的。是生成的jp2不可读的原因吗?
【解决方案2】:

最简单的选择可能是使用图像处理库,例如 OpenCV。它提供实用程序来打开各种文件并提取所需的信息。

【讨论】:

  • 这更像是一个评论而不是一个实际的答案。
  • 好吧,使用 ffmpeg 不是一个好方法,因为它并不简单,OpenCV 允许将图像解码为矩阵(一种非常“原始”格式),并且输出 csv 将是微不足道的。您对答案还有什么期望?
猜你喜欢
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2016-07-26
相关资源
最近更新 更多