如何用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
相关产品推荐
相关产品推荐

