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?
Trả lời
Đ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)
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. –
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 here và here ... 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ợ.
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ử.
Đố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".
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.
Xem dự án https://github.com/sannies/mp4parser. Nó là một thư viện Java cho thấy cấu trúc của các tập tin mp4.
Sử dụng MP4Parser http://code.google.com/p/mp4parser/ như poster trước nói - họ thậm chí có một mẫu mà cung cấp thời gian:
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
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
- 1. Bất cứ ai sử dụng "dự án cơ sở dữ liệu" trong Visual Studio?
- 2. Bất cứ ai biết gì về OLAP Internals?
- 3. Cơ sở dữ liệu mnesia phù hợp với erlang. Thực hành tốt nhất bất cứ ai?
- 4. Cấu trúc dữ liệu C#
- 5. Bất cứ ai sử dụng CouchDB?
- 6. Bất cứ ai sử dụng SvnMapper?
- 7. ngày Validate cho bất cứ ai trên 18 với jQuery
- 8. Thư viện cấu trúc dữ liệu C
- 9. Cấu trúc dữ liệu Java Tham chiếu
- 10. Cấu trúc và cấu trúc dữ liệu khác nhau
- 11. Bất cứ ai sử dụng HyperDex trong sản xuất?
- 12. bất cứ ai có thể giải thích sự khác biệt
- 13. là bất cứ ai làm bất cứ điều gì về 2038 time_t lỗi?
- 14. Tạo cấu trúc dữ liệu như cấu trúc dữ liệu trong Java
- 15. C: Cấu trúc dữ liệu căn chỉnh
- 16. Cấu trúc dữ liệu chức năng trong C++
- 17. Bất cứ ai sử dụng Django trong "Doanh nghiệp"
- 18. Hiển thị OpenCV cấu trúc dữ liệu iplimage với wxPython
- 19. Bất cứ ai tìm thấy việc sử dụng "var" khác với LINQ?
- 20. Mẫu cấu trúc dữ liệu RESTful
- 21. Cọ vẽ cấu trúc dữ liệu (Java)
- 22. Cấu trúc dữ liệu tra cứu IPv6
- 23. Thuật toán và cấu trúc dữ liệu
- 24. java.util.Stack cấu trúc dữ liệu thích hợp?
- 25. Loại dữ liệu cấu trúc trong Mathematica?
- 26. Tăng - unordered_set hướng dẫn/ví dụ/BẤT CỨ AI?
- 27. Cấu trúc dữ liệu Trie - Java
- 28. Cấu trúc dữ liệu cây Postgresql
- 29. Java câu hỏi cấu trúc dữ liệu
- 30. Cấu trúc dữ liệu trong Python
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 đề. –
@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. –
Liên quan (cái này cho Java): http://stackoverflow.com/questions/3015393/how-to-handle-mp4-files-with-java –