首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 讀取 M4A 音訊檔案頭部資訊

     編輯:程式設計綜合問答

需求背景

M4A 是基於 MP4 容器格式的音訊檔案,其頭部資訊(如編碼格式、採樣率、聲道數、時長等)儲存在 MP4 的 box/atom 結構中。Java 標準庫無直接支援解析 MP4 容器,需借助第三方庫。

推薦解決方案:mp4parser 庫

專案地址:https://github.com/sannies/mp4parser

此庫專為解析、建立、修改 MP4 容器設計,支援 M4A、MP4、3GP 等格式,純 Java 實現,無原生相依性。

Maven 依賴

<dependency>
    <groupId>com.googlecode.mp4parser</groupId>
    <artifactId>isoparser</artifactId>
    <version>1.1.22</version> <!-- 請檢查最新版本 -->
</dependency>

讀取 M4A 基本資訊範例

import com.googlecode.mp4parser.IsoFile;
import com.googlecode.mp4parser.boxes.mp4.sampleentry.AudioSampleEntry;
import com.googlecode.mp4parser.boxes.iso14496.part12.TrackBox;
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;

public class M4AInfoReader {
    public static void main(String[] args) throws Exception {
        File file = new File("test.m4a");
        try (FileChannel fc = new RandomAccessFile(file, "r").getChannel()) {
            IsoFile isoFile = new IsoFile(fc);
            
            // 遍歷所有 Track
            for (TrackBox track : isoFile.getMovieBox().getBoxes(TrackBox.class)) {
                AudioSampleEntry ase = track.getMediaBox()
                        .getMediaInformationBox()
                        .getSampleTableBox()
                        .getSampleDescriptionBox()
                        .getBoxes(AudioSampleEntry.class).get(0);
                
                System.out.println("編碼格式: " + ase.getType()); // mp4a
                System.out.println("採樣率: " + ase.getSampleRate());
                System.out.println("聲道數: " + ase.getChannelCount());
                System.out.println("位元深度: " + ase.getSampleSize());
            }
            
            // 時長計算(以 movie timescale 為單位)
            long duration = isoFile.getMovieBox().getMovieHeaderBox().getDuration();
            long timescale = isoFile.getMovieBox().getMovieHeaderBox().getTimescale();
            System.out.println("時長(秒): " + (duration / (double)timescale));
        }
    }
}

替代方案

  • Jave (FFmpeg wrapper):透過呼叫 FFmpeg 解析,功能強大但需原生二進位檔。
  • Apache Tika:通用內容提取庫,支援 M4A 元資料提取,但細節較少。
  • 自行解析:參考 ISO/IEC 14496-12 標準手寫解析器,僅建議極簡需求時使用。

總結

使用 mp4parser 是純 Java 環境下讀取 M4A 頭部資訊最輕量、標準的方案,程式碼簡潔且無外部相依。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved