使用java调用Ffmpeg转码

news/2024/7/10 21:41:14 标签: ffmpeg, java, 开发语言

Java 视频转码(转为MPEG-4格式)

依赖

<dependency>
	<groupId>org.bytedeco</groupId>
	<artifactId>javacv</artifactId>
	<version>1.4.1</version>
</dependency>

<dependency>
	<groupId>org.bytedeco</groupId>
	<artifactId>javacpp</artifactId>
	<version>1.4.1</version>
</dependency>

<dependency>
	<groupId>org.bytedeco.javacpp-presets</groupId>
	<artifactId>opencv-platform</artifactId>
	<version>3.4.1-1.4.1</version>
</dependency>

<dependency>
	<groupId>org.bytedeco.javacpp-presets</groupId>
	<artifactId>ffmpeg-platform</artifactId>
	<version>3.4.2-1.4.1</version>
</dependency>

工具类

import org.bytedeco.javacv.Frame;
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.FrameRecorder;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;

/**
 * 视频转码工具类
 */
public class VideoConvertUtil {
	
    public void convert(String inputFile, String outputFile) throws Exception {
        FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(inputFile);
        Frame captured_frame;
        FFmpegFrameRecorder recorder = null;

        try {
            grabber.start();

            recorder = new FFmpegFrameRecorder(outputFile, grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels());
            recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
            recorder.setFormat("mp4");
            recorder.setFrameRate(grabber.getFrameRate());
			recorder.setSampleRate(grabber.getSampleRate());
			recorder.setVideoBitrate(grabber.getVideoBitrate());
			recorder.setAspectRatio(grabber.getAspectRatio());
			recorder.setAudioBitrate(grabber.getAudioBitrate());
			recorder.setAudioOptions(grabber.getAudioOptions());
            recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
            recorder.start();

            while (true) {
                captured_frame = grabber.grabFrame();
                if (captured_frame == null) {
                    System.out.println("转码完成");
                    break;
                }
                recorder.record(captured_frame);
            }

        } catch (FrameRecorder.Exception e) {
            e.printStackTrace();
        } finally {
            if (recorder != null) {
                try {
                    recorder.close();
                } catch (Exception e) {
                    System.out.println("recorder.close异常" + e);
                }
            }

            try {
                grabber.close();
            } catch (FrameGrabber.Exception e) {
                System.out.println("frameGrabber.close异常" + e);
            }
        }
    }
}

VideoConvertUtil convertUtil = new VideoConvertUtil();
convertUtil.convert(url, videoSavePath);


http://www.niftyadmin.cn/n/435046.html

相关文章

【Python开发】FastAPI 10:SQL 数据库操作

在 FastAPI 中使用 SQL 数据库可以使用多个 ORM 工具&#xff0c;例如 SQLAlchemy、Tortoise ORM 等&#xff0c;类似 Java 的 Mybatis 。这些 ORM 工具可以帮助我们方便地与关系型数据库进行交互&#xff0c;如 MySQL 、PostgreSQL等。本篇文章将介绍如何使用 SQLAlchemy 来完…

SpringBoot中Redis的基础使用

基础使用 首先引入依赖 <!-- redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</g…

绕过激活锁 ,拯救一台旧手机iphone

一台旧的iphone忘了apple id账号和密码了&#xff0c;导致锁住了 某宝上解锁要花50&#xff0c; 不是舍不得花钱&#xff0c;作为一个搞技术的&#xff0c;实在觉得花钱有点丢人 经过一番探索 最终确定了有用的流程 并贴出来 亲测可用 最终实现了趟再床上就可以打卡 1、 刷机 …

NI VeriStand

概览 本文简要概述了NI VeriStand以及如何创建实时测试应用程序&#xff0c;并介绍如何结合NI LabVIEW等不同软件环境采用不同的方式创建额外的功能&#xff0c;如模型导入、FPGA功能自定义以及将NI LabVIEW Run-Time控件添加为工作区对象等。 内容 什么是NI VeriStand什么是…

华为OD机试真题 JavaScript 实现【字符串变换最小字符串】【2022Q4 100分】

一、题目描述 给定一个字符串s&#xff0c;最多只能进行一次变换&#xff0c;返回变换后能得到的最小字符串&#xff08;按照字典序进行比较&#xff09;。 变换规则&#xff1a;交换字符串中任意两个不同位置的字符。 二、输入描述 一串小写字母组成的字符串s。 三、输出…

对于vue3中的响应式数据使得lodash无法正确被使用

在 Vue 3 中&#xff0c;由于其使用了新的响应式系统&#xff0c;与 Vue 2 不同&#xff0c;您需要使用 ref 或 reactive 函数来创建响应式数据。 如果使用 Lodash 对响应式数据进行操作时&#xff0c;通常会出现无法正确监听响应式数据变化的问题。这是因为 Lodash 的函数并不…

ChatGPT时代,我的新书《智慧共生》上市了

告诉你一个好消息&#xff0c;我在人民邮电出版社的第二本书《智慧共生&#xff1a;ChatGPT 与 AIGC 生产力工具实践》刚刚上市&#xff0c;你现在就可以在 京东 和 当当买到了。 有人把 2022 年称作 AIGC&#xff08;人工智能生成内容&#xff09; 的元年&#xff0c;我深表赞…

21.网络编程|Java学习笔记

文章目录 网络的相关概念ipv4地址分类网路通信协议TCP和UDP InetAdress类SocketTCP网络通信编程应用案例服务端客户端 netstat指令TCP网络通讯不为人知的秘密 UDP网络通信编程【了解】网络传输文件代码示例 网络的相关概念 网络通信 网络 ip地址 1. 概念:用于唯一标识网络…