簡單視頻轉換器 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
英文地址,請注明出處:http://en.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實現實時…