Spring Boot 多媒体(音频/视频)文件处理FFmpegFrameGrabber 方法(例子:获取视频总时长)

1.pom.xml 坐标

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

2.FFmpegFrameGrabber类提供了多种方法来处理多媒体文件,以下是一些常用的方法

  1. start():开始抓取帧。在调用此方法之前,可以设置格式和选项,之后可以调用grab()方法来获取帧。
  2. stop():停止抓取帧。通常在完成帧的抓取后调用此方法来释放资源。
  3. getLengthInTime():获取视频的长度(以秒为单位)。这可以用来确定视频的总播放时间。
  4. getFrameRate():获取视频的帧率。这可以用来计算视频中每秒钟的帧数。
  5. setFormat(String format):设置要抓取的媒体格式,如"h264"等。
  6. setOption(String key, String value):设置选项,例如设置传输协议为"tcp"等。
  7. grab():从视频流中抓取一帧视频数据并返回。该方法返回值为Frame对象,表示抓取到的视频帧数据。如果抓取失败,该方法会抛出异常。
  8. getAudioChannels():获取音频通道的数量。这可以用来确定音频的声道数。
  9. getSampleRate():获取音频的采样率。这可以用来确定音频的采样频率。
  10. getAudioLength():获取音频的长度(以毫秒为单位)。这可以用来确定音频的总播放时间。
  11. getVideoWidth():获取视频的宽度。这可以用来确定视频的分辨率。
  12. getVideoHeight():获取视频的高度。这可以用来确定视频的分辨率。
  13. getImageWidth():获取图像的宽度。这可以用来确定图像的大小。
  14. getImageHeight():获取图像的高度。这可以用来确定图像的大小。
  15. getPixels():获取图像像素数据。这可以用来访问图像的每个像素值。
  16. isOpen():检查FFmpegFrameGrabber是否打开。如果已打开,则返回true;否则返回false。
  17. release():释放与FFmpegFrameGrabber关联的所有资源。这应该在完成使用后调用以避免内存泄漏。
  18. setImageSize(int width, int height):设置图像的大小。这可以用来调整图像的分辨率。
  19. setLocation(String location):设置媒体文件的位置。这可以用来指定要抓取的媒体文件的路径或URL。
  20. setSampleFormat(int format):设置音频采样格式。这可以用来指定音频数据的采样格式。
  21. setVideoBitrate(int bitrate):设置视频比特率。这可以用来控制视频的质量和文件大小。
  22. setAudioBitrate(int bitrate):设置音频比特率。这可以用来控制音频的质量和文件大小。
  23. setAudioChannels(int channels):设置音频通道数。这可以用来指定音频的声道数。
  24. setSampleRate(int rate):设置音频采样率。这可以用来指定音频的采样频率。
  25. setFormat(String format, int audioChannels, int sampleRate, int audioBitrate):设置要抓取的媒体格式以及相关的音频参数。这可以用来指定要抓取的媒体格式和音频属性。
  26. setVideoCodec(int codec):设置视频编解码器。这可以用来指定视频数据的编解码方式。
  27. setAudioCodec(int codec):设置音频编解码器。这可以用来指定音频数据的编解码方式。
  28. setDeinterlacing(boolean deinterlace):设置是否进行去隔行扫描。这可以用来控制是否对视频数据进行去隔行处理以提高画质。
  29. setStrict(boolean strict):设置是否严格遵循FFmpeg的语法规则。这可以用来控制是否对输入的媒体文件进行严格的格式检查和解析。
  30. setUseSDL(boolean useSDL):设置是否使用SDL库来进行媒体播放和抓帧操作。这可以用来控制是否使用SDL库来进行媒体播放和抓帧操作以提高性能和兼容性。
  31. setInputFormat(String format):设置输入流的格式。这可以用来指定输入流的格式以便正确解析和处理媒体数据。
  32. setOutputFormat(String format):设置输出流的格式。这可以用来指定输出流的格式以便正确写入和保存媒体数据。
  33. setInputBufferSize(int size):设置输入缓冲区的大小。这可以用来控制读取输入流时使用的缓冲区大小以提高性能和稳定性。
  34. setOutputBufferSize(int size):设置输出缓冲区的大小。这可以用来控制写入输出流时使用的缓冲区大小以提高性能和稳定性。
  35. setInputTimeout(int timeout):设置输入超时时间(以毫秒为单位)。这可以用来控制读取输入流时的超时时间以避免长时间等待或阻塞。
  36. setOutputTimeout(int timeout):设置输出超时时间(以毫秒为单位)。这可以用来控制写入输出流时的超时时间以避免长时间等待或阻塞。

以上是FFmpegFrameGrabber类提供的一些常用方法,通过这些方法可以实现对多媒体文件的读取、解析和处理。

3.代码使用tool工具类(下面的例子是获取视频总时长)

备注:业务逻辑需要根据自己的情况更改

复制代码
public class VideoLong {
    public static String getVideoDuration(String videoPath) {
        double duration = 0;
        try (FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(videoPath)) {
            frameGrabber.start();
            //System.out.println(frameGrabber.getLengthInTime()/1000000);
            duration = frameGrabber.getLengthInTime()/1000000;
            frameGrabber.stop();
        } catch (FrameGrabber.Exception e) {
            e.printStackTrace();
        }
        return String.valueOf(duration);
    }
}
相关推荐
金牌归来发现妻女流落街头13 小时前
【从SpringBoot到SpringCloud】
java·spring boot·spring cloud
毅炼13 小时前
Java 基础常见问题总结(4)
java·后端
GR23423413 小时前
2025年影视仓TV+手机官方版 内置地址源支持高清直播
java·智能手机·软件
皮卡丘不断更13 小时前
手搓本地 RAG:我用 Python 和 Spring Boot 给 AI 装上了“实时代码监控”
人工智能·spring boot·python·ai编程
程序员清风14 小时前
北京回长沙了,简单谈谈感受!
java·后端·面试
lucky670714 小时前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
何中应14 小时前
请求头设置没有生效
java·后端
Coder_Boy_14 小时前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
亓才孓14 小时前
[JDBC]批处理
java
春日见14 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设