首页 > 解决方案 > 我正在使用 org.bytedeco.javacv.{FFmpegFrameGrabber, Java2DFrameConverter} 将 .avi 视频转换为图像中附加的 .jpeg 异常

问题描述

 val converter = new Java2DFrameConverter
`def extractAVI(rawDrivePath: String): List[String] = {
    var errorList: List[String] = List.empty
    FileUtils.listFiles(new File(rawDrivePath), new SuffixFileFilter(".avi"), TrueFileFilter.INSTANCE)
      .asScala.toList.foreach(aviFile => {
      var grabber: FFmpegFrameGrabber = null
      var aviStream: InputStream = null
      var isFailedExtraction: Boolean = false
      try {
        LOGGER.info(s"--------inside try----------${aviFile.getAbsolutePath} {}",aviFile.length())
        aviStream = new FileInputStream(aviFile.getAbsolutePath)
        LOGGER.info("--------create grabber----------{}",aviStream!= null)
        grabber = new FFmpegFrameGrabber(aviStream)
        LOGGER.info("--------created grabber extraction of drives----------{}",grabber)
        try {
          grabber.start()
        }
        catch{
          case z: Throwable =>LOGGER.error("Exceptions found in grabber start {}",z.getStackTrace)
        }
    LOGGER.info("--------start grabber of drives----------")
    var count: Int = 1
    for (frame <- Iterator.continually(grabber.grabImage()).takeWhile(_ != null)) {
      ImageIO.write(converter.convert(frame), "jpg", new File(aviFile.getParent, "capture-" + count + ".jpg"))
      count += 1
    }
    grabber.stop()
  } catch {
    case ex: Exception => {
      //LOGGER.info(s"Error while extracting images for ${aviFile.getAbsolutePath} {}", ex)
      errorList :+= s"${aviFile.getAbsolutePath.replace(rawDrivePath, "")} -> ${ex.getMessage}"
      isFailedExtraction = true
      LOGGER.info("last inside catch")
    }
  } finally {
    // Close the video file
    LOGGER.info("inside finally ")
    if (grabber != null)
      grabber.release()
    if (aviStream != null)
      aviStream.close()
    if (aviFile.exists() && !isFailedExtraction) {
      LOGGER.debug(s"Deleting ${aviFile.getAbsolutePath}")
      FileUtils.deleteQuietly(aviFile)
    }
  }
}

在此处输入图像描述

在这张图片中,当我要在本地启动grabber.start() 时出现错误,当声纳扫描仪测试用例运行抛出图像中附加的异常时,它工作得非常好。

错误:当我为抓取器加注星标时出现(代码中的grabber.start())

Java 运行时环境检测到一个致命错误:# # SIGSEGV (0xb) at pc=0x000000000000dc56, pid=447, tid=0x00007f45200a3b10 线程“Thread-8”中的异常 java.io.EOFException at java.io.ObjectInputStream$ BlockDataInputStream.peekByte(ObjectInputStream.java:2960) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1540) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:431) 在

标签: scalaffmpeg

解决方案


推荐阅读