You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apache Tika提取AVI文件时长?求无FFmpeg替代方案

不依赖FFmpeg的媒体元数据提取方案(解决AVI时长提取问题)

Apache Tika能否提取AVI文件时长?

默认情况下,Tika的AutoDetectParser无法提取AVI文件的时长。原因是AVI容器没有统一嵌入XMP标记(如MP4/MOV那样),Tika的DefaultParser仅能识别文件类型,无法解析出需要计算的流时长信息。

虽然Tika提供了VideoParser扩展,但实际测试中对AVI的时长提取支持不稳定——因为很多AVI文件没有存储直接的时长字段,需要解析帧数据计算,这部分Tika的实现并不完善。

不依赖FFmpeg的替代方案

1. JCodec(纯Java实现)

JCodec是纯Java的多媒体处理库,无需任何原生依赖,支持AVI、MP4等多种格式,可直接解析AVI流计算时长。

示例代码:

import org.jcodec.containers.avi.AVIReader;
import org.jcodec.common.io.NIOUtils;
import org.jcodec.common.io.SeekableByteChannel;

import java.io.File;
import java.io.IOException;

public class JCodecDurationExtractor {
    public static int getAVIDuration(String filePath) throws IOException {
        try (SeekableByteChannel ch = NIOUtils.readableFileChannel(new File(filePath))) {
            AVIReader reader = new AVIReader(ch);
            double durationSec = reader.getDuration();
            return (int) Math.round(durationSec);
        }
    }

    public static void main(String[] args) throws IOException {
        String filePath = "path/to/your/video.avi";
        System.out.println("Duration: " + getAVIDuration(filePath) + " seconds");
    }
}

Maven依赖:

<dependency>
    <groupId>org.jcodec</groupId>
    <artifactId>jcodec</artifactId>
    <version>0.2.5</version>
</dependency>

2. MediaInfo(Java绑定)

MediaInfo是成熟的媒体元数据提取工具,Java绑定版本支持几乎所有主流格式,不依赖FFmpeg(需对应平台的原生库,但无需FFmpeg组件)。

示例代码:

import com.mediainfo.MediaInfo;

public class MediaInfoDurationExtractor {
    public static int getDuration(String filePath) {
        MediaInfo mediaInfo = new MediaInfo();
        mediaInfo.open(filePath);
        String durationStr = mediaInfo.get(MediaInfo.StreamKind.Video, 0, "Duration");
        mediaInfo.close();
        
        return durationStr != null ? Integer.parseInt(durationStr) / 1000 : -1;
    }

    public static void main(String[] args) {
        String filePath = "path/to/your/video.avi";
        System.out.println("Duration: " + getDuration(filePath) + " seconds");
    }
}

Maven依赖:

<dependency>
    <groupId>net.mediaarea.mediainfo</groupId>
    <artifactId>MediaInfo</artifactId>
    <version>23.03</version>
</dependency>

注意:需添加对应操作系统的原生库(如Windows的MediaInfo.dll、Linux的libmediainfo.so)到项目路径。

3. Java Media Framework (JMF)

JMF是Oracle官方多媒体框架,支持传统AVI格式的元数据提取,但版本较老,对新格式支持有限,适合仅处理旧AVI文件的场景。

总结

Tika对AVI时长提取的支持不足,更推荐使用JCodec(纯Java、无原生依赖)或MediaInfo(格式支持全面),两者均不依赖FFmpeg,满足安全需求。

内容的提问来源于stack exchange,提问作者smooky.secrets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:39:53