如何使用Tika Parser获取FLAC音频文件的时长元数据?
获取FLAC音频时长元数据(Apache Tika 1.24)
结论
你在调试中看到的xmpDM:duration元数据键,就是对应FLAC文件详情里的音频时长信息。
提取时长的方法
直接通过Metadata对象的get方法获取该键的值即可,该值通常是以秒为单位的浮点数,可根据需求转换为时分秒格式:
String durationStr = metadata.get("xmpDM:duration"); if (durationStr != null) { double durationSeconds = Double.parseDouble(durationStr); long minutes = (long) (durationSeconds / 60); double seconds = durationSeconds % 60; System.out.printf("音频时长:%d分%.2f秒%n", minutes, seconds); }
优化后的完整测试代码
你的原始代码未处理异常和资源关闭,建议使用try-with-resources自动管理输入流,避免资源泄漏:
import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; import org.apache.tika.sax.BodyContentHandler; import org.xml.sax.ContentHandler; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; public class FlacDurationTest { public void getFlacDuration(String path) { try (InputStream input = new FileInputStream(new File(path))) { Parser parser = new AutoDetectParser(); ContentHandler handler = new BodyContentHandler(); Metadata metadata = new Metadata(); ParseContext context = new ParseContext(); parser.parse(input, handler, metadata, context); // 提取并打印时长 String durationStr = metadata.get("xmpDM:duration"); if (durationStr != null) { double durationSeconds = Double.parseDouble(durationStr); long minutes = (long) (durationSeconds / 60); double seconds = durationSeconds % 60; System.out.printf("FLAC音频时长:%d分%.2f秒%n", minutes, seconds); } else { System.out.println("未提取到时长元数据"); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { new FlacDurationTest().getFlacDuration("path/to/your/flac/file.flac"); } }
补充说明
AutoDetectParser会自动识别FLAC文件类型,调用对应解析器提取元数据,xmpDM:duration是XMP规范定义的时长字段,与文件详情显示的长度完全匹配。- 若需要其他音频元数据,比如采样率、比特率,可通过
metadata.get("xmpDM:audioSampleRate")、metadata.get("xmpDM:bitrate")等键获取。
内容的提问来源于stack exchange,提问作者xxestter
相关产品推荐
相关产品推荐

