2010-06-16 24 views
32

Trường hợp trong số mp4 file structure là khoảng thời gian của nó?Bất cứ ai quen thuộc với cấu trúc dữ liệu mp4?

+0

Tìm kiếm thời gian trong tài liệu. Đó là độ dài 8 byte (phiên bản 1) hoặc 4 byte trong tiêu đề. –

+0

@MichaelTodd Tôi đã làm điều đó và có rất nhiều thời lượng trong tệp. Tôi sẽ đọc toàn bộ tài liệu để hiểu rõ hơn, nếu không ai biết câu trả lời. –

+0

Liên quan (cái này cho Java): http://stackoverflow.com/questions/3015393/how-to-handle-mp4-files-with-java –

Trả lời

13

Điều này có thể không phải là câu trả lời cho vấn đề của bạn, nhưng nó là của tôi: http://mediainfo.sourceforge.net/

(Nó có một thư viện và đó là mã nguồn mở vì vậy bạn chỉ có thể kiểm tra phần (s) bạn cần)

+0

Tôi không còn tìm kiếm điều này nữa, nhưng đây có lẽ là câu trả lời hay nhất ở đây. –

4

MP4 là định dạng "vùng chứa", về cơ bản có nghĩa là định dạng này có thể chứa một số luồng âm thanh hoặc video khác nhau. Và mỗi luồng có thể có giá trị thời lượng riêng ...

Để tìm hiểu những gì bạn cần, bạn sẽ muốn có thêm một số tệp tham chiếu. Tôi có thể đề xuất tìm kiếm herehere ... nhưng có thể bạn sẽ phải tìm kiếm vượt quá mức đó cho các loại luồng A/V khác nhau mà bạn muốn hỗ trợ.

6

Theo như tôi biết - "mp4" container có nguồn gốc từ cấu trúc nguyên tử QuickTime. Bạn có thể đọc mô tả về Định dạng tệp QuickTime.

Phân tích cú pháp nguyên tử nhanh chóng không phải là vấn đề lớn (xem atomicParsley project). Tôi không chắc chắn cho MP4, nhưng đối với các tập tin MOV - có một "thời gian" lĩnh vực trong "mvhd" (phim tiêu đề) nguyên tử và cũng trong "tkhd" (theo dõi tiêu đề) nguyên tử. Thời lượng này thường là một số khung nhân với thuộc tính "thang đo thời gian". Quy mô thời gian có thể được tìm thấy trong cùng một nguyên tử.

6

Đối với trình đọc MP4 Red5, tôi đã sử dụng nguyên tử "mvhd" vì nó chứa cả các trường thời gian và tỷ lệ thời gian. Bắt thời gian từ nguyên tử sẽ khác nhau dựa trên phiên bản đang được sử dụng, dưới đây bạn có thể thấy một ví dụ:

 
public long create_full_atom(MP4DataStream bitstream) throws IOException { 
    long value = bitstream.readBytes(4); 
    version = (int)value >> 24; 
    flags = (int)value & 0xffffff; 
    readed += 4; 
    return readed; 
}

public long create_movie_header_atom(MP4DataStream bitstream) throws IOException { create_full_atom(bitstream); if (version == 1) { creationTime = createDate(bitstream.readBytes(8)); modificationTime = createDate(bitstream.readBytes(8)); timeScale = (int)bitstream.readBytes(4); duration = bitstream.readBytes(8); readed += 28; } else { creationTime = createDate(bitstream.readBytes(4)); modificationTime = createDate(bitstream.readBytes(4)); timeScale = (int)bitstream.readBytes(4); duration = bitstream.readBytes(4); readed += 16; } int qt_preferredRate = (int)bitstream.readBytes(4); int qt_preferredVolume = (int)bitstream.readBytes(2); bitstream.skipBytes(10); long qt_matrixA = bitstream.readBytes(4); long qt_matrixB = bitstream.readBytes(4); long qt_matrixU = bitstream.readBytes(4); long qt_matrixC = bitstream.readBytes(4); long qt_matrixD = bitstream.readBytes(4); long qt_matrixV = bitstream.readBytes(4); long qt_matrixX = bitstream.readBytes(4); long qt_matrixY = bitstream.readBytes(4); long qt_matrixW = bitstream.readBytes(4); long qt_previewTime = bitstream.readBytes(4); long qt_previewDuration = bitstream.readBytes(4); long qt_posterTime = bitstream.readBytes(4); long qt_selectionTime = bitstream.readBytes(4); long qt_selectionDuration = bitstream.readBytes(4); long qt_currentTime = bitstream.readBytes(4); long nextTrackID = bitstream.readBytes(4); readed += 80;
return readed;
}


Trên một mặt lưu ý tôi đã sử dụng các giá trị để tính toán thời gian chơi và fps như vậy:
 
    double fps = (videoSampleCount * timeScale)/(double) duration; 
    double videoTime = ((double) duration/(double) timeScale); 
Các videoSampleCount biến đến từ nguyên tử "stsz".

-1

Trình xem hộp phương tiện có thể được sử dụng. Đây là trình phân tích cú pháp MP4 và Quicktime. Khi bạn mở một tệp Quicktime, bạn có thể thấy cấu trúc nguyên tử. Tìm nguyên tử mô tả video. Một trong những thuộc tính của nó là thời lượng. Media Box Viewer có thể được tải xuống từ www.jdxsoftware.org.

1

Về cơ bản cấu trúc MP4 là một cái cây. khu vực vĩ ​​mô là:

  • ftyp - loại tập tin
  • moov - chứa dữ liệu meta (tên bài hát, autors, url, và infos khác)
  • miễn phí - vùng trống để tiêu đề riêng và dữ liệu
  • mdat - chứa khung âm thanh

Bạn có thể thử phần mềm miễn phí công cụ Analyzer MP4 này

http://www.thinmultimedia.co.kr/products/MP4Reader_download.html

0

Thời lượng của phim nằm trong tiêu đề phim mvhd. Thời lượng tính bằng giây bắt nguồn từ hai trường trong mvhd.

  • 4 lần byte thời gian quy mô
  • 4 byte

Đây là những dòng 380 và 382 trong spec đăng bởi @ Tom Brito.

Vì vậy, cho khoảng thời gian 'ts' và thời gian 'Dur' Duration in seconds = dur/ts

Các vấn đề liên quan