马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1、代码- package com.example.demo.ffpemg;
- import lombok.SneakyThrows;
- import org.bytedeco.javacv.*;
- public class FFmpegFrameFilterVideoExample {
- @SneakyThrows
- public static void main(String[] args) {
- // 输入视频文件路径
- String inputVideoPath = "f:/2222.mp4";
- // 输出视频文件路径
- String outputVideoPath = "f:/2222output_video.mp4";
- // 抓取器,用于读取输入视频
- FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputVideoPath);
- grabber.start();
- // 创建帧过滤器,这里使用一个简单的视频滤镜(例如:将视频转为灰度)
- // 传入滤镜参数(这里是format = gray,用于将视频转换为灰度)
- // 、视频宽度和高度。同时设置像素格式为AVPixelFormat.GRAY8和帧率为抓取器获取的帧率,并启动帧过滤器。
- FFmpegFrameFilter frameFilter = new FFmpegFrameFilter("format=gray", grabber.getImageWidth(),
- grabber.getImageHeight());
- frameFilter.setFrameRate(grabber.getFrameRate());
- frameFilter.start();
- // 用于写入输出视频的帧记录器
- FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputVideoPath, grabber.getImageWidth(),
- grabber.getImageHeight());
- recorder.setVideoCodec(grabber.getVideoCodec());
- recorder.setFormat("mp4");
- recorder.setFrameRate(grabber.getFrameRate());
- recorder.setAudioChannels(grabber.getAudioChannels());
- recorder.setAudioCodec(grabber.getAudioCodec());
- recorder.start();
- Frame frame;
- while ((frame = grabber.grab()) != null) {
- //从抓取器中抓取帧,将其推送(push)到帧过滤器中,然后通过pull方法获取经过滤镜处理后的帧
- // 。如果设置了帧记录器(在代码中部分注释掉了),可以将处理后的帧记录到输出视频文件中。
- frameFilter.push(frame);
- Frame filteredFrame = frameFilter.pull();
- recorder.record(filteredFrame);
- }
- frameFilter.stop();
- grabber.stop();
- recorder.stop();
- frameFilter.release();
- grabber.release();
- recorder.release();
- System.out.println("视频滤镜处理完成。");
- }
- }
复制代码 2、pom |