欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:Java音視頻文件解析工具

柚子快報邀請碼778899分享:Java音視頻文件解析工具

http://yzkb.51969.com/

文章目錄

一 jave-all-deps二 具體用法2.1 添加依賴2.2 視頻轉(zhuǎn)音頻2.3 視頻格式轉(zhuǎn)換2.4 獲取視頻時長

三 總結(jié)

小伙伴們知道,松哥平時錄了蠻多視頻課程,視頻錄完以后,就想整理一個視頻文檔出來,在整理視頻文檔的時候,就會遇到一個問題,就是怎么統(tǒng)計視頻時長?

特別是有時候為了方便大家看到每一集視頻的時長,我要把視頻目錄整理成下面這個樣子:

這個逐集去查看就很麻煩,一套視頻動輒幾百集,挨個統(tǒng)計不現(xiàn)實,也不符合咱們程序員做事風(fēng)格。

那么怎么辦呢?

一開始我是使用 Python 去解決的,Python 做這樣一個小工具其實特別方便,簡簡單單 30 行代碼左右就能搞定了。之前的課程的這些時間統(tǒng)計我基本上都是用 Python 去完成的。

不過最近松哥發(fā)現(xiàn) Java 里邊其實也有一個視頻處理的庫,做這個事情也是非常方便,而且使用 Java 屬于主場作戰(zhàn),就能夠更加靈活的擴展功能了。

一 jave-all-deps

在 Java 開發(fā)中,處理音視頻文件經(jīng)常需要復(fù)雜的編解碼操作,開發(fā)者通常需要依賴于外部庫來實現(xiàn)這些功能,其中最著名的是 FFmpeg。然而,直接在 Java 中使用 FFmpeg 并不是一件容易的事,因為它需要處理本地庫和復(fù)雜的命令行接口。

幸運的是,jave-all-deps 庫提供了一個簡潔而強大的解決方案,讓 Java 開發(fā)者能夠輕松地進行音視頻文件的轉(zhuǎn)碼和處理。

jave-all-deps 是 JAVE2(Java Audio Video Encoder)項目的一部分,它是一個基于 ffmpeg 項目的 Java 封裝庫。JAVE2 通過提供一套簡單易用的 API,允許 Java 開發(fā)者在不直接處理 ffmpeg 復(fù)雜命令的情況下,進行音視頻文件的格式轉(zhuǎn)換、轉(zhuǎn)碼、剪輯等操作。

jave-all-deps 庫特別之處在于它集成了核心 Java 代碼和所有支持平臺的二進制可執(zhí)行文件,使得開發(fā)者無需手動配置 ffmpeg 環(huán)境,即可在多個操作系統(tǒng)上無縫使用。

是不是非常方便?

整體上來說,jave-all-deps 幫我們解決了三大類問題:

跨平臺兼容性問題:音視頻處理往往涉及到不同的操作系統(tǒng)和硬件架構(gòu),jave-all-deps 庫提供了針對不同平臺的預(yù)編譯 ffmpeg 二進制文件,使得開發(fā)者無需擔(dān)心平臺兼容性問題。復(fù)雜的命令行操作:ffmpeg 雖然功能強大,但其命令行接口復(fù)雜且難以記憶。jave-all-deps 通過封裝 ffmpeg 的命令行操作,提供了簡潔易用的 Java API,降低了使用門檻。依賴管理:在項目中集成音視頻處理功能時,往往需要處理多個依賴項。jave-all-deps 庫將核心代碼和所有必要的二進制文件打包在一起,簡化了依賴管理。

簡單來說,就是你想在項目中使用 ffmpeg,但是又嫌麻煩,那么就可以使用 jave-all-deps 這個工具封裝后的 ffmpeg,簡單快捷!

二 具體用法

jave-all-deps 庫提供了多種音視頻處理功能,松哥這里來和大家演示幾個常見的。

2.1 添加依賴

添加依賴有兩種方式,一種就是添加所有的依賴庫,如下:

ws.schild

jave-all-deps

3.5.0

這個庫中包含了不同平臺所依賴的庫的內(nèi)容。

也可以根據(jù)自己平臺選擇不同的依賴庫,這種方式需要首先添加 java-core:

ws.schild

jave-core

3.5.0

然后再根據(jù)自己使用的不同平臺,繼續(xù)添加不同依賴庫:

Linux 64 位 amd/intel:

ws.schild

jave-nativebin-linux64

3.5.0

Linux 64 位 arm:

ws.schild

jave-nativebin-linux-arm64

3.5.0

Linux 32 位 arm:

ws.schild

jave-nativebin-linux-arm32

3.5.0

Windows 64 位:

ws.schild

jave-nativebin-win64

3.5.0

MacOS 64 位:

ws.schild

jave-nativebin-osx64

3.5.0

2.2 視頻轉(zhuǎn)音頻

將視頻文件從一種格式轉(zhuǎn)換為另一種格式,例如將 AVI 文件轉(zhuǎn)換為 MPEG 文件。

File source = new File("D:\\AI智能體\\mp4\\01.大模型有什么缺陷.mp4");

File target = new File("D:\\AI智能體\\mp4\\01.大模型有什么缺陷.mp3");

AudioAttributes audio = new AudioAttributes();

audio.setCodec("libmp3lame");

audio.setBitRate(128000);

audio.setChannels(2);

audio.setSamplingRate(44100);

EncodingAttributes attrs = new EncodingAttributes();

attrs.setOutputFormat("mp3");

attrs.setAudioAttributes(audio);

Encoder encoder = new Encoder();

encoder.encode(new MultimediaObject(source), target, attrs);

2.3 視頻格式轉(zhuǎn)換

將一種視頻格式轉(zhuǎn)換為另外一種視頻格式,例如將 mp4 轉(zhuǎn)為 flv:

File source = new File("D:\\AI智能體\\mp4\\01.大模型有什么缺陷.mp4");

File target = new File("D:\\AI智能體\\mp4\\01.大模型有什么缺陷.flv");

AudioAttributes audio = new AudioAttributes();

audio.setCodec("libmp3lame");

audio.setBitRate(64000);

audio.setChannels(1);

audio.setSamplingRate(22050);

VideoAttributes video = new VideoAttributes();

video.setCodec("flv");

video.setBitRate(160000);

video.setFrameRate(15);

video.setSize(new VideoSize(400, 300));

EncodingAttributes attrs = new EncodingAttributes();

attrs.setOutputFormat("flv");

attrs.setAudioAttributes(audio);

attrs.setVideoAttributes(video);

Encoder encoder = new Encoder();

encoder.encode(new MultimediaObject(source), target, attrs);

2.4 獲取視頻時長

這個就是松哥的需求了,我這塊舉個簡單例子。

public class App {

static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("mm:ss");

public static void main(String[] args) throws EncoderException {

System.out.println("輸入視頻目錄:");

String dir = new Scanner(System.in).next();

File folder = new File(dir);

List files = sort(folder);

outputVideoTime(files);

}

private static void outputVideoTime(List files) throws EncoderException {

for (String file : files) {

File video = new File(file);

if (video.isFile() && !video.getName().startsWith(".") && video.getName().endsWith(".mp4")) {

MultimediaObject multimediaObject = new MultimediaObject(video);

long duration = multimediaObject.getInfo().getDuration();

String s = "%s %s";

System.out.println(String.format(s, video.getName(), DATE_FORMAT.format(duration)));

} else if (video.isDirectory()) {

System.out.println(video.getName());

outputVideoTime(sort(video));

}

}

}

public static List sort(File folder) {

return Arrays.stream(folder.listFiles()).map(f -> f.getAbsolutePath()).sorted(String.CASE_INSENSITIVE_ORDER).collect(Collectors.toList());

}

}

這段代碼基本上都是 Java 基礎(chǔ)語法,沒啥難的,我也就不多說了。有不明白的地方歡迎加松哥微信討論。

其實 Java 解決這個似乎也不難,也就是 20 行代碼左右,似乎和 Python 不相上下。

三 總結(jié)

jave-all-deps 庫是 Java 音視頻處理領(lǐng)域的一個強大工具,它通過封裝 ffmpeg 的復(fù)雜功能,為 Java 開發(fā)者提供了一個簡單易用的音視頻處理解決方案。該庫解決了跨平臺兼容性問題、簡化了復(fù)雜的命令行操作,并簡化了項目中的依賴管理。無論是進行格式轉(zhuǎn)換、音頻轉(zhuǎn)碼還是其他音視頻處理任務(wù),jave-all-deps 庫都是一個值得考慮的選擇。

通過本文的介紹,希望能夠幫助讀者更好地理解和使用 jave-all-deps 庫。

柚子快報邀請碼778899分享:Java音視頻文件解析工具

http://yzkb.51969.com/

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/2027237339.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄