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);
    }
}

相关推荐

  1. Golang获取视频信息

    2024-03-16 05:28:06       19 阅读
  2. js通过视频链接获取视频

    2024-03-16 05:28:06       14 阅读
  3. uni-app获取音频播放

    2024-03-16 05:28:06       39 阅读
  4. js通过音频链接获取音频

    2024-03-16 05:28:06       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 05:28:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 05:28:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 05:28:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 05:28:06       20 阅读

热门阅读

  1. 【MySQL】mysqladmin、mysqlshow、mysqlcheck都是干嘛的?

    2024-03-16 05:28:06       21 阅读
  2. 【CSS】前端开发中的常见CSS样式问题解决方案

    2024-03-16 05:28:06       20 阅读
  3. 【构建工具】PostCSS快速配置

    2024-03-16 05:28:06       20 阅读
  4. HTML-DAY1

    2024-03-16 05:28:06       16 阅读
  5. C++(1): std::vector的使用

    2024-03-16 05:28:06       21 阅读
  6. 【 React 】对React refs的理解?应用场景?

    2024-03-16 05:28:06       21 阅读
  7. hcie数通和云计算选哪个好?

    2024-03-16 05:28:06       21 阅读
  8. FPGA的应用方向

    2024-03-16 05:28:06       18 阅读