当前位置: 首页 > 知识库问答 >
问题:

在计算目录中MP4文件的总持续时间时,使用SLF4J发出问题

华瀚漠
2023-03-14

我的主要目标是获得所有的持续时间。mp4目录中的文件。所以,我在谷歌上搜索了一下,找到了这个qeustion,其中一个答案引用了这个完整的代码。

当我在代码中选取必要的部分时,它在以下行中显示错误:

import com.xuggle.xuggler.IContainer;

之后,我从这里下载了我从这里得到的Xggler。然后我得到了以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at com.xuggle.ferry.JNILibrary.<clinit>(JNILibrary.java:42)
    at com.xuggle.ferry.FerryJNI.<clinit>(FerryJNI.java:14)
    at com.xuggle.ferry.Ferry.<clinit>(Ferry.java:25)
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19)
    at com.xuggle.xuggler.IContainer.<clinit>(IContainer.java:1622)
    at videotimecalcualtioncoursera.MainFrame.calculateTime(MainFrame.java:116)
    at videotimecalcualtioncoursera.MainFrame.jButtonCalculateActionPerformed(MainFrame.java:284)
    at videotimecalcualtioncoursera.MainFrame.access$000(MainFrame.java:33)
    at videotimecalcualtioncoursera.MainFrame$4.actionPerformed(MainFrame.java:204)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 45 more

为了寻求上述例外的解决方案,我找到了这个问题,并尝试了所有三个解决方案,但没有成功。得到了以下例外:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006ee76520, pid=10112, tid=3292
#
# JRE version: Java(TM) SE Runtime Environment (8.0_25-b18) (build 1.8.0_25-b18)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.25-b02 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [xuggle6026878147022032067.dll+0x736520]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# H:\Dropbox\JavaProjects\VideoTimeCalcualtionCoursera\hs_err_pid10112.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Java Result: 1

为了解决这个问题,我得到了这个问题,而被接受的答案除了删除错误流中的前三行之外什么也做不了。

我已尝试添加以下。jar我的项目中的文件:

  1. xuggle-xuggler-5.4。罐子
  2. slf4j-api-1.6。4.jar/slf4j-api-1.7。12.罐子
  3. slf4j-simple-1.7。6.jar/slf4j-simple-1.7。12.罐子
  4. log4j-1.2。16.罐子
  5. logback-classic-1.0。0.jar
  6. logback-core-1.0。6.罐子
  7. slf4j-jdk14-1.7。12.罐子
  8. slf4j-log4j12-1.7。12.jar

您可以在这里看到错误文件,我无法添加它,因为添加它将超过字符限制。

如何解决这个问题?

我已经遍历了以下问题:

  1. 使用slf4j[保留]的回写功能
  2. Slf4j和类路径错误
  3. 鉴于我一直在使用SLF4J和java。util。日志记录,什么是最佳解决方案
  4. 如何使用Jboss LogManager和SLF4J获取已配置记录器的列表
  5. 如何使用SLF4J或Logback将事件日志写入xml文件
  6. 在WebSphere上使用slf4j进行OpenJPA日志记录
  7. 使用Slf4j和Log4j的Tomcat日志记录

共有3个答案

吉栋
2023-03-14

我不能解决这个问题,但我可以通过其他方式实现我的目标。

我使用了IBM的工具包。

>

  • 从这里下载了IBM的API。
  • 在我的代码中添加了以下代码片段:

    public long getDuration(File file) throws IOException {
        PlayerControl playerControl = PlayerFactory.createLightweightMPEG4Player();
        playerControl.open(file.getAbsolutePath());
        return playerControl.getDuration();
    }
    

    因为我的目标只是获得持续时间,这不是有效的方法

    在我的PC(core-i5,2.5GHz,6GB RAM,Win10)中,处理60个需要42657ms。mp4文件,输出时间约为6小时41分钟。

    如果你愿意,你可以在我的存储库中查看。

  • 阴焱
    2023-03-14

    我会尝试一个接一个地添加依赖项(同时注释掉依赖代码)。我的第一印象是,其中一个库在其类路径上为slf4j提供了不兼容的版本/后端。在你发现这一点之前,不可能知道是哪一个。一旦这样做了,您就可以让gradle/maven从类路径中排除一个冲突的东西。

    步弘和
    2023-03-14

    您通常需要三个功能部件:

    1. 程序使用的API(slf4j API)
    2. 桥接代码以使记录器实现适应SLF4J API(例如SLF4J-log4j12)。此代码必须与您使用的记录器匹配
    3. 记录器实现(例如log4j)

    有些JAR包含多个部分,例如logback包含2和3,因为它本机实现了slf4j,或者如果使用java util日志,则不需要显式添加第3部分(它在java运行时中)

    您还必须使用slf4j组件的匹配版本,例如不要混合使用slf4j-api-1.6。4.4带有slf4j-log4j12-1.7的jar。12.5罐。

    有关详细信息,请参阅slf4j文档。

     类似资料:
    • 问题内容: 我有一个表,其中有两列开始时间和结束时间。我能够计算每一行的持续时间,但我也想获得总持续时间。这该怎么做。 谢谢 问题答案: 您的列的数据类型为TIMESTAMP,如下所示: 从一个时间戳减去另一个时间戳会导致一个INTERVAL数据类型: 并且不能对INTERVAL数据类型求和。这是一个令人讨厌的限制: 为了规避此限制,您可以使用秒数进行转换和计算,如下所示: 然后它们是可以累加的普

    • 对于我的项目,我必须读取在CSV文件中提供给我们的数据并以某种格式将其写出。我几乎完成了,但我遇到的问题是我的程序没有完全读取给定的时间。从这里开始,我的程序只是读取所有给定的时间。 我试图将<code>字符串时间。 这应该会回来 [芝麻街|埃尔莫之最1240:28:11] 但它返回 [Elmo的最佳|芝麻街124;2:29,1:30,2:09,1:46,1:55,2:02,1:42,2:40,1

    • 我想计算Java中两小时(HH:mm:ss)之间的时间差(持续时间)。在这里,我读了几个关于这个主题的主题,但我的问题有点不同。 我也不能使用。 示例: ode: 结果:

    • 我正在尝试将流转换为破折号。问题是我收到了很多错误,如下所示(虽然它似乎将其分割为多个文件,但我在播放器上也收到了错误)。问题是我为什么会收到这些错误以及如何修复它?如果我简单地将其“复制”为单个mp4文件,它就不会出错。 输出 复制到单个MP4工作正常ffmpeg-i“a.mkv”-y-映射0:1-c:0复制-f MP4-破折号1“out/out.MP4”-日志级别错误 探针 沙卡调试

    • 问题内容: 我有一个示例表(table_name:track_task),如下所示: 当任务阶段由于应用程序代码中的某些操作而进行时,以上数据将自动填充。阶段从1到4。但是,由于某种逻辑,任务可能会跳过阶段3。但是所有任务都将在阶段4结束。可能的任务路径如下所示: 我需要查询和检索一个报告,该报告显示任务在给定时间在每个阶段需要多长时间(以天为单位)。到目前为止,我已经提出了以下查询: 得出如下结

    • 我对Java非常陌生,在仔细阅读文档之后,我发现自己陷入了困境。 我有一个使用JavaFXMediaPlayer播放wav文件的小程序。我的播放器对象有一个currentTimeProperty,我希望在播放期间以分钟:秒为单位显示该属性的输出。 所以我在一个函数的末尾有这样一个函数,它接收我的wav文件并初始化播放器: 然后我有: 这很有效。在wav播放过程中,my以毫秒为单位随当前时间更新。问