【OpenCV】【JavaCV】【Xuggler】【Java】获取视频的编解码器

2024-05-19 02:08

本文主要是介绍【OpenCV】【JavaCV】【Xuggler】【Java】获取视频的编解码器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputStream);grabber.start();System.out.println(JSON.toJSONString(grabber));System.out.println(grabber.getVideoMetadata().get("encoder"));

AVC Coding  即为 H.264

{"aspectRatio":1,"audioBitrate":317375,"audioChannels":2,"audioCodec":86018,"audioFrameRate":46.875,"audioMetadata":{"creation_time":"2021-07-27T03:36:46.000000Z","handler_name":"#Mainconcept MP4 Sound Media Handler","language":"eng"},"audioOptions":{},"audioStream":1,"bitsPerPixel":0,"closeInputStream":true,"deinterlace":false,"delayedTime":0,"format":"mov,mp4,m4a,3gp,3g2,mj2","formatContext":{"null":false},"frameNumber":0,"frameRate":25,"gamma":2.2,"imageHeight":1920,"imageMode":"COLOR","imageScalingFlags":0,"imageWidth":1080,"lengthInAudioFrames":708,"lengthInFrames":378,"lengthInTime":15125333,"lengthInVideoFrames":378,"maxDelay":-1,"metadata":{"creation_time":"2021-07-27T03:36:46.000000Z","major_brand":"mp42","minor_version":"0","compatible_brands":"mp42mp41"},"numBuffers":4,"options":{},"pixelFormat":3,"sampleFormat":1,"sampleMode":"SHORT","sampleRate":48000,"sensorPattern":-1,"timeout":10000,"timestamp":0,"triggerMode":false,"videoBitrate":10681406,"videoCodec":27,"videoFrameRate":25,"videoMetadata":{"creation_time":"2021-07-27T03:36:46.000000Z","handler_name":"\u001FMainconcept Video Media Handler","language":"eng","encoder":"AVC Coding"},"videoOptions":{},"videoStream":0
}

Xuggler

手动安装到本地Maven仓库

mvn install:install-file -Dfile=F:\xuggle-xuggler-5.4.jar -DgroupId=xuggle  -DartifactId=xuggle-xuggler  -Dversion=5.4 -Dpackaging=jar

        <!-- https://mvnrepository.com/artifact/xuggle/xuggle-xuggler --><dependency><groupId>xuggle</groupId><artifactId>xuggle-xuggler</artifactId><version>5.4</version></dependency>
public static void main(String[] args) {long startTime =System.currentTimeMillis();String filename = "F:\\share\\XXX.mp4";// first we create a Xuggler container objectIContainer container = IContainer.make();// we attempt to open up the containerint result = container.open(filename, IContainer.Type.READ, null);// check if the operation was successfulif (result < 0) {throw new RuntimeException("Failed to open media file");}// query how many streams the call to open foundint numStreams = container.getNumStreams();// query for the total durationlong duration = container.getDuration();// query for the file sizelong fileSize = container.getFileSize();// query for the bit ratelong bitRate = container.getBitRate();System.out.println("Number of streams: " + numStreams);System.out.println("Duration (ms): " + duration);System.out.println("File Size (bytes): " + fileSize);System.out.println("Bit Rate: " + bitRate);// iterate through the streams to print their meta datafor (int i = 0; i < numStreams; i++) {// find the stream objectIStream stream = container.getStream(i);// get the pre-configured decoder that can decode this stream;IStreamCoder coder = stream.getStreamCoder();System.out.println("*** Start of Stream Info ***");System.out.printf("stream %d: ", i);System.out.printf("type: %s; ", coder.getCodecType());System.out.printf("codec: %s; ", coder.getCodecID());System.out.printf("duration: %s; ", stream.getDuration());System.out.printf("start time: %s; ", container.getStartTime());System.out.printf("timebase: %d/%d; ",stream.getTimeBase().getNumerator(),stream.getTimeBase().getDenominator());System.out.printf("coder tb: %d/%d; ",coder.getTimeBase().getNumerator(),coder.getTimeBase().getDenominator());System.out.println();if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO) {System.out.printf("sample rate: %d; ", coder.getSampleRate());System.out.printf("channels: %d; ", coder.getChannels());System.out.printf("format: %s", coder.getSampleFormat());} else if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) {System.out.printf("width: %d; ", coder.getWidth());System.out.printf("height: %d; ", coder.getHeight());System.out.printf("format: %s; ", coder.getPixelType());System.out.printf("frame-rate: %5.2f; ", coder.getFrameRate().getDouble());}System.out.println();System.out.println("*** End of Stream Info ***");}}
Number of streams: 2
Duration (ms): 15125333
File Size (bytes): 20776688
Bit Rate: 10989080
*** Start of Stream Info ***
stream 0: type: CODEC_TYPE_VIDEO; codec: CODEC_ID_H264; duration: 377000; start time: 0; timebase: 1/25000; coder tb: 1/50; 
width: 1080; height: 1920; format: YUV420P; frame-rate: 25.00; 
*** End of Stream Info ***
*** Start of Stream Info ***
stream 1: type: CODEC_TYPE_AUDIO; codec: CODEC_ID_AAC; duration: 726016; start time: 0; timebase: 1/48000; coder tb: 1/48000; 
sample rate: 48000; channels: 2; format: FMT_S16
*** End of Stream Info ***

Xuggler-JAR下载地址

https://www.dcm4che.org/maven2/xuggle/xuggle-xuggler/5.4/xuggle-xuggler-5.4.jar

这篇关于【OpenCV】【JavaCV】【Xuggler】【Java】获取视频的编解码器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995748

相关文章

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在