scala - 我正在使用 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) 在
解决方案
推荐阅读
- c# - 在 Rider 中调试 unity android,找不到 Android Player 进程
- javascript - 带有大量噪点的平面阴影三防材质渲染
- mysql - 使用联合编写此查询的另一种方法是什么?
- vagrant - Windows主机上的VMware同步文件夹速度?
- node.js - 招摇“响应验证失败:值应为数组/对象但不是”
- sql - 将输入时间戳与间隔进行比较,得到操作员错误
- applescript - 如何在不使用终端的情况下双击打开这个 .sh 文件?
- serenity-js - 需要一个如何在 serenity-js 上单击按钮的示例
- python - RPi.GPIO.wait_for_edge(4, GPIO.FALLING) 检测按钮的按下和释放
- d3.js - d3/cola:类 UML 图表的布局配置