pom.xml
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.8</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.5.8</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>openblas</artifactId>
<version>0.3.21-1.5.8</version>
<classifier>linux-x86_64</classifier>
<!--windows系统使用-->
<!--<classifier>windows-x86_64</classifier>-->
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg</artifactId>
<version>5.1.2-1.5.8</version>
<classifier>linux-x86_64</classifier>
<!--windows系统使用-->
<!--<classifier>windows-x86_64</classifier>-->
</dependency>
Java Code
File sourceFile = new File(filePath), targetFile = new File(targetPath);
try {
avutil.av_log_set_level(avutil.AV_LOG_ERROR); FFmpegLogCallback.set();
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(sourceFile); grabber.start();
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(
targetFile, grabber.getImageWidth(), grabber.getImageHeight());
recorder.setFrameRate(grabber.getFrameRate());
recorder.setSampleRate(grabber.getSampleRate());
recorder.setAspectRatio(grabber.getAspectRatio());
recorder.setVideoBitrate(grabber.getVideoBitrate());
recorder.setAudioOptions(grabber.getAudioOptions());
recorder.setAudioChannels(grabber.getAudioChannels());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
recorder.setFormat(suffixName); recorder.start();
grabber.flush(); Frame frame;
while ((frame = grabber.grabFrame()) != null) {
recorder.setTimestamp(grabber.getTimestamp()); recorder.record(frame); }
// 关闭资源
recorder.stop(); recorder.release(); grabber.stop(); grabber.release(); recorder.close(); grabber.close();
log.info("【Task - 视频格式转换】执行完成;newFile:{}", targetFile.getAbsolutePath());
} catch (Exception e) {
log.error("【Task - 视频格式转换】异常", e);mediaFileDo.getId());
}