JavaCV之FFmpegFrameFilter视频转灰度

[复制链接]
发表于 2025-12-10 04:08:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1、代码
  1. package com.example.demo.ffpemg;
  2. import lombok.SneakyThrows;
  3. import org.bytedeco.javacv.*;
  4. public class FFmpegFrameFilterVideoExample {
  5.     @SneakyThrows
  6.     public static void main(String[] args) {
  7.         // 输入视频文件路径
  8.         String inputVideoPath = "f:/2222.mp4";
  9.         // 输出视频文件路径
  10.         String outputVideoPath = "f:/2222output_video.mp4";
  11.         // 抓取器,用于读取输入视频
  12.         FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputVideoPath);
  13.         grabber.start();
  14.         // 创建帧过滤器,这里使用一个简单的视频滤镜(例如:将视频转为灰度)
  15. //        传入滤镜参数(这里是format = gray,用于将视频转换为灰度)
  16. //        、视频宽度和高度。同时设置像素格式为AVPixelFormat.GRAY8和帧率为抓取器获取的帧率,并启动帧过滤器。
  17.         FFmpegFrameFilter frameFilter = new FFmpegFrameFilter("format=gray", grabber.getImageWidth(),
  18.                 grabber.getImageHeight());
  19.         frameFilter.setFrameRate(grabber.getFrameRate());
  20.         frameFilter.start();
  21.         // 用于写入输出视频的帧记录器
  22.         FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputVideoPath, grabber.getImageWidth(),
  23.                 grabber.getImageHeight());
  24.         recorder.setVideoCodec(grabber.getVideoCodec());
  25.         recorder.setFormat("mp4");
  26.         recorder.setFrameRate(grabber.getFrameRate());
  27.         recorder.setAudioChannels(grabber.getAudioChannels());
  28.         recorder.setAudioCodec(grabber.getAudioCodec());
  29.         recorder.start();
  30.         Frame frame;
  31.         while ((frame = grabber.grab()) != null) {
  32.             //从抓取器中抓取帧,将其推送(push)到帧过滤器中,然后通过pull方法获取经过滤镜处理后的帧
  33.             // 。如果设置了帧记录器(在代码中部分注释掉了),可以将处理后的帧记录到输出视频文件中。
  34.             frameFilter.push(frame);
  35.             Frame filteredFrame = frameFilter.pull();
  36.             recorder.record(filteredFrame);
  37.         }
  38.         frameFilter.stop();
  39.         grabber.stop();
  40.         recorder.stop();
  41.         frameFilter.release();
  42.         grabber.release();
  43.         recorder.release();
  44.         System.out.println("视频滤镜处理完成。");
  45.     }
  46. }
复制代码
2、pom
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <parent>
  6.         <groupId>org.springframework.boot</groupId>
  7.         <artifactId>spring-boot-starter-parent</artifactId>
  8.         <version>2.6.3</version>
  9.         <relativePath/> <!-- lookup parent from repository -->
  10.     </parent>
  11.     <groupId>com.example</groupId>
  12.     <artifactId>demo1</artifactId>
  13.     <version>0.0.1-SNAPSHOT</version>
  14.     <name>demo1</name>
  15.     <description>demo1</description>
  16.     <properties>
  17.         <java.version>11</java.version>
  18.         <javacpp.platform.macosx-x86_64>macosx-x86_64</javacpp.platform.macosx-x86_64>
  19.         <javacpp.platform.linux-x86_64>linux-x86_64</javacpp.platform.linux-x86_64>
  20.         <javacpp.platform.windows-x86_64>windows-x86_64</javacpp.platform.windows-x86_64>
  21.         <javacv.version>1.5.11</javacv.version>
  22.         <javacv.ffmpeg.version>7.1-1.5.11</javacv.ffmpeg.version>
  23.         <javacv.opencv.version>4.10.0-1.5.11</javacv.opencv.version>
  24.     </properties>
  25.     <dependencies>
  26.         <dependency>
  27.             <groupId>org.springframework.boot</groupId>
  28.             <artifactId>spring-boot-starter</artifactId>
  29.         </dependency>
  30.         <dependency>
  31.             <groupId>org.springframework.boot</groupId>
  32.             <artifactId>spring-boot-starter-web</artifactId>
  33.         </dependency>
  34.         <dependency>
  35.             <groupId>org.springframework.boot</groupId>
  36.             <artifactId>spring-boot-starter-test</artifactId>
  37.             <scope>test</scope>
  38.         </dependency>
  39.         <!-- mqtt -->
  40.         <dependency>
  41.             <groupId>org.springframework.boot</groupId>
  42.             <artifactId>spring-boot-starter-integration</artifactId>
  43.         </dependency>
  44.         <dependency>
  45.             <groupId>org.springframework.integration</groupId>
  46.             <artifactId>spring-integration-stream</artifactId>
  47.         </dependency>
  48.         <dependency>
  49.             <groupId>org.springframework.integration</groupId>
  50.             <artifactId>spring-integration-mqtt</artifactId>
  51.         </dependency>
  52.         <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
  53.         <!--        <dependency>-->
  54.         <!--            <groupId>com.baomidou</groupId>-->
  55.         <!--            <artifactId>mybatis-plus-boot-starter</artifactId>-->
  56.         <!--            <version>3.5.1</version>-->
  57.         <!--        </dependency>-->
  58.         <dependency>
  59.             <groupId>org.projectlombok</groupId>
  60.             <artifactId>lombok</artifactId>
  61.             <optional>true</optional>
  62.         </dependency>
  63.         <dependency>
  64.             <groupId>cn.hutool</groupId>
  65.             <artifactId>hutool-all</artifactId>
  66.             <version>5.4.6</version>
  67.         </dependency>
  68.         <dependency>
  69.             <groupId>com.aliyun</groupId>
  70.             <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
  71.             <version>2.2.1</version>
  72.         </dependency>
  73.         <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
  74.         <dependency>
  75.             <groupId>com.aliyun</groupId>
  76.             <artifactId>aliyun-java-sdk-core</artifactId>
  77.             <version>4.6.0</version>
  78.         </dependency>
  79.         <dependency>
  80.             <groupId>com.aliyun</groupId>
  81.             <artifactId>dyvmsapi20170525</artifactId>
  82.             <version>2.1.4</version>
  83.         </dependency>
  84.         <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
  85.         <dependency>
  86.             <groupId>io.netty</groupId>
  87.             <artifactId>netty-all</artifactId>
  88.             <version>4.1.75.Final</version>
  89.         </dependency>
  90.         <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
  91.         <dependency>
  92.             <groupId>com.alibaba</groupId>
  93.             <artifactId>fastjson</artifactId>
  94.             <version>1.2.79</version>
  95.         </dependency>
  96.         <!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
  97.         <dependency>
  98.             <groupId>org.redisson</groupId>
  99.             <artifactId>redisson</artifactId>
  100.             <version>3.16.0</version>
  101.         </dependency>
  102.         <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
  103.         <dependency>
  104.             <groupId>com.google.protobuf</groupId>
  105.             <artifactId>protobuf-java</artifactId>
  106.             <version>3.20.0</version>
  107.         </dependency>
  108.         <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util -->
  109.         <dependency>
  110.             <groupId>com.google.protobuf</groupId>
  111.             <artifactId>protobuf-java-util</artifactId>
  112.             <version>3.20.0</version>
  113.             <scope>runtime</scope>
  114.         </dependency>
  115.         <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
  116.         <dependency>
  117.             <groupId>com.google.guava</groupId>
  118.             <artifactId>guava</artifactId>
  119.             <version>31.1-jre</version>
  120.         </dependency>
  121.         <dependency>
  122.             <groupId>net.coobird</groupId>
  123.             <artifactId>thumbnailator</artifactId>
  124.             <version>0.4.8</version>
  125.         </dependency>
  126.         <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
  127.         <dependency>
  128.             <groupId>org.dom4j</groupId>
  129.             <artifactId>dom4j</artifactId>
  130.             <version>2.1.4</version>
  131.         </dependency>
  132.         <dependency>
  133.             <groupId>org.springframework.boot</groupId>
  134.             <artifactId>spring-boot-starter-amqp</artifactId>
  135.         </dependency>
  136.         <dependency>
  137.             <groupId>com.rabbitmq</groupId>
  138.             <artifactId>amqp-client</artifactId>
  139.             <version>4.0.3</version>
  140.         </dependency>
  141.         <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
  142.         <dependency>
  143.             <groupId>net.java.dev.jna</groupId>
  144.             <artifactId>jna</artifactId>
  145.             <version>5.14.0</version>
  146.         </dependency>
  147.         <dependency>
  148.             <groupId>ai.djl</groupId>
  149.             <artifactId>api</artifactId>
  150.             <version>0.29.0</version>
  151.         </dependency>
  152.         <!-- https://mvnrepository.com/artifact/ai.djl.mxnet/mxnet-engine -->
  153.         <dependency>
  154.             <groupId>ai.djl.mxnet</groupId>
  155.             <artifactId>mxnet-engine</artifactId>
  156.             <version>0.29.0</version>
  157.             <scope>runtime</scope>
  158.         </dependency>
  159.         <!-- https://mvnrepository.com/artifact/ai.djl.mxnet/mxnet-model-zoo -->
  160.         <dependency>
  161.             <groupId>ai.djl.mxnet</groupId>
  162.             <artifactId>mxnet-model-zoo</artifactId>
  163.             <version>0.29.0</version>
  164.         </dependency>
  165.         <dependency>
  166.             <groupId>ai.djl</groupId>
  167.             <artifactId>basicdataset</artifactId>
  168.             <version>0.29.0</version>
  169.         </dependency>
  170.         <dependency>
  171.             <groupId>ai.djl</groupId>
  172.             <artifactId>model-zoo</artifactId>
  173.             <version>0.29.0</version>
  174.         </dependency>
  175.         <dependency>
  176.             <groupId>ai.djl.timeseries</groupId>
  177.             <artifactId>timeseries</artifactId>
  178.             <version>0.29.0</version>
  179.         </dependency>
  180.         <dependency>
  181.             <groupId>ai.djl.huggingface</groupId>
  182.             <artifactId>tokenizers</artifactId>
  183.             <version>0.29.0</version>
  184.         </dependency>
  185.         <dependency>
  186.             <groupId>ai.djl.audio</groupId>
  187.             <artifactId>audio</artifactId>
  188.             <version>0.29.0</version>
  189.         </dependency>
  190.         <dependency>
  191.             <groupId>commons-cli</groupId>
  192.             <artifactId>commons-cli</artifactId>
  193.             <version>1.5.0</version>
  194.         </dependency>
  195.         <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv -->
  196.         <dependency>
  197.             <groupId>org.bytedeco</groupId>
  198.             <artifactId>javacv</artifactId>
  199.             <version>${javacv.version}</version>
  200.         </dependency>
  201.         <!--javacv 精简依赖  只依赖windows64位ffmpeg-->
  202.         <dependency>
  203.             <groupId>org.bytedeco</groupId>
  204.             <artifactId>javacpp</artifactId>
  205.             <version>${javacv.version}</version>
  206.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  207.         </dependency>
  208.         <dependency>
  209.             <groupId>org.bytedeco</groupId>
  210.             <artifactId>ffmpeg</artifactId>
  211.             <version>${javacv.ffmpeg.version}</version>
  212.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  213.         </dependency>
  214.         <!-- https://mvnrepository.com/artifact/org.bytedeco/opencv-platform -->
  215.         <dependency>
  216.             <groupId>org.bytedeco</groupId>
  217.             <artifactId>opencv</artifactId>
  218.             <version>4.10.0-1.5.11</version>
  219.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  220.         </dependency>
  221.         <!-- https://mvnrepository.com/artifact/org.bytedeco/tesseract -->
  222.         <dependency>
  223.             <groupId>org.bytedeco</groupId>
  224.             <artifactId>tesseract</artifactId>
  225.             <version>5.5.0-1.5.11</version>
  226.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  227.         </dependency>
  228.         <!-- https://mvnrepository.com/artifact/org.bytedeco/openblas -->
  229.         <dependency>
  230.             <groupId>org.bytedeco</groupId>
  231.             <artifactId>openblas</artifactId>
  232.             <version>0.3.28-1.5.11</version>
  233.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  234.         </dependency>
  235.         <!-- https://mvnrepository.com/artifact/org.bytedeco/leptonica -->
  236.         <dependency>
  237.             <groupId>org.bytedeco</groupId>
  238.             <artifactId>leptonica</artifactId>
  239.             <version>1.85.0-1.5.11</version>
  240.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  241.         </dependency>
  242.         <!-- https://mvnrepository.com/artifact/org.bytedeco/flycapture -->
  243.         <dependency>
  244.             <groupId>org.bytedeco</groupId>
  245.             <artifactId>flycapture</artifactId>
  246.             <version>2.13.3.31-1.5.9</version>
  247.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  248.         </dependency>
  249.         <!-- https://mvnrepository.com/artifact/org.bytedeco/libdc1394 -->
  250.         <dependency>
  251.             <groupId>org.bytedeco</groupId>
  252.             <artifactId>libdc1394</artifactId>
  253.             <version>2.2.6-1.5.9</version>
  254.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  255.         </dependency>
  256.         <!-- https://mvnrepository.com/artifact/org.bytedeco/libfreenect -->
  257.         <dependency>
  258.             <groupId>org.bytedeco</groupId>
  259.             <artifactId>libfreenect</artifactId>
  260.             <version>0.5.7-1.5.9</version>
  261.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  262.         </dependency>
  263.         <!-- https://mvnrepository.com/artifact/org.bytedeco/libfreenect2 -->
  264.         <dependency>
  265.             <groupId>org.bytedeco</groupId>
  266.             <artifactId>libfreenect2</artifactId>
  267.             <version>0.2.0-1.5.9</version>
  268.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  269.         </dependency>
  270.         <!-- https://mvnrepository.com/artifact/org.bytedeco/librealsense -->
  271.         <dependency>
  272.             <groupId>org.bytedeco</groupId>
  273.             <artifactId>librealsense</artifactId>
  274.             <version>1.12.4-1.5.9</version>
  275.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  276.         </dependency>
  277.         <!-- https://mvnrepository.com/artifact/org.bytedeco/librealsense2 -->
  278.         <dependency>
  279.             <groupId>org.bytedeco</groupId>
  280.             <artifactId>librealsense2</artifactId>
  281.             <version>2.53.1-1.5.9</version>
  282.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  283.         </dependency>
  284.         <!-- https://mvnrepository.com/artifact/org.bytedeco/videoinput -->
  285.         <dependency>
  286.             <groupId>org.bytedeco</groupId>
  287.             <artifactId>videoinput</artifactId>
  288.             <version>0.200-1.5.9</version>
  289.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  290.         </dependency>
  291.         <!-- https://mvnrepository.com/artifact/org.bytedeco/artoolkitplus -->
  292.         <dependency>
  293.             <groupId>org.bytedeco</groupId>
  294.             <artifactId>artoolkitplus</artifactId>
  295.             <version>2.3.1-1.5.9</version>
  296.             <classifier>${javacpp.platform.windows-x86_64}</classifier>
  297.         </dependency>
  298.         <!--javacv 精简依赖  只依赖windows64位ffmpeg-->
  299.     </dependencies>
  300.     <build>
  301.         <plugins>
  302.             <plugin>
  303.                 <groupId>org.springframework.boot</groupId>
  304.                 <artifactId>spring-boot-maven-plugin</artifactId>
  305.             </plugin>
  306.         </plugins>
  307.     </build>
  308. </project>
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表