javaCV - 视频截帧,清晰度调整,转gif,视频转音频

本文介绍了使用JavaCV进行视频处理的一些功能,包括视频截帧生成GIF、图片旋转、指定帧保存图片、降低视频清晰度及视频转音频等操作。虽然官方API详细资料不足,但作者通过实践整理出实用的方法。
摘要由CSDN通过智能技术生成

  最近有视频处理的需求,自己调研javaCV。

  官网没有详细的API,各种轮子翻遍了也没找到几个有用的,以下是自己整理一些视频处理功能:截取视频指定帧生成gif,将图片旋转指定度,截取视频指定帧保存为指定格式的图片(图片保存在视频同文件夹下)调整视频清晰度(只能降低)视频转音频

  先上代码。

package com.richinfo.media.utils;

import com.madgag.gif.fmsware.AnimatedGifEncoder;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
* @author
*/
public class VideoUtils {

/**
* 截取视频指定帧生成gif
*
* @param videofile 视频文件
* @param startFrame 开始帧
* @param frameCount 截取帧数
* @param frameRate 帧频率(默认:3)
* @param margin 每截取一次跳过多少帧(默认:3)
* @throws java.io.IOException 截取的长度超过视频长度
*/
public static void buildGif(String videofile, int startFrame, int frameCount, Integer frameRate, Integer margin) throws IOException {
if (margin == null) {
margin = 3;
}
if (frameRate == null) {
frameRate = 3;
}
FileOutputStream targetFile = new FileOutputStream(videofile.substring(0, videofile.lastIndexOf(".")) + ".gif");
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videofile);
Java2DFrameConverter converter = new Java2DFrameConverter();
ff.start();
try {
if (startFrame > ff.getLengthInFrames() & (startFrame + frameCount) > ff.getLengthInFrames()) {
throw new RuntimeException("视频太短了");
}
ff.setFrameNumber(startFrame);
AnimatedGifEncoder en = new AnimatedGifEncoder();
en.setFrameRate(frameRate);
en.start(targetFile);
for (int i = 0; i < frameCount; i++) {
en.addFrame(c
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值