直接上代碼
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();}}
}
運行成功