当前位置: 首页 > 知识库问答 >
问题:

java - Java怎么提升视频质量?

牛智志
2024-02-24

Java怎么提升视频质量,比如我有个视频,但清晰度很低。想用JavaCV或者其它库,怎么提升视频清晰度,降噪等等,谢谢。

用JavaCV试了,效果但效果不太好。

代码如下:

import org.bytedeco.javacv.FFmpegFrameGrabber;import org.bytedeco.javacv.FFmpegFrameRecorder;import org.bytedeco.javacv.Frame;import org.bytedeco.javacv.FrameGrabber.Exception;import org.bytedeco.javacv.FrameRecorder;import org.bytedeco.javacv.OpenCVFrameConverter;import org.bytedeco.opencv.global.opencv_imgproc;import org.bytedeco.opencv.opencv_core.Mat;public void local(String videoFilePath) {    log.info("start...");    var videoFile = new File(videoFilePath);    if (!videoFile.exists()) {      log.info("{}: file no exists!", videoFilePath);      return;    }    var outputVideoFilePath = "./test.mp4";    try (FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFilePath)) {      // 创建FrameGrabber对象并打开视频文件      grabber.start();      // 新视频文件路径及参数      int width = grabber.getImageWidth();      int height = grabber.getImageHeight();      var frameRate = grabber.getFrameRate();      // 创建FrameRecorder对象并设置视频文件参数      FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputVideoFilePath, width, height);      recorder.setFrameRate(frameRate);      recorder.start();      // 逐帧读取视频文件      Frame frame;      while ((frame = grabber.grabFrame(false, true, true, false)) != null) {        // 将帧转换为OpenCV Mat        OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();        Mat src = converter.convert(frame);        // 对每一帧图像进行处理        Mat frameMat = new Mat(src);        Mat denoisedMat = new Mat();        opencv_imgproc.medianBlur(frameMat, denoisedMat, 11);        Mat denoisedMat1 = new Mat();        OpenCVFrameConverter.ToMat converter1 = new OpenCVFrameConverter.ToMat();        // 将处理后的每一帧图像写入新的视频文件        recorder.record(converter1.convert(denoisedMat1));      }      // 关闭FrameGrabber      grabber.stop();      grabber.release();      // 关闭FrameRecorder      recorder.stop();      recorder.release();      log.info("If the execution is successful, the output file path: {}", outputVideoFilePath);    } catch (FrameRecorder.Exception | Exception e) {      throw new RuntimeException(e);    }  }

共有1个答案

昝浩阔
2024-02-24

不可逆,视频质量只会越来越渣,绝无可能弄好,你放弃吧。你一开始就没有高质量的片源,就别指望后面还能处理的更好,这不符合基本原理

 类似资料:
  • 文档中只看到通过url的http://78re52.com1.z0.glb.clouddn.com/resource%2Fthinking-in-... 的方式获取视频元数据。 通过java sdk如何获取呢?

  •         视频会议须更新到6.13版本方可使用。会议室参会人数可支持50+同时进行视频会议,目前客户端仅能显示最多6方视频(同时参会人数可100+),但是会议过程中讲话人会到主屏上进行显示。目前轻推上仅支持发起会议,不支持通过输入会议号的形式加入会议,如果需要发起会议,请使用轻推客户端。 操作方法: 1.    手机版: (1)发起会议:右上角通话按钮-视频会议-选择联系人-发起会议 (2)

  • 输出Mp3 打开D:\data\test\n音频\mp3\8777828760-e5749e4c563bf5411c95442085d1ce1@10.58.13.40.mp3 MP3文件波形格式:MpegLayer3 8000Hz2通道每个样本0位 长度:3119616字节:00:01:37.4880000 ID3v1标记:无 ID3v2标记:无

  • crf 20是相当高的质量,接近100%,恢复的帧应该接近原始。视频播放器暂停帧显示足够的质量。(虽然我不能说它是否在关键帧上) ffmpeg版本信息:

  • 问题内容: 我想从视频中提取帧并对其应用一些过滤器,例如gabor / hough等。哪个Java库最适合处理各种视频编码?我一直在研究GStreamer,JMF,Xuggler等,但无法确定哪一个最好。我还希望编辑框架并使用新框架制作视频。 问题答案: 如果您要进行低级操作(例如提取帧和对其进行操作),那么Xuggler将是最佳选择,因为API围绕此低级进行调整。它适用于ffmpeg,因此可以处

  • 有个透明视频 text.mov 和一个背景图 bg.jpg(将作为视频背景),合并之后视频的质量明显降低,设置了帧率、码流、编码方式都不行,有没有解决过类似问题的,悬赏千元求解,谢谢诸位!!!