Dan*_*yan 10 java video metadata
我目前正在寻找一个查看视频元数据的库,看看视频是1080p,720p还是最不能获得基本元数据(分辨率,比特率等),这样我就可以进行计算来检查自己.
我希望图书馆的大小,跨平台,它可以支持许多主要格式.像https://github.com/drewnoakes/metadata-extractor,当然还有视频.
我试着四处寻找,一无所获,这样的图书库存在吗?
我还没有尝试过,但似乎Java MP4 Parser库正是我一直在寻找的。它能够跨平台读取和编辑元数据,并且文件大小似乎很轻。
github 文档摘录:
Java MP4 解析器
用于读取、写入和创建 MP4 容器的 Java API。操作容器与编码和解码视频和音频不同。使用图书馆
该库发布到 Maven 存储库。每个版本都会推送到发布在发布页面上的临时存储库。根据请求,可以将特定版本推送到 Maven 中心。
Run Code Online (Sandbox Code Playgroud)<dependency> <groupId>com.googlecode.mp4parser</groupId> <artifactId>isoparser</artifactId> <version>1.1.7</version> </dependency>对于不使用依赖项管理工具的项目,每个版本的工件(jar、javadoc-jar、source-jar)都附加到版本页面。请注意,该项目需要aspectj-rt.jar库。
你能做什么?
MP4 解析器的典型任务是:
- 将音频/视频复用为 MP4 文件
- 附加使用相同编码设置的录音
- 添加/更改元数据
- 通过省略帧来缩短录音 我的示例将全部使用 H264 和 AAC,因为这两种编解码器对于 MP4 文件来说是最典型的。AC-3 也并不罕见,因为该编解码器在 DVD 中广为人知。还有带有 H263/MPEG-2 视频轨道的 MP4 文件,但它们不再像大多数 Android 手机那样广泛使用。你也可以
复用音频/视频
API 和流程非常简单:
您将每个原始格式文件包装到适当的 Track 对象中。
H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl("video.h264")); AACTrackImpl aacTrack = new AACTrackImpl(new FileDataSourceImpl("audio.aac"));
然后将这些 Track 对象添加到 Movie 对象中
Run Code Online (Sandbox Code Playgroud)Movie movie = new Movie(); movie.addTrack(h264Track); movie.addTrack(aacTrack);Movie 对象被送入 MP4Builder 以创建容器。
Run Code Online (Sandbox Code Playgroud)Container mp4file = new DefaultMp4Builder().build(movie);将容器放入适当的水槽中。
FileChannel fc = new FileOutputStream(new File("output.mp4")).getChannel(); mp4file.writeContainer(fc); fc.close(); 在某些情况下,帧速率是在带外发出信号或提前已知的,因此 H264 并不真正包含它。在这种情况下,您必须将其提供给构造函数。
有以下格式的 Track 实现:
- H264
- 亚克力
- 交流3
- EC3
另外两个字幕轨道不直接包装原始格式,但它们在概念上相似。
典型问题
音频和视频不同步。每当时间可能出现问题时,请确保开始
音频先于视频开始
在 AAC 中,始终有采样率/1024 样本/秒,因此每个样本的持续时间为 1000 * 1024 / 采样率毫秒。
- 48KHz => ~21.3ms
- 44.1KHz => ~23.2ms
通过从一开始就省略样本,您可以轻松缩短音轨。根据需要删除多个。您将无法将音频和视频与此完全匹配,但人类的感知对早期音频比对晚期音频更敏感。
请记住:如果某人距离仅 10 米,则音频和视频之间的延迟 >30 毫秒。大脑已经习惯了!
AACTrackImpl aacTrackOriginal = new AACTrackImpl(new FileDataSourceImpl("audio.aac")); // 删除第一个样本并将 AAC 轨道缩短约 22 毫秒 CroppedTrack aacTrackShort = new CroppedTrack(aacTrackOriginal, 1, aacTrack.getSamples().size());
使用相同的编码设置附加录音
需要强调的是,您不能附加任何两个轨道:
- 不同的分辨率
- 不同的帧速率
你不能做什么?
从电影创建 JPEG。不 - 这不是解码器。MP4 解析器不知道如何做到这一点。从 JPEG 创建电影