参考一 依赖太多不适合生产环境
参考二 改造参考一依赖过多的问题
maven 最小依赖
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<version>4.3.0-1.5.3</version>
<classifier>windows-x86_64</classifier>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>openblas</artifactId>
<version>0.3.9-1.5.3</version>
<classifier>windows-x86_64</classifier>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg</artifactId>
<version>4.2.2-1.5.3</version>
<classifier>windows-x86_64</classifier>
</dependency>
代码工具类
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
/**
* @author Administrator
* @Version 0.0.1
* @Description VideoTransferUtil
* @Date 2020-12-02 14:31
*/
public class VideoTransferUtil {
private final Logger LOG = LoggerFactory.getLogger(getClass());
private static final Integer AV_CODEC_ID_H264 = 27;
/**
* 转换视频文件为mp4
* @param filename
* @return
*/
public static String convertToMp4(String filename) {
FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(filename);
String fileName = null;
Frame captured_frame = null;
FFmpegFrameRecorder recorder = null;
try {
File file = new File(filename);
fileName = file.getAbsolutePath().substring(0, file.getAbsolutePath().indexOf(".")) + ".mp4";
frameGrabber.start();
recorder = new FFmpegFrameRecorder(fileName, frameGrabber.getImageWidth(), frameGrabber.getImageHeight(), frameGrabber.getAudioChannels());
//avcodec.AV_CODEC_ID_H264 //AV_CODEC_ID_MPEG4
recorder.setVideoCodec(AV_CODEC_ID_H264);
recorder.setFormat("mp4");
recorder.setFrameRate(frameGrabber.getFrameRate());
recorder.setSampleRate(frameGrabber.getSampleRate());
recorder.setAudioChannels(frameGrabber.getAudioChannels());
recorder.setFrameRate(frameGrabber.getFrameRate());
recorder.start();
while ((captured_frame = frameGrabber.grabFrame()) != null) {
try {
recorder.setTimestamp(frameGrabber.getTimestamp());
recorder.record(captured_frame);
} catch (Exception e) {
}
}
recorder.stop();
recorder.release();
frameGrabber.stop();
} catch (Exception e) {
e.printStackTrace();
}
return fileName;
}
}