Java解析视频FPS(帧率)、分辨率信息

以下分别介绍使用 Python 和 Java 解析视频的 FPS(帧率)和分辨率信息的方法:

Java 解析视频 FPS 和分辨率信息

在 Java 中,可以使用Xuggle库来处理视频并获取相关信息,不过需要先添加相应的依赖到项目中(例如在 Maven 项目中添加如下依赖):

XML 复制代码
<dependency>
    <groupId>xuggle</groupId>
    <artifactId>xuggle-xuggler</artifactId>
    <version>5.4</version>
</dependency>

以下是示例代码:

java 复制代码
import com.xuggle.xuggler.IContainer;
import com.xuggle.xuggler.IPacket;
import com.xuggle.xuggler.IPixelFormat;
import com.xuggle.xuggler.IStream;
import com.xuggle.xuggler.IStreamCoder;
import com.xuggle.xuggler.IVideoPicture;
import com.xuggle.xuggler.video.ConverterFactory;
import com.xuggle.xuggler.video.IConverter;

public class VideoInfoParser {

    public static void getVideoInfo(String videoPath) {
        IContainer container = IContainer.make();
        if (container.open(videoPath, IContainer.Type.READ, null) < 0) {
            System.err.println("无法打开视频文件");
            return;
        }

        int numStreams = container.getNumStreams();
        for (int i = 0; i < numStreams; i++) {
            IStream stream = container.getStream(i);
            IStreamCoder coder = stream.getStreamCoder();
            if (coder.getCodecType() == IStreamCoder.CodecType.CODEC_TYPE_VIDEO) {
                // 获取帧率(FPS)
                double fps = coder.getFrameRate().getDouble();
                // 获取视频宽度(分辨率的一部分)
                int width = coder.getWidth();
                // 获取视频高度(分辨率的一部分)
                int height = coder.getHeight();
                System.out.println("视频帧率(FPS): " + fps);
                System.out.println("视频分辨率: " + width + "x" + height);
            }
        }

        container.close();
    }

    public static void main(String[] args) {
        String videoPath = "your_video_file_path.mp4";  // 替换为实际的视频文件路径
        getVideoInfo(videoPath);
    }
}

在上述 Java 代码中:

  1. 首先通过IContainer.make()创建一个视频容器对象,尝试使用container.open方法打开指定路径的视频文件,如果返回值小于 0 则表示打开失败,会输出错误提示并返回。
  2. 接着遍历视频容器中的所有流(stream),找到视频流(通过判断coder.getCodecType()是否为CODEC_TYPE_VIDEO来确定)。
  3. 对于视频流,使用coder.getFrameRate().getDouble()获取帧率信息,通过coder.getWidth()coder.getHeight()分别获取视频的宽度和高度(即分辨率信息),最后打印输出,完成后使用container.close()关闭视频容器。

另外,Java 中也可以使用JavaCV库来实现类似功能,添加依赖(以 Maven 项目为例)如下:

XML 复制代码
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.5.8</version>
</dependency>

示例代码:

java 复制代码
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;

public class VideoInfoParserWithJavaCV {
    public static void getVideoInfo(String videoPath) {
        try {
            FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoPath);
            grabber.start();
            // 获取帧率(FPS)
            double fps = grabber.getFrameRate();
            // 获取视频宽度(分辨率的一部分)
            int width = grabber.getImageWidth();
            // 获取视频高度(分辨率的一部分)
            int height = grabber.getImageHeight();
            System.out.println("视频帧率(FPS): " + fps);
            System.out.println("视频分辨率: " + width + "x" + height);
            grabber.stop();
            grabber.release();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String videoPath = "your_video_file_path.mp4";  // 替换为实际的视频文件路径
        getVideoInfo(videoPath);
    }
}

这段代码利用FFmpegFrameGrabber类来抓取视频帧,启动后通过grabber.getFrameRate()获取帧率,通过grabber.getImageWidth()grabber.getImageHeight()获取视频的宽度和高度(分辨率信息),最后记得停止并释放资源,避免资源泄露。

相关推荐
m0_748554811 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
lee_curry1 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
smj2302_796826522 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
阿正呀3 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
九转成圣3 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
m0_726365833 小时前
Ai漫剧系统 几分钟,让AI 把一篇小说变成了一部漫剧成片:从剧本到视频的全流程系统实现
人工智能·语言模型·ai作画·音视频
2501_901200533 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
_.Switch3 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
Mr_sst3 小时前
Claude Code 部署与使用保姆级教程(2026 最新)
python·ai
直奔標竿3 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring