简单视频转换器 avi转mp4

直接上代码

package com.example.videoconverter;import ws.schild.jave.Encoder;
import ws.schild.jave.EncoderException;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.encode.VideoAttributes;import java.io.File;/*** 简化的视频转换器* 包含独立的simpleConvertAviToMp4方法和main方法*/
public class SimpleVideoConverter {/*** 简化的AVI转MP4方法(不依赖JavaCV)* 使用JAVE库进行转换,设置默认编码参数* * @param inputPath 输入AVI文件路径* @param outputPath 输出MP4文件路径* @throws EncoderException 转换过程中的异常*/public void simpleConvertAviToMp4(String inputPath, String outputPath) throws EncoderException {File source = new File(inputPath);File target = new File(outputPath);// 创建音频属性AudioAttributes audio = new AudioAttributes();audio.setCodec("aac");audio.setBitRate(128000); // 128 kbpsaudio.setChannels(2);audio.setSamplingRate(44100);// 创建视频属性VideoAttributes video = new VideoAttributes();video.setCodec("libx264");video.setBitRate(1500000); // 1.5 Mbpsvideo.setFrameRate(30);// 创建编码属性EncodingAttributes attrs = new EncodingAttributes();attrs.setOutputFormat("mp4");attrs.setAudioAttributes(audio);attrs.setVideoAttributes(video);// 执行转换Encoder encoder = new Encoder();encoder.encode(new MultimediaObject(source), target, attrs);}/*** 主方法,用于测试simpleConvertAviToMp4方法*/public static void main(String[] args) {SimpleVideoConverter converter = new SimpleVideoConverter();// 测试文件路径String inputPath = "target/classes/sample_1280x720.avi";String outputPath = "target/simple_converted.mp4";try {System.out.println("=== 简化AVI转MP4转换测试 ===");System.out.println("输入文件: " + inputPath);System.out.println("输出文件: " + outputPath);// 检查输入文件是否存在File inputFile = new File(inputPath);if (!inputFile.exists()) {System.out.println("错误: 输入文件不存在: " + inputPath);System.out.println("请确保项目中有测试视频文件");return;}System.out.printf("输入文件大小: %.2f MB%n", inputFile.length() / (1024.0 * 1024.0));System.out.println("\n开始转换...");long startTime = System.currentTimeMillis();// 调用转换方法converter.simpleConvertAviToMp4(inputPath, outputPath);long endTime = System.currentTimeMillis();double duration = (endTime - startTime) / 1000.0;// 验证输出文件File outputFile = new File(outputPath);if (outputFile.exists()) {System.out.println("\n✅ 转换成功!");System.out.printf("转换耗时: %.2f 秒%n", duration);System.out.printf("输出文件大小: %.2f MB%n", outputFile.length() / (1024.0 * 1024.0));System.out.printf("压缩比: %.2f%%%n", (double) outputFile.length() / inputFile.length() * 100);System.out.println("输出文件路径: " + outputFile.getAbsolutePath());} else {System.out.println("\n❌ 转换失败: 输出文件未生成");}} catch (EncoderException e) {System.out.println("\n❌ 转换过程中发生错误:");System.out.println("错误信息: " + e.getMessage());e.printStackTrace();} catch (Exception e) {System.out.println("\n❌ 发生未知错误:");System.out.println("错误信息: " + e.getMessage());e.printStackTrace();}}
}

运行成功

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka 与 RocketMQ 核心概念与架构对比

Kafka 与 RocketMQ 核心概念与架构对比DeepSeek生成,便于记忆大概逻辑核心概念对比图 #mermaid-svg-dEbo1XpAjfzOjvUW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dEbo1XpAjfzOjvUW .error-icon{fill…

30分钟深度压测cuBLAS:从FP64到INT8全精度性能剖析

在深度学习和高性能计算领域,GPU的矩阵运算性能是衡量系统算力的核心指标之一。NVIDIA的cuBLAS库作为CUDA平台上最基础的线性代数计算库,其性能表现直接影响着上层应用的运行效率。本文将详细介绍如何使用cublasmatmulbench工具对多GPU进行全面的性能基准…

超越模仿:探寻智能的本源

引言:超越模仿,探寻智能的本源近年来,以大语言模型(LLM)为代表的自然语言处理(NLP)技术,在模仿人类语言生成方面取得了令人瞩目的成就。从流畅的对话到精炼的文本摘要,机…

ROS/ROS2课程笔记00-大纲-25-26-1

大纲 AI版 以下是基于第四代高校课程核心理念设计的《ROS2机器人程序设计(ROS2 Jazzy版)》课程大纲,突出智能互联、跨学科融合、终身学习等特征,并融入技术赋能、生态重塑、素养导向等要求: 课程名称:ROS…

Linux内核进程管理子系统有什么第四十六回 —— 进程主结构详解(42)

接前一篇文章:Linux内核进程管理子系统有什么第四十五回 —— 进程主结构详解(41) 本文内容参考: Linux内核进程管理专题报告_linux rseq-CSDN博客 《趣谈Linux操作系统 核心原理篇:第三部分 进程管理》—— 刘超 《…

Linux网络连接不上?NetworkManager提示“device not managed“!

#操作系统 #Linux #NetworkManager适用环境kylin v10Centos 8Redhat 8一、故障现象在CentOS/RHEL(同样适用于kylin v10)系统中,管理员执行 nmcli connection up ens160 命令尝试激活名为 ens160 的网络连接时,遇到以下错误:[roo…

【系统分析师】第2章-基础知识:数学与工程基础(核心总结)

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 一、数学统计基础 1.1 概率论基础 1.2 数理统计基础 1.3 常用统计分析方法 二、图论应用 2.1 基本概念 2.2 核心算法与应用 三、预测与决策 3.1 预测方法 3.2 决策方法 四、数学建模 4.1 建模过程 4.2 常用模型类型 五、…

StrUtil.isBlank()

这段代码是一个条件判断,用于检查变量 shopJson 是否为空或空白,如果是,就直接返回 null。我们来逐句讲解:原始代码: if(StrUtil.isBlank(shopJson)) {// 3.存在,直接返回return null; }逐句解释&#xff1…

mysql 回表查询(二次查询,如何检查,如何规避)

h5打开以查看 “回表查询”通常发生在使用二级索引(Secondary Index)的查询中。当查询所需的数据列并不全部包含在二级索引中时,即使使用了索引,MySQL 也需要根据索引记录中的主键值,回到聚簇索引(Cluster…

深度学习(二):神经元与神经网络

在人工智能的浪潮中,神经网络(Neural Networks)无疑是驱动核心技术的引擎,它赋予了计算机前所未有的学习和识别能力。而这一切的起点,是受到生物大脑中基本单元——神经元(Neurons)的深刻启发。…

JavaScript 行为型设计模式详解

1. 观察者模式1.1. 使用场景观察者模式用于对象间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都能收到通知并自动更新。常用于事件处理、通知系统。在前端中,观察者模式用于实现事件监听、数据绑定等功能。1.2. 代码实现…

指令查找表LUT

本文整理自22. FlexSPI—读写外部SPI NorFlash — [野火]i.MX RT库开发实战指南——基于i.MXRT1052 文档 用作个人学习和分享 指令查找表LUT 访问FLASH存储器通常包含一些读写功能的的控制指令,主控设备可通过这些指令访问FLASH存储器。 为了适应这种需求&#…

uv使用指南

🚀 Python 打包工具 UV 使用指南 UV 是一个用 Rust 编写的极速 Python 包管理器和解析器,旨在成为 pip、pip-tools、virtualenv 等工具的单一替代方案。 📋 目录 核心概念与设计哲学安装与配置基础使用方法项目管理与工作流高级功能与技巧…

安卓学习 之 图片控件和图片按钮

今天学习的是ImageView 和 ImageButton这两个控件还是比较简单的:先来看看最后的样式图片吧:从图片中可以看到ImageView中的图片要大很多,这是因为中的ImageView中的图片跟ImageView控件的大小而自动调整。Imag…

动态规划-学习笔记

这是一份动态规划(Dynamic Programming, DP)完整学习笔记。笔记将从一星难度(入门)到五星难度(进阶),循序渐进,涵盖核心思想、经典模型和解题方法论。 本来打算今天更新背包问题的题…

Linux 可信启动深度解析:从UEFI到操作系统的信任链

文章目录引言一、 可信根基:TPM与核心概念1.1 什么是“度量” (Measurement)?1.2 信任链与TPM PCR二、 阶段一:固件的可信启动 (UEFI)2.1 引导的起点:从SEC到DXE的初始化2.2 引导设备选择 (BDS):UEFI如何找到GRUB2.3 S…

61-python中面向对象三大特性

前言: 面向对象编程,是许多编程语言都支持的一种编程思想。简单理解是:基于模板(类)去创建实体(对象), 使用对象完成功能开发。面向对象包含三大主要特性: 封装 继承 多态…

BP-Adaboost模型

BP-Adaboost模型是一种将BP神经网络作为弱分类器的集成学习框架,通过AdaBoost算法动态调整样本权重和模型权重,显著提升预测精度和泛化能力。一、模型架构与工作原理 1. 基础框架 弱分类器单元:采用单隐藏层BP神经网络(结构示例&a…

k230 +canMV+ LVGL控件 仿手表表盘触摸屏滚动、选中后弹窗效果完整示例程序

现在智能手表用的越来越多,其交互方式比较有特点,现在k230开发板上,基于LVGL(Light and Versatile Graphics Library)编写一个嵌入式GUI应用程序,使用LVGL配合触摸屏实现模仿智能手表的表盘滚动效果,实际效果如下: 程序使用LVGL图形库和MediaManager程序,创建带有触摸…

使用Vue.js和WebSocket打造实时库存仪表盘

大家好!今天我将分享一个简单却强大的实时库存仪表盘项目,基于Vue.js和WebSocket技术。这个项目适合初学者学习前端实时数据处理,也能为你的技术博客或作品集增添亮点!通过这个教程,你将学会如何使用WebSocket实现实时…