mp4 file structure中的持续时间是什么时候?
答案 0 :(得分:13)
这可能不是你问题的答案,但它是我的:http://mediainfo.sourceforge.net/
(它有一个库,它是开源的,所以你可以检查你需要的部分)
答案 1 :(得分:8)
参见https://github.com/sannies/mp4parser项目。它是一个Java库,显示了mp4文件的结构。
答案 2 :(得分:6)
据我所知 - “mp4”容器源自QuickTime原子结构。您可以阅读QuickTime文件格式的说明。
解析quicktime原子并不是什么大问题(看atomicParsley project)。我不确定MP4,但对于MOV文件 - “mvhd”(电影标题)原子和“tkhd”(轨道标题)原子中都有“持续时间”字段。此持续时间通常是多个帧乘以“时间刻度”属性。 时间尺度可以在相同的原子中找到。
答案 3 :(得分:6)
对于Red5 MP4阅读器,我使用了“mvhd”原子,因为它包含时间刻度和持续时间字段。从原子获取持续时间将根据使用的版本而有所不同,下面您可以看到一个示例:
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;
}
double fps = (videoSampleCount * timeScale) / (double) duration;
double videoTime = ((double) duration / (double) timeScale);
videoSampleCount变量来自“stsz”原子。
答案 4 :(得分:4)
MP4是一种“容器”格式,这基本上意味着它可以包含许多不同的音频或视频流。每个流都可以拥有自己的持续时间值......
要挖掘出你需要的东西,你需要更多的参考文件。我可能会建议您查看here和here ...但您可能不得不在此之外搜索您想要支持的不同类型的A / V流。
答案 5 :(得分:1)
使用MP4Parser http://code.google.com/p/mp4parser/作为前面提到的海报 - 他们甚至有一个提供持续时间的样本:
答案 6 :(得分:1)
基本上MP4结构是一棵树。 宏观领域是:
您可以尝试使用此免费软件MP4分析工具
http://www.thinmultimedia.co.kr/products/MP4Reader_download.html
答案 7 :(得分:0)
电影的持续时间在电影标题mvhd中。 以秒为单位的持续时间来自mvhd中的两个字段。
这些是@Tom Brito发布的规格中的380和382行。
所以给定时间刻度'ts'和持续时间'dur'
$scope.getTitle = function(direction) {
if (direction==="positive") {
return "Increase";
} else if (direction==="negative") {
return "Decrease";
}
};
答案 8 :(得分:-1)
可以使用Media Box Viewer。它是MP4和Quicktime解析器。当您打开Quicktime文件时,您可以看到原子结构。寻找视频描述原子。它的一个属性是持续时间。 Media Box Viewer可以从www.jdxsoftware.org下载。