java实现的音视频格式转化器

一、前言
最近写了一款图形界面版的音视频格式转化器,可以实现将多种视频之间进行转化,非常好用,如将AVI转换为,TS,FLV,MP4等。音频可将MP3转成WAV。

二、实现
1.需引入相关maven依赖。

<!-- 核心包 -->
		<dependency>
   			 <groupId>ws.schild</groupId>
    		 <artifactId>jave-core</artifactId>
    		<version>3.4.0</version>
		</dependency>
		<!-- Windows64位 -->
		<dependency>
    		<groupId>ws.schild</groupId>
    		<artifactId>jave-nativebin-win64</artifactId>
    		<version>3.4.0</version>
		</dependency>

2.编写相关音视频格式转换代码,如下:

 public static ConvertResult audioToAudioConverter(File source, File target, String audioCodec,String outFormat) {
        ConvertResult result = new ConvertResult();
        try {
            result.setSuccess(true);
            //设置音频流的编码属性
            AudioAttributes audio = new AudioAttributes();
            //libmp3lame表示使用LAME MP3编码器。LAME是一个开源的MP3编码器,FFmpeg中的libmp3lame就是LAME的实现。
            if (Objects.nonNull(audioCodec) && !audioCodec.equals("")) {
                audio.setCodec(audioCodec);
            }
            if (Objects.isNull(audioCodec) || Objects.equals(audioCodec,"libmp3lame")) {
                //在MP3编码中,通常的比特率范围是64 kbps到320 kbps。推荐的范围是128 kbps到256 kbps。较低的比特率会导致音频质量下降,但文件大小更小。
                audio.setBitRate(128000);
                //1单声道,2立体声
                audio.setChannels(2);
                //设置音频的采样率为44100Hz。这是CD质量的音频的标准采样率。
                audio.setSamplingRate(44100);
            }else {
                if (Objects.equals(audioCodec,"libmp3lame")) {
                    //设置音频的采样率为44100Hz。这是CD质量的音频的标准采样率。
                    audio.setSamplingRate(44100);
                    //8BITS,16BTIS,24BTIS,32BTIS
                    audio.setBitRate(1411100); //对于16bit
                    audio.setChannels(2);
                }
            }

            EncodingAttributes attrs = new EncodingAttributes();
            if (Objects.nonNull(outFormat) && !outFormat.equals("")) {
                attrs.setOutputFormat(outFormat);
            }
            attrs.setAudioAttributes(audio);
            Encoder encoder = new Encoder();
            MultimediaObject multimediaObject = new MultimediaObject(source);
            encoder.encode(multimediaObject, target, attrs);
        }catch (Exception e) {
            result.setSuccess(false);
            result.setMessage(e.getMessage());
            System.err.println(e);
        }
        return result;
    }
    public static ConvertResult converterToWav(File source,File target) {
        //wav编码格式 pcm_s16le 指定输出音频编码为PCM 16位小端序,指定输出音频编码为PCM 16位大端序,s表示signed u表示unsigned
        return audioToAudioConverter(source,target,"pcm_s16le","wav");
    }
    .............................

3.编写图形界面。

public class AudioVideoConverter {
	private List<String> errorMsgList = new ArrayList<>();
	static JLabel videoConvertJl,audioConvertJl,videoText,audioText;
	static JPanel videoJPanel,audioJPanel;
	boolean videoFlag = true;
	boolean audioFlag = false;
	static {
		videoConvertJl = new JLabel(new ImageIcon(AudioVideoConverter.class.getResource("/image/videoConvert.png")));
		audioConvertJl = new JLabel(new ImageIcon(AudioVideoConverter.class.getResource("/image/videoConvert.png")));
		videoText = new JLabel("视频转换");
		audioText = new JLabel("音频转换");
		videoJPanel = new JPanel();
		audioJPanel = new JPanel();
		videoJPanel.setBounds(50,4,62,62);
		videoJPanel.setBackground(new Color(55,50,50));
		videoConvertJl.setBounds(50, 3, 60, 60);
		videoJPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		videoJPanel.add(videoConvertJl);
		videoText.setBounds(60, 71, 60, 15);
		audioConvertJl.setBounds(160, 4, 60, 60);
		audioJPanel.setBounds(160, 3, 62, 62);
		audioJPanel.setBackground(null);
		audioJPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		audioJPanel.add(audioConvertJl);
		audioText.setBounds(170, 71, 80, 15);

	}
	...............................
	public static void main( String[] args )
	{	

		JFrame frame=new JFrame();
		AudioVideoConverter converter=new AudioVideoConverter();
		//视频转换与音频转换切换
		JLabel jl=new JLabel("选择转换到的格式:");

		String[] items = {"MP4", "MKV", "AVI", "WMV","TS","FLV","3GP"};
	    final JComboBox<String> comboBox = new JComboBox<>(items);
	    comboBox.setEditable(false);
	    comboBox.setBounds(170, 105, 60, 20);
		final JComboBox<String> audioComboBox = converter.setAudioComboBox();
		JButton b=new JButton("选择文件");
		b.setHorizontalTextPosition(JButton.CENTER);
		//b.setBackground(new Color(195,17,17));
		b.setBorder(BorderFactory.createRaisedSoftBevelBorder());
		//去掉按钮文字周围的焦点框
		b.setFocusPainted(false);
		b.setBounds(240, 105, 80, 20);
		b.setVisible(true);
		jl.setBounds(50, 100, 150, 30);
		JTextArea area=new JTextArea(8,10);
		area.setBounds(50, 140, 550, 170);
		area.setBorder(BorderFactory.createLoweredSoftBevelBorder());
		area.setLineWrap(true);
		area.setVisible(true);
		area.setText("原视频地址\n");
		area.setEditable(false);

		JLabel jlPosition=new JLabel("保存位置:");
		jlPosition.setFont(new Font("宋体",Font.BOLD,14));
		jlPosition.setBounds(50, 320, 100, 30);
		ButtonGroup group = new ButtonGroup();
		JRadioButton option1 = new JRadioButton("保存在原视频相同位置");
		JRadioButton option2 = new JRadioButton("指定位置");
		group.add(option1);
		group.add(option2);
		// 默认选中第一个选项
		option1.setSelected(true);
		option1.setBackground(null);
		option2.setBackground(null);
		option1.setBounds(50, 360, 200, 20);
		option2.setBounds(50, 390, 80, 20);

		JTextField jt = new JTextField("");
		jt.setBounds(130, 390, 370, 20);
		JButton selectButton=new JButton("选择文件夹");
		selectButton.setHorizontalTextPosition(JButton.CENTER);
		selectButton.setBorder(BorderFactory.createRaisedSoftBevelBorder());
		//去掉按钮文字周围的焦点框
		selectButton.setFocusPainted(false);
		selectButton.setBounds(520, 390, 80, 20);
		selectButton.setVisible(true);
		selectButton.setEnabled(false);
		//开始转换
		JButton exchangeBt=new JButton("开始转换");
		exchangeBt.setHorizontalTextPosition(JButton.CENTER);
		exchangeBt.setBorder(BorderFactory.createRaisedSoftBevelBorder());
		//去掉按钮文字周围的焦点框
		exchangeBt.setFocusPainted(false);
		exchangeBt.setBounds(260, 470, 80, 20);
		exchangeBt.setVisible(true);

		frame.setSize(680, 600);
		frame.setTitle("音视频转换");
		frame.setLocationRelativeTo(null);
		// 创建一个ImageIcon对象
		ImageIcon icon = new ImageIcon(AudioVideoConverter.class.getResource("/image/videoAudioIcon.png"));
		// 调整图标大小
		Image image = icon.getImage(); // 获取原始图像
		Image newImage = image.getScaledInstance(16, 16, Image.SCALE_SMOOTH); // 设置新的大小,这里是16x16像素
		icon.setImage(newImage); // 设置调整大小后的图像
		frame.setIconImage(newImage);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		Container c=frame.getContentPane();
		c.setLayout(null);
		c.add(videoJPanel);
		c.add(videoText);
		c.add(audioJPanel);
		c.add(audioText);
		c.add(area);
		c.add(jl);
		c.add(jlPosition);
		c.add(comboBox);
		c.add(audioComboBox);
		c.add(option1);
		c.add(option2);
		c.add(jt);
		c.add(b);
		c.add(selectButton);
		c.add(exchangeBt);
.............................
//converter.processLoadingAction(exchangeBt,frame,b,selectButton,fileList,comboBox,jt,option1,option2,audioComboBox);
		c.setBackground(new Color(222,184,135));
	}
	

接着启动main方法接口了。

效果如下:
在这里插入图片描述
完整代码如下:
java swing实现音视频转换器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901781.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

群控系统服务端开发模式-应用开发-业务架构逻辑开发准备工作

安装与仓库已经调整完毕&#xff0c;现在开发业务架构逻辑&#xff0c;其次再开发功能逻辑。业务架构逻辑开发与功能逻辑开发不是一回事&#xff0c;一定要明白。业务架构指的是做某一件事或是某一种类型的事的逻辑&#xff0c;在互联网web应用中通常指一套系统的外在逻辑&…

知识见闻 - 磁力片原理

磁力片是一种利用磁性原理设计的玩具&#xff0c;它的工作原理和磁性方向的排列方式非常有趣。让我们深入了解一下磁力片的核心原理和磁性方向的特点。 磁力片的基本原理 磁力片的工作原理基于磁铁的基本特性。每个磁力片都包含多个小磁铁&#xff0c;这些磁铁被精心排列&#…

强化学习数学原理学习(一)

前言 总之开始学! 正文 先从一些concept开始吧,有一个脉络比较好 state 首先是就是状态和状态空间,显而易见,不多说了 action 同理,动作和动作空间 state transition 状态转换,不多说 policy 策略,不多说 reward 奖励,不多说 MDP(马尔科夫) 这里需要注意到就是这个是无…

小程序视频SDK解决方案,提供个性化开发和特效定制设计

美摄科技作为视频处理技术的领航者&#xff0c;深知在这一变革中&#xff0c;每一个细微的创新都能激发无限可能。因此&#xff0c;我们精心打造了一套小程序视频SDK解决方案&#xff0c;旨在满足不同行业、不同规模客户的多元化需求&#xff0c;携手共创视频内容的璀璨未来。 …

守护头顶安全——AI高空抛物监测,让悲剧不再重演

在城市的喧嚣中&#xff0c;我们享受着高楼林立带来的便捷与繁华&#xff0c;却往往忽视了那些隐藏在高空中的危险。近日&#xff0c;震惊全国的高空抛物死刑案件被最高院核准并执行。案件中被告人多次高空抛物的举动&#xff0c;夺去了无辜者的生命&#xff0c;也让自己付出了…

Leetcode11:盛水最多的容器

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳…

Docker本地安装Minio对象存储

Docker本地安装Minio对象存储 1. 什么是 MinIO&#xff1f; MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据&#xff0c;比如文件、图片、视频等&#xff0c;而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用&#xff0c;同时…

Pr 视频效果:波形变形

视频效果/扭曲/波形变形 Distort/Wave Warp 波形变形 Wave Warp效果用于在剪辑上创建类似波浪的动态变形效果。 此效果会自动动画化&#xff0c;波形以恒定速度移动。要改变速度或停止波动&#xff0c;需要设置关键帧。 ◆ ◆ ◆ 效果选项说明 通过调整波形的类型、高度、宽度…

(六)问题记录,simulink仿真出现模型碰撞后穿越

明明已经设置了车轮和地面之间的 spatial contact force&#xff0c;可是还会出现模型穿越&#xff08;重力作用下自由落体&#xff09;&#xff0c;如下图所示。 可仅降低小车初始高度后就不会穿越&#xff0c;如下图所示。 初步怀疑是小车初始高度大的话&#xff0c;小车在和…

【原创】统信UOS如何安装最新版Node.js(20.x)

注意直接使用sudo apt install nodejs命令安装十有八九会预装10.x的老旧版本Node.js&#xff0c;如果已经安装的建议删除后安装如下方法重装。 在统信UOS系统中更新Node.js可以通过以下步骤进行&#xff1a; 1. 卸载当前版本的Node.js 首先&#xff0c;如果系统中已经安装了N…

Kafka消费者故障,出现活锁问题如何解决?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka消费者故障&#xff0c;出现活锁问题如何解决&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Kafka消费者故障&#xff0c;出现活锁问题如何解决&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资…

照片怎么转换成pdf?盘点6种图片转pdf格式有效方法,直击要点!

照片怎么转换成pdf&#xff1f;在日常生活和工作中&#xff0c;我们难免会碰到需要将照片以pdf格式保存的情况&#xff0c;以便于更好的整理、分享或打印。虽然jpg格式的图片因其体积小而方便分享&#xff0c;但有时我们也希望将这些图片转换成pdf格式&#xff0c;以便于创建专…

《自动驾驶技术的深度思考:安全与伦理的挑战》

内容概要 在当今这个自动驾驶技术飞速发展的时代&#xff0c;我们生活的节奏恰似一场疾驰的赛车&#xff0c;然而&#xff0c;赛道上并非总是平坦。在这场技术革命中&#xff0c;安全与伦理问题像是潜伏在阴影中的幽灵&#xff0c;轮番考验着我们的道德底线与法律界限。 随着…

圆柱形腔体谐振器理论分析-20241027

圆柱形腔体谐振器 谐振电路在电子工程中起着非常重要的作用。在低频段&#xff0c;谐振电路通常由集总参数的电感和电容构成&#xff0c;即为LC谐振电路&#xff0c;其品质因数通常为数百。当频率升高到微波频段时&#xff0c;电路的尺寸与电磁波的波长可以比拟&#xff0c;集…

微信小程序——消息订阅

首先用到的就是wx.requestSubscribeMessage接口。 注意&#xff1a;用户发生点击行为或者发起支付回调后&#xff0c;才可以调起订阅消息界面 requestSubscribeMessage() {uni.requestSubscribeMessage({tmplIds: [],//需要订阅的消息模板的id的集合&#xff0c;一次调用最多可…

vscode配色主题与图标库推荐

vscode配色主题推荐:Andromedavsocde图标库&#xff1a; vscode-icons Andromeda Dark theme with a taste of the universe 仙女座&#xff1a;一套宇宙深空体验的哑暗色主题; 高对比度,色彩饱和; Easy Installation Open the extensions sidebar on Visual Studio CodeSear…

arm架构 ubuntu 部署docker

如果有旧版本需要卸载 sudo apt remove docker docker-engine docker-ce docker.io 安装依赖包 sudo apt update && apt install -y apt-transport-https ca-certificates curl software-properties-common 添加docker秘钥 阿里云 curl -fsSL http://mirrors.aliyu…

Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端

一、背景 上文已把覆盖率数据采集好了,并提供远程连接的tcp地址及端口。 jacoco cli文档jacoco cli jar包jacococli.jar 我下载好了,放在github工程里。 本文主要是介绍如何使用jacoco cli 客户端读取并生成覆盖率报告。 二、使用 1、dump覆盖率统计 java -jar doc/jacoc…

基于java的山区环境监督管理系统(源码+定制+开发)环境数据可视化、环境数据监测、 环境保护管理 、污染防治监测系统 大数据分析

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

双子塔楼宇可视化系统:提升建筑管理与运营效率

利用图扑可视化技术对双子塔楼宇的各项功能进行实时监控和管理。通过数据分析优化资源配置&#xff0c;提高能源效率&#xff0c;增强楼宇安全性&#xff0c;实现智能化运营。