使用javacv调用ffmpeg进行视频格式转换

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());
}

猜你喜欢

转载自blog.csdn.net/wkh___/article/details/129717544